Claude Skills 实战指南:从写一个到注册成 Claude Code 可调用技能
Claude Code 用了几周以后,你会发现一件事:能力上限不是模型,是你能不能把高频任务沉淀成可复用的”技能”。每次都把”先看 git status、再用 codegraph 找入口、最后跑测试再提交”这一套从头讲一遍,你和模型都累。Claude Skills 就是为了这件事存在的——把工程习惯写成可挂载的工作流文件,Claude Code 启动时按需加载。
很多教程只讲 Skills 是什么、给一些模板。但真正卡住开发者的不是概念,是写完 SKILL.md 之后它没被加载、没被识别、没被触发的那一段。本文按一个最小但完整的例子走一遍:从写一个 commit-readiness 技能,到注册到 ~/.claude/skills/,再到验证 Claude Code 真的会调用它。
Skill 是什么、不是什么
Skill 在 Claude Code 里的本质是:一份带 frontmatter 的 Markdown 文件 + 可选附件,被 Claude 在合适时机当作”系统级提示”加载进上下文。它不是插件,不是 npm 包,不是要 import 的模块。
它和你已经熟的两个东西区分一下:
| 东西 | 触发方 | 持久化 | 用途 |
|---|---|---|---|
CLAUDE.md | 自动加载到每个会话 | 一直在 | 全局规则、不能漏的红线 |
| Skill | 用户用 /skill-name 显式调用,或 Claude 判断匹配后用 Skill 工具调用 | 按需加载 | 可复用的工作流 / 流程文档 |
| Sub-agent | 主 agent 用 Agent 工具显式 dispatch | 单次任务隔离 | 大任务并行 / 隔离上下文 |
一句话:CLAUDE.md 是”必读”,Skill 是”按需读”,Sub-agent 是”派工”。这个区分你想清楚了,剩下的写法就是格式问题。
一个最小可复现的 Skill:commit-readiness
我们写一个非常实用的 Skill:每次准备 git commit 之前,让 Claude 先按一份 checklist 检查代码状态。需求很简单:
- 跑一遍
git status、git diff --stat,确认改动范围 - 检查是否有
console.log/print/TODO类调试残留 - 确认改动文件的测试是否通过
- 给出一个建议的 commit message
这个流程值不值得做成 Skill?标准是:你是否会在多个项目里反复让 Claude 做同样的事。是 → 写 Skill;不是 → 直接对话。
第一步:建目录
技能文件按”一个目录一个 skill”组织:
1 | ~/.claude/skills/ |
文件夹名就是 skill 的调用名(/commit-readiness)。如果还需要附带模板、参考文档、示例脚本,就放在同一目录下,SKILL.md 里用相对路径引用。
第二步:写 SKILL.md
1 | --- |
红线
- 不主动跑
git commit或git push,只输出建议。 - 测试失败时不给”建议提交”,直接停在测试报告。
- 跨多个 untracked 文件夹时,先确认是不是真的都要进这次提交。
1 |
|
举几个差对比:
❌ 差:description: A skill to help with commits.
❌ 差:description: This skill helps users prepare for git commits by running checks.
✅ 好:description: Use when the user is about to commit code — runs a pre-commit checklist (status, diff, debug residue, tests). Trigger on "commit"/"提交"/"准备提交"/"看下能不能提交". Not for branch management or PR creation.
差异在哪:好的版本明确了触发条件、触发关键词、反例边界。模型在评估”这个 skill 适不适合现在这个任务”时,就有明确依据。
用附件让 Skill 更扎实
SKILL.md 有时候不够。比如你想让 skill 在生成 commit message 时参考一份团队约定的格式说明,可以这样组织:
1 | ~/.claude/skills/commit-readiness/ |
然后在 SKILL.md 里:
1 | ## 写 commit message 时 |
注意 SKILL.md 里的路径是相对当前 skill 目录的——Claude 加载时知道这是”同一 skill 包内的资源”。
4 类常见错误
写过几个 skill 之后,我观察到几乎所有人都会踩这几坑:
1. description 太抽象
“helps with code review” / “useful for testing” 这类文案,模型完全无从判断。结果就是 skill 写了等于没写——对话里它从不主动激活。
2. 把 CLAUDE.md 该写的塞进 skill
一些团队规则(比如”所有提交都要带 ticket ID”)应该写在 CLAUDE.md,而不是 skill。skill 是按需加载的——如果是必须遵守的红线,放 skill 等于”按需遵守”,逻辑上就错了。
3. 步骤写成”建议”而不是”指令”
“You may want to check the test results” vs “After step 3, run the matching tests; if any fail, stop and report”。模型对前者会自由发挥,对后者会按部就班。skill 的价值在确定性,写法要像 SOP 不像建议书。
4. allowed-tools 漏声明
你的 skill 步骤里要 git、npm、grep,三样都得在 allowed-tools 列出来。漏一个就在那一步弹权限框,体验断断续续。注意 Bash(git:*) 这种 glob 是常见写法,Bash(*) 太宽用户会犹豫。
验证 skill 真的在工作
写完之后,用三个简单测试验证:
测试 1:直接调用 —— /commit-readiness,看是不是按 SKILL.md 的流程一步一步跑。如果跑偏了,是 SKILL.md 步骤不够明确。
测试 2:自然语言激活 —— 改两行代码,然后说”看下能不能提交”。看 Claude 是不是主动调用 Skill 工具用了 commit-readiness。如果没有,是 description 不够明确。
测试 3:边界拒绝 —— 说”帮我创建一个新分支”。这种应该不触发 commit-readiness。如果它错触发了,description 缺反例边界。
三个测试都过了,skill 就算合格上线。
接下来你能写的几个
如果上面这套流程跑通了,下面这些是我观察到价值最高的几个 skill 方向:
pr-prepare—— 开 PR 前的准备:写 PR description、跑全部测试、检查 lint、扫一遍 changelogdependency-review—— 升级 npm/pip 包之前,让 Claude 先看 changelog、breaking changes、migration guidefeature-flag-check—— 改了 feature flag 相关代码后,确认前后端、缓存、监控都对齐ai-cost-check—— 给调 LLM 的代码加上成本估算和告警阈值
每一个都能用今天讲的模式直接落地。先把第一个写完跑顺,剩下的就只是抄结构。
延伸阅读:
- 已经在用 Claude Code Skills 但选困难的,可以看 Claude Code Skills 推荐:GitHub Stars 最高的 10 个项目 找现成方案。
- 不确定 Skills 跟 Hermes / 自建 agent 的关系,可以读 Hermes Skills + Agent 工作流实战 把概念串起来。
- 配合 Claude Code 项目实战工作流 一起看,能从”单 skill”扩展到”完整工程流程”。


