目录

  1. 什么是 Skills?
  2. Skills vs 传统 Prompt vs Tools:核心区别
  3. Skills 的核心结构:SKILL.md 详解
  4. SKILL.md Frontmatter 字段完全参考
  5. 进阶目录结构:scripts / references / assets
  6. 底层实现原理:元工具架构(Meta-Tool Architecture)
  7. 渐进式披露(Progressive Disclosure)机制
  8. Skills 的应用场景
  9. 常用设计模式(Patterns)
  10. 完整实战示例:从需求到运行
  11. 最佳实践与常见错误
  12. Skills 与 MCP / Tools / System Prompt 的生态关系

一、什么是 Skills?

一句话定义:Skills 是封装了某类事情应该怎么专业做的可复用能力模块,以 Markdown 文件夹形式存在,AI Agent 按需加载,像调用函数一样反复使用。

在 AI Agent 时代,通用大语言模型(LLM)虽然能生成流畅的文字和代码,但它本质上是一个「无经验的聪明实习生」——它懂很多道理,但不知道你的公司规范是什么、你的项目流程是什么、遇到这个特定任务该走哪套 SOP。

Skills 解决的核心痛点

  • 每次执行相同任务都需要重新在 Prompt 里写一大段指令 → 浪费 token,且不稳定
  • Agent 不知道在什么场景下调用哪套流程
  • 领域知识、公司规范无法结构化地传递给 AI
  • 复杂工作流无法被标准化复用

Skills 的出现,标志着 AI 应用从「对话交互」向「任务执行」的关键跃迁。

Skills 的核心特性

特性 说明
模块化 每个 Skill 是独立的能力单元,互不干扰
按需加载 只有在任务相关时才被加载进上下文,节省 Token
渐进式披露 先暴露元数据(name/description),匹配后才加载完整指令
可复用 一次编写,跨项目、跨对话反复使用
可组合 多个 Skill 可配合 Tools 联合工作
可版本化 支持 version 字段,便于迭代管理

二、Skills vs 传统 Prompt vs Tools:核心区别

在理解 Skills 之前,需要先厘清它与相关概念的边界。

用「实习生培训」来类比

把 AI 想象成一个刚毕业的聪明但没经验的实习生

  • 普通 Prompt = 你每次都要从头教他怎么做事(今天教一遍,明天还得重新教)
  • Rule / Memory(规则/记忆) = 你给他贴一张”公司行为守则”在工位上(一直生效,但只能管态度和格式)
  • MCP / Tools = 你给他电脑装了一堆软件和 API(他能调用外部工具,但不知道什么时候该用、怎么组合用)
  • Skills = 你直接给他一整套 **”岗位培训大礼包”**(PDF+流程图+SOP+话术模板+常用脚本),告诉他:”当老板让你做这类事情时,就按这个文件夹里的方法来做”

技术层面对比

维度 传统 Prompt System Prompt Tools Skills
作用范围 当次对话 全局持久 单次调用 按需激活
加载时机 每次手动写 始终占用 Context 任务时调用 匹配时自动加载
Token 消耗 高(重复) 高(一直占用) 低(按需加载)
确定性
复用性 有限
包含内容 文本指令 文本指令 可执行函数 指令+脚本+资源+模板
本质 文本 文本 代码 Prompt 模板 + 上下文注入

Tools 扩展「能力」,Skills 扩展「能力运用的方式」

一个更精准的区分:

  • Tools 让 Agent 能做某件事(比如能搜索网页)
  • Skills 让 Agent 知道在什么情况下、按什么流程、用什么标准去做某件事

工具扩展 capability(能力),Skills 扩展 competence(胜任力)


三、Skills 的核心结构:SKILL.md 详解

每个 Skill 就是一个文件夹,文件夹名即技能标识(推荐 kebab-case 小写+连字符)。文件夹中唯一必须存在的文件是 SKILL.md

最简目录结构

1
2
3
~/.claude/skills/
└── my-skill/ ← 技能文件夹名
└── SKILL.md ← 唯一必填文件(必须全大写 + .md 小写)

SKILL.md 基本模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
---
name: your-skill-name
description: >-
What it does and when Claude should use it.
Trigger scenarios: when user asks to..., keywords like...
version: 1.0
author: yourname
---

# Skill Title

## Overview
[What this skill does and what problem it solves]

## Instructions

### Step 1: [First Action]
[Imperative, concrete instructions]

