第 5 章:进阶配置

Skills

将重复工作流编码为可复用模板

1. Skills 是什么

1.1 定义

Skill(技能)是 Claude Code 的扩展机制,它将可重复的工作流编码为可复用的指令模板。每个 Skill 是一个文件夹,核心文件是 SKILL.md——一个包含 YAML frontmatter 和 Markdown 指令的文件。当 Claude 检测到任务与 Skill 的描述匹配时,它会自动加载该 Skill 的完整指令,从而按照预设的流程执行任务。

Anthropic 官方将其比喻为"自定义入职材料"(custom onboarding materials)——你写一次,Claude 在每个会话中都知道如何执行特定任务,无需重复解释。

1.2 与 MCP 的区别

Skills 和 MCP(Model Context Protocol)是 Claude Code 的两套互补扩展机制,但定位截然不同:

维度SkillsMCP
本质指令和流程模板外部工具和数据接口
作用教 Claude 如何做给 Claude 用什么做
内容Markdown 指令、脚本、参考文档API 端点、数据库连接、文件系统
类比菜谱(告诉厨师步骤)厨具(提供烹饪工具)
加载方式按需动态加载会话开始时连接
适用场景可重复工作流、编码规范、审查清单外部服务集成、数据访问

两者可以协同工作:MCP 提供工具和数据访问能力,Skills 教 Claude 最佳的使用方法和流程。例如,一个 MCP Server 连接了公司的 JIRA 系统,而 Skill 则定义了"如何按照团队规范创建和分配任务"的完整流程。

1.3 适用场景

Skills 在以下场景中特别有效:

  • 可重复工作流:代码审查、部署流程、周报生成、数据清洗
  • 编码规范:团队代码风格、API 设计约定、错误处理模式
  • 文档生成:按照品牌指南创建 Word/PPT/PDF、技术文档
  • 领域知识:特定框架的使用模式、遗留系统的上下文
  • 多步骤流程:需要按特定顺序执行的复杂任务

Skills 不适合一次性任务或简单到 Claude 可以直接完成的任务——过度使用反而会增加不必要的上下文开销。


2. Skills 文件格式详解

2.1 目录结构

每个 Skill 是一个独立的目录,遵循以下结构:

my-skill/
├── SKILL.md              # 必需:主指令文件
├── references/           # 可选:参考文档(按需加载)
│   ├── api-guide.md
│   └── examples.md
├── scripts/              # 可选:可执行脚本
│   └── validate.py
├── assets/               # 可选:模板、字体、图片
│   └── template.html
└── evals/                # 建议:评估测试
    └── evals.json

关键规则

  • 文件夹名使用 kebab-case(短横线连接的小写字母)
  • SKILL.md 文件名必须严格匹配大小写
  • Skill 目录内不要放 README.md,所有指令集中在 SKILL.md

2.2 SKILL.md 结构

SKILL.md 由两部分组成:YAML frontmatter(配置元数据)和 Markdown body(执行指令)。

---
name: code-review                    # Skill 名称,成为 /slash-command
description: 按照团队规范审查代码。当用户请求代码审查、PR review、检查代码质量时使用。
when_to_use: 触发短语:review, 审查, 检查代码, code review
disable-model-invocation: false      # 是否禁止 Claude 自动调用
user-invocable: true                 # 是否对用户可见(/菜单中显示)
allowed-tools: Read Grep Bash(git *) # 预授权工具
model: sonnet                        # 激活时使用的模型
context: fork                        # 在子代理中运行
agent: Explore                       # 子代理类型
---

# 代码审查 Skill

## 审查清单

1. **功能正确性**:代码是否实现了预期功能
2. **代码风格**:是否符合团队编码规范
3. **安全性**:是否存在注入、XSS、敏感信息泄露等风险
4. **性能**:是否存在明显的性能问题
5. **可测试性**:是否易于测试,测试覆盖率如何

## 输出格式

对每个审查项给出:
- 状态:通过 / 建议改进 / 必须修复
- 具体问题描述
- 改进建议(含代码示例)

2.3 YAML Frontmatter 完整字段

