本文根据 Claude Code 官方文档《Extend Claude with skills》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。本站(bigolab.com)不是 Anthropic 官方网站。
适用于谁
- 已经会写最简单的 Skill,但总遇到「它不自己出场」或「不该出场时乱出场」的人;
- 想让 Claude 在改某一类文件时自动套用团队规矩,而不是每次手动输入命令的人。
本站的 /guides/claude-code-custom-skill-slash-command-example 写的是手动触发的 /release-notes。本文反过来:写一个主要靠自动触发的 Skill,重点是怎么让它在对的时候出现。字段规范和目录结构不重复,见 /guides/skill-md-format-spec-how-to-write。
结论先说
- 自动触发靠的是 description。 官方说,普通会话里所有技能的名字和描述会被放进上下文,Claude 据此判断要不要加载;技能全文只在被调用时才进来。
- description 要把关键用途放最前面,写进用户会自然说的词。 官方给了硬数字:
description和when_to_use合起来在技能列表里最多保留 1,536 个字符,超出被截断。 - 想把范围收窄,用
paths。 设置后 Claude 只在处理匹配这些文件时才自动加载这个技能;匹配相对当前工作目录。 - 「必须每次都做」的规则不要只靠 Skill。 官方说 Claude 可能后来不照着做,必须每次发生的要改用 Hook。
- 看到触发不等于做对了。 官方建议拿几条真实提示词,分别在有技能和关掉技能的新会话里各跑一次,对比结果。

