Claude Code——自定义 Skill 实战
作者:徐梦旗,发布于:2026年04月05日 11:13,字数:833,预计阅读:3分钟
1. Claude Code 为什么引入 Skill?
举个例子,如为了测试大模型对不同问题的回复质量,我们需要创建一些不同分类的问题语料。我们可以在 Claude Code 命令行输入:
> 帮我生成 30 个数学问题;问题需要面向儿童;结果输出到 txt 文件中,每个问题占一行;其他的要求...
后面再遇到类似的任务时,我们仍可以在 Claude Code 命令行输入:
> 帮我生成 10 个日常问题;问题需要面向儿童;结果输出到 txt 文件中,每个问题占一行;其他的要求...
每次要处理同类型的任务时,都需要输入重复的提示词。为了方便处理,我们把上面的一大段提示词放入到一个 SKILL.md 文件中,并把这个文件放到 ~/.claude/skills/generate-corpus 文件夹下。
---
name: generate-corpus
description: 根据要求生成问题语料
---
生成问题语料;
问题需要面向儿童;
结果输出到 txt 文件中,每个问题占一行;
其他的要求...
当再遇到同类型的任务时,我们只需要执行定义好的 Skill 即可:
> /generate-corpus 30条数学题
> 生成30条数学题语料
回到 Claude Code 为什么引入 Skill?本质上是为了复用提示词、简化重复操作、给 Agent 提供更清晰的上下文。
2. 如何定义一个 Skill?
每个 Skill 都是由一个文件夹组成,文件夹中可以包含以下文件:
skill-name/
├── SKILL.md # 必须:元数据 + 指令
├── scripts/ # 可选:可执行的代码
├── references/ # 可选:文档
└── assets/ # 可选:静态资源
SKILL.md 文件需要包含 YAML 头部信息和 Markdown 内容。
<!-- YAML 头部信息 -->
---
name: xxx
description: xxx
---
<!-- Markdown 内容 -->
xxx
2.1. SKILL.md 头部信息
SKILL.md 的头部信息如下:
| 字段 | 描述 |
|---|---|
| name | Skill 的名称。如果省略,使用目录名称。 |
| description | Skill 的功能以及何时使用它。Claude Code 根据该字段决定何时使用该 Skill。 |
| disable-model-invocation | 设置为 true 时,Claude Code 不会自动加载该 Skill,只能使用 /skill-name 来手动触发。默认为 false。 |
| user-invocable | 设置为 false 时,Claude Code 命令行会隐藏该 Skill。用于用户不应直接调用的背景知识。默认值为 true。 |
| allowed-tools | 使用该 Skill 时,Claude Code 可以使用而无需请求权限的工具。 |
需要注意的是,Claude Code 会根据 Skill 的 description 来决定是否调用一个 Skill,当需要调用 Skill 时才会加载完整的 Skill 内容,也叫做渐进式披露提示词。
2.2. SKILL.md 内容
SKILL.md 的 Markdown 内容用来描述 Skill 指令,没有格式约束,但要写清楚如何帮助 Agent 执行高效执行任务。推荐包括以下几个部分:
- 分步的说明。
- 输入和输出的示例。
- 边界用例。
如果内容过多可以考虑将 SKILL.md 内容拆分为引用文件。
2.3. Skill 放置位置
| 位置 | 路径 | 作用域 |
|---|---|---|
| 个人 | ~/.claude/skills/your-custom-skill |
所有项目 |
| 项目 | .claude/skills/your-custom-skill |
当前项目 |
3. 推荐 Skill
- superpowers/writing-plans
- superpowers/executing-plans
- superpowers/writing-skills