字段必需说明
name显示名称,省略则使用目录名。仅限小写字母、数字和连字符,最多 64 字符
description推荐Skill 的功能描述和触发时机。Claude 用它判断是否加载该 Skill
when_to_use补充触发条件,追加到 description 后,共享 1536 字符上限
argument-hint自动补全时显示的参数提示,如 [issue-number]
arguments命名位置参数,用于 $name 替换
disable-model-invocation设为 true 则仅用户可手动调用(适合部署等副作用操作)
user-invocable设为 false 则对用户隐藏,仅 Claude 自动调用(适合背景知识)
allowed-toolsSkill 激活时 Claude 可无需确认使用的工具
modelSkill 激活时使用的模型,如 sonnetopus
effort努力程度:lowmediumhighxhighmax
context设为 fork 则在隔离的子代理上下文中运行
agent配合 context: fork 使用的子代理类型
pathsGlob 模式,限制 Skill 的自动激活范围
shell内联 shell 命令使用的 shell:bash(默认)或 powershell

2.4 字符串替换

Skill 支持动态值替换:

变量说明
$ARGUMENTS调用时传入的所有参数
$ARGUMENTS[N] / $N按 0 基索引访问第 N 个参数
$namefrontmatter 中 arguments 声明的命名参数
${CLAUDE_SESSION_ID}当前会话 ID
${CLAUDE_SKILL_DIR}Skill 文件所在目录

示例:

---
name: fix-issue
description: 修复指定 GitHub Issue
disable-model-invocation: true
---

修复 GitHub Issue #$ARGUMENTS:
1. 读取 Issue 描述
2. 理解需求
3. 实现修复
4. 编写测试
5. 创建提交

调用 /fix-issue 123 时,$ARGUMENTS 会被替换为 123

2.5 动态上下文注入

使用 !`command` 语法可以在 Skill 内容发送给 Claude 之前执行 shell 命令,将实时数据注入提示:

---
name: pr-summary
description: 总结当前 Pull Request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

## PR 上下文
- PR diff: !`gh pr diff`
- PR 评论: !`gh pr view --comments`
- 变更文件: !`gh pr diff --name-only`

## 任务
总结这个 Pull Request 的变更内容、潜在风险和测试覆盖缺口。

