Claude Skill 编写完全指南
📍 位置:Skill编写指南 / 0-完全指南
📌 核心发现:Skill 本质是「专门化提示模板」而非可执行代码;Description 是唯一的发现和选中依据;渐进式加载机制(三层)让 Skill 省 Token 且自治
📥 输入:Anthropic 官方 33 页指南 + 官方文档 + 社区深度分析 + AEO 优化技巧
📤 流向:独立完整参考文档,无后续收敛文件
基于 Anthropic 官方 33 页指南 + 社区深度分析 + AEO 优化技巧
调研日期:2026-03-18
一、Skill 是什么?——第一性原理
1.1 本质定义
Skill 不是可执行代码,而是专门化提示模板,通过对话上下文注入来修改 Claude 处理后续请求的方式。
“Skills 通过注入指令来准备 Claude 解决问题,而非直接解决问题。“
| 维度 | 传统工具(API/函数) | Skill |
|---|
| 执行模型 | 同步直接执行 | 提示扩展 |
| 返回值 | 立即结果 | 上下文 + 执行环境改变 |
| 本质 | 代码 | 知识 + 流程 + 规则 |
| 类比 | 扳手 | 带着扳手的老师傅 |
1.2 Skill vs API vs MCP
| 载体 | 定位 | 优势 | 劣势 |
|---|
| API | 给人类程序员的数据插座 | 灵活、标准化 | 缺乏上下文,Agent 不知道何时/如何调用 |
| MCP | 通过 SSE/stdio 的服务器架构 | 远程可调用,标准协议 | 笨重,容易冲突或崩溃 |
| Skill | 给 Agent 的知识包 | 渐进式加载、省 Token、自治 | 依赖 Claude 生态 |
Skill 的核心优势 = 极度克制 + 高度自治:
- 平时:只暴露 name + description(几十字的”简历”)
- 匹配时:动态加载 SKILL.md 完整内容
- 深度使用时:按需读取 references/、scripts/ 等辅助文件
MCP 是「专业厨房」(工具连接),Skill 是「菜谱」(嵌入最佳实践的工作流)。
1.3 渐进式加载机制(Progressive Disclosure)
Skill 的 Token 消耗分三层递进:
第 1 层:前置元数据(name + description)
→ 始终加载,用于决策匹配
→ 成本:几十个 Token
第 2 层:SKILL.md 正文
→ 仅当 Claude 判断任务匹配时加载
→ 成本:数百~数千 Token
第 3 层:辅助资源(references/、scripts/ 等)
→ 仅当执行过程中需要时按需读取
→ 成本:按需消耗
核心理念:Context Window 是公共资源。你的 Skill 与系统提示、对话历史、其他 Skill 共享上下文窗口。
二、Skill 文件结构
2.1 目录结构
my-skill/
├── SKILL.md # 核心文件(必需)
├── scripts/ # 可选:可执行脚本
│ ├── analyze.py
│ └── validate.sh
├── references/ # 可选:参考文档
│ ├── api-docs.md
│ └── schema.md
└── assets/ # 可选:模板和资源
└── template.json
关键规则:
- 文件夹名必须使用 kebab-case(如
pdf-processing)
- 不要在 Skill 文件夹内放
README.md(文档写在 SKILL.md 或 references/ 中)
- Skill 名称不能包含 “claude” 或 “anthropic”(保留词)
2.2 SKILL.md 结构
---
name: my-skill-name # 必填,kebab-case,最大64字符
description: | # 必填,最大1024字符
做什么 + 什么时候用。第三人称。
包含关键触发词。
license: MIT # 可选
compatibility: # 可选
platforms:
- claude-ai
- claude-code
- api
metadata: # 可选
author: your-name
version: "1.0.0"
mcp-server: ServerName # 如果需要 MCP
---
# Skill 标题
## 快速开始
[核心用法,最简洁的上手方式]
## 工作流程
[详细的步骤说明]
## 高级功能
**详细说明**: 见 [references/advanced.md](references/advanced.md)
**API 参考**: 见 [references/api.md](references/api.md)
2.3 YAML Frontmatter 字段规范
| 字段 | 必填 | 规则 |
|---|
name | 是 | ≤64字符,仅小写字母+数字+短横线,无 XML 标签,无保留词 |
description | 是 | ≤1024字符,非空,无 XML 标签,必须包含做什么+何时用 |
license | 否 | 许可证类型 |
compatibility | 否 | 平台兼容性声明 |
metadata | 否 | 作者、版本、MCP 服务器等 |
allowed-tools | 否 | 工具权限范围(最小化原则) |
model | 否 | 模型选择覆盖 |
disable-model-invocation | 否 | 防止自动调用(危险操作时使用) |
三、核心设计原则
3.1 简洁至上——Claude 已经很聪明
默认假设:只添加 Claude 还不知道的信息。
对每段内容问三个问题:
- “Claude 真的需要这个解释吗?”
- “能不能假设 Claude 已经知道这个?”
- “这段话值得消耗它的 Token 成本吗?”
正面示例(约 50 Token):
## 提取 PDF 文本
使用 pdfplumber:
\`\`\`python
import pdfplumber
with pdfplumber.open("file.pdf") as pdf:
text = pdf.pages[0].extract_text()
\`\`\`
反面示例(约 150 Token):
## 提取 PDF 文本
PDF(Portable Document Format)是一种常见的文件格式,包含文本、
图片和其他内容。要从 PDF 中提取文本,你需要使用一个库。有很多
库可以用于 PDF 处理,但 pdfplumber 是推荐的,因为它易于使用...
3.2 设定恰当的自由度
根据任务的脆弱性和可变性,匹配不同的指令精确度:
| 自由度 | 适用场景 | 指令风格 |
|---|
| 高自由度 | 多种方法都有效、依赖上下文判断 | 文本指南,方向性指导 |
| 中自由度 | 有首选模式、允许一些变化 | 伪代码/带参数的脚本 |
| 低自由度 | 操作脆弱易错、一致性关键、必须按序执行 | 精确脚本,不允许修改 |
类比:把 Claude 想象成走一条路的机器人——
- 悬崖上的窄桥:只有一条安全路 → 给精确指令(低自由度)
- 开阔无障碍的原野:多条路都能到达 → 给方向性指导(高自由度)
3.3 可组合性
- Skill 应能与其他 Skill 共存,不假设独占性
- 不要占用过多上下文窗口
- 保持 SKILL.md 正文在 500 行以内(约 5000 Token)
3.4 跨平台可移植性
Skill 应在 Claude.ai、Claude Code、API 中表现一致:
- 使用正斜杠路径(
scripts/helper.py,非 scripts\helper.py)
- 不使用硬编码绝对路径
- 明确声明依赖包
四、编写高效 Description 的技巧
Description 是 Skill 被发现和选中的唯一依据。Claude 从可能 100+ 个 Skill 中,仅凭 description 决定使用哪个。
4.1 必须用第三人称
Description 会被注入系统提示,人称不一致会导致发现问题。
# 正确
description: "处理 Excel 文件并生成报告"
# 错误
description: "我可以帮你处理 Excel 文件"
description: "你可以用这个来处理 Excel 文件"
4.2 必须包含「做什么」+「何时用」
# 正确:具体且包含触发词
description: >
从 PDF 文件中提取文本和表格,填写表单,合并文档。
当处理 PDF 文件或用户提到 PDF、表单、文档提取时使用。
# 错误:模糊
description: "处理文档"
description: "帮助处理数据"
4.3 包含关键触发词
在 description 中嵌入用户可能使用的各种表达方式:
description: >
生成 Git 提交信息。当用户需要帮助编写 commit message、
审查 staged changes、提交代码时使用。
触发词:提交、commit、git commit、提交信息。
五、五大设计模式
模式 1:顺序工作流编排(Sequential Workflow)
适用:步骤有先后依赖,前一步输出是后一步输入。
## 客户注册流程
1. 创建账户 → 2. 配置支付 → 3. 设置订阅 → 4. 发送欢迎邮件
每步完成后验证再进入下一步。
如果任何步骤失败,执行回滚。
关键:记录回滚程序。
模式 2:多 MCP 协调(Multi-MCP Coordination)
适用:工作流跨越多个外部服务。
## 设计交付流程
Figma 导出 → Drive 上传 → Linear 创建任务 → Slack 通知
使用完全限定工具名:
- Figma:export_assets
- GoogleDrive:upload_file
- Linear:create_issue
- Slack:send_message
关键:阶段间分离清晰,跨阶段前验证。
模式 3:迭代改进(Iterative Refinement)
适用:需要通过反复循环提升质量。
## 内容审核流程
1. 生成初稿
2. 运行验证脚本 → 检查质量标准
3. 如果不通过 → 修正 → 回到步骤 2
4. 通过 → 输出最终版本
终止条件:通过所有检查 OR 达到 3 次迭代上限
关键:定义明确的质量标准、验证脚本、终止条件(防止无限循环)。
模式 4:上下文感知工具选择(Context-aware Tool Selection)
适用:根据输入特征路由到不同工具。
## 文档修改
判断修改类型:
**创建新内容?** → 使用 docx-js 库从零构建
**编辑现有内容?** → 解包 → 修改 XML → 验证 → 重新打包
模式 5:领域特定智能(Domain-specific Intelligence)
适用:需要治理或合规的领域工作流。
## 金融数据查询
规则:
- 始终排除测试账户(account_type != 'test')
- 金额字段使用 DECIMAL,不使用 FLOAT
- 所有查询必须包含日期范围过滤
在设计 Skill 前,先确定你的设计出发点:
| 出发点 | 适用场景 | 示例 |
|---|
| Problem-first(以问题为中心) | 用户想要交付物,不关心用什么工具 | ”帮我生成一份销售报告” → Skill 内部自动选择数据源和格式 |
| Tool-first(以工具为中心) | 用户想要遵循最佳实践使用某个工具 | ”帮我用 BigQuery 分析数据” → Skill 提供 BigQuery 的工作流指南 |
选择原则:
- 大多数业务场景用 Problem-first(用户要结果)
- 技术基础设施场景用 Tool-first(用户要标准化流程)
- 不确定时,默认 Problem-first——用户关心的是”做什么”,不是”用什么”
模式 7:四种常见工作流模式
| 模式 | 流程 | 需要的工具 | 适用场景 |
|---|
| 脚本自动化 | 指令 → 执行脚本 → 解析输出 → 呈现结果 | Bash(python {baseDir}/scripts/*:*), Read | 数据处理、文件转换 |
| 读-处理-写 | Read 输入 → 按规范转换 → Write 输出 | Read, Write | 格式转换、内容生成 |
| 搜索-分析-报告 | Grep 搜索 → Read 文件 → 分析 → 结构化报告 | Grep, Read | 代码审查、日志分析 |
| 命令链执行 | 命令 1 && 命令 2 && 命令 3 | Bash(npm:*) 等 | 构建、测试、部署 |
选择匹配的模式可以帮助你确定 allowed-tools 的最小权限范围。
六、工作流与反馈闭环
6.1 复杂任务使用检查清单
## 研究综合工作流
复制此清单并跟踪进度:
\`\`\`
研究进度:
- [ ] 步骤 1: 阅读所有源文档
- [ ] 步骤 2: 识别关键主题
- [ ] 步骤 3: 交叉验证论点
- [ ] 步骤 4: 创建结构化总结
- [ ] 步骤 5: 验证引用
\`\`\`
6.2 反馈闭环模式
核心模式:运行验证 → 修正错误 → 重复
## 文档编辑流程
1. 编辑 document.xml
2. **立即验证**: `python scripts/validate.py unpacked_dir/`
3. 如果验证失败:
- 仔细查看错误信息
- 修正 XML 中的问题
- 再次运行验证
4. **仅当验证通过后才继续**
5. 重建: `python scripts/pack.py unpacked_dir/ output.docx`
6.3 计划-验证-执行模式
适用于批量操作、破坏性变更、高风险操作:
分析 → 创建计划文件(changes.json) → 验证计划 → 执行 → 验证结果
好处:
- 在执行前捕获错误
- 机器可验证
- 可逆的计划(不触碰原始文件)
- 清晰的调试路径
七、常见模式与模板
7.1 模板模式
## 报告结构
始终使用此模板:
\`\`\`markdown
# [分析标题]
## 执行摘要
[关键发现的一段式概述]
## 关键发现
- 发现 1 及支撑数据
- 发现 2 及支撑数据
## 建议
1. 具体可执行的建议
2. 具体可执行的建议
\`\`\`
7.2 示例模式
提供输入/输出对,比描述更清晰:
## 提交信息格式
**示例 1:**
输入:添加了 JWT 用户认证
输出:feat(auth): 实现基于 JWT 的认证
**示例 2:**
输入:修复了报告中日期显示错误
输出:fix(reports): 修正时区转换中的日期格式
7.3 条件工作流模式
## 文档修改
1. 判断修改类型:
**创建新内容?** → 走"创建工作流"
**编辑现有内容?** → 走"编辑工作流"
2. 创建工作流:...
3. 编辑工作流:...
八、脚本与代码最佳实践
8.1 解决问题,不推卸
脚本应自己处理错误,而非甩给 Claude:
# 正确:显式处理错误
def process_file(path):
try:
with open(path) as f:
return f.read()
except FileNotFoundError:
print(f"文件 {path} 不存在,创建默认文件")
with open(path, "w") as f:
f.write("")
return ""
# 错误:甩给 Claude
def process_file(path):
return open(path).read() # 直接崩溃
8.2 避免魔法数字
# 正确:自解释
REQUEST_TIMEOUT = 30 # HTTP 请求通常在 30 秒内完成
MAX_RETRIES = 3 # 3 次重试在可靠性和速度间取平衡
# 错误:为什么是这个数?
TIMEOUT = 47
RETRIES = 5
8.3 提供工具脚本
预制脚本优于让 Claude 临时生成:
- 更可靠
- 节省 Token(无需在上下文中包含代码)
- 节省时间
- 确保一致性
8.4 明确脚本用途
# 让 Claude 执行(常见)
运行 `analyze_form.py` 提取表单字段
# 让 Claude 作为参考阅读(复杂逻辑)
参见 `analyze_form.py` 了解字段提取算法
九、测试与迭代
9.1 评估驱动开发
先建评估,再写文档。
1. 识别差距:在没有 Skill 的情况下让 Claude 执行任务,记录失败点
2. 创建评估:构建 3 个测试场景
3. 建立基线:测量无 Skill 时的表现
4. 编写最少指令:仅解决差距的内容
5. 迭代:执行评估 → 对比基线 → 改进
9.2 双 Claude 迭代法
Claude A(设计师) Claude B(测试者)
│ │
├── 创建/改进 Skill ──────→ │
│ ├── 在真实任务中使用
│ ├── 观察行为和问题
│ ←── 反馈问题 ────────────┤
├── 根据反馈改进 │
├── 更新 Skill ───────────→│
│ ├── 再次测试
... ...
9.3 调试三大常见问题
| 问题 | 诊断方法 | 解决方案 |
|---|
| 触发不足 | 问 Claude:“你什么时候会用 [skill name]?“ | 改进 description,加入更多触发词 |
| 过度触发 | 检查是否与其他 Skill 混淆 | 添加负面触发词:“不要用于…” |
| 触发但不遵循 | 检查 SKILL.md 长度 | 保持 <5000 Token,用 ”## 关键” 标题,显式列出验证步骤 |
9.4 观察 Claude 如何导航你的 Skill
迭代 Skill 时,关注 Claude 的实际使用行为,有 4 个关键观察信号:
| 信号 | 说明 | 行动 |
|---|
| 意外的探索路径 | Claude 按你没预期的顺序读文件 | 说明你的结构不够直观,需调整导航 |
| 遗漏的连接 | Claude 没有跟随引用到重要文件 | 链接需要更显眼或表述更明确 |
| 过度依赖某个文件 | Claude 反复读同一个 reference 文件 | 考虑把该内容提升到 SKILL.md 主文件中 |
| 被忽略的内容 | Claude 从未访问某个 bundled 文件 | 该文件可能没必要存在,或信号不够强 |
基于观察迭代,而非基于假设。name 和 description 是最关键的——Claude 靠它们决定是否触发。
9.5 跨模型测试
| 模型 | 考虑点 |
|---|
| Haiku(快速经济) | Skill 是否提供了足够的指导? |
| Sonnet(平衡) | Skill 是否清晰高效? |
| Opus(强推理) | Skill 是否避免了过度解释? |
十、反模式清单
10.1 结构反模式
| 反模式 | 正确做法 |
|---|
| 在 Skill 文件夹放 README.md | 用 SKILL.md 或 references/ |
| 引用嵌套超过一层 | 所有引用从 SKILL.md 直接链接 |
| SKILL.md 超过 500 行 | 拆分到 references/ |
| 使用 Windows 反斜杠路径 | 始终用正斜杠 |
| 硬编码绝对路径 | 使用相对路径或 {baseDir} |
| 100+ 行参考文件没有目录 | 在文件顶部加 TOC,确保 Claude 预览时能看到全貌 |
10.2 内容反模式
| 反模式 | 正确做法 |
|---|
| 包含时效性信息 | 用”旧模式”折叠区,或直接给当前方案 |
| 术语不一致(混用 API endpoint/URL/route) | 选一个术语全文统一 |
| 提供过多选择 | 给默认方案 + 备选逃生口 |
| 假设包已安装 | 显式说明依赖和安装命令 |
10.3 权限反模式
# 反模式:过度授权
allowed-tools: "Bash,Read,Write,Edit,Glob,Grep,WebSearch,Task,Agent"
# 正确:最小权限
allowed-tools: "Bash(git status:*),Bash(git diff:*),Read"
十一、Skill 命名规范
推荐使用动名词形式(gerund)
# 推荐(动名词形式,清晰描述活动)
processing-pdfs
analyzing-spreadsheets
managing-databases
testing-code
writing-documentation
# 可接受(名词短语或动作导向)
pdf-processing
process-pdfs
# 避免
helper # 太模糊
utils # 太通用
documents # 不描述行为
十二、分发与部署
| 平台 | 方式 |
|---|
| Claude.ai | Settings > Capabilities > Skills 上传 |
| Claude Code | 放入 ~/.claude/skills/ 或项目级 .claude/skills/ |
| API | 通过 API 编程式上传 |
| GitHub | 开源仓库分享,附安装说明 |
| 管理员部署 | 工作区级别统一推送(2025年12月发布) |
十三、面向 AEO 的 Skill 优化技巧
来源:微信公众号「奇点漫游者」/ 虎嗅
在 Agent 互联网时代,Skill 不仅要对 Claude 好用,还要让所有 AI Agent 都能发现、理解、信任并调用你的 Skill。以下是面向 AEO(Agent Engine Optimization)的四大优化特质:
13.1 自带 SOP 封装
不是只扔一个接口地址,而是交付带着工具的数字员工。
## 支付处理 SOP
1. 第一步:核对用户余额
2. 第二步:检查风控状态
3. 第三步:发起支付请求
4. 如果遇到风控拦截:
- 向用户解释原因
- 建议替代支付方式
- 记录异常日志
关键:像带徒弟一样,把”老兵经验”写进 SKILL.md。
13.2 设定”反向提示词”(负面边界)
明确告诉 Agent 什么时候不要调用你,反而会极大增加信任评分。
description: >
处理大额跨境支付(100美元以上)。支持 SWIFT 和 SEPA 网络。
不要用于:100美元以下的小额支付、国内转账、加密货币交易。
## 不适用场景
以下情况请不要调用本 Skill:
- 小额支付(<100 USD)→ 建议使用 `small-payment` Skill
- 国内银行转账 → 建议使用 `domestic-transfer` Skill
- 需要即时到账 → SWIFT 通常需要 1-3 个工作日
原理:明确边界 → 降低 Agent 出错率 → 提升信任评分 → 关键时刻更多调用。
13.3 具备”自愈能力”(柔性反馈机制)
参数错误时不要直接中断,而是返回结构化的修正指令:
## 错误处理规范
当参数缺失或错误时,返回以下格式的修正指令:
\`\`\`json
{
"status": "error",
"error_type": "missing_parameter",
"missing": "delivery_address",
"suggestion": "请向用户追问配送地址",
"example": "请提供您的配送地址(包含城市、区/县、详细地址)"
}
\`\`\`
不要返回空洞的 404 或 500 错误。
每个错误都应包含 suggestion 字段,帮助 Agent 自我纠偏。
对比:
- 平庸 Skill:
{"error": 500, "message": "Internal Server Error"} → 任务中断
- 优秀 Skill:
{"error": "missing_address", "suggestion": "请向用户追问配送地址"} → Agent 自我纠偏,任务闭环
13.4 原子化与跨平台互通
## 兼容性声明
本 Skill 遵循开放标准,支持以下平台:
- Claude Code / Claude.ai / Claude API
- OpenClaw 本地节点
- ChatGPT Agent(通过适配层)
- 任何支持 Markdown 指令注入的 Agent 框架
## 原子化设计
本 Skill 仅负责「跨境支付」这一个原子化能力。
不包含用户认证、余额查询、汇率转换等功能。
如需这些能力,请组合使用:
- `user-auth` Skill
- `balance-check` Skill
- `currency-exchange` Skill
一处编写,全网运行——像插入 SD 卡一样,瞬间获得能力。
13.5 AEO 三大基本准则在 Skill 中的体现
| 准则 | 在 Skill 中的实现 |
|---|
| 意图映射 | Description 中精准声明:在什么场景下调用是最佳选择 |
| 确定性描述 | SKILL.md 中定义严格的参数 Schema、输入输出格式、边界条件 |
| 反馈闭环 | 错误处理返回结构化修正指令,而非空洞错误码 |
十四、完整 Checklist
核心质量
代码与脚本
AEO 优化
测试
参考来源