ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Claude Code CLI 工具 run-skill 编写指南:以 run-skill-generator 的 cli.md 为模板

2026/9/9 12:58:34 拓冰建站 浏览量
Claude Code CLI 工具 run-skill 编写指南:以 run-skill-generator 的 cli.md 为模板 Claude Code CLI 工具 run-skill 编写指南以 run-skill-generator 的 cli.md 为模板【免费下载链接】system_prompts_leaksExtracted system prompts from Anthropic - Claude Fable 5.1, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-6-Astra, Codex. Google - Gemini 3.8 Flash, 3.1 Pro, Antigravity. xAI - Grok, Grok Bot, Cursor, Kimi and more! Updated regularly.项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks这篇指南围绕仓库中收录的 Claude Code skills 文档 Anthropic/claude-code/skills/run-skill-generator/examples/cli.md 展开讲解如何为一个CLI命令行工具编写一份可被 Agent 直接执行的run-unitskill项目运行技能。读完你会掌握 CLI 型 run-skill 的内容骨架、frontmatter 写法、示例调用与退出码/标准输入stdin的表达约定并了解它如何与 Claude Code 的/run回退机制以及template.md结构相互配合。一、背景run-skill 是什么cli.md 处于什么位置在 Claude Code 的技能体系中存在一个「run-skill 生成器」技能其主体文档为 run-skill-generator/SKILL.md。它的职责是为一个可部署单元一个应用、服务或库产出位于unit/.claude/skills/run-unit-name/目录下的技能使未来的 Agent 能从一台干净机器上完成构建、启动并驱动该项目——而不仅仅是运行测试或import一个内部函数。由于不同项目类型的「运行方式」差异巨大生成器在 run-skill-generator/SKILL.md#L283-L290 提供了按项目类型区分的「驱动形态」Driver shape参考表项目类型驱动形态参考示例Web server / API后台启动 curl冒烟脚本examples/server.mdCLI 工具代表性参数冒烟脚本检查退出码与输出examples/cli.mdTUI / 交互式终端tmux 包装send-keys/capture-paneexamples/tui.mdElectron / 桌面 GUIxvfb 下 Playwright_electronREPL 驱动 截图examples/electron.md浏览器驱动应用开发服务器 chromium-cli脚本examples/playwright.md库 / SDK包边界的「导入即调用」冒烟脚本examples/library.md其中 CLI 一行的配套文档就是本文主角cli.md。需要说明的是这套示例并非只在「写技能」时有用——独立的 /run 技能 在找不到项目专用 run-skill 时同样以这组按项目类型划分的模式作为回退方案fallback。在 /run/SKILL.md#L41-L48 的表格里CLI 工具对应的「把手handle」被概括为直接调用direct invocation、退出码、stdin/stdout。也就是说这份文档既是写给 run-skill 作者的写作规范也是写给 Agent 的「如何跑一个 CLI 程序」的操作手册。二、为什么 CLI 是最简单的情形cli.md开宗明义地指出CLIs are the simplest case — theres usually no background process to manage, no ports, no lifecycle.CLI 是各种项目类型中最简单的一类因为通常没有后台进程要管理、没有端口要等待、没有生命周期要收拾。对比同目录下的其他示例即可看出差异所在服务端server.md的核心困扰是生命周期Agent 必须能后台启动、探测就绪、用curl交互、再干净地杀掉进程前台阻塞式npm start对 Agent 毫无用处。Electron 桌面应用electron.md需要一套launch/ss/click/type的自定义 REPL 驱动脚本还必须运行在 xvfb 虚拟显示之下。TUItui.md因为会抢占终端必须用 tmux 包裹后用send-keys发键、capture-pane读屏。浏览器应用playwright.md则需要开发服务器加chromium-cli的组合。而 CLI 命令天然是一次性的进程启动、完成工作、退出并返回退出码。因此它不需要任何「驱动脚本」skill 内容只需聚焦三件事安装installation、代表性调用representative invocations与测试testing。三、写 CLI run-skill 时必须回答的四个问题cli.md的「What matters」小节给出了 CLI 型 run-skill 的四个内容要点。这些是判断一份 skill 是否合格的检验清单1. 二进制文件如何进入PATH必须明确写出把工具装到PATH上的具体方式而不是含糊地说「安装它」。文档列举了需要区分的情况是全局安装installed globally还是通过npx/uv run运行还是需要先构建到./target/release/foo再执行之所以要如此明确是因为这直接决定 Agent 在干净环境里复现的第一步。这一点与 run-skill-generator/SKILL.md 对前置依赖的总体要求一致——它反复强调「写你实际运行过的、精确的命令」而非泛指。若涉及系统级依赖则给出真实执行成功的apt-get install那一行对应 template.md 中的 Prerequisites 小节。2. 两到三条覆盖主要使用场景的示例调用给出两三个覆盖核心用例的示例调用并且必须附上预期输出expected output这样阅读的 Agent 才能判断命令是否真的成功了。判断标准不在于覆盖多少 flag而在于能否「证明工具能用」。3. 有意义的退出码如果退出码对调用方有意义就要写清楚。文档给的原型是linter 在发现问题时返回 1——这类工具在 CI、pre-commit 或 Agent 脚本里通常靠退出码而非 stdout 来传递「成功/失败」语义因此 skill 必须显式记录。4. 标准输入stdin行为如果工具支持从 stdin 读取就要说明。很多 CLI 遵循「支持-表示 stdin」的惯例例如cat data.json | mytool process -这决定了 Agent 能否把它接入管道链pipe chain。四、完整示例剖析一份可复制的 mytool SKILL.mdcli.md用虚构工具mytool给出了一个完整的 SKILL.md 草稿。cli.md原文以引用块形式展示该草稿以下是其完整内容原样保留未做删减--- name: run-mytool description: Build, install, and run mytool. Use when asked to run mytool, test it, or verify its installed correctly. --- ## Setup bash pip install -e . This puts mytool on PATH. Verify: bash mytool --version # - mytool 0.3.1 ## Run Process a single file: bash mytool process input.json # - Processed 42 records, wrote output.json Read from stdin, write to stdout: bash cat input.json | mytool process - Lint a directory (exits non-zero on problems): bash mytool lint ./src echo $? # 0 if clean, 1 if issues found ## Test bash pytest 这个短小的例子信息密度很高逐段拆解如下。frontmatter决定「何时被自动加载」name: run-mytool description: Build, install, and run mytool. Use when asked to run mytool, test it, or verify its installed correctly.run-skill-generator/SKILL.md 强调 frontmatter 至关重要name:会成为斜杠命令/run-mytool且必须与技能目录名一致目录需 slugify小写、空格转连字符、不含斜杠如run-billing-api。description:是 Claude 扫描判断是否自动加载技能的依据因此要把 Agent 真正会打的动词放进去——本例放了run、test、verify、install。通用化的描述如 helpful utilities for billing不会命中。template.md 底部的注释也重复了这条规则描述中保留start、run、build、test、screenshot这类动词。Setup安装并验证可执行pip install -e .-e表示 editable可编辑安装源码改动即时生效适合开发场景。文档明确点出这条命令的作用——把mytool放进PATH随后立刻用一个最小可验证命令确认mytool --version # - mytool 0.3.1预期输出mytool 0.3.1让 Agent 可以 grep 版本来断言安装成功。这与 template.md 中 Setup 小节一次性安装依赖、配置、应用补丁的定位一致示例用--version承担了「安装是否成功」的探针角色。Run三条调用覆盖三种典型场景第一条处理单个文件——覆盖最常见的「给参数就跑」路径mytool process input.json # - Processed 42 records, wrote output.json预期输出中包含了处理条数42 records与产物wrote output.json可验证性强。第二条验证 stdin 支持——用管道把 stdin 喂给工具-代表标准输入cat input.json | mytool process -这正是第三节提到的「stdin 行为」要点一条命令就交代清楚了「该工具可作为管道中间环节使用」。第三条验证有意义的退出码mytool lint ./src echo $? # 0 if clean, 1 if issues found通过echo $?把退出码显式暴露出来并注释其语义0表示干净、1表示发现了问题。这正好对应第三节「linter 返回 1」的原型也让 Agent 在 CI 语境下能够正确地依据退出码做分支判断。Test一句话交代测试入口pytestCLI 工具的测试入口往往简单直接。这一节让 Agent 在改完代码后能快速回归。更完整的 skill 中 Test 小节还可附带「预期结果」例如 N 个 suite 通过或指出已知偶发失败的测试详见 template.md 对 Test 小节的说明。五、Keep it short克制是 CLI run-skill 的美德cli.md结尾专门用一个「Keep it short」小节强调了写作纪律A CLIs run skill can be very compact. Dont pad it with every flag — the--helpoutput covers that. Just show enough that an agent can (a) build it, (b) confirm it works, (c) run the tests.即CLI 型 run-skill 应该非常紧凑。不要罗列每个 flag——--help输出本来就能覆盖这些细节。只需让 Agent 能够完成三件事即可(a) build it—— 构建/安装它(b) confirm it works—— 通过可验证的命令确认它能工作(c) run the tests—— 运行测试。这条原则与 run-skill-generator/SKILL.md 的「What to leave out」清单相互印证它明确要求排除「你没运行过的东西」「详尽罗列的所有选项exhaustive options」「架构性散文architecture prose」「空泛的排障建议」并坚持技能要「verified每条命令你都实际跑过、prescriptive只给一条路径而非多个选项、honest不稳定或慢就直说」。换句话说一份合格的 CLI run-skill 是一份「最小可行的操作手册」而不是把 README 重新抄一遍--help与 README 各自承担了自己职责skill 只需补足它们缺失的、可复现的运行路径。六、落盘位置与结构与仓库模板的配套使用写出的 SKILL.md 应放在单元根目录的.claude/skills/下Claude Code 原生支持从嵌套的.claude/skills/目录发现技能。run-skill-generator/SKILL.md 给出了三种典型排布单项目仓库放在仓库根的.claude/skills/run-repo-name/含多个应用的大型仓库按应用就近放置如apps/billing/.claude/skills/run-billing/一个应用含多个二进制仍只建一个技能在应用根部放一份、每个二进制加一个## Run: name小节它们共享 setup应从最接近的单二进制示例起步扩展。cli.md中的mytool示例即对应「一个 Python 包一个 CLI」的最小单元。需要注意的路径细节是SKILL.md 内的路径都相对unit/而非技能目录自身run-skill-generator/SKILL.md 专门提示了这一点。另外template.md 提供了完整的 SKILL.md 结构起点Prerequisites → Setup → Build → Run(agent path) → Run(human path) → Test → 可选的 Gotchas / Troubleshootingmytool示例可以视为这份模板在「无后台进程、无 GUI」场景下的极简投影——Run (agent path)与Run (human path)都是同一条命令因此被合并为一个Run小节。七、从示例到运行Agent 侧如何「驾驶」这份技能run-skill 的内容是给未来 Agent 读的而 /run 技能 恰好在没有项目专用技能时把这些 per-project-type 示例当作回退配方来消费。它对 CLI 场景的驾驶要求是CLI → type a representative command, check the exit code and output.即启动launch一个 CLI 并打印版本号并不算「运行了应用」——那只是带额外步骤的类型检查。真正合格的标准是输入一条代表性命令、核对退出码与输出。这与mytool示例中的三条 Run 调用完全同构process验证主流程、-验证管道、lint验证退出码语义。如果回退模式开箱即用时一切正常/run/SKILL.md 还给出了一条重要约定若过程中你不得不安装软件包、设置环境变量、修补配置或编写驱动就应向用户推荐运行/run-skill-generator把这段经验固化为项目技能若直接成功则不推荐。这正是cli.md这类示例文档与生成器、运行器三者之间的闭环。八、写作前的验证别把 README 换个说法交差run-skill-generator/SKILL.md 对成稿前的最后一步Verify有硬性要求在新的干净 shell 中进入单元目录逐行照做 SKILL.md不允许任何即兴发挥——一旦出现即兴操作就说明文档存在缺口需要修正。与此同时其「Red flags」清单列出了一些「正在交付错误产物」的危险信号同样适用于 CLI 场景你没有运行过技能里任何一条命令Everything worked first try 往往意味着你只跑了测试套件就当成功技能读起来像 README 的复述同样的结构、同样的命令、同样的注意事项Troubleshooting 一节是空泛套话——真实的执行只会产生具体而怪异的报错你写了「某平台不支持」却从未尝试过启动。对 CLI 而言由于没有复杂的启动环境「一切都很顺利」恰恰是需要警惕的信号要么项目简单到微不足道要么你其实只跑了测试、从未真正调用过这条命令。小结CLI 是 run-skill 家族中最轻量的一类项目形态无后台进程、无端口、无生命周期因此 skill 只需回答安装、代表性调用与测试三个问题。cli.md用四条约法PATH 来源明确、附预期输出的两三条示例调用、有意义的退出码、stdin 行为加上一份可整体复制的mytool文档勾勒出了一份 Agent 可直接执行的 CLI 操作手册再与仓库中 template.md 的结构、run-skill-generator/SKILL.md 的写作纪律以及 /run 技能 的驾驶要求配合使用即可为自己的 CLI 工具沉淀出一份「verified、prescriptive、honest」的运行技能。【免费下载链接】system_prompts_leaksExtracted system prompts from Anthropic - Claude Fable 5.1, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-6-Astra, Codex. Google - Gemini 3.8 Flash, 3.1 Pro, Antigravity. xAI - Grok, Grok Bot, Cursor, Kimi and more! Updated regularly.项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考