多行命令使用 ```! 代码块:

## 环境信息
```!
node --version
npm --version
git status --short
```

3. 创建 Skills:从零开始的完整流程

3.1 第一步:确定工作流

在编写 Skill 之前,先问自己三个问题:

  1. 这个任务是否重复出现? 如果只做一次,不需要 Skill
  2. Claude 是否能直接完成? 如果任务简单到 Claude 一次就能做对,不需要 Skill
  3. 是否有特定的团队规范? 如果涉及编码标准、审查流程等组织特定知识,非常适合 Skill

3.2 第二步:选择存储位置

Skill 的存储位置决定了其作用域:

位置路径适用范围
企业级托管设置组织内所有用户
个人级~/.claude/skills/<name>/SKILL.md你的所有项目
项目级.claude/skills/<name>/SKILL.md当前项目
插件级通过插件市场安装插件启用处

优先级规则:企业 > 个人 > 项目 > 插件。同名 Skill 时,高优先级覆盖低优先级。

3.3 第三步:编写 SKILL.md

以下是一个完整的代码审查 Skill 示例:

---
name: code-review
description: 按照团队规范进行代码审查。当用户请求 review、代码审查、检查 PR、分析代码质量时自动激活。
when_to_use: 触发词:review, 审查, PR, code review, 检查代码
---

# 代码审查指南

## 审查流程

1. **理解变更范围**
   - 读取变更文件的完整内容
   - 理解变更的业务背景和目的
   - 检查相关测试文件是否同步更新

2. **逐文件审查**
   - 检查功能正确性
   - 检查代码风格和命名规范
   - 检查错误处理完整性
   - 检查安全性问题
   - 检查性能影响

3. **输出审查报告**
   - 按严重程度分类问题
   - 提供具体的改进建议(含代码示例)
   - 标记必须修复 vs 建议改进

## 审查标准

### 必须修复(Blocker)
- 安全漏洞(SQL 注入、XSS、敏感信息硬编码)
- 明显的功能缺陷
- 破坏现有测试
- 类型错误(TypeScript 项目)

### 建议改进(Suggestion)
- 命名不够清晰
- 缺少注释或文档
- 可优化的算法复杂度
- 可提取的重复代码

## 输出格式

审查摘要

  • 文件数:N
  • 问题数:N(Blocker: N, Suggestion: N)
  • 总体评价:通过 / 需修改

详细审查

文件:path/to/file.ts

问题 1 Blocker

  • 描述:...
  • 建议:代码示例

问题 2 Suggestion

  • 描述:...
  • 建议:...

## 常见陷阱

- 不要只关注风格问题而忽略功能正确性
- 对于重构类 PR,重点关注是否保持了行为一致性
- 检查边界条件和错误路径是否被覆盖

3.4 第四步:测试与迭代

创建 Skill 后,需要验证两个维度:

触发测试

  • 明显的请求应触发:"帮我审查这个 PR"
  • 同义请求应触发:"检查一下这段代码"
  • 无关请求不应触发:"今天天气怎么样"

执行测试

  • 运行完整工作流,检查输出格式是否正确
  • 验证工具调用顺序是否符合预期
  • 检查边界情况的处理

Skills 2.0 引入了内置的 eval 框架,可以系统地测试 Skill:

// evals/evals.json
{
  "evals": [
    {
      "name": "basic-trigger",
      "prompt": "帮我 review 这个文件",
      "expected": "skill should be invoked"
    },
    {
      "name": "security-check",
      "prompt": "检查这段代码是否有安全问题",
      "expected": "reports security issues if present"
    }
  ]
}

3.5 使用 skill-creator 辅助创建

Anthropic 提供了一个 meta-Skill——skill-creator,它可以交互式地帮助你构建 Skill:

# 在 Claude Code 中
"使用 skill-creator 帮我创建一个数据库迁移 Skill"

它会通过问答引导你定义工作流、触发条件、脚本需求等,然后生成完整的 Skill 目录结构。


4. 内置 Skills:Anthropic 预置技能

4.1 文档处理四件套

Anthropic 官方维护了四个文档处理 Skill,驱动 Claude 的文件创建能力:

Skill格式核心能力
xlsxExcel创建含公式、图表、格式化的电子表格;数据分析
pptxPowerPoint创建专业演示文稿;支持图表、动画、主题
docxWord创建和编辑文档;表格、页眉页脚、目录
pdfPDF生成 PDF;表单填写;OCR;合并/分割

这些 Skill 是 source-available(非开源)的,但代码公开在 github.com/anthropics/skills 中作为复杂 Skill 的参考实现。

安装方式

# Claude Code
/plugin marketplace add anthropics/skills
/plugin install document-skills@anthropic-agent-skills

# 或通过 skills.sh 安装
npx skills add https://github.com/anthropics/skills --skill xlsx

使用示例

"创建一个 Q3 销售数据的 Excel 文件,包含收入趋势图"
"把这份数据转换成 PowerPoint 演示文稿"
"从这个 PDF 中提取表格数据并生成 Excel"

4.2 其他官方 Skills

Anthropic 在 github.com/anthropics/skills 开源了 17 个 Skill,分为四大类:

创意与设计

  • algorithmic-art:p5.js 生成艺术
  • canvas-design:博物馆级视觉设计
  • slack-gif-creator:Slack 优化 GIF 动画
  • theme-factory:10 种专业主题配色

前端开发

  • frontend-design:生产级前端界面(避免"AI 感"设计)
  • web-artifacts-builder:React + Tailwind 交互组件
  • brand-guidelines:Anthropic 品牌识别应用

技术开发

  • claude-api:Claude API/SDK 开发指南
  • mcp-builder:MCP Server 构建
  • skill-creator:Skill 创建与测试
  • webapp-testing:Playwright 网页自动测试

企业沟通

  • doc-coauthoring:协作式文档撰写
  • internal-comms:内部沟通模板

4.3 社区热门 Skills

Skill作者功能周安装量
find-skillsVercel发现其他 Skill~787K
web-design-guidelinesVercel100+ 可访问性/UX 规则审查~133K
react-best-practicesVercel57 条 React/Next.js 性能规则-
superpowersobra多代理开发工作流~40K
remotion-best-practicesRemotion程序化视频开发~117K
firecrawlFirecrawl网页爬取和数据提取-

5. 共享与分发

5.1 团队内共享

通过 Git 共享(推荐)

将 Skill 放在项目的 .claude/skills/ 目录中,通过 Git 与团队共享:

# 项目结构
my-project/
├── .claude/
   └── skills/
       ├── code-review/
   └── SKILL.md
       └── deploy/
           └── SKILL.md
├── src/
└── package.json

通过插件市场共享

将 Skill 打包为 Claude Code 插件,发布到插件市场:

my-plugin/
├── .claude-plugin/
│   └── plugin.json       # 插件元数据
└── skills/
    ├── code-review/
    │   └── SKILL.md
    └── deploy/
        └── SKILL.md

plugin.json 示例:

{
  "name": "my-team-skills",
  "description": "我们团队的自定义 Skills 集合",
  "version": "1.0.0",
  "author": { "name": "Team Name" }
}

安装后,Skill 以命名空间形式调用:/my-team-skills:code-review

5.2 版本管理

Skill 的版本策略:

  • 显式版本:在 plugin.json 中设置 version 字段,只有版本号更新时用户才会收到更新
  • 隐式版本:省略 version 字段,Git 提交 SHA 作为版本标识,每次提交都视为新版本
  • Skill 级别版本:自定义 Skill 可使用时间戳作为版本号

5.3 社区 Skills 生态

Skills 遵循 Agent Skills 开放标准,该标准已被 30+ 平台采纳,包括:

  • Claude Code / Claude.ai
  • GitHub Copilot / VS Code
  • Cursor
  • Gemini CLI
  • OpenAI Codex CLI
  • Roo Code、Goose、OpenHands 等

社区 Skill 目录:

  • skills.sh:Vercel Labs 维护的开放目录
  • skillsdirectory.com:带安全扫描的目录
  • GitHub 上的 anthropics/skills:官方示例和文档 Skill

安全提醒:Skill 可以包含可执行脚本,安装第三方 Skill 前务必审查 SKILL.mdscripts/ 目录的内容。


6. 实际案例

6.1 代码审查 Skill

---
name: pr-review
description: 审查 Pull Request,检查代码质量、安全性和团队规范符合度。当用户请求 review PR、审查代码变更、检查 pull request 时激活。
context: fork
agent: Explore
allowed-tools: Read Grep Bash(git *)
---

# PR 审查流程

## 前置检查
1. 获取 PR diff:`git diff main...HEAD`
2. 获取提交历史:`git log --oneline main..HEAD`
3. 检查 CI 状态

## 审查维度

### 1. 功能正确性
- 变更是否实现了 PR 描述中的目标
- 边界条件是否被处理
- 是否有回归风险

### 2. 代码质量
- 是否符合项目编码规范
- 命名是否清晰、一致
- 函数长度是否合理(建议 < 50 行)
- 复杂度是否可控

### 3. 安全性
- 用户输入是否被正确校验
- 是否存在 SQL 注入、XSS 风险
- 敏感信息是否被硬编码
- 权限检查是否完整

### 4. 测试
- 新增代码是否有对应测试
- 测试是否覆盖了正常路径和异常路径
- 现有测试是否仍然通过

## 输出格式

对每个审查维度给出评分(通过/警告/阻塞),并提供:
- 具体问题描述
- 建议的修复方案(含代码示例)
- 优先级(P0-必须修复 / P1-建议修复 / P2-可选优化)

6.2 周报生成 Skill

---
name: weekly-report
description: 从 Git 提交历史生成本周工作周报。当用户请求生成周报、weekly report、本周总结时激活。
disable-model-invocation: true
allowed-tools: Bash(git *)
---

# 周报生成器

## 数据收集

执行以下命令收集本周工作数据:

```bash
# 本周提交(按作者分组)
git log --since="1 week ago" --author="$(git config user.name)" --pretty=format:"%h %s" --no-merges