### Step 2: [Next Action]
[Imperative, concrete instructions]

## Output Format
[How to structure results]

## Examples
- Example 1: ...
- Example 2: ...

## Guidelines
- Guideline 1
- Guideline 2

SKILL.md 由两部分构成:

  1. YAML Frontmatter--- 之间的部分):配置元数据,控制 Skill「如何被发现和运行」
  2. Markdown 正文:Prompt 内容,控制 Claude「具体做什么」

四、SKILL.md Frontmatter 字段完全参考

这是整个 Skill 系统中最关键的部分,因为 Claude 正是靠这里的 description 来决定是否加载当前 Skill。

4.1 name(必填)

1
name: code-comment-expert
  • 只能使用小写字母、数字和连字符
  • 最多 64 个字符
  • 同时也是 /slash 命令名(用户可以用 /code-comment-expert 手动触发)

4.2 description(必填 · 最关键字段!)

1
2
3
4
description: >-
为代码添加专业、清晰的中英双语注释。
适合缺少文档、可读性差、需要分享审查的代码。
常见触发场景:加注释、注释一下、加文档、explain this、improve readability
  • 这是 Claude 判断是否加载该 Skill 的唯一依据
  • 最多 1024 个字符
  • 建议明确写出:这个 Skill 做什么 + 什么时候用它 + 触发关键词

⚠️ 关键原则:description 写得越精准,Skill 被正确触发的概率越高。

4.3 trigger_keywords(强烈推荐)

1
2
3
4
5
6
7
8
trigger_keywords:
- 加注释
- 注释
- 加文档
- explain code
- document
- comment this
- readability

4.4 allowed-tools(可选)

1
2
3
4
5
# 推荐:精确限定工具范围
allowed-tools: "Read,Write,Edit,Glob,Grep"

# 推荐:仅允许特定 bash 命令
allowed-tools: "Bash(git status:*),Bash(git diff:*),Read,Grep"

4.5 model(可选)

1
2
3
model: "claude-opus-4-20250514"   # 使用特定模型
# 或
model: "inherit" # 继承用户当前会话模型(默认)

4.6 version(可选)

1
version: "1.0.0"

4.7 disable-model-invocation(可选)

1
disable-model-invocation: true

设为 true 后,该 Skill 只能通过用户手动输入 /skill-name 触发,不会被自动调用。

4.8 mode(可选)

1
mode: true

将该 Skill 标记为”模式命令”,适合 debug-modereview-mode 等全局行为修改 Skill。


五、进阶目录结构:scripts / references / assets

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~/.claude/skills/react-component-review/
├── SKILL.md # 核心指令 + 元数据(建议控制在 400 行内)

├── templates/ # 常用模板(Claude 按需读取)
│ ├── functional.tsx.md
│ └── class-component.md

├── examples/ # 优秀/反例(给 Claude 看标准)
│ ├── good.md
│ └── anti-pattern.md

├── references/ # 规范、规则、参考文档(加载进 Context)
│ ├── hooks-rules.md
│ └── naming-convention.md

└── scripts/ # 可执行脚本
├── validate-props.py
└── check-cycle-deps.sh

三个目录的核心区别

目录 内容类型 加载方式 Token 消耗
scripts/ 可执行代码(Python/Shell) Bash 工具运行 低(只传路径)
references/ 文本/文档(Markdown/JSON) Read 工具加载进 Context 高(内容进入 Context)
assets/ 模板/二进制文件 路径引用,不加载内容 极低

使用 {baseDir} 变量(必须!)

1
2
python {baseDir}/scripts/analyzer.py --path "$TARGET"
python /home/user/.claude/skills/my-skill/scripts/analyzer.py

六、底层实现原理:元工具架构(Meta-Tool Architecture)

6.1 Skills 本质上是什么?

Skills 不是可执行代码。它们不运行 Python 或 JavaScript,背后没有 HTTP Server。

Skills 的本质是:专门化的 Prompt 模板,通过注入对话上下文来修改 Claude 的推理方式

当一个 Skill 被调用时,发生的事情是:

  1. SKILL.md 的内容加载为详细指令
  2. 将这些指令作为新的 User Message 注入对话 Context
  3. 修改执行环境(允许的工具列表、模型选择)
  4. Claude 在这个被「增强」的 Context 下继续执行任务

6.2 Skill 元工具(Meta-Tool)设计

在 Claude Code 内部,所有 Skills 通过一个叫做 Skill(大写 S)的元工具来管理:

