创建或更新技能文档(SKILL.md 及配套文件),使其符合平台结构和最佳实践。用于用户要求创建、编写或更新技能时。
文档技能 : 写入或更新一种技能, 以适应主机的预期结构是一项面向实际任务的技能,主要用于使用下面的结构和清单;输入 : 目标技能 – 技能文件夹路径( 如项目技能 prac)。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
编写或更新一项技能,使其符合宿主(host)所期望的结构。请使用下方提供的结构与核对清单。
skills/example/),或技能名称。若未提供任一输入: 使用当前上下文或已明确讨论的上下文(例如正在讨论的技能本身或其路径)。
SKILL.md 文件被更新(如需,同步更新配套文件)。
SKILL.md(严格大小写敏感,名称不可变更)。-;禁止空格、下划线 _ 或大写字母)。Frontmatter 中的 name 字段值必须与该文件夹名完全一致。skills// )。宿主会从该路径自动发现技能,即使该路径嵌套在子包内(如 package 内部)。README.md;所有说明性内容应统一置于 SKILL.md 或 references/ 中。长篇参考材料应放入 references/ 并在 SKILL.md 中链接(渐进式披露)。SKILL.md 应控制在约 5000 字以内。长篇参考资料请移入 references/ 并通过链接引用。SKILL.md 正文仅在技能相关时加载;(3) references/ 或 assets/ 中的文件仅在实际需要时打开。此举可在保障专业能力可用的前提下,最小化 token 消耗。SKILL.md 格式规范--- 包裹的 YAML 区块)Frontmatter 定义技能的触发时机与运行方式。下表遵循官方技能参考文档。
name 与 description 为必填字段。name 必须与文件夹名(kebab-case)完全一致。description 应严格遵循格式:[功能描述] + [适用场景] + [核心能力],总长度不超过 1024 字符;禁止使用 XML 尖括号(< >)。避免模糊表述(如“辅助项目工作”);需包含具体触发短语,并在必要时注明文件类型(例如“.fig 文件”、“PDF 合同审查”)。
| 字段 | 是否必需 | 说明 |
|---|---|---|
name |
是 | 仅允许 kebab-case;必须与技能文件夹名一致。仅允许小写字母、数字与短横线(最大长度 64 字符)。 |
description |
是 | [功能描述] + [适用场景] + [核心能力]。需包含触发短语(例如“当用户说 save 或 /save 时使用”)。如涉及特定文件类型,请明确指出。总长度不超过 1024 字符;禁止出现 < 或 >。 |
argument-hint |
否 | 自动补全时显示的参数提示。示例:[issue-number] 或 [filename] [format]。 |
disable-model-invocation |
否 | 设为 true 可禁用自动加载;适用于需手动通过 /name 触发的工作流。默认值:false。 |
user-invocable |
否 | 设为 false 可将其从 / 菜单中隐藏。适用于仅供后台知识调用、不应由用户直接触发的技能。默认值:true。 |
allowed-tools |
否 | 当该技能处于激活状态时,助手可无需请求权限即可使用的工具列表。 |
model |
否 | 该技能激活时指定使用的模型。 |
context |
否 | 设为 fork 可在 forked 子代理(subagent)上下文中运行。 |
agent |
否 | 当设置 context: fork 时,指定使用的子代理类型。 |
hooks |
否 | 限定于本技能生命周期的钩子(hook)。配置格式详见《技能与代理中的 Hooks》。 |
可选字段: license(例如开源项目使用 MIT)、compatibility(1–500 字符:产品依赖、系统依赖、网络要求等)、metadata(例如作者、版本号、mcp-server 等)。详见完整技能指南。
安全要求: Frontmatter 中禁止出现 XML 尖括号(< >)。技能名称中避免使用保留字(如宿主或厂商名称)。
YAML 注意事项: 避免在字段值中使用冒号(:),否则可能被误解析为新字段键。建议改用类似 “Scope is” 的表达,而非 “Scope:”。
/skill-name 直接调用。建议设置 disable-model-invocation: true 以禁用自动加载。为便于快速扫描,所有技能正文须严格遵循以下节标题顺序:
python scripts/validate.py --input {filename}”,而非“验证数据”)。需涵盖常见错误的处理方式;必要时引用配套文件(例如:“查询前请先查阅 references/api-patterns.md”)。仅当某节内容确实完全不适用时才可跳过。不确定时,请至少包含 输入、输出、流程 和 参考 四节;并在有助于理解时补充 示例 与 故障排查。整体布局须与仓库中其他技能保持一致。
依据官方文档定义:
$ARGUMENTS —— 调用技能时传入的所有参数。若正文中未显式使用该变量,则参数将自动追加为 ARGUMENTS: 形式。$ARGUMENTS[N] 或 $N —— 第 N 个参数(索引从 0 开始)。${CLAUDE_SESSION_ID} —— 当前会话 ID(由宿主定义)。${CLAUDE_SKILL_DIR} —— 包含该技能 SKILL.md 文件的目录路径(由宿主定义)。关于如何在技能运行前注入 Shell 命令输出,请参阅《注入动态上下文》。
description 须严格遵循 [功能描述] + [适用场景] + [核心能力] 格式,且内容具体(包含用户可能说出的短语,例如“当用户说 save 或 /save 时使用”)。name 须与技能文件夹名一致。对于任务型或具副作用的技能,请按官方文档要求设置 disable-model-invocation: true。SKILL.md 总行数应少于 500 行;长篇参考资料请移至其他文件,并在 SKILL.md 中链接(渐进式披露)。scripts/、references/ 或 assets/,须在 SKILL.md 中明确说明,并指出加载时机。保持 SKILL.md 聚焦核心说明;长篇或细节类文档请放入 references/ 并建立链接。$ARGUMENTS 或 $N,并视情况添加 argument-hint。disable-model-invocation 和/或 user-invocable,确保技能在预期场景下运行(参见《控制谁可调用技能》)。SKILL.md(如需,同步更新配套文件)。仅记录技能实际具备的能力;禁止添加尚未实现的功能。用户说: “创建一个用于验证 CSV 上传的技能。”
操作: 创建文件夹 skills/validate-csv/(或项目指定的技能路径;注意 kebab-case)。添加 SKILL.md 并填写必需的 frontmatter(name: validate-csv;description 须符合 [功能描述] + [适用场景] + [核心能力] 格式,例如:“验证 CSV 上传。当用户说 validate CSV、check upload 或 /validate-csv 时使用。核心能力:Schema 校验、编码自动识别。”)。依次添加 输入、输出、流程、可选的 参考。若技能需运行脚本,请添加 scripts/validate.sh 并在 流程 中引用。
结果: 新建技能可响应所述触发短语;若该技能属于某个流程,协调器(coordinator)与相关流程也将自动更新。
用户说: “更新 save 技能,使其提及 update-gitignore。”
操作: 打开 save 技能的 SKILL.md(例如 skills/save/SKILL.md)。在 流程 中添加新步骤或引用。若触发短语发生变更,请同步更新 description。若 Save 流程有改动,还需同步更新协调器(coordinator)与 references/coordinator-flows.md。
Frontmatter 无效 / 上传失败。
原因:YAML 格式错误(缺少 --- 分隔符、引号未闭合、或字段值中冒号被误识别为新字段键)。
解决方案:确保 frontmatter 完全位于两个 --- 行之间;描述文本中避免使用冒号,改用 “Use when” 而非 “When:”;frontmatter 中禁止出现 < 或 >。
技能未触发。
原因:description 过于模糊,或未完整包含三要素公式(功能描述、适用场景、核心能力),或缺失明确触发短语。
解决方案:严格使用 [功能描述] + [适用场景] + [核心能力] 格式,并加入具体触发短语(例如“当用户说 X、Y 或 /skill-name 时使用”)。若该技能属于某个流程,这些短语也应出现在协调器流程表中。调试建议: 向助手提问:“你会在什么情况下使用 [技能名] 技能?”,根据其回答中缺失的部分调整 description。
技能触发过于频繁。
原因:description 描述范围过宽,或与其他技能存在重叠。
解决方案:添加否定性触发条件(例如“切勿用于简单数据探索;请改用 data-viz 技能”)。收窄适用范围(例如“专用于 PDF 法律合同审查”,而非“处理文档”)。明确说明不适用场景(例如“仅限在线支付工作流,不适用于通用金融查询”)。
文件夹名错误。
原因:文件夹名含空格、下划线或大写字母。
解决方案:重命名为 kebab-case 格式;同步更新 SKILL.md 中的 name 字段;更新所有引用位置(协调器、代理、README、package.json、检查清单脚本、agents/references/ 等)。
references/coordinator-flows.md 中的流程步骤,确保流程表与代理描述保持一致。generate-figma → designer-figma),请更新所有引用位置:协调器、代理、README、package.json、其他技能中对该技能的链接、verify-task 检查清单脚本、agents/references/(例如若该技能出现在某个流程中,则需更新 coordinator-flows.md)、以及 .gitignore。官方技能参考文档 —— 包含 frontmatter 字段说明、调用权限控制、子代理运行方式、变量替换语法等。协调器(Coordinator)— 流程表与代理描述须遵循 [功能描述] + [适用场景] + [核心能力] 公式,并与用户实际说出的短语保持一致。
完整技能构建指南 —— 渐进式披露机制、description 公式详解、优秀/反面示例、可选 frontmatter 字段、触发逻辑与故障排查、最佳实践等。