这篇讲什么
Claude Code skills 的完整入门:什么是 skill、如何调用、如何写一个 SKILL.md、何时用 hook 或 subagent 替代、以及如何在团队里共享。
本文涉及的工具 / 概念:
- Claude Code: Anthropic 推出的命令行 AI 编程 agent,能在你的终端里读、写、运行项目代码。
- Claude: Anthropic 的对话式 AI 助手,类似 ChatGPT,支持文件、长文档和工具集成。
这篇适合谁看
已经能正常用 claude 命令,想把”每次都要手敲的同一段流程”变成”输入 /<name> 就能跑”的开发者。也适合在团队里负责标准化代码评审、安全审查、发布检查的人。
什么时候适合用
- 同一个任务你已经重复执行三次以上:安全审查、发布前 QA、batch 改 metadata、生成测试。
- 流程不只是一段 prompt,还要带参考文档、模板脚本、或者特定步骤的 checklist。
- 团队希望所有人按同一套标准跑,而不是各写各的 prompt。
- 想让 Claude 在某些上下文里自动触发某个工作流,而不是每次靠人记得调用。
skill、slash command、hook、subagent 的区别
这四个概念经常被搞混,先分清楚再往下看:
- skill:一段带说明的工作流,存在
SKILL.md里。Claude 看到任务匹配 skill 的描述时,会主动加载它的指令;你也能用/<name>显式调用。skill 可以附带脚本、模板、参考资料。 - slash command:纯文本扩展,定义在
.claude/commands/下,执行时把模板插进 prompt。适合”复用一句话指令”。 - hook:在某个事件(
PreToolUse、PostToolUse、Stop、UserPromptSubmit等)触发的 shell 命令。适合”每次写文件后跑 lint”这种自动行为。 - subagent:独立上下文窗口跑一段任务,结果返回给主会话。适合并行调研、隔离长上下文。
判断方法:
| 你要什么 | 用什么 |
|---|---|
| ”我想再用一遍那段长 prompt” | slash command |
| ”某种任务出现时自动按一套流程做” | skill |
| ”写完文件自动跑 prettier” | hook |
| ”并行去查 5 个文件再汇总” | subagent |
skill 的独特之处:可以被 Claude 自动识别并调用,不一定要你显式 /。
skill 长什么样
skill 是一个目录,里面至少有一个 SKILL.md,可以附带任意脚本、文档、模板:
.claude/skills/
ship/
SKILL.md
templates/
changelog.md
scripts/
bump-version.sh
SKILL.md 用 frontmatter 描述 skill 自己:
---
name: ship
description: |
Ship workflow: detect base branch, run tests, review diff,
bump VERSION, update CHANGELOG, commit, push, create PR.
Use when the user says "ship", "release", or asks to cut a version.
---
# Ship workflow
1. Run `git status` and `git diff` to confirm clean working tree.
2. Run the test suite. If it fails, stop and show output.
3. ... (具体步骤)
要点:
description是 Claude 用来匹配任务的索引。写得越具体(带触发词、典型场景),自动调用越准。- 正文是 Claude 看到的指令。可以引用同目录下的脚本和模板,用相对路径。
- 不要在 description 里堆名词。“用于代码评审” → 太空;“PR landing 前对 diff 做 SQL safety / LLM trust boundary / conditional side-effect 检查” → 可被精准匹配。
skill 放在哪
skill 可以来自四个位置,按优先级理解:
- 项目级:
.claude/skills/<name>/SKILL.md— 跟着仓库走,所有协作者都能用。 - 用户级:
~/.claude/skills/<name>/SKILL.md— 跨所有项目可用,只属于你。 - 插件:用
gh风格的插件机制安装的 skill 包,前缀类似gstack:qa。 - 内置:Claude Code 自带的 skill,比如
init、review、security-review,不需要你写文件。
常见的内置或官方插件级 skill(会随版本变化,以你 / 菜单为准):
| Skill | 干什么 |
|---|---|
init | 初始化或更新项目 CLAUDE.md |
review | PR diff 审查,找代码味、潜在 bug |
security-review | 当前分支的安全审查 |
verify | 跑应用、用浏览器或 CLI 验证改动是否真的工作 |
simplify | 评审改动并简化重复或冗余代码 |
run | 起项目跑起来看效果 |
update-config | 改 .claude/settings.json(权限、hook、env) |
loop | 把一条命令按间隔循环跑 |
schedule | 创建/管理定时远程 agent |
keybindings-help | 帮你改 ~/.claude/keybindings.json |
fewer-permission-prompts | 扫历史,把常见只读命令加进 allowlist |
claude-api | 写 Anthropic SDK 代码、做版本迁移 |
插件类(举例,需要先装相应插件):
| Skill | 干什么 |
|---|---|
gstack:browse | 无头浏览器,自动化点页面、截图、对比 diff |
gstack:qa | 系统化 QA 整站并修 bug,原子化 commit |
gstack:ship | 一键 ship 流程:合并基线、跑测试、改 CHANGELOG、push、开 PR |
gstack:review | 上线前 PR 评审 |
gstack:retro | 周回顾,分析 commit 历史和质量趋势 |
不确定哪些可用?敲一个 / 看菜单,或者跑 /help。
怎么调用 skill
三种触发方式:
- 显式
/<name>:在输入框里敲/,菜单里找你要的 skill,回车。最直接。 - 自动触发:当你描述的任务匹配某个 skill 的 description,Claude 会主动加载它。比如你说”帮我审一下这个 PR 的安全风险”,可能会自动套上
security-review。 - 显式让 Claude 用某 skill:在 prompt 里直接说 “use the security-review skill on this branch”,比含糊地说”看看安全问题”更稳。
带参数的 skill 调用一般是 /<name> <args>,例如:
/loop 5m /verify
/schedule daily 09:00 "summarize yesterday's commits"
具体参数怎么写以 skill 自己的 SKILL.md 描述为准。
写一个属于你自己的 skill:完整例子
假设你想要一个 pr-summary skill:给当前分支自动生成 PR 描述。
第 1 步:在仓库根目录建文件:
.claude/skills/pr-summary/SKILL.md
第 2 步:写 frontmatter 和正文:
---
name: pr-summary
description: |
Generate a PR description for the current branch.
Pulls commits since the merge-base with main, summarizes
what changed, and produces "Summary / Test plan / Risks"
sections. Use when the user asks for a "PR description",
"PR body", or is about to open a PR.
---
# Generate a PR description
1. Detect base branch — try `main`, fall back to `master`.
2. List commits with `git log <base>..HEAD --oneline`.
3. Get the diff stat with `git diff <base>..HEAD --stat`.
4. Output three sections:
- **Summary** — 1-3 bullets of what this PR does.
- **Test plan** — checklist of what was verified.
- **Risks** — known unknowns and what to watch in prod.
5. Do not include co-author trailers or auto-generated notes
unless the user asks for them.
第 3 步:在会话里跑 /pr-summary 验证。如果你描述的工作场景在用户 prompt 里出现(比如”帮我写个 PR description”),Claude 也会自动套用。
第 4 步:commit 这个目录到仓库——所有协作者拉下来都直接能用。
给 skill 加脚本和模板
skill 可以引用同目录下的文件:
.claude/skills/release-notes/
SKILL.md
template.md
fetch-issues.sh
SKILL.md 里这样用:
1. Run `bash .claude/skills/release-notes/fetch-issues.sh <version>` to
collect closed issues since the last tag.
2. Use `.claude/skills/release-notes/template.md` as the output skeleton.
3. Fill the template, keep tone matter-of-fact, no marketing language.
注意:用相对路径,并且让 Claude 实际去读模板而不是猜内容,结果稳定得多。
skill 和自动触发:怎么让它真的自动起来
description 字段决定自动触发是否准。三条规则:
- 写触发词:用户实际会说什么?“ship”、“cut a release”、“review the diff”、“qa”——把这些词写进 description。
- 写场景:什么时候不该触发也要写。比如
description里加 “Skip if user only wants to chat about release strategy without actually shipping”。 - 写产物:明确产出什么。比如 “Produces an updated VERSION file, CHANGELOG entry, and a pushed PR” 比 “handles release” 准得多。
如果 skill 一直触发不到,先在 SKILL.md 描述里加你自己实际用过的几句话;如果触发太频繁,反过来收紧场景描述。
团队共享与版本控制
- 项目 skill:把
.claude/skills/提交到 git。所有人拉下来即可用,符合”基础设施即代码”原则。 - 用户级 skill:自己机器跨项目复用。可以放进一个私有 dotfiles 仓库,并 symlink 到
~/.claude/skills/。 - 插件:在 README 里写明依赖的插件名和版本,让队友按官方说明安装。
CI 上不需要执行 skill,但建议加 lint:检查每个 SKILL.md 都有 name 和 description,避免有人 commit 了空壳目录。
什么时候不该用 skill
- 一次性问题:直接 prompt 比写 skill 快。
- 单句指令的复用:用 slash command(
.claude/commands/<name>.md)。 - 想”每次写文件后自动跑 X”:用 hook,不是 skill。
- 跨上下文并行调研:用 subagent。
- skill 描述写得很模糊以至于没人记得它存在:删掉,重写或合并。
实操:第一周做这三件事
- 跑一遍现有内置 skill:
/init、/review、/security-review,感受触发体验和输出风格。 - 把你最近三次手敲的同一段流程,写成一个项目级 skill,提交到仓库。
- 让一个同事不告诉你而触发这个 skill,看是否能自动匹配——不行就改 description。
完成后检查
- skill 是否真的被自动触发?看
/菜单 + transcript 里有没有出现 “Loaded skill: …”。 - 跑 skill 的输出是否一致?两次跑应该结构相同,差异只在内容。
- 团队里别人能用吗?换个未参与编写的同事跑一遍。
- skill 描述里有没有触发词、典型场景、明确产物?三者缺一不可。
容易踩的坑
- description 写成”用于代码评审”——太空,自动匹配几乎不会命中。
- 把上百行步骤全塞
SKILL.md——Claude 抓不到重点。拆步骤、列编号、必要时引用外部脚本。 - 在 skill 里硬编码绝对路径——换个仓库就崩。用相对路径,或让 skill 自己探测。
- 把敏感凭据写进 skill 模板——skill 跟着 git 走,等于明文提交。用环境变量或 secret manager。
- 跟 hook 搞混:skill 是”AI 的工作流指令”,hook 是”harness 的自动执行命令”。两者要解决的问题不同。
FAQ
Q:skill 和 slash command 有什么区别?
A:slash command 是纯文本扩展,定义在 .claude/commands/,执行时把模板插进 prompt——适合复用一句话指令。skill 是带 SKILL.md 描述的工作流,Claude 看到任务匹配时会自动加载,也支持显式 /<name> 调用。要自动触发用 skill,要手动复用用 slash command。
Q:什么时候用 skill,什么时候用 hook? A:skill 是“AI 的工作流指令”——某种任务出现时按一套流程做;hook 是“harness 的自动执行命令”——写完文件自动跑 prettier 这种确定性自动化。要 AI 判断走不走流程用 skill,要每次都跑的副作用用 hook。
Q:skill 怎么团队共享?
A:把 skill 目录提交到 git(.claude/skills/<name>/SKILL.md + 附带脚本 / 模板),团队成员拉下来就能用。注意不要把 API key 等敏感凭据写进 skill 模板——skill 跟着 git 走等于明文提交,用环境变量或 secret manager。
Q:为什么我的 skill 没被自动触发? A:99% 是 SKILL.md 的 description 写得太空。“用于代码评审”这种自动匹配几乎不会命中。description 要具体到“当 Claude 被要求做发布前 QA / 安全审计 / API 迁移时使用”——给出明确触发条件。
相关阅读
标签: #Claude #Claude Code #教程