1
2
3
4
5
6
7
8
Claude 看到的工具列表:
├── Read ← 普通工具
├── Write ← 普通工具
├── Bash ← 普通工具
└── Skill ← 元工具(管理所有 skills)
├── pdf
├── xlsx
└── code-comment-expert

元工具 Skill 的描述中包含了所有可用 Skills 的 name 和 description 列表,Claude 用自身的语言理解能力来判断是否匹配。

重要:技能选择没有算法路由,没有意图分类器,没有 Embedding 匹配。这是纯粹的 LLM 推理——决策发生在 Transformer 的前向传播中。

6.3 实际 API 请求结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"model": "claude-sonnet-4-5",
"messages": [
{"role": "user", "content": "帮我给这段代码加上注释"}
],
"tools": [
{
"name": "Skill",
"description": "Execute a skill...\n\n<available_skills>\n\"code-comment-expert\": 为代码添加专业注释...\n</available_skills>",
"input_schema": {
"type": "object",
"properties": {
"command": {"type": "string", "description": "The skill name"}
}
}
},
{"name": "Bash"},
{"name": "Read"}
]
}

6.4 Skill 执行时的双消息注入机制

当 Claude 决定调用某个 Skill,系统会注入两条消息

消息一:用户可见的状态提示(isMeta: false

1
2
<command-message>The "code-comment-expert" skill is loading</command-message>
<command-name>code-comment-expert</command-name>

消息二:完整 Skill 指令(isMeta: true,用户不可见)

1
2
3
4
5
6
7
8
你现在是「专业代码注释专家」。

## 核心原则
- 只在缺少注释或可读性明显不足处添加
- 优先使用英文 JSDoc / TSDoc 风格
...(完整的 SKILL.md 正文)

Base directory: /home/user/.claude/skills/code-comment-expert
设计选择 原因
两条消息(可见短摘要 + 隐藏完整指令) 用户知道发生了什么,AI 获得完整指令,两全其美

6.5 消息流对比

1
2
3
4
5
6
7
8
9
10
普通工具(如 Read):
assistant → tool_use (Read file.txt)
user → tool_result (file contents...)

Skill 工具:
assistant → tool_use (Skill: code-comment-expert)
user → tool_result (success)
user → <command-message>...</command-message> [可见]
user → [完整 SKILL.md 指令, isMeta: true] [隐藏]
user → [权限消息 command_permissions] [隐藏]

七、渐进式披露(Progressive Disclosure)机制

三层渐进式披露

1
2
3
4
5
第一层:元数据(name + description)约 200 tokens
↓ Claude 判断匹配
第二层:完整 SKILL.md 内容加载进 Context,约 1500-5000 tokens
↓ Claude 开始执行,发现需要更多信息
第三层:按需加载 scripts/ references/ assets/ 中的文件

Token 消耗对比

方案 每次对话 Token 消耗(10个 Skills)
全部塞入 System Prompt ~20,000 tokens(始终占用)
Skills 渐进式披露 ~200 tokens + 按需加载

当用户只用到 1 个 Skill 时,节省约 18,000 tokens


八、Skills 的应用场景

8.1 企业内部规范沉淀

1
2
3
4
5
.claude/skills/
├── commit-convention/ ← Git 提交规范
├── code-review-standard/ ← 代码审查标准
├── api-doc-generator/ ← API 文档生成规范
└── pr-template/ ← PR 描述模板

8.2 复杂文档处理工作流

  • PDF Skill:调用 pdftotext 工具提取文本,按特定格式整理
  • Excel Skill:读取数据、分析结构、生成可视化报告
  • 技术文章转公众号 Skill:总结→翻译→调整风格→加标题→输出 Markdown

8.3 领域专家系统

  • 安全审计 Skill:按 OWASP Top 10 逐一检查代码漏洞
  • 性能优化 Skill:按特定框架的最佳实践审查代码性能
  • 财务分析 Skill:按公司财务建模规范分析数据

8.4 多步骤向导流程

复杂的初始化、配置、部署流程可以封装为 Skills:

  • 新项目初始化向导
  • 数据库迁移助手
  • CI/CD 配置生成器

8.5 跨项目知识共享

个人全局 Skills(~/.claude/skills/)可以在所有项目中使用:

  • 个人写作风格 Skill
  • 常用代码模板 Skill
  • 个人调试流程 Skill

九、常用设计模式(Patterns)

Pattern 1:脚本自动化(Script Automation)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
name: dependency-audit
description: 审计项目依赖安全漏洞,适合发布前检查或定期安全审查
allowed-tools: "Bash(npm audit:*),Read,Write"
---

# 依赖安全审计

## 执行流程

1. 运行安全审计脚本:
python {baseDir}/scripts/audit.py --path "." --output audit-report.json
2. 读取生成的 audit-report.json
3. 按严重程度分类展示漏洞
4. 给出修复建议

Pattern 2:读取-处理-输出(Read-Process-Write)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
name: tech-to-wechat
description: 将技术文章转换为公众号风格,适合需要发布技术内容的场景
allowed-tools: "Read,Write"
---

# 技术文章公众号化

## 处理步骤

1. 用 Read 工具读取原始文章
2. 执行转换:简化术语、拆分长段、增加过渡句
3. 生成 3-5 个候选标题(包含数字或疑问句式)
4. 用 Write 工具输出最终 Markdown 文件

Pattern 3:搜索-分析-报告(Search-Analyze-Report)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
name: dead-code-finder
description: 检测项目中未被使用的代码,适合代码库清理和重构前使用
allowed-tools: "Grep,Read,Glob"
---

# 死代码检测

## 分析流程

### Pass 1:广泛扫描
1. 用 Glob 获取所有 .ts/.tsx/.js/.jsx 文件列表
2. 用 Grep 提取所有 export 的函数/类/变量名

### Pass 2:引用验证
对每个已导出符号,用 Grep 搜索引用,引用数为 0 则标记为疑似死代码

### Pass 3:报告生成
输出表格:文件路径、符号名称、类型、建议(删除/保留/待确认)

Pattern 4:向导式多步骤工作流(Wizard-Style Workflow)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
name: new-feature-wizard
description: 新功能开发向导,引导完成从需求分析到代码生成的完整流程
allowed-tools: "Read,Write,Bash(git:*)"
---

## Step 1:需求澄清
询问:功能名称、用户故事、技术约束,等待用户确认后继续。

## Step 2:技术方案设计
读取现有代码,设计接口,输出技术方案,等待用户确认。

## Step 3:代码生成
按照确认的方案生成代码,参考 references/coding-standards.md

十、完整实战示例:从需求到运行

场景:Python 代码规范强制 Skill

需求:团队规定所有 Python 内部辅助函数必须以 _internal_ 前缀命名。

Step 1:创建目录结构

1
2
cd my-project
mkdir -p .claude/skills/python-naming-standard

Step 2:编写 SKILL.md

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
---
name: python-naming-standard
description: >-
当用户要求重构、审查或编写 Python 代码时,请参考此内部命名规范。
适用场景:写代码、重构、code review、命名建议、代码审查
trigger_keywords:
- 写代码
- 重构
- code review
- 命名
- Python 函数
version: 1.0
allowed-tools: "Read,Write,Edit"
---

# Python 内部命名规范

## 核心规则

1. **所有内部辅助函数**必须以 `_internal_` 前缀命名
2. **公共 API 函数**不使用下划线前缀
3. **私有方法**(类内部)使用 `__` 双下划线前缀

## 命名示例

正确:内部辅助函数
def _internal_calculate_risk(score: float) -> float: ...

正确:公共 API
def calculate_user_discount(user_id: str) -> float: ...

错误:内部函数缺少 _internal_ 前缀
def _calculate_risk(score: float) -> float: ...

## 执行要求

- 生成新代码时,自动按此规范命名
- 审查现有代码时,发现违规立即指出并给出重命名建议

Step 3:Claude 自动生成符合规范的代码

输入:帮我写一个计算用户折扣的函数

Claude 自动加载 Skill,输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def calculate_user_discount(user_id: str, score: int, total_spent: float) -> float:
"""计算用户折扣率。"""
risk_factor = _internal_calculate_risk_factor(score)
loyalty_bonus = _internal_get_loyalty_bonus(total_spent)
return min(0.3, risk_factor + loyalty_bonus)


def _internal_calculate_risk_factor(score: int) -> float:
"""内部:根据积分计算风险系数。"""
if score >= 1000:
return 0.15
elif score >= 500:
return 0.10
return 0.05


def _internal_get_loyalty_bonus(total_spent: float) -> float:
"""内部:根据历史消费计算忠诚度奖励。"""
if total_spent >= 10000:
return 0.10
elif total_spent >= 5000:
return 0.05
return 0.0

所有内部函数自动带上 _internal_ 前缀,无需任何手动提示

Step 4:添加验证脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# .claude/skills/python-naming-standard/scripts/validate_naming.py
import ast, sys
from pathlib import Path

def check_file(filepath: str) -> list:
violations = []
tree = ast.parse(Path(filepath).read_text())
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
name = node.name
if name.startswith('_') and not name.startswith('__') and not name.startswith('_internal_'):
violations.append({
'line': node.lineno,
'current': name,
'suggested': f'_internal_{name.lstrip("_")}'
})
return violations

if __name__ == '__main__':
filepath = sys.argv[1]
violations = check_file(filepath)
if violations:
print(f"发现 {len(violations)} 处命名违规:")
for v in violations:
print(f" 第 {v['line']} 行: {v['current']} → 建议改为: {v['suggested']}")
else:
print("命名规范检查通过")

十一、最佳实践与常见错误

最佳实践

1. Description 写清楚触发场景

1
2
3
4
5
6
7
# 好的 description
description: >-
为 React 组件进行 code review,检查性能、可维护性和最佳实践。
触发关键词:code review, 审查, 组件, react, 优化

# 差的 description
description: React component reviewer

2. 使用命令式语言,而非第二人称

1
2
分析代码中的安全漏洞...
你应该分析代码中的安全漏洞...

3. 控制 SKILL.md 长度:建议 400-800 行,超出内容放 references/ 按需加载

4. 最小权限原则

1
2
allowed-tools: "Read,Grep,Glob"
allowed-tools: "Bash,Read,Write,Edit,Glob,Grep,WebSearch"

5. 始终使用 {baseDir} 而非绝对路径

常见错误排查

错误现象 原因 解决方案
Skill 从不被自动触发 description 太模糊 增加具体触发场景和关键词
Skill 在不相关场景触发 description 太宽泛 明确「什么时候不用」
脚本执行失败 使用了绝对路径 改用 {baseDir} 变量
Token 消耗过大 大量内容塞进 SKILL.md 拆分到 references/ 按需加载
工具权限被拒绝 allowed-tools 未包含所需工具 检查并补充缺少的工具权限
多个 Skill 互相干扰 description 重叠 重新设计各 Skill 的触发边界

十二、Skills 与 MCP / Tools / System Prompt 的生态关系

完整的 Agent 能力层次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────────────────────────────────────────────────┐
│ 用户意图 │
└────────────────────────┬────────────────────────────────┘

┌────────────────────────▼────────────────────────────────┐
│ Skills(能力运用层) │
│ · 什么时候用什么工具 · 按什么流程执行任务 │
│ · 按什么标准产出结果 │
└──────┬───────────────────────────────────┬──────────────┘
│ │
┌──────▼──────┐ ┌───────▼──────────────┐
│ Tools │ │ MCP Servers │
│ (能力执行层)│ │ (能力扩展层) │
│ Read/Write │ │ Database/API/etc. │
└─────────────┘ └──────────────────────┘

各层能力定位

维度 System Prompt Skills Tools MCP
作用 定义全局人格/约束 定义专项工作流 执行具体动作 扩展外部能力
持久性 全局永久 按需激活 单次调用 按需连接
典型用途 设置助手人格 封装 SOP 搜索/计算/文件 访问数据库/API

四者缺一不可,各司其职。Skills 的价值在于把分散的 Tools 和 MCP 能力组织成有意义的、可复用的工作流。


附录:Skills 快速参考卡

必填字段

1
2
3
4
5
6
7
---
name: skill-name # 小写字母+数字+连字符,≤64字符
description: >- # 关键!Claude靠它决定是否加载,≤1024字符
What it does.
When to use it.
Trigger scenarios: ...
---

目录结构速查

1
2
3
4
5
my-skill/
├── SKILL.md # 必须
├── scripts/ # 可执行脚本(Bash/Python)
├── references/ # 参考文档(加载进 Context)
└── assets/ # 模板文件(按路径引用)

Skills 加载位置优先级

1
2
3
4
.claude/skills/           (项目级,最高优先级)
~/.claude/skills/ (用户全局)
~/.config/claude/skills/ (系统配置)
内置 Skills (最低优先级)

Path 引用规范

1
2
3
python {baseDir}/scripts/process.py
参考 {baseDir}/references/standards.md
python /home/user/.claude/skills/my-skill/scripts/process.py