Markit
shift-labs-ai/markit
Convert files and URLs to Markdown. An agent skill from shift-labs-ai/markit.
Prepare or publish eunomia.dev Markdown articles on Juejin. An agent skill from eunomia-bpf/eunomia.dev.
$ npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install eunomia-bpf/eunomia.dev juejin-publisher --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/eunomia-bpf/eunomia.dev.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/juejin-publisher .claude/skills/juejin-publisher && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "juejin-publisher" agent skill from https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisher into .claude/skills/juejin-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "juejin-publisher", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisherType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install eunomia-bpf/eunomia.dev juejin-publisher --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eunomia-bpf/eunomia.dev.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/juejin-publisher .agents/skills/juejin-publisher && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "juejin-publisher" agent skill from https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisher into .agents/skills/juejin-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "juejin-publisher", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install eunomia-bpf/eunomia.dev juejin-publisher --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eunomia-bpf/eunomia.dev.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/juejin-publisher .cursor/skills/juejin-publisher && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "juejin-publisher" agent skill from https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisher into .cursor/skills/juejin-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "juejin-publisher", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/eunomia-bpf/eunomia.dev.git --path .agents/skills/juejin-publisher--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install eunomia-bpf/eunomia.dev juejin-publisher --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eunomia-bpf/eunomia.dev.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/juejin-publisher .gemini/skills/juejin-publisher && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "juejin-publisher" agent skill from https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisher into .gemini/skills/juejin-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "juejin-publisher", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install eunomia-bpf/eunomia.dev juejin-publisherInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/eunomia-bpf/eunomia.dev.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/juejin-publisher .github/skills/juejin-publisher && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "juejin-publisher" agent skill from https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisher into .github/skills/juejin-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "juejin-publisher", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install eunomia-bpf/eunomia.dev juejin-publisher --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eunomia-bpf/eunomia.dev.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/juejin-publisher .opencode/skills/juejin-publisher && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "juejin-publisher" agent skill from https://github.com/eunomia-bpf/eunomia.dev/tree/main/.agents/skills/juejin-publisher into .opencode/skills/juejin-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "juejin-publisher", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
juejin-publisherPrepare or publish eunomia.dev Markdown articles on Juejin. An agent skill from eunomia-bpf/eunomia.dev.
Juejin Publisher is an agent skill from eunomia-bpf/eunomia.dev. Prepare or publish eunomia.dev Markdown articles on Juejin. Use when asked to create, paste, publish, QA, or record a Juejin draft or article from repository Markdown. Preserves a syndicated long-form source title and body apart from mechanical Markdown/rendering fixes, with browser-editor workflow, category and tag selection, publication authorization, and media ledger updates.
Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `agents/openai.yaml` and `references/platform-preferences.md`).
It sits in Documents & Office, covering Markdown. It works with GitHub. The repository describes itself as: https://github.com/eunomia-bpf homepage, documents and blogs. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7779f61. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
juejin.cnFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Juejin Publisher loads about 4.8k tokens when it runs, and up to ~6.9k if it reads all its reference files. Until then it costs about 100 tokens; SKILL.md has 2,460 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from eunomia-bpf/eunomia.dev at commit 7779f61, republished under its MIT licence (© eunomia-bpf). 2,460 words, ~4,758 tokens.
.claude/skills/juejin-publisher/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Prepare or publish a reviewed Juejin article from the canonical repository source and choose appropriate technical categories and tags. Publication authorization follows CLAUDE.md's Precedence Rule and Publishing section.
If the source path is missing, inspect .github/publisher/posts_queue.txt,
.github/publisher/media/not-published.md, and recent docs/blog/posts/
entries before asking the user.
Use a browser surface with the logged-in session when UI work is required.
For the maintained yunwei37 account, prefer the existing Chrome Yunwei
profile, which carries the verified Juejin login. A fresh in-app browser session
may be logged out; do not treat that state as evidence that the account itself
is unavailable. Confirm the avatar and creator controls on the visible page
before proceeding.
Never bypass authentication with search results or alternate sources.
Load references/platform-preferences.md when choosing Juejin-native framing,
category/tags, tutorial-vs-series shape, or promotion/link balance.
Do not directly access Juejin APIs, internal endpoints, or background HTTP interfaces under any circumstances. All verification, drafting, QA, screenshots, and ledger evidence must come from normal browser interactions that a regular logged-in user can perform: navigating pages, scrolling profile/article lists, clicking visible controls, reading rendered page content, using the editor UI, and capturing screenshots.
Before opening the Juejin editor, write or update the Juejin draft record under
draft/media/YYYY-MM-DD/<source-slug>/juejin.md using the local date. For
unchanged Chinese canonical syndication, the file may reference the source body
instead of duplicating it, but it must record the exact title, source URL for
the ledger if known, GitHub/paper links, category/tags, source/project note if
useful, media choices, and QA state.
When resuming an interrupted publish, first inspect the normal visible authored profile for the exact title and source identity. The final submission may have succeeded before the parent task stopped. If the article is already public, do not reopen a new draft or submit again; verify the public page and reconcile the artifact, ledger, queue, and snapshots instead.
输入文章标题....预览 to scan headings, images, links, code blocks, and table layout.发布 only to inspect publish settings when needed.后端, Linux, 开源, 云原生, 架构人工智能, AIGC, 后端, 架构, 安全人工智能, 后端, 架构, Linux, 性能优化Linux, 后端, and 性能优化 were available — eBPF and 开源 were not.
Verify each tag chip by clicking 确定 (or the confirm control) one at a
time, read the committed chips back, and record the actually-committed
tags in the ledger rather than the intended list.确定并发布 when the task requests publication or the queue item
is marked 排队; do not ask for duplicate confirmation. Stop at preview only
for a draft or preview task.For images, verify the exact final URL used in Markdown before publishing. Do
not assume imgs/... can be converted by guessing an eunomia.dev article path;
that path may return 404. A public GitHub raw URL can also produce
转存失败,建议直接上传图片文件 in Juejin. When that happens, upload the
source image through the visible editor, use the resulting Juejin-hosted URL in
the local publishing copy, and confirm that the failure marker is gone and the
rendered image has non-zero dimensions. Verify the same image again on the
public page.
/run/social-manager-session/browser-state.json still hold valid Juejin
session cookies (sid_tt, sessionid, sid_guard, uid_tt, n_mh, ...).
Symptom: /editor/drafts/new redirects to /login, and the profile page
shows no creator controls.agent-browser cookies set writes only non-httpOnly cookies on the current
page and does not restore the session; the browser-target CDP
Network.setCookies is not exposed here ('Network.setCookies' wasn't found). The reliable import is the page-target CDP domain Storage:
Storage.setCookies with the cookie objects from the mounted state file,
then verify with Storage.getCookies. This restores all httpOnly session
cookies (55 cookies imported, 19 Juejin cookies observed on 2026-09-14).验证码中间页 (slide CAPTCHA) on the profile or editor URL. Do not solve the
CAPTCHA. Re-navigating to / and then back to
/editor/drafts/new cleared it on 2026-09-14, and the editor rendered with
the title input and CodeMirror.document.querySelector('.CodeMirror').CodeMirror.setValue(...)
requires an explicit UTF-8 decode. Passing atob(base64) directly yields
mojibake (Latin-1 interpretation of UTF-8 bytes); decode with
new TextDecoder('utf-8').decode(Uint8Array.from(atob(b64), c => c.charCodeAt(0))).
Verify the resulting character count equals the local artifact byte-length in
characters before submitting.Verified against the 2026-09-15 45-scx-nest and 2026-09-22 43-kfuncs submissions.
The settings dialog is <div class="publish-popup ...">. Querying
.byte-modal and reading its innerText returns an empty string, so read the
popup text from .publish-popup instead.
Category chips are .category-list .item, but a selected one carries the
class active, not selected. Read back
[...document.querySelectorAll('.category-list .item.active')] to confirm the
choice instead of looking for .selected, which returns nothing.
The popup holds several .byte-select widgets in DOM order: index 0 is tags,
then collections, then topics. Focus publish-popup .byte-select__input[0] to
add a tag. Typing a trigger character with the CLI's keyboard type opens the
option list in .byte-select-option; click the option whose exact text equals
the target to commit the chip. Between tags, clear the input by setting
value = '' and dispatching a bubbling input event, otherwise the previous
term stays in the search box. Read the committed chips back from
.byte-select__tag before submitting.
The final control is the popup button with exact text 确定并发布. Success is
document.title === '发布成功' on https://juejin.cn/published.
The 确定并发布 button ignores a synthetic element.click() and a CLI
agent-browser click on .publish-popup .ui-btn.primary (on the 2026-09-22
43-kfuncs submission both attempts only fired the autosave toast and the page
stayed in the editor; only a real pointer sequence published). Dispatch the
full real pointer-event sequence via eval:
(function(){
var b=Array.prototype.slice.call(document.querySelectorAll('.publish-popup button')).filter(function(x){return (x.textContent||'').trim()==='确定并发布';})[0];
var r=b.getBoundingClientRect(),x=r.left+r.width/2,y=r.top+r.height/2;
function ev(t,T){b.dispatchEvent(new T(t,{bubbles:true,cancelable:true,view:window,clientX:x,clientY:y,button:0}));}
ev('pointerdown',PointerEvent);ev('mousedown',MouseEvent);b.focus();ev('pointerup',PointerEvent);ev('mouseup',MouseEvent);b.click();
return 'dispatched';
})()The tag search widget (.publish-popup .byte-select__input, index 0) is not
reachable by CLI fill or keyboard type — typed text leaks into the title
or body instead. The popup may hold SIX .byte-select__input elements (tags,
collections, and topics each appearing twice: three visible plus three
width-0 hidden duplicates; observed 2026-09-25 on 38-btf-uprobe), so always
address index 0 explicitly and filter option clicks by
getBoundingClientRect().width > 0 rather than assuming a single widget. Set
its value with the native setter
Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set
plus dispatchEvent(new Event('input',{bubbles:true})), then click the
exact .byte-select-option. The committed chip DOM order can differ from the
typing order (observed 性能优化/后端/Linux against an intended
Linux/后端/性能优化); record the actually-committed set, not the intent.
Before the final submit, read back input[placeholder*=标题].value and reset
it to the exact source H1: early tag typing can pollute the title field.
Decide the article's state empirically, not by precedent, and judge it in the
logged-in browser — never by curl status codes. Observed outcomes: (a) direct
public at /post/<id> with no review interval (2026-09-23 42-xdp-loadbalancer);
(b) staged at /spost/<id> while the creator center shows it under 审核中 and
/post/<id> shows 找不到页面 (2026-09-22 43-kfuncs, 2026-09-25 38-btf-uprobe);
(c) staged for minutes, then review clears in the same session so /post/<id>
renders the article and /spost/<id> redirects to it (2026-09-24 41-xdp-tcpdump,
40-mysql, 39-nginx). Curl status codes are not a publication signal: the
Juejin SPA shell answers HTTP 200 for ANY /post/<id> and /spost/<id> path
even while the article is in review (2026-09-25 38-btf-uprobe: curl 200/200 at
07:29 +08 while the browser still showed 找不到页面 and the creator center still
showed 审核中 (1)). Judge availability by (1) the logged-in browser rendering the
article body at /post/<id> with no 审核中 / 文章有更新 / 已被删除 marker
and (2) the creator center's 审核中 count dropping to 0. Poll the logged-in
browser (reopen essays?status=all and read the 审核中 count) every ~1–2 min
until it clears; clearance time is not bounded to a minute — the 38-btf-uprobe
post waited ~40 min (07:27 → 08:07 +08) while earlier posts cleared in under a
minute. Three Juejin posts on one America/Los_Angeles day (2026-09-24:
41-xdp-tcpdump, 40-mysql, 39-nginx) is legal only when the extras are funded by
catch-up gaps; the same-day normal slot still belongs to the next queued task.
Review clearance time is not bounded: 45-scx-nest took ~1 hour, 38-btf-uprobe
~40 min, while the 2026-09-24 posts cleared in under a minute. Poll the
logged-in browser on ~1–2 min intervals until the creator center's 审核中 count
reaches 0; before finishing, run the full public-page QA, flip the queue item
to [x], and set the ledger entry to confirmed.
Passing a long body through agent-browser eval as an inline argument fails
when the payload is large, and ANY inline argument containing backticks or
double quotes breaks the wrapper's shell parser (pi-natives:command: unterminated backquote). Write the script to a /tmp/*.js file and pipe it
via agent-browser eval --stdin instead; embed base64 in the script and split
it into a few window.__b64 += "chunk" assignments when it is long.
The .byte-select-option list is NOT inside .publish-popup; query it
document-wide. Several hidden dropdowns exist at once (collections, topics),
so filter [...document.querySelectorAll('.byte-select-option')] before
clicking the option whose exact text matches the target tag. Use
getBoundingClientRect().width > 0 as the visibility test, NOT
offsetParent !== null: an unopened .byte-select-dropdown__wrap keeps its
options in the DOM with zero width/height but a non-null offsetParent, so
the offsetParent filter reports an open dropdown as empty (hit on the
2026-09-24 40-mysql prep, where the tag options were present and clickable all
along). A popup-scoped query returns zero options even when the tag dropdown is
open (verified on the 2026-09-23 42-xdp-loadbalancer submission).
Typing into the tag input with CLI keyboard type is unreliable: the text can
leak into the title or body, and the option list does not always open. The
sequence that worked on both the 2026-09-23 and 2026-09-24 submissions is the
pure-JS one: focus() the index-0 .publish-popup .byte-select__input, set
value with the native setter, dispatch a bubbling input event, wait for the
document-wide visible .byte-select-option, then click it with a real CDP
page.mouse move/down/up. Between tags, clear the input by setting value = ''
through the native setter plus a bubbling input event before writing the next
term; otherwise the previous search text stays in the box. Read the committed
chips back from .publish-popup .byte-select__tag after each option click.
The category chip needs real CDP pointer events (page.mouse.move →
move → down → up), not in-page synthetic events. On the 2026-09-24
submission a full synthetic hover-inclusive sequence
(mouseover/pointerover/pointerenter/mouseenter →
pointerdown/mousedown with buttons: 1 → focus() →
pointerup/mouseup → click()) still left .category-list .item.active
empty, and only the real CDP mouse sequence on the chip's center coordinates
selected it on the first try. Read back .category-list .item.active (never
.selected) to confirm.
Finding the new URL may take a moment even after 发布成功: the author profile
list (https://juejin.cn/user/<id>/posts) can lag a few minutes, and a
scrolled profile page may not show the new item at all. The reliable sources
are (1) the creator center article list
(https://juejin.cn/creator/content/article/essays?status=all, reachable by
clicking 文章管理), whose 审核中 tab names the staged URL and whose counts
flip 审核中 (N) → 0 on clearance, and (2) the logged-in browser rendering the
article body at /post/<id>. Do NOT rely on a curl status probe of the
candidate /post/<id> URL: the SPA shell answers 200 for any such path even
while the article is in review (observed 2026-09-25 on 38-btf-uprobe —
curl 200/200 while the browser showed 找不到页面 and the creator center still
showed 审核中 (1)).
Navigate the creator center by URL, not by clicking through the SPA.
https://juejin.cn/creator/content/article/all renders a shell whose tab panes
are empty (.byte-tab-pane has zero elements) and, on a fresh load, a
选择你感兴趣的技术方向 onboarding modal plus a 当前操作失败 alert can overlay
the list. Go straight to
https://juejin.cn/creator/content/article/essays?status=all, which renders
the counts (全部 (N) 已发布 (N) 审核中 (N) 未通过 (N)) and the row list
with per-post 展现 / 阅读 / 点赞 / 评论 / 收藏 in document.body.innerText
after a few seconds. The /all shell alone returns only the backdrop text and
will falsely look like an empty account.
Juejin-native short posts and new articles can use immediately useful technical framing. This guidance does not apply to syndicated long-form content. For an existing Chinese long-form eunomia.dev post, preserve the source title exactly and keep the body substantively unchanged. Only fix Markdown/rendering and set category, tags, cover, and summary metadata. Do not split a source article into a series by default.
Optimize for the maintainer's personal technical account brand and practical developer trust, not only for search ranking or traffic back to eunomia.dev. Preserve GitHub, tutorial, docs, or paper links already in the source. A visible eunomia.dev canonical/source note is optional and is not added to the body by default.
Do not automate:
确定并发布 when the task is limited to a draft or preview去签到, likes, follows, comments, reposts, or private messagesAfter a confirmed publish, update .github/publisher/media/published.md with
title, source path, Juejin URL, date, category, tags, and formatting fixes.
Remove or update the matching row in .github/publisher/media/not-published.md.
Before closing the publishing task, run a platform-lessons pass. Add any new, reproducible editor failure and its verified workaround to this skill or its references so the next publish does not repeat it.
Keep screenshots and observed UI notes under .github/publisher/media/.
© eunomia-bpf, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in .agents/skills/juejin-publisher of eunomia-bpf/eunomia.dev.
Open the folder on GitHubat commit 7779f61
Juejin Publisher next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Juejin Publisher this skilleunomia-bpf/eunomia.dev | 236 | — | ~4.8k | Automated safety check: Pass | MIT | |
| Markitshift-labs-ai/markit | 1.3k | — | ~299 | Automated safety check: Pass | MIT | |
| Deepxiv Baseline TableDeepXiv/deepxiv_sdk | 804 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Openclaw Ghsa MaintainerSafeAI-Lab-X/ClawKeeper | 1k | — | ~728 | Automated safety check: Pass | None | |
| Fetch Markdown Specstats-u/markdown-cjk-friendly | 167 | — | ~179 | Automated safety check: Pass | MIT | |
| Documentationgithub/gh-aw | 5.4k | — | ~1.9k | Automated safety check: Pass | MIT |
shift-labs-ai/markit
Convert files and URLs to Markdown. An agent skill from shift-labs-ai/markit.
DeepXiv/deepxiv_sdk
Build a markdown baseline table for a research topic using deepxiv search, brief, head, and experiment-section reads, extracting paper title, URL, open-source status, datasets, benchmark scores, and…
SafeAI-Lab-X/ClawKeeper
Maintainer workflow for OpenClaw GitHub Security Advisories (GHSA).
tats-u/markdown-cjk-friendly
Read if you want to refer to the CommonMark/GFM specifications
github/gh-aw
Write concise Diataxis docs for gh-aw with Starlight markdown conventions.
iurykrieger/claude-bedrock
Ingests an external data source into the Second Brain. An agent skill from iurykrieger/claude-bedrock.
eunomia-bpf/eunomia.dev
Monitor approved eBPF, Linux, observability, and AI-infrastructure communities through watchlist-opted-in read-only Slack archives plus ordinary visible browser UI, turn the strongest daily…
eunomia-bpf/eunomia.dev
Research, write, validate, and publish source-grounded Eunomia Daily Reports for technical readers.
eunomia-bpf/eunomia.dev
Plan contribution-first cross-platform launches for eunomia.dev content, GitHub projects, papers, tutorials, demos, and public updates.
eunomia-bpf/eunomia.dev
Prepare or publish eunomia.dev Markdown articles on DEV Community through faithful long-form syndication.
eunomia-bpf/eunomia.dev
Monitor the continuing public performance and conversation around Eunomia blogs, reports, projects, and platform posts.
eunomia-bpf/eunomia.dev
Prepare or publish Hacker News submissions and follow-up drafts for eunomia.dev content, GitHub projects, papers, demos, and Show HN style launches.
Works with
Categories
Prepare or publish eunomia.dev Markdown articles on Juejin. An agent skill from eunomia-bpf/eunomia.dev. dev.dev Markdown articles on Juejin.
Juejin Publisher fits situations like: asked to create; record a Juejin draft; article from repository Markdown.
Run `npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a claude-code`. Or copy the skill folder (.agents/skills/juejin-publisher in eunomia-bpf/eunomia.dev) into .claude/skills/juejin-publisher in your project. Claude Code loads it when a task matches its description.
Run `npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a codex`. Or copy the skill folder (.agents/skills/juejin-publisher in eunomia-bpf/eunomia.dev) into .agents/skills/juejin-publisher in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add eunomia-bpf/eunomia.dev --skill juejin-publisher -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/juejin-publisher, .gemini/skills/juejin-publisher, .github/skills/juejin-publisher and .opencode/skills/juejin-publisher in your project.
SKILL.md names no scripts, command-line tools or credentials: Juejin Publisher is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: juejin.cn; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Juejin Publisher is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.8k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Juejin Publisher: Markit (shift-labs-ai/markit, 1.3k stars), Deepxiv Baseline Table (DeepXiv/deepxiv_sdk, 804 stars), Openclaw Ghsa Maintainer (SafeAI-Lab-X/ClawKeeper, 1k stars) and Fetch Markdown Specs (tats-u/markdown-cjk-friendly, 167 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
eunomia-bpf (a GitHub organization) maintains it in eunomia-bpf/eunomia.dev, which has 236 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 11, 2026.
Source: eunomia-bpf/eunomia.dev on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.