技能开发指南
这份指南提供了创建有效的技能插件的指导。
关于技能
技能是模块化的、自包含的包,通过提供专门的知识、工作流程和工具来扩展Claude的能力。将它们视为特定领域或任务的“入职指南”——它们将Claude从一个通用代理转变为一个具备程序性知识的专门代理,而这些知识是任何模型都无法完全拥有的。
技能提供什么
- 专门的工作流程 - 特定领域的多步骤程序
- 工具集成 - 与特定文件格式或API合作的指令
- 领域专业知识 - 公司特定的知识、模式、业务逻辑
- 捆绑资源 - 用于复杂和重复性任务的脚本、参考和资产
技能的构成
每个技能都包含一个必需的SKILL.md文件和可选的捆绑资源:
skill-name/
├── SKILL.md (必需)
│ ├── YAML前言元数据 (必需)
│ │ ├── name: (必需)
│ │ └── description: (必需)
│ └── Markdown指南 (必需)
└── 捆绑资源 (可选)
├── scripts/ - 可执行代码 (Python/Bash等)
├── references/ - 需要时加载到上下文中的文档
└── assets/ - 在输出中使用的文件 (模板、图标、字体等)
SKILL.md (必需)
元数据质量: YAML前言中的name和description决定了何时使用该技能。明确说明技能的作用和何时使用它。使用第三人称(例如“这个技能应该在…”而不是“使用这个技能时…”)。
捆绑资源 (可选)
脚本 (scripts/)
需要重复编写或需要确定性可靠性的任务的可执行代码(Python/Bash等)。
- 何时包括:当相同的代码被重复编写或需要确定性可靠性时
- 示例:
scripts/rotate_pdf.py用于PDF旋转任务 - 好处:节省令牌,确定性,可能在不加载到上下文的情况下执行
- 注意:脚本仍可能需要被Claude阅读以进行修补或环境特定的调整
参考 (references/)
需要时加载到上下文中以通知Claude的过程和思考的文档和参考资料。
- 何时包括:对于Claude在工作时应该参考的文档
- 示例:
references/finance.md用于金融模式,references/mnda.md用于公司NDA模板,references/policies.md用于公司政策,references/api_docs.md用于API规范 - 用例:数据库模式、API文档、领域知识、公司政策、详细的工作流程指南
- 好处:保持SKILL.md精简,仅在需要时加载
- 最佳实践:如果文件较大(>10k字),在SKILL.md中包括grep搜索模式
- 避免重复:信息应该只存在于SKILL.md或参考文件中,而不是两者都有。除非确实是技能的核心,否则更喜欢参考文件中的详细信息——这保持了SKILL.md的精简,同时使信息在不需要占用上下文窗口的情况下可发现。只有在SKILL.md中保留必要的程序性指令和工作流程指导;将详细的参考资料、模式和示例移动到参考文件中。
资产 (assets/)
不打算加载到上下文中,而是在Claude产生的输出中使用的文件。
- 何时包括:当技能需要在最终输出中使用的文件时
- 示例:
assets/logo.png用于品牌资产,assets/slides.pptx用于PowerPoint模板,assets/frontend-template/用于HTML/React样板,assets/font.ttf用于排版 - 用例:模板、图像、图标、样板代码、字体、被复制或修改的样本文档
- 好处:将输出资源与文档分开,使Claude能够在不加载它们的情况下使用文件
渐进式披露设计原则
技能使用三级加载系统来有效管理上下文:
- 元数据(名称+描述) - 始终在上下文中(~100字)
- SKILL.md正文 - 当技能触发时(<5k字)
- 捆绑资源 - 根据Claude的需要(无限制*)
*无限制,因为脚本可以在不读入上下文窗口的情况下执行。
技能创建过程
创建技能时,按照“技能创建过程”的顺序进行,只有在有明确理由不适用的情况下才跳过步骤。
第1步:通过具体示例理解技能
只有在技能的使用模式已经清楚理解的情况下才跳过这一步。即使在处理现有技能时,这一步仍然很有价值。
要创建一个有效的技能,清楚地理解技能将如何被使用的具体示例。这种理解可以来自直接用户提供的示例或通过用户反馈验证的生成示例。
例如,当构建一个图像编辑技能时,相关的问题包括:
- “图像编辑技能应该支持哪些功能?编辑、旋转,还有其他吗?”
- “你能给出一些这个技能将如何被使用的示例吗?”
- “我可以想象用户会要求像’从这张图片中去除红眼’或’旋转这张图片’。你还能想象这个技能的其他使用方式吗?”
- “用户会说些什么,应该触发这个技能?”
为了避免压倒用户,避免在单条消息中问太多问题。从最重要的问题开始,根据需要跟进以获得更好的效果。
当对技能应该支持的功能有了清晰的认识时,结束这一步。
第2步:规划可重用技能内容
将具体示例转化为有效技能,分析每个示例:
- 考虑如何从头开始执行示例
- 确定在重复执行这些工作流程时哪些脚本、参考和资产会有帮助
示例:当构建一个pdf-editor技能来处理像"帮我旋转这个PDF"这样的查询时,分析显示:
- 旋转PDF需要每次都重写相同的代码
- 存储在技能中的
scripts/rotate_pdf.py脚本会有帮助
示例:当设计一个frontend-webapp-builder技能来处理像"为我构建一个待办事项应用"或"为我构建一个跟踪我的步数的仪表板"这样的查询时,分析显示:
- 编写前端Web应用需要每次都相同的样板HTML/React
- 存储在技能中的
assets/hello-world/模板包含样板HTML/React项目文件会有帮助
示例:当构建一个big-query技能来处理像"今天有多少用户登录了?"这样的查询时,分析显示:
- 查询BigQuery需要每次都重新发现表模式和关系
- 存储在技能中的
references/schema.md文件记录表模式会有帮助
对于Claude Code插件: 当构建一个钩子技能时,分析显示:
- 开发人员需要反复验证hooks.json和测试钩子脚本
scripts/validate-hook-schema.sh和scripts/test-hook.sh实用程序会有帮助references/patterns.md用于详细的钩子模式,以避免膨胀SKILL.md
要建立技能的内容,分析每个具体示例以创建包括脚本、参考和资产的可重用资源列表。
第3步:创建技能结构
对于Claude Code插件,创建技能目录结构:
mkdir -p plugin-name/skills/skill-name/{references,examples,scripts}
touch plugin-name/skills/skill-name/SKILL.md
注意: 与使用init_skill.py的通用技能创建者不同,插件技能是直接在插件的skills/目录中手动创建的,结构更简单。
第4步:编辑技能
当编辑(新创建的或现有的)技能时,记住技能是为另一个Claude实例创建的。专注于包括对Claude有益且不明显的信息。考虑什么程序性知识、特定领域的细节或可重用资产会帮助另一个Claude实例更有效地执行这些任务。
从可重用技能内容开始
开始实施时,从上面识别的可重用资源开始:scripts/、references/和assets/文件。注意,这一步可能需要用户输入。例如,在实现brand-guidelines技能时,用户可能需要提供存储在assets/中的品牌资产或模板,或存储在references/中的文档。
此外,删除任何不需要的技能的示例文件和目录。只创建你实际需要的目录(references/、examples/、scripts/)。
更新SKILL.md
写作风格: 使用命令/不定式形式(动词优先指令)编写整个技能,而不是第二人称。使用客观的、指令性的语言(例如,“为了完成X,做Y”而不是“你应该做X”或“如果你需要做X”)。这保持了AI消费的一致性和清晰度。
描述(前言): 使用第三人称格式,具有特定的触发短语:
---
name: 技能名称
description: 这个技能应该在用户询问“特定短语1”、“特定短语2”、“特定短语3”时使用。包括用户会说的确切短语,这些短语应该触发这个技能。具体而具体。
version: 0.1.0
---
好的描述示例:
description: 这个技能应该在用户询问“创建钩子”、“添加PreToolUse钩子”、“验证工具使用”、“实现基于提示的钩子”或提及钩子事件(PreToolUse、PostToolUse、Stop)时使用。
坏的描述示例:
description: 使用这个技能时,正在处理钩子。 # 错误的人,模糊
description: 当用户需要钩子帮助时加载。 # 不是第三人称
description: 提供钩子指导。 # 没有触发短语
要完成SKILL.md正文,回答以下问题:
- 技能的目的是什么,几句话?
- 何时应该使用技能?(包括在前言描述中,具有特定触发器)
- 在实践中,Claude应该如何使用技能?所有开发的可重用技能内容都应参考,以便Claude知道如何使用它们。
保持SKILL.md精简: 目标是1,500-2,000字的正文。将详细内容移动到references/:
- 详细模式 →
references/patterns.md - 高级技术 →
references/advanced.md - 迁移指南 →
references/migration.md - API参考资料 →
references/api-reference.md
在SKILL.md中引用资源:
## 额外资源
### 参考文件
有关详细模式和技术,请参阅:
- **`references/patterns.md`** - 常见模式
- **`references/advanced.md`** - 高级用例
### 示例文件
在`examples/`中的工作示例:
- **`example-script.sh`** - 工作示例
第5步:验证和测试
对于插件技能,验证与通用技能不同:
- 检查结构:
plugin-name/skills/skill-name/中的技能目录 - 验证SKILL.md:具有名称和描述的前言
- 检查触发短语:描述包括特定的用户查询
- 验证写作风格:正文使用命令/不定式形式,而不是第二人称
- 测试渐进式披露:SKILL.md精简(~1,500-2,000字),详细内容在references/
- 检查参考资料:所有引用的文件都存在
- 验证示例:示例完整且正确
- 测试脚本:脚本可执行且工作正常
使用技能审查代理:
询问:“审查我的技能,并检查它是否遵循最佳实践”
技能审查代理将检查描述质量、内容组织和渐进式披露。
第6步:迭代
在测试技能后,用户可能会请求改进。这通常发生在使用技能后不久,当时如何使用技能的上下文还很清楚。
迭代工作流程:
- 在实际任务中使用技能
- 注意困难或低效
- 确定应该如何更新SKILL.md或捆绑资源
- 实施更改并再次测试
常见改进:
- 加强描述中的触发短语
- 将长段落从SKILL.md移动到references/
- 添加缺失的示例或脚本
- 澄清模糊的指令
- 添加边缘情况处理
插件特定考虑因素
插件中技能的位置
插件技能位于插件的skills/目录中:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
├── commands/
├── agents/
└── skills/
└── my-skill/
├── SKILL.md
├── references/
├── examples/
└── scripts/
自动发现
Claude Code自动发现技能:
- 扫描
skills/目录 - 找到包含
SKILL.md的子目录 - 始终加载技能元数据(名称+描述)
- 当技能触发时加载SKILL.md正文
- 根据需要加载参考资料/示例
不需要打包
插件技能作为插件的一部分分发,而不是作为单独的ZIP文件。用户在安装插件时获得技能。
插件中的测试
通过在本地安装插件来测试技能:
# 使用--plugin-dir进行测试
cc --plugin-dir /path/to/plugin
# 提出应该触发技能的问题
# 验证技能是否正确加载
插件开发中的示例
学习这个插件中的技能作为最佳实践的示例:
钩子开发技能:
- 出色的触发短语:“创建钩子”、“添加PreToolUse钩子”等。
- 精简SKILL.md(1,651字)
- 3个参考资料/文件,详细内容
- 3个示例/工作钩子
- 3个脚本/实用程序
代理开发技能:
- 强大的触发器:“创建代理”、“代理前言”等。
- 专注于SKILL.md(1,438字)
- 参考资料包括Claude Code的AI生成提示
- 完整的代理示例
插件设置技能:
- 特定触发器:“插件设置”、“.local.md文件”、“YAML前言”
- 参考资料显示真实实现(multi-agent-swarm、ralph-loop)
- 工作解析脚本
每个都展示了渐进式披露和强大的触发。
实践中的渐进式披露
SKILL.md中包含什么
包括(技能触发时始终加载):
- 核心概念和概述
- 基本程序和工作流程
- 快速参考表
- 指向参考资料/示例/脚本的指针
- 最常见的用例
保持在3,000字以下,理想情况下1,500-2,000字
references/中包含什么
移动到references/(按需加载):
- 详细模式和高级技术
- 完整的API文档
- 迁移指南
- 边缘情况和故障排除
- 广泛的示例和演练
每个参考文件可以很大(2,000-5,000+字)
examples/中包含什么
工作代码示例:
- 完整、可运行的脚本
- 配置文件
- 模板文件
- 真实世界的使用示例
用户可以直接复制和适应这些
scripts/中包含什么
实用程序脚本:
- 验证工具
- 测试助手
- 解析实用程序
- 自动化脚本
应该是可执行和文档化的
写作风格要求
命令/不定式形式
使用动词优先指令编写,而不是第二人称:
正确(命令):
创建钩子时,定义事件类型。
使用身份验证配置MCP服务器。
使用前验证设置。
不正确(第二人称):
你应该通过定义事件类型来创建钩子。
你需要配置MCP服务器。
你必须在使用前验证设置。
描述中的第三人称
前言描述必须使用第三人称:
正确:
description: 这个技能应该在用户询问“创建X”、“配置Y”...时使用。
不正确:
description: 使用这个技能时,你想要创建X...
description: 当用户询问时加载这个技能...
客观、指令性语言
专注于要做什么,而不是谁应该做:
正确:
使用sed解析前言。
使用grep提取字段。
使用前验证值。
不正确:
你可以解析前言...
Claude应该提取字段...
用户可能验证值...
验证清单
在最终确定技能之前:
结构:
- [ ] SKILL.md文件存在,具有有效的YAML前言
- [ ] 前言具有
name和description字段 - [ ] 存在Markdown正文且有实质内容
- [ ] 引用的文件确实存在
描述质量:
- [ ] 使用第三人称(“这个技能应该在…”)
- [ ] 包括用户会说的具体触发短语
- [ ] 列出具体场景(“创建X”、“配置Y”)
- [ ] 不模糊或通用
内容质量:
- [ ] SKILL.md正文使用命令/不定式形式
- [ ] 正文专注且精简(理想情况下1,500-2,000字,最多<5k)
- [ ] 详细内容移动到references/
- [ ] 示例完整且有效
- [ ] 脚本可执行且有文档
渐进式披露:
- [ ] 核心概念在SKILL.md中
- [ ] 详细文档在references/中
- [ ] 工作代码在examples/中
- [ ] 实用程序在scripts/中
- [ ] SKILL.md引用这些资源
测试:
- [ ] 技能在预期的用户查询上触发
- [ ] 内容对预期任务有帮助
- [ ] 文件之间没有重复信息
- [ ] 需要时加载参考资料
避免的常见错误
错误1:触发描述弱
❌ 坏:
description: 提供有关使用钩子的指导。
为什么不好: 模糊,没有具体的触发短语,不是第三人称
✅ 好:
description: 这个技能应该在用户询问“创建钩子”、“添加PreToolUse钩子”、“验证工具使用”或提及钩子事件时使用。提供全面的钩子API指导。
为什么好: 第三人称,具体短语,具体场景
错误2:SKILL.md中太多内容
❌ 坏:
skill-name/
└── SKILL.md (8,000字 - 所有内容都在一个文件中)
为什么不好: 当技能加载时,上下文膨胀,详细内容始终加载
✅ 好:
skill-name/
├── SKILL.md (1,800字 - 核心必需品)
└── references/
├── patterns.md (2,500字)
└── advanced.md (3,700字)
为什么好: 渐进式披露,详细内容仅在需要时加载
错误3:第二人称写作
❌ 坏:
你应该从阅读配置文件开始。
你需要在使用前验证输入。
你可以使用grep工具进行搜索。
为什么不好: 第二人称,不是命令形式
✅ 好:
从阅读配置文件开始。
在使用前验证输入。
使用grep工具搜索模式。
为什么好: 命令形式,直接指令
错误4:缺少资源引用
❌ 坏:
# SKILL.md
[核心内容]
[没有提及references/或examples/]
为什么不好: Claude不知道参考资料的存在
✅ 好:
# SKILL.md
[核心内容]
## 额外资源
### 参考文件
- **`references/patterns.md`** - 详细模式
- **`references/advanced.md`** - 高级技术
### 示例
- **`examples/script.sh`** - 工作示例
为什么好: Claude知道在哪里找到额外信息
快速参考
最小技能
skill-name/
└── SKILL.md
适用于:简单的知识,不需要复杂资源
标准技能(推荐)
skill-name/
├── SKILL.md
├── references/
│ └── detailed-guide.md
└── examples/
└── working-example.sh
适用于:大多数插件技能,具有详细文档
完整技能
skill-name/
├── SKILL.md
├── references/
│ ├── patterns.md
│ └── advanced.md
├── examples/
│ ├── example1.sh
│ └── example2.json
└── scripts/
└── validate.sh
适用于:具有验证实用程序的复杂领域
最佳实践总结
✅ 做:
- 在描述中使用第三人称(“这个技能应该在…”)
- 包括具体的触发短语(“创建X”、“配置Y”)
- 保持SKILL.md精简(1,500-2,000字)
- 使用渐进式披露(将详细信息移动到references/)
- 以命令/不定式形式书写
- 清晰地引用支持文件
- 提供工作示例
- 为常见操作创建实用程序脚本
- 将插件开发技能作为模板学习
❌ 不做:
- 任何地方都不要使用第二人称
- 有模糊的触发条件
- 将所有内容放在SKILL.md中(>3,000字,没有references/)
- 以第二人称书写(“你应该…”)
- 让资源未引用
- 包括损坏或不完整的示例
- 跳过验证
附加资源
学习这些技能
插件开发技能展示了最佳实践:
../hook-development/- 渐进式披露,实用程序../agent-development/- AI辅助创建,参考资料../mcp-integration/- 全面的参考资料../plugin-settings/- 真实世界的示例../command-development/- 清晰的临界概念../plugin-structure/- 良好的组织
参考文件
有关完整的技能创建者方法:
references/skill-creator-original.md- 完整的原始技能创建者内容
实施工作流程
要为您的插件创建技能:
- 了解用例:确定技能使用的具体情况
- 计划资源:确定需要什么脚本/参考资料/示例
- 创建结构:
mkdir -p skills/skill-name/{references,examples,scripts} - 编写SKILL.md:
- 带有第三人称描述和触发短语的前言
- 精简正文(1,500-2,000字)以命令形式
- 引用支持文件
- 添加资源:根据需要创建references/、examples/、scripts/
- 验证:检查描述、写作风格、组织
- 测试:验证技能是否在预期的触发器上加载
- 迭代:根据使用情况进行改进
专注于强大的触发描述、渐进式披露和命令写作风格,以创建在需要时加载并提供针对性指导的有效技能。