图:本站根据 Claude Code 官方文档:Skills 整理的示意图
一、先把需求说清楚
好的 Skill 来自一个具体的重复问题。本例的需求:
团队的数据库迁移文件放在migrations/下。每次让 Claude 改迁移,我都要重复提醒:不要直接删列,新增非空列必须带默认值,改完要跑检查脚本。
这是官方说的「总是把同一段指令粘贴进对话」的典型情形。它还有两个特点:不需要你每次想起来才用(所以适合自动触发),只和一类文件有关(所以适合 paths)。
二、建目录和 SKILL.md
放项目里,提交进仓库全队共用(官方的项目技能位置):
bash
mkdir -p .claude/skills/migration-review/scripts
.claude/skills/migration-review/SKILL.md:
text
---
name: migration-review
description: 修改或新增数据库迁移文件前后的检查清单。当用户要改 migrations、加表、加列、删列、改字段类型时使用。
when_to_use: 用户说「写个迁移」「给表加个字段」「这个迁移安全吗」,或者正在编辑 migrations 目录下的 SQL 文件。
paths: migrations/**
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/check.sh *)
---
处理迁移文件时,整个任务期间都遵守这些规则:
1. 不直接删除列或表;需要删除时,先拆成「停止使用」和「删除」两个迁移,并在回复里提醒我。
2. 新增 NOT NULL 列必须带默认值,或者先加可空列再回填。
3. 改完每个迁移文件后,运行 `${CLAUDE_SKILL_DIR}/scripts/check.sh <迁移文件路径>`,把输出原样告诉我。
4. 检查不通过时,说明原因并修改,不要绕过脚本。
5. 命名规则和更多例子见 [conventions.md](conventions.md),需要时再读。
对照官方文档逐项解释:
description加when_to_use:官方说when_to_use用来补充「什么时候该调用」,比如触发短语或示例请求,会追加到 description 后面,一起计入 1,536 字符上限。所以两个都别写成长文。paths:官方说明可以是逗号分隔的字符串或 YAML 列表,格式与路径专属规则相同。allowed-tools:官方说它在调用这个技能的那一轮里,让列出的工具不再弹确认;下一条消息发出后失效。官方还给了同样的写法:用${CLAUDE_SKILL_DIR}同时写在正文和allowed-tools里,规则就能精确匹配正文要求运行的命令,脚本不会弹窗。- 规则写成整个任务期间都适用的口吻:官方说技能内容进入对话后不会被重新读取,所以要写成常驻指令,而不是一次性步骤。
三、加脚本和参考文件
官方说脚本是被执行的而不是被读进上下文,适合把确定性的检查交给程序。下面这个 scripts/check.sh 是本站为演示写的,规则很简单,请按自己的数据库改:
bash
#!/usr/bin/env bash
# 演示脚本:检查迁移文件里的两类高风险写法
f="$1"
[ -f "$f" ] || { echo "文件不存在:$f"; exit 2; }
if grep -Eiq 'DROP[[:space:]]+(COLUMN|TABLE)' "$f"; then
echo "发现 DROP COLUMN / DROP TABLE,请拆成两个迁移"; exit 1
fi
if grep -Eiq 'ADD[[:space:]]+COLUMN.*NOT NULL' "$f" && ! grep -Eiq 'DEFAULT' "$f"; then
echo "新增 NOT NULL 列没有 DEFAULT"; exit 1
fi
echo "检查通过:$f"
再建 conventions.md,写命名规则和两三个「好的 / 坏的」迁移示例。官方建议 SKILL.md 控制在 500 行以内,详细内容挪到单独文件,并且在 SKILL.md 里写明每个文件是什么、什么时候读(上面第 5 条就是这样做的)。
四、测试:它到底触发了吗
官方的验证办法有几条,按顺序做:
- 启动
claude,问「What skills are available?」(用中文问「有哪些技能可用」也可以),确认migration-review在列表里。 - 用自然语言提需求,不要用命令:
text
给 users 表加一个 phone 字段,非空,写个迁移
- 如果没有自动加载,用
/migration-review直接调用,确认技能本身没问题。 - 再用一句不相关的话(比如「帮我改一下首页的按钮颜色」),确认它没有乱出场。

图:本站根据官方「Troubleshooting」整理的示意图
五、触发不对怎么办(官方排查顺序)
不触发:
- 看 description 里有没有用户自然会说的词;
- 确认它出现在可用技能列表里;
- 换一种更贴近 description 的说法再试;
- 用
/名字直接调用; - 如果设了
paths,检查 Claude 读、改、写的文件是否在当前工作目录之内。官方特意提到:兄弟 git worktree 里的文件不会激活,即使用/add-dir添加过也一样。要么在那个目录里启动,要么用/cd把会话移过去。
另外官方提醒:YAML 写错时技能仍会加载,但元数据是空的,所以 /名字 能用、自动匹配却不行。可以用 claude --debug 看解析错误,或运行 claude plugin validate .claude/skills。
触发太频繁: 让 description 更具体,或者加 disable-model-invocation: true 改成只能手动触发。
描述被截断: 技能多了之后,官方说描述列表有预算(约为模型上下文窗口的 1%),超出时从最少使用的技能开始丢描述。运行 /doctor 能估算列表占的上下文,/skill-doctor 能找出该关掉的技能。
后来不照着做: 见结论第 4 条。必须每次都做的,用 Hook;见 /guides/claude-code-hooks。官方还说对话被压缩后可能只保留技能内容的开头,所以最重要的规则放最前面。
六、让 Claude 帮你调 description
提示词:
text
我有一个技能 .claude/skills/migration-review/SKILL.md。请给出 8 句用户可能会说的话,其中 4 句应该触发它,4 句不应该;然后逐句判断按现在的 description 和 when_to_use 会不会触发,不会的给出修改建议。先不要改文件。
七、怎么知道它真的有用
官方的说法是:触发只说明 Claude 找到了它,不说明结果对。方法是收集几条真实的提示词,各在新会话里跑两遍,一遍开着技能、一遍关掉(项目技能可以在 skillOverrides 里设为 "off"),比较结果;在新会话里跑很重要,因为你写技能时留下的上下文会掩盖指令里的漏洞。
要自动化这个流程,官方提到可以装 skill-creator 插件:
text
/plugin install skill-creator@claude-plugins-official
装好后让 Claude「evaluate my migration-review skill with skill-creator」,它会生成测试用例、做有无技能的对比,并能测 description 的命中率。如果提示 marketplace 找不到,官方给的办法是先 /plugin marketplace add anthropics/claude-plugins-official。插件系列见 /guides/claude-code-plugins-marketplace。
常见问题
Q:Skill 和 CLAUDE.md 怎么分工?
事实和常驻约定放 CLAUDE.md;只在某类任务时才需要的流程放 Skill,平时只占一行描述。选型对比见 /guides/skill-vs-mcp-vs-subagent-vs-hook。
Q:触发不稳定,有没有专门的排查文章?
见 /guides/skill-not-triggering-description-optimize。
Q:放哪个目录、同名谁优先?
见 /guides/claude-code-skills-directory-location-priority。
订阅和额度
Skill 的好处之一是正文按需加载,不会像长 CLAUDE.md 那样每次都占上下文。需要 Claude Code 订阅可看 /chongzhi/claude-code,价格和额度以官方页面当前显示为准。
相关教程
- /guides/claude-code-custom-skill-slash-command-example:手动触发的 /release-notes 完整实例
- /guides/skill-md-format-spec-how-to-write:SKILL.md 格式规范
- /guides/claude-code-hooks-run-tests-before-commit:必须每次执行的规则用 Hook
参考资料
- Claude Code 文档:Extend Claude with skills — https://code.claude.com/docs/en/skills
0 条评论
还没有评论,来抢沙发~