用途
create-agent-skills 是一个用于指导创建 Claude Code 技能(skills)与斜杠命令(slash commands)的技能。它依据 code.claude.com/docs/en/skills 的官方规范,帮助使用者编写有效的技能文件,适用于处理 SKILL.md 文件、编写新技能、改进现有技能等场景。
命令与技能的关系
自定义斜杠命令已合并到技能中。位于 .claude/commands/review.md 的文件与位于 .claude/skills/review/SKILL.md 的技能都会创建 /review,且工作方式相同。已有的 .claude/commands/ 文件继续可用。技能增加了可选特性:用于存放支持文件的目录、控制调用的 frontmatter,以及自动上下文加载。如果技能与命令同名,技能优先。
何时创建什么
使用命令文件(commands/name.md)的情况:简单、单文件工作流;不需要支持文件;面向任务的行动(部署、提交、分类)。
使用技能目录(skills/name/SKILL.md)的情况:需要支持性参考文件、脚本或模板;希望 Claude 自动加载的背景知识;复杂到足以受益于渐进式披露。
两者使用相同的 YAML frontmatter 和 markdown 内容格式。
标准 Markdown 格式
使用 YAML frontmatter 加 markdown 正文,采用标准 markdown 标题,保持简洁直接。示例结构包含 name、description 字段,以及 Quick Start、Instructions、Examples 等章节。
Frontmatter 参考
所有字段均为可选,仅 description 被推荐。
- name:显示名称,小写字母、数字、连字符(最多 64 字符),默认取目录名。
- description:说明它做什么以及何时使用,Claude 用它进行自动发现,最多 1024 字符。
- argument-hint:自动补全时显示的提示,例如 [issue-number]。
- disable-model-invocation:设为 true 可阻止 Claude 自动加载,用于 /deploy、/commit 等手动工作流,默认 false。
- user-invocable:设为 false 可从 / 菜单隐藏,用于背景知识,默认 true。
- allowed-tools:Claude 无需权限提示即可使用的工具,例如 Read, Bash(git *)。
- model:使用的模型,可选 haiku、sonnet、opus。
- context:设为 fork 可在隔离子代理上下文中运行。
- agent:当 context: fork 时的子代理类型,可选 Explore、Plan、general-purpose 或自定义代理名。
调用控制
默认情况下,用户和 Claude 都可调用,description 始终在上下文中,完整内容在被调用时加载。设置 disable-model-invocation: true 后,用户可调用但 Claude 不可调用,description 不在上下文中,仅在用户调用时加载。设置 user-invocable: false 后,用户不可调用但 Claude 可调用,description 始终在上下文中,在相关时加载。
对于有副作用的工作流(/deploy、/commit、/triage-prs、/send-slack-message)应使用 disable-model-invocation: true,避免 Claude 因代码看起来就绪而自行决定部署。对于并非有意义用户操作的背景知识(编码约定、领域上下文、遗留系统文档)应使用 user-invocable: false。
动态特性
参数:使用 $ARGUMENTS 占位符接收用户输入。如果内容中没有该占位符,参数会自动追加。可通过 $ARGUMENTS[0] 或简写 $0、$1、$2 访问单个参数。
动态上下文注入:!command 语法会在内容发送给 Claude 之前运行 shell 命令。
在子代理中运行:添加 context: fork 可隔离运行,技能内容成为子代理的提示词,它不会拥有对话历史。
渐进式披露
保持 SKILL.md 在 500 行以内,将详细内容拆分到参考文件。典型结构为 my-skill/ 目录下包含 SKILL.md(入口点,必需,概览加导航)、reference.md(详细文档,按需加载)、examples.md(使用示例,按需加载)、scripts/helper.py(工具脚本,执行而非加载)。从 SKILL.md 链接引用,保持引用距 SKILL.md 一层深度,避免嵌套链。
有效描述
description 用于技能发现,应同时包含它做什么以及何时使用。好的示例会具体说明功能与触发条件;差的示例过于笼统。
创建新技能或命令的步骤
第 1 步:选择类型。判断是手动工作流(部署、提交、分类)还是背景知识(约定、模式)。手动工作流使用带 disable-model-invocation: true 的命令;背景知识使用不带该设置的技能;复杂且带支持文件的使用技能目录。
第 2 步:创建文件。命令与技能分别给出 frontmatter 与正文结构示例。
第 3 步:按需添加参考文件,从 SKILL.md 链接到详细内容。
第 4 步:用真实使用测试。用实际任务而非测试场景测试;直接用 /skill-name 调用验证;通过提出与 description 匹配的问题检查自动触发;根据真实行为改进。
审计清单
有效的 YAML frontmatter(name + description);description 包含触发关键词且具体;使用标准 markdown 标题(而非 XML 标签);SKILL.md 在 500 行以内;若有副作用则设置 disable-model-invocation: true;如需特定工具则设置 allowed-tools;引用距一层深度且正确链接;示例具体而非抽象;已用真实使用测试。
应避免的反模式
正文中使用 XML 标签(应使用标准 markdown 标题);描述含糊(应具体并含触发关键词);深层嵌套(引用应距 SKILL.md 一层);缺少调用控制(有副作用的工作流需要 disable-model-invocation: true);选项过多(应提供默认值加逃生通道);把问题推给 Claude(脚本应显式处理错误)。
参考文件
详细指导见 official-spec.md(官方技能规范)与 best-practices.md(技能编写最佳实践)。
来源
Extend Claude with skills - 官方文档;GitHub - anthropics/skills。