技能(Skills):按需调用的专长
- 定义什么是技能(Skill),以及它与把所有内容都塞进 CLAUDE.md 有何不同
- 读写一份 SKILL.md —— frontmatter 加指令 —— 并理解为什么 description 就是触发器
- 解释渐进式披露,以及为什么它能让大量技能扩展而不撑爆上下文
- 了解技能存放的三个位置:个人、项目,以及打包在插件中
- 在技能、斜杠命令、子代理和 MCP 之间做出正确选择
- 避开让技能无法触发的四个常见错误
技能(Skill) 打包了专长 —— 指令外加可选的脚本和资源 —— Claude 只在相关时才加载它。与其把所有内容都塞进 CLAUDE.md,不如给 Claude 一个能按需取用的能力库。
结构剖析
一个技能就是一个包含 SKILL.md 的文件夹:YAML frontmatter + 指令。
---
name: pdf-forms
description: Use when the user needs to fill, read, or generate PDF forms.
---
# PDF Forms
Steps and rules for working with PDF forms…
(optionally reference scripts/ or resources/ in this folder)
- description 就是触发器 —— Claude 读取它来决定何时激活该技能。把它写成「Use when…」,具体到足以在恰当的时机加载,而非其他时候。
渐进式披露(技能为何能扩展)
Claude 并不会一上来就加载每个技能的完整正文 —— 它看到的是轻量级的 name + description,只有当某个请求匹配时才拉入完整指令(并运行脚本)。这样即便装了很多技能,上下文也能保持精简。
它们存放在哪里
Guided walkthrough1 of 3
- ~/.claude/skills/<name>/SKILL.md —— 归你所有,在你所有项目中都可用。
- .claude/skills/<name>/SKILL.md —— 提交到 git,整个团队就都获得了这项能力。
- 把技能打包进插件以便团队分发。参见「插件与市场」。
AILmanac 自带 7 个现成的技能包 —— 复制一个进来试试。
实战示例:一个能自我触发的技能
创建 ~/.claude/skills/release-notes/SKILL.md:
---
name: release-notes
description: Use when the user asks to write release notes or a changelog from git history.
---
# Release Notes
1. Run `git log <last-tag>..HEAD --oneline` to get the commits.
2. Group them into Features / Fixes / Breaking changes.
3. Write user-facing notes — what changed for *users*, not commit messages.
4. Output Markdown ready to paste into a GitHub release.
之后你输入下面这条提示。Claude 的上下文里从未有过这些步骤 —— 但请求匹配了 description,于是它拉入完整的 SKILL.md、运行 git log,并生成分组的发布说明。你没有按名字调用任何东西;是 description 完成了路由。在同一文件夹里加一个 scripts/ 文件,技能就能在第 1 步中运行它。
按意图触发技能 —— 无需点名
Draft release notes since v1.4.
技能 vs 命令 vs 子代理 vs MCP
| 工具 | 它是什么 | 由你还是 Claude 触发 |
|---|---|---|
| 斜杠命令 | 一段保存好的提示 | 你来调用它 |
| 技能 | 按需的专长 + 脚本 | Claude 在相关时加载它 |
| 子代理 | 一个拥有自己上下文的受委派代理 | Claude 委派 |
| MCP | 与外部工具/数据的连接 | 提供可调用的工具 |
- 你想按需主动触发它 → 斜杠命令。
- Claude 应当知道某套流程并在相关时应用它 → 技能。
- 工作应当在一个独立的上下文中进行 → 子代理。
- 你需要触达一个外部系统 → MCP。
常见错误
- 一个不触发的 description。「Helps with PDFs」太含糊;「Use when the user needs to fill, read, or generate PDF forms」则明确告诉 Claude 何时加载它。description 就是整个激活机制 —— 为匹配而写,而不是为人类而写。
- 改而把所有内容塞进 CLAUDE.md。CLAUDE.md 每个会话都会加载,并且始终消耗上下文;而技能只在相关时加载。把因情境而异的流程移进技能,让 CLAUDE.md 保留那些始终为真的项目规则。
- 一个庞大的技能。许多个小而描述精准的技能比一个包揽一切的更能正确路由 —— 渐进式披露只有在每个 description 都很具体时才有帮助。
- 忘了它是可共享的。提交到 git 的 .claude/skills/ 中的项目技能会让整个团队获得该能力;而 ~/.claude/skills/ 中的个人技能只归你所有。
回顾术语
1 / 6