Part 2 · 第 8 课,共 16 课
用 SKILL.md 打造你的 Claude Code 自定义技能
自动加载的知识与指令包。使用和编写自定义技能。
10 min
第 1 步 / 共 6 步 · 什么是技能 (Skills)?
技能 (Skill) 是一个可复用的指令包(也可以包含脚本),用于扩展 Claude Code 的能力。你只需在一个名为 SKILL.md 的文件里把指令写好一次,Claude 就会把它加入自己的工具箱。
你可以把它看作一份定制的“小抄”。每当任务匹配时,Claude 就能按需加载该技能,并精确遵循你写的指令。这样你就能自动化重复性工作,比如格式化代码、跑一遍发布检查清单、或生成数据库 Schema,而不必每次都重新输入这些步骤。
与把所有内容都塞进 CLAUDE.md 不同,技能的正文只在真正被用到时才加载,所以即使是很长的参考资料,在你需要之前几乎不占用上下文。
第 2 步 / 共 6 步 · 技能存放在哪里、结构如何
每个技能都是一个包含 SKILL.md 文件的文件夹。文件夹放在哪里,决定了谁能使用它:
- 个人级(你的所有项目都可用):
~/.claude/skills/<技能名>/SKILL.md - 项目级(仅当前仓库,提交后即可共享):
.claude/skills/<技能名>/SKILL.md
文件夹名就是你要输入的命令。位于 .claude/skills/deploy-staging/SKILL.md 的技能,调用方式就是 /deploy-staging。
一个 SKILL.md 由两部分组成:
- YAML frontmatter,写在
---标记之间。最重要的字段是description——Claude 会读取它来判断何时自动使用该技能。(name是可选的,只用作显示名称。) - Markdown 指令,写在 frontmatter 下方——技能运行时 Claude 需要遵循的步骤。
---
description: 格式化并整理 Markdown 文件。当被要求整理或格式化 .md 文档时使用。
---
格式化 Markdown 文件时:
- 在每个标题前留一个空行
- 删除每行行尾的空格
- 将段落按 80 字符换行
技能文件夹里还可以放配套文件——模板、示例输出,或供 Claude 运行的辅助脚本(Shell 或 Python),但只有 SKILL.md 是必需的。
第 3 步 / 共 6 步 · 自动调用 vs. 用 /名称 手动触发
技能有两种运行方式,理解二者的区别正是技能的精髓所在:
- 由 Claude 自动调用。 Claude 始终能看到每个技能的
description。当你的请求与之匹配时,它会自动加载该技能。你说*“整理一下 README.md”*,一个描述写得好的格式化技能就会自动生效,而无需你点名。 - 由你直接调用,输入
/<技能名>(即文件夹名),例如/format-md。当你想自己触发技能时就用这种方式。
你可以通过 frontmatter 来控制这一点。加上 disable-model-invocation: true,技能就变成仅限手动触发——这对有副作用的操作很有用,比如 /deploy 或 /commit,你不会希望 Claude 自作主张去运行它们。默认情况下,你和 Claude 都可以调用一个技能。
第 4 步 / 共 6 步 · 创建一个 Markdown 格式化技能
让我们做一个真正的项目级技能,指导 Claude 如何整理 Markdown 文件。在你的 playground 中创建技能文件夹:
mkdir -p .claude/skills/format-md现在创建 .claude/skills/format-md/SKILL.md。用编辑器打开它并粘贴:
---
description: 格式化并整理 Markdown 文件。当被要求整理、清理或格式化 .md 文档时使用。
---
格式化 Markdown 文件时:
- 在每个标题前留一个空行
- 删除每行行尾的空格
- 将段落按 80 字符换行由于这个文件夹叫 format-md,该技能既可以自动使用(根据它的描述),也可以用 /format-md 直接调用。
第 5 步 / 共 6 步 · 验证你的技能
在 playground 中启动 Claude Code:
claude先确认 Claude 能看到这个技能。问它:
现在有哪些可用的技能?
你应该能在列表里看到 format-md。接下来分别测试两种调用方式。
直接调用——输入命令并带上目标文件:
/format-md 整理一下 intro.md
自动调用——只描述任务、不点名技能,让 Claude 自己判断:
帮我整理一下 intro.md 的格式
无论哪种方式,Claude 都会读取你技能里的规则,在标题前加上空行、去掉行尾空白、把段落重新换行,并保存结果。
输入 /exit 关闭会话。
第 6 步 / 共 6 步 · 检查点与本节回顾
本节回顾
- 技能是写在
SKILL.md里的可复用指令包,只在被使用时才加载。 - 位置决定范围:
~/.claude/skills/是个人级,.claude/skills/是项目级;文件夹名就是/命令。 - 两种运行方式:Claude 根据
description自动调用,或你输入/<名称>。用disable-model-invocation: true设为仅手动触发。 - 自定义命令也是技能:
.claude/commands/*.md文件依旧有效,并以相同方式创建/命令。
常见问题
Claude Code 的技能存放在哪里?
一个技能就是一个包含 SKILL.md 文件的文件夹。把它放到 ~/.claude/skills/<名称>/SKILL.md,就能在你的所有项目中使用;放到 .claude/skills/<名称>/SKILL.md,则只在当前仓库生效(把该文件夹提交到版本库即可与团队共享)。文件夹名就是你要输入的命令,所以 .claude/skills/format-md/SKILL.md 的调用方式是 /format-md。
Claude 如何决定何时自动使用一个技能?
Claude 始终能看到每个技能的 description 字段。当你的请求与该描述匹配时,它会自动加载技能并遵循其中的指令——你无需点名。这正是为什么一个清晰、具体、且用上你平时会自然说出的词的 description 最为关键。如果想阻止 Claude 自动运行某个技能,就在 frontmatter 里加上 disable-model-invocation: true,这样就只有你才能用 /名称 来调用它。
技能和自定义斜杠命令有什么区别?
它们是同一套系统。位于 .claude/commands/deploy.md 的文件和位于 .claude/skills/deploy/SKILL.md 的技能,都会创建 /deploy 并以相同方式工作。技能额外提供了一些可选能力——存放辅助脚本等配套文件的文件夹、用来控制由谁调用的 frontmatter,以及在相关时自动加载。现有的 .claude/commands/ 文件依旧可用;如果一个技能和一个命令同名,技能优先。
如何列出或重新加载我的技能?
在会话中,问“现在有哪些可用的技能?”或运行 /skills 即可查看列表。如果你在会话进行中在磁盘上添加或修改了技能,Claude Code 通常会自动识别;如果没有,运行 /reload-skills 重新扫描技能和命令目录。
技能可以运行脚本吗?
可以。一个技能文件夹里可以打包任意语言的辅助脚本(例如放在 scripts/ 子文件夹中),并由你 SKILL.md 中的指令告诉 Claude 何时运行它们。这让技能能够完成纯靠提示词做不到的重活——比如生成一份 HTML 报告。