先区分三个概念
| 机制 | 解决什么问题 | 典型例子 |
|---|---|---|
| CLAUDE.md | 每次会话都应知道的项目事实 | 构建命令、目录约定、代码风格 |
| Skill | 在特定任务中按需加载的知识或流程 | 发布检查、PR 审核、生成特定格式文档 |
| MCP | 连接外部服务和可执行工具 | 查询数据库、读 Notion、发 Slack |
如果一段说明必须始终生效,放 CLAUDE.md;如果它是一套会重复使用的任务流程,做成 Skill; 如果需要实时数据或外部动作,优先考虑 MCP。一个成熟工作流也可以三者组合。
Skill 的标准目录结构
my-company-pr-review/
├── SKILL.md # 必需:触发描述与主流程
├── references/ # 可选:规范、API 文档、长示例
│ └── review-rules.md
├── scripts/ # 可选:确定性、可重复执行的脚本
│ └── collect-diff.sh
└── assets/ # 可选:输出要复用的模板、图标、字体
└── report-template.md官方写作指南把加载分成三层:名称与描述常驻;Skill 触发后加载 SKILL.md 正文;其他资源按需读取或执行。 这就是“渐进式披露”,它让主文件保持短小,也减少无关上下文。
从零写一个可用的 SKILL.md
---
name: my-company-pr-review
description: Review a pull request against our TypeScript and API conventions. Use when the user asks to review a PR, audit a diff, or check code before merge.
---
# Company PR review
1. Read [references/review-rules.md](references/review-rules.md).
2. Inspect the requested diff. Do not modify files unless the user asks for fixes.
3. Report only actionable findings with file and line references.
## Output
- Verdict: pass / changes requested / blocked
- Findings ordered by severity
- Missing tests
- Residual risksname 怎么写
使用短、稳定、可读的标识,并让目录名与技能名保持一致。不要把日期、模型版本或一次性项目编号写进名称, 否则内容很快过期。
description 怎么写
description 同时回答两件事:这个 Skill 做什么,以及什么任务应该用它。 “A skill for code review” 太泛;上面示例明确了对象、规范和触发场景,更容易自动调用,也更少误触发。
正文怎么写
- 用祈使句写动作,先给判断规则,再给输出格式。
- 开放性任务给原则;危险或脆弱操作给精确步骤与校验。
- 避免复制 Claude 已经知道的通用知识,把篇幅留给你的专有流程。
- 主文件接近 500 行时继续拆分,并明确说明何时读取哪个参考文件。
在 Claude Code 中安装与共享
| 作用域 | 路径 | 适用对象 |
|---|---|---|
| 个人 | ~/.claude/skills/<name>/SKILL.md | 你自己的所有项目 |
| 项目 | .claude/skills/<name>/SKILL.md | 随仓库共享给团队 |
| 插件 | <plugin>/skills/<name>/SKILL.md | 版本化分发与复用 |
当前 Claude Code 会监听已存在的技能目录,大多数编辑可在会话内生效;如果启动时顶层技能目录根本不存在, 新建目录后可能需要重启一次。可以用 /skill-name 直接调用,也可以让 Claude 根据 description 自动判断。
测试:别只看“有没有触发”
为同一 Skill 准备至少三组用例:
- 应触发:真实用户会怎么描述目标。
- 不应触发:相邻但不属于该流程的任务。
- 边界情况:缺文件、空 diff、脚本失败、权限不足。
质量评估要比较启用 Skill 前后的可验证结果,例如遗漏问题数、格式合格率、脚本成功率,而不是只看回答是否更长。 Anthropic 的 skill-creator 也提供了用固定 prompt、期望结果和断言组织 eval 的思路。
安全检查
- 安装第三方 Skill 前,阅读全部 SKILL.md 与 scripts;不要只看名称和介绍。
- 重点检查网络请求、凭证读取、递归删除、上传文件和修改权限的命令。
allowed-tools是预授权,不是完整沙箱;真正禁止某类工具要配合权限 deny 规则。- 项目级 Skill 随代码仓库分发,应像构建脚本一样接受代码审查。
- 脚本输出与网络内容都可能携带提示注入,不要让未验证文本直接决定高风险动作。
常见问题
Claude Skill 和 CLAUDE.md 有什么区别?
CLAUDE.md 适合每次会话都要知道的项目事实与约定;Skill 适合按需触发的知识或多步流程,正文只在触发后加载。
项目 Skill 放在哪里?
Claude Code 项目级路径是 .claude/skills/<skill-name>/SKILL.md;个人级路径是 ~/.claude/skills/<skill-name>/SKILL.md。
为什么自定义 Skill 没有自动触发?
先检查目录与 SKILL.md 文件名,再把 description 写清楚:既说明它做什么,也说明什么时候使用;随后用直接调用和自然语言调用分别测试。