关于 create-skill
create-skill 在当前工作目录中创建技能文件,并链接到 Claude Code 的发现路径。它引导作者定义精简契约、组织内容并验证结果。
主要功能
- 01创建技能源文件及 Claude Code 符号链接
- 02区分工作流、脚本、参考资料和资源
- 03定义技能契约与内容布局
- 04获取最新 Agent Skills 规范
- 05检查路径和生成文件
适用场景
- 01初始化新的 Claude Code 技能
- 02为含条件参考资料的技能安排结构
- 03为技能添加确定性辅助脚本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ paulrberg/ agent-skills --skill create-skill安装后在 Claude Code 中输入/create-skill确认已加载。
附带文件agents/openai.yamlreferences/writing-great-skills.md
详细介绍
创建技能
先用一份小巧、可观察的契约搭建技能,然后将其符号链接到 .claude/skills/,以便 Claude Code 发现
它。将不变的工作流指导保留在 SKILL.md 中;将确定性的操作细节和条件性内容移至脚本和
参考资料中。
模型优化
针对 GPT-5.6 和 Claude Fable 5 优化每项新技能及其内容。以下摘要仅作提醒,不能替代实时指南。在设计或编写复杂、长时间运行、多工具或编排密集型技能之前,请阅读两份指南,因为其中的建议可能会更新。
- GPT-5.6 提示指导:优先使用精简、以结果为先的提示,明确目标、成功和停止条件、约束、证据、权限边界、工具路由、输出形式和验证方式。移除冗余的脚手架,并在具有代表性的任务上评估更改。
- Claude Fable 5 提示指导: 使用简洁的指令说明意图和边界;避免过度规定和范围蔓延;审慎调整投入程度;确保进度声明有工具证据支撑;并在需要时明确说明长期运行任务的验证方式和脚手架。
参数
- skill-name(必填):kebab-case 格式的名称(例如,
my-skill)。如果缺失或无效,则停止。
拒绝 --global、显式目标路径及其他范围覆盖选项。调用时的工作目录是唯一受支持的范围。
解析路径
将 <scope> 设为调用技能时所在的工作目录。在 <scope>/.agents/skills/<name>/ 下创建源文件,并在 <scope>/.claude/skills/<name> 创建 Claude Code 符号链接。从嵌套项目或工作区中调用时,不要将范围重定向到仓库根目录。切勿在 ~/.agents、~/.claude、~/.codex 或其他全局安装目录下创建或修改技能。
符号链接目标始终是相对路径 ../../.agents/skills/<name>。
技能布局
<name>/
├── SKILL.md # Required: frontmatter + lean workflow (aim for <500 lines)
├── agents/
│ └── openai.yaml # Required: Codex metadata; disables implicit invocation
├── scripts/ # Optional: helper code (prefer TypeScript via bun run; Python via uv)
├── references/ # Optional: long-form docs loaded on demand
└── assets/ # Optional: templates / fonts / images used in OUTPUT (never loaded into context)
Agent 通过渐进式披露分三个阶段加载技能:
- 发现——启动时仅显示
name和description。在description中优先写明触发条件。 - 激活——任务匹配后,读取完整的
SKILL.md正文。 - 执行——运行
scripts/时不会将其读入上下文;只有在SKILL.md中明确链接的references/才会被读取。
让 SKILL.md 聚焦于工作流。将大量内容移至 scripts/(确定性逻辑)或 references/(文档)。
编写契约
选择布局之前,先将内容分为:
- 不变量:每次有效执行都必须遵守的内容。
- 首选默认值:明确的用户意图或仓库证据可以覆盖的内容。
- 条件示例和参考资料:仅在对应分支启用时加载的内容。
定义预期结果、权限边界、停止条件和完成证据。如果有多种安全路径都能满足同一契约,不要规定完全相同的执行路径。对于面向用户的工作流,还要定义哪些启动、进度、决策、阻塞和完成事件需要发送消息,以及每种消息最精简且有用的形式。
何时拆分内容
在以下情况下使用 scripts/
- 每次调用时都需要重写相同的代码(例如,旋转 PDF、转换 JSON、封装 curl)。
- 确定性比灵活性更重要(解析、验证、代码生成、幂等设置)。
- Shell 管道超过约 5 行,或需要真正的错误处理。
- 长段 here-doc 反复出现在
SKILL.md中。
脚本可以节省令牌:Agent 调用脚本时无需读取脚本内容。在 SKILL.md 中记录 CLI 签名,并将实现放在 scripts/ 中。
优先使用 scripts/*.ts,并通过 bun run scripts/<name>.ts 运行,除非有充分理由认为 TypeScript 不适合该辅助工具。Python 也是处理数据、文本和文件的好选择;运行 Python 辅助工具时请使用 uv run scripts/<name>.py,不要直接使用 python 或 python3。
在以下情况下使用 references/
- 某个主题的说明、示例或架构超过约 100 行。
- 内容只在特定条件下相关(取决于变体、框架或领域)——拆分文件可以避免无关上下文。
- 详细的 API 接口、数据库架构、策略或大型模板会占据
SKILL.md的大部分篇幅。 - 只有在某个分支中才需要长篇说明。
经验法则:
- 只分一层——从
SKILL.md直接链接到references/placeholder.md,不要在参考文件之间互相引用。 - 文件超过 100 行:在顶部添加目录。
- 文件超过 10k 个单词:在
SKILL.md中记录 grep 模式,让 Agent 无需通读全文就能定位章节。 - 不重复——每项事实只放在
SKILL.md或某个参考文件中,不能两处都有。让各项技能保持自包含,不要在独立安装的技能之间共享参考文件。 - 对于每份参考文件,都要在
SKILL.md中用一行说明_何时_阅读该文件。
参考文件的组织模式
模式 A — 高层指南 + 主题参考文件
SKILL.md
references/
├── forms.md
├── api.md
└── examples.md
SKILL.md 讲解推荐流程;参考文件包含深入内容。
模式 B — 按领域或变体拆分
SKILL.md # workflow + selection logic
references/
├── aws.md
├── gcp.md
└── azure.md
Agent 只读取用户选择的变体——无关的提供商不会进入上下文。
模式 C — 条件性细节
在 SKILL.md 中写入基本情况,并链接到包含边缘情况的进阶文件(tracked-changes.md、ooxml.md 等)。
不要添加到技能中
README.md、INSTALLATION.md、CHANGELOG.md、QUICK_REFERENCE.md——这些都无关。- 关于技能编写方式的说明、测试日志、临时文件。
- Agent 在运行时不会用到的任何内容。
工作流
1. 获取 Agent Skills 文档
编写 frontmatter 或内容前,务必先获取最新规范:
使用 WebFetch 确认当前的 frontmatter 架构、命名规则和渐进式披露约定。不要猜测——规范会不断演进。
2. 验证
- 拒绝不符合 kebab-case 命名规则或与解析后的路径中现有技能冲突的名称。
- 确认
<scope>是调用时的工作目录,且不是用户主目录级或全局技能目录。 - 如果
<scope>/.agents/skills/<name>/或<scope>/.claude/skills/<name>已存在,则停止。
3. 阅读编写指南并定义约定和布局
在选择约定或布局前,先阅读 references/writing-great-skills.md。该指南定义了可预测性的调节手段,以及采用散文还是代码或架构的判断标准。
然后定义可观察结果、不变量、首选默认值、权威来源、路由、停止条件和完成证据。确定各部分的归属:
- 工作流会调用辅助代码吗?→ 优先使用通过
bun run运行的scripts/<name>.ts;如果 Python 更合适,则通过uv run使用scripts/<name>.py。 - 供机器使用且有实际验证器的架构?→ 将两者一并打包,并说明验证方式。
- 仅供参考的架构文档、较长示例、变体指南或领域知识?→
references/<topic>.md - 技能会写入用户输出的模板或文件?→
assets/ - 以上都不是?→ 只提交
SKILL.md。
先草拟目录树,再只创建布局实际需要的子目录。
4. 创建技能
mkdir -p "<scope>/.agents/skills/<name>/agents"
# Add only the subdirectories the layout calls for:
# mkdir -p "<scope>/.agents/skills/<name>/scripts"
# mkdir -p "<scope>/.agents/skills/<name>/references"
编写 <scope>/.agents/skills/<name>/SKILL.md,其中包含:
- 按字母顺序排列的 Frontmatter,并将
description放在最后。发现阶段只能看到description,因此应在其中优先写明触发短语,而不是放在正文中。 - 简短的
# Title。 - 用一句话概述技能的作用。
- 设置
disable-model-invocation和user-invocable字段以控制 Claude 的行为。只有在有意依赖 Claude 默认值时才省略:disable-model-invocation: false、user-invocable: true。 ## Arguments(如果有)和精简的命令式工作流。只有顺序重要时才使用固定步骤;否则说明约定,并让仓库证据指导执行。- 明确链接到工作流可能需要的每个
references/文件,并用一句话说明何时阅读。 - 为任何打包的脚本提供 CLI 签名,包括运行时命令(
bun run scripts/<name>.ts或uv run scripts/<name>.py),以便 Agent 无需阅读脚本即可调用。
尽量将 SKILL.md 控制在 500 行以内。如果某个部分超过约 50 行且不属于核心工作流,请将其移至 references/ 并添加链接。
编写 <scope>/.agents/skills/<name>/agents/openai.yaml,其中包含:
policy:
allow_implicit_invocation: true
将 allow_implicit_invocation 设为 SKILL.md 中 disable-model-invocation 的相反值。如果之后添加 Codex UI 元数据或 MCP/工具依赖项,请将其合并到同一文件中,并保持策略不变。
5. 创建 Claude Code 符号链接
始终创建相对符号链接,以便 Claude Code 能从自身的发现路径找到该技能:
mkdir -p "<scope>/.claude/skills"
ln -s "../../.agents/skills/<name>" "<scope>/.claude/skills/<name>"
6. 验证
- 补丁工具会以 0644 模式创建文件。首次运行验证前,对
scripts/和tests/下的每个可执行文件执行chmod 755(脚手架生成的测试首次运行时若因Permission denied (os error 13)而失败,原因就在于此)。 test -f "<scope>/.agents/skills/<name>/SKILL.md"test -f "<scope>/.agents/skills/<name>/agents/openai.yaml"readlink "<scope>/.claude/skills/<name>"应解析到源目录。- 对
scripts/*和tests/*中的每个可执行文件运行test -x,确保遗漏chmod时立即报错,而不是之后才出现权限错误。 - 最后输出
### 🧩 Skill created: <name>、已创建路径的目录树,以及包含精确检查项的### ✅ Verified。链接到绝对源路径和符号链接路径。 - 主动提出提交新技能。如果宿主项目的长期说明要求提交提示词,则无需再次询问,直接提交。
注意事项
- Frontmatter 规则:按字母顺序排列字段,但始终将
description放在最后。 - Codex 会在加载技能前将
SKILL.mdfrontmatter 解析为 YAML。避免在标量值中使用未加引号的冒号加空格,例如在description中写Triggers: "foo";可以省略标签,或将整个值加引号。 - “适用时机”信息应放在
description中(发现阶段),而非正文中(仅激活阶段)。 SKILL.md全文使用祈使式/不定式。SKILL.md中的所有路径(例如references/placeholder.md、scripts/example.sh)均相对于技能目录。- 每项新技能都必须包含
agents/openai.yaml,其中的policy.allow_implicit_invocation应根据SKILL.md推导,不能反过来。 - 优先使用通过
bun run运行的 TypeScript 辅助脚本;使用 Python 时通过uv run,切勿直接运行python或python3。 - 技能中的 Bash 脚本必须兼容 Bash 3.2(
/bin/bash),因为 Codex 默认使用内置 Bash。 - 除非技能自身的输出约定另有要求,否则辅助脚本的标准输出、命令、路径、frontmatter 和生成的技能内容都应保持原样,不添加装饰。