SKILL.md 的结构
一个 Skill 文件就是一个普通的 Markdown 文件,但它的结构决定了 Claude 能否准确理解并执行你的意图。本课带你解剖一个完整的 Skill 文件。
文件名即命令名
将 Markdown 文件放入 .claude/commands/ 目录后,文件名(不含 .md 后缀)就成为对应的斜杠命令。例如 review.md 对应 /review,deploy-env.md 对应 /deploy-env。文件内容会作为系统消息注入 Claude 的上下文。
- 文件名用小写字母和连字符,避免空格
- 命令名应简短且能表达动作意图
- 同名文件会覆盖上级目录中的同名 Skill
Skill 文件的核心结构
一个规范的 Skill 文件包含三个关键部分:描述(description)说明该 Skill 做什么;使用时机(when-to-use)帮助 Claude 判断何时触发;步骤与说明(steps/instructions)是执行的具体指令。
示例 Prompt
# /review — 代码审查 Skill
## 描述
对当前改动执行全面的代码审查,输出结构化的审查报告。
## 使用时机
当用户请求代码审查、想在提交前检查代码质量,或需要找出潜在 bug 时使用。
## 步骤
1. 读取用户指定的文件或最近的 git diff
2. 检查以下维度:正确性、可读性、性能、安全性
3. 对每个问题给出:问题描述、严重程度(高/中/低)、改进建议
4. 最后给出总体评分和优先改进项
各部分的作用
- 描述:让用户和 Claude 快速理解 Skill 的用途
- 使用时机:防止 Claude 在不合适的场景下调用此 Skill
- 步骤:给 Claude 明确的执行路径,减少歧义
🧠 自测:将 review-code.md 放入 .claude/commands/ 后,对应的斜杠命令是什么?
- /review-code.md
- /review-code ✓
- /commands/review-code
- /claude/review-code
文件名去掉 .md 后缀即为命令名,路径不会出现在命令中。
编写说明与示例
好的 Skill 说明能让 Claude 精准执行你的意图。模糊的指令会导致不一致的输出,而清晰的示例则能大幅提升 Skill 的质量。
写具体、可验证的指令
避免使用"好好检查代码"这样模糊的表述。应当明确说明:检查什么、按什么标准、输出什么格式。Claude 会严格按照你的指令行事,模糊的指令带来不可预期的结果。
- 指定输出格式(表格、列表、Markdown 章节)
- 明确范围(哪些文件、哪些维度)
- 说明优先级(先检查安全,再看性能)
使用 $ARGUMENTS 接收用户输入
在 Skill 文件中使用 $ARGUMENTS 占位符,Claude 会将用户在斜杠命令后输入的内容替换到此处。例如用户输入 /review src/api.py,$ARGUMENTS 就变成 src/api.py。
示例 Prompt
# /review — Python 代码审查
## 描述
审查指定的 Python 文件,重点关注 PEP 8 规范、类型注解和异常处理。
## 指令
审查以下文件:$ARGUMENTS
请按顺序执行:
1. 检查 PEP 8 命名规范(变量、函数、类名)
2. 检查是否缺少类型注解(函数参数和返回值)
3. 检查异常处理:是否有裸 except、是否记录了错误日志
4. 输出格式:每个问题单独一行,格式为 [严重度] 行号: 问题描述
5. 最后汇总:发现 N 个问题,其中高危 X 个
## 示例输出
[高] 第 23 行: 裸 except 会捕获所有异常包括 KeyboardInterrupt
[中] 第 45 行: 函数 process_data 缺少返回类型注解
[低] 第 12 行: 变量名 Temp 应改为小写 temp
在文件中内嵌示例
在 Skill 文件中提供示例输入和期望输出,可以让 Claude 更好地校准自己的行为。示例充当了"少样本学习"的作用,特别适合输出格式要求严格的场景。
🧠 自测:用户输入 /review src/utils.py 时,Skill 文件中的 $ARGUMENTS 会被替换成什么?
- /review
- src/utils.py ✓
- $ARGUMENTS
- review src/utils.py
$ARGUMENTS 会被替换为斜杠命令名之后的所有内容,即用户传入的参数。
打包资源与脚本
有些 Skill 需要辅助脚本、模板文件或参考文档才能正常工作。本课介绍如何将这些资源与 Skill 文件一起组织,以及何时应该保持 Skill 精简。
在 Skill 文件中引用外部资源
你可以在 .claude/commands/ 目录下创建子文件夹,将辅助文件放在同一位置。在 Skill 的指令中,告诉 Claude 读取这些文件的路径。Claude 具备文件读取能力,可以在执行 Skill 时自动加载相关内容。
- .claude/commands/review.md — Skill 主文件
- .claude/commands/review-checklist.md — 审查清单
- .claude/commands/templates/review-report.md — 报告模板
何时包含辅助文件
当 Skill 需要执行特定格式的输出、引用固定的检查项列表,或需要运行一段脚本时,打包辅助文件是合理的。但不应把所有相关内容都打包进来——过多的文件会增加 Claude 读取的上下文,降低响应速度。
- 适合打包:固定的检查清单、报告模板、代码片段库
- 不适合打包:整个代码库的文档、频繁变动的配置文件
- 原则:Skill 能独立运行,辅助文件只是锦上添花
何时保持 Skill 精简
如果 Skill 的逻辑可以用一页 Markdown 说清楚,就不需要辅助文件。精简的 Skill 加载更快,更容易维护,也更容易与团队分享。当你发现需要用很多文件才能解释清楚一件事,考虑是否应该将其拆分为多个更小的 Skill。
🧠 自测:以下哪种情况最适合为 Skill 打包辅助文件?
- Skill 只需要生成一段简短文字
- Skill 需要引用一份固定的 50 项检查清单 ✓
- Skill 需要读取整个项目的所有源文件
- Skill 已经很少使用
固定的检查清单是典型的打包场景,它内容稳定、会被反复引用,放在独立文件中便于维护。