# 变更文件统计
git diff --stat HEAD@"{1 week ago}"..HEAD

# 参与的 PR
gh pr list --search "updated:>$(date -v-7d +%Y-%m-%d) author:@me" --state all

报告结构

# 周报 $(date +%Y-%m-%d)

## 本周完成
- [项目/模块] 具体工作内容(关联提交 hash)

## 进行中
- [项目/模块] 当前进度和下一步计划

## 遇到的问题
- 问题描述及解决方案(如有)

## 下周计划
- 优先级排序的工作项

生成规则

  1. 按项目/模块分组,不要按时间顺序罗列
  2. 每个工作项标注关联的 commit hash 或 PR 链接
  3. 突出关键成果,省略 trivial 的改动
  4. 问题部分要诚实,不要回避遇到的困难

### 6.3 数据处理 Skill

```yaml
---
name: data-cleaning
description: 清洗和标准化数据文件(CSV、JSON、Excel)。当用户请求清洗数据、data cleaning、处理脏数据、标准化格式时激活。
allowed-tools: Read Write Bash(python3 *)
---

# 数据清洗工作流

## 第一步:数据探查

1. 读取数据文件,分析结构
2. 生成数据质量报告:
   - 总行数、列数
   - 每列的数据类型
   - 缺失值比例
   - 重复行数量
   - 异常值统计

## 第二步:清洗规则

根据数据探查结果,执行以下清洗操作:

1. **处理缺失值**
   - 数值列:用中位数填充或删除
   - 类别列:用众数填充或标记为"未知"
   - 时间列:用前后值插值

2. **处理重复值**
   - 删除完全重复的行
   - 对业务关键列检查逻辑重复

3. **标准化格式**
   - 日期格式统一为 ISO 8601
   - 文本去除首尾空格,统一大小写规则
   - 数值单位统一

4. **异常值处理**
   - 使用 IQR 方法识别异常值
   - 根据业务规则决定删除或修正

## 第三步:输出

1. 生成清洗后的数据文件
2. 生成清洗报告,记录:
   - 原始数据状态
   - 应用的清洗规则
   - 清洗前后的统计对比
   - 被修改/删除的数据明细

7. 最佳实践

7.1 何时使用 Skills vs 直接对话

场景建议方式理由
一次性任务直接对话无需创建 Skill 的开销
简单任务(Claude 一次能做对)直接对话避免不必要的上下文加载
团队编码规范CLAUDE.md + SkillCLAUDE.md 始终加载,Skill 按需加载
可重复工作流(>3 次/周)Skill一次编写,持续受益
需要特定步骤顺序的流程Skill确保执行一致性
多步骤复杂任务Skill + subagent隔离上下文,防止漂移

7.2 Skill 设计原则

1. 渐进式披露(Progressive Disclosure)

Skill 采用三级加载机制,设计时应充分利用:

  • Level 1 - YAML frontmatter(始终加载):只放触发判断所需的最少信息
  • Level 2 - SKILL.md body(触发时加载):核心指令,控制在 500 行以内
  • Level 3 - 链接文件(按需加载):详细参考、示例、长文档

2. description 是触发器,不是摘要

description 字段的唯一目的是让 Claude 判断何时加载该 Skill。它必须包含:

  • 明确的功能描述
  • 具体的触发短语和场景

好的 description:

description: 分析 Figma 设计文件并生成开发者交接文档。当用户上传 .fig 文件、请求"design specs"、"component documentation"或"design-to-code handoff"时使用。

差的 description:

description: 帮助处理项目相关任务。  # 太模糊,无触发词

3. 聚焦"推 Claude 出舒适区"的信息

Claude 已经知道如何写代码。Skill 应该专注于:

  • 你团队的特定规范(不是通用最佳实践)
  • 常见陷阱和错误模式(gotchas)
  • 偏好选择(如"我们不用 lodash,用原生方法")

4. 使用文件系统作为上下文工程

将详细参考、API 签名、模板拆分到单独文件中,Skill 主体保持精简:

<!-- SKILL.md -->
## 额外资源

- 完整 API 细节,参见 [reference.md](reference.md)
- 使用示例,参见 [examples.md](examples.md)
- 验证脚本,参见 [scripts/validate.py](scripts/validate.py)

5. 不要过度约束 Claude

Skill 需要在多种场景下复用,过于具体的指令会破坏边缘情况的处理:

  • 给出意图和约束,而不是每一步的精确操作
  • 像给人类同事写文档一样写 Skill

7.3 常见陷阱

description 预算问题

所有 Skill 的 description 共享约 2% 的上下文窗口(约 16,000 字符)。安装过多 Skill 会导致 description 被截断,Claude 失去触发关键词。建议每个项目保持 5-8 个自动触发 Skill,其余设为 disable-model-invocation: true

YAML 多行 description

某些格式化工具(如 Prettier)会将单行 description 折成多行,Claude Code 的 YAML 解析器无法正确处理,导致 Skill 静默消失。保持 description 在单行内。

Skill 与 CLAUDE.md 的边界

  • 通用知识(框架 API、项目架构)→ 放入 CLAUDE.md
  • 可重复工作流(审查流程、部署步骤)→ 放入 Skill
  • Vercel 的实验表明:对于通用知识,直接嵌入 CLAUDE.md 的 8KB 压缩文档索引比 Skill 的按需加载效果更好(100% vs 79% 通过率)

Eval 测试必须真实

测试 prompt 必须是你在实际工作中会说的那种话——包含错别字、缩写、不完整的句子。用 polished 的测试 prompt 会导致 Skill 在实际使用中表现不佳。


8. 参考来源