每个 Skill 都必须遵循这样的目录结构:
- 01 SKILL.md:这是 Skill 的"大脑",负责导航和高层流程控制。
- 02 References:从 SKILL.md 直接引用,只放一层子目录。
- 03 Scripts:用于处理容易出错或重复的操作,减少变数。不要把库代码放在这里。
这份指南将告诉你如何编写专业级的 Agent Skill,如何使用大语言模型(LLM)来验证它们,以及如何保持"上下文窗口"(context window)精简高效。
这是一份浓缩的精华指南。如果你想看完整的官方文档,可以访问 Claude 的文档。
每个 Skill 都必须遵循这样的目录结构:
SKILL.md 文件开头的 name 和 description 是 Agent 在决定是否调用某个 Skill 之前唯一能看到的两个字段。如果这两个字段写得不够清晰、不够具体,你的 Skill 就等于"隐身"了。
name 字段必须是 1-64 个字符,只能包含小写字母、数字和连字符(不能连续出现连字符),并且必须和父文件夹名称完全一致(例如:name: angular-testing 必须放在 angular-testing/SKILL.md 文件中)。
(最多 1024 个字符)。这是 Agent 路由决策时唯一看到的元数据。用第三人称描述功能,并包含"负面触发词"。
保持上下文窗口整洁,只在需要时才加载信息。SKILL.md 是高层逻辑的"大脑";把细节内容放到子目录中。
references/schema.md,而不是 references/db/v1/schema.md)。
references/:API 文档、速查表、领域逻辑。scripts/:用于确定性任务的可执行代码。assets/:输出模板、JSON 模式、图片。references/auth-flow.md 了解具体的错误代码")。
/),不管操作系统是什么。
README.md、CHANGELOG.md 或 INSTALLATION_GUIDE.md。为 LLM 创建指令,而不是为人类。
把工作流程定义为严格的时间顺序。如果有决策树,清晰地画出来(例如:"第 2 步:如果需要源码映射(source map),运行 ng build --source-map。否则,跳到第 3 步。")。
Agent 的模式匹配能力非常强。与其花大段文字描述 JSON 输出应该长什么样,不如把模板放在 assets/ 文件夹里,然后告诉 Agent 复制它的结构。
把指令框定为对 Agent 的直接命令(例如:"提取文本..." 而不是 "我将提取..." 或 "你应该提取...")。
在 Skill 文件中引用概念时要具体且一致。
不要让 LLM 每次都从零开始写复杂的解析逻辑或样板代码。
既然 LLM 会使用你的 Skill,确保它们有用的最好方法就是和 LLM 一起协作验证。
为你的 Skill 准备评估(evals)非常重要,以确保你做的改动有积极影响,不会导致功能倒退。一个流行的 Skill 基准测试是 SkillsBench,可以给你一些灵感。
一旦你完成了 Skill 的初稿,可以通过以下步骤来验证你的工作:
Agent 严格根据 YAML 元数据来加载 Skill。测试 LLM 如何单独解读你的描述,以防止误触发(比如明明是用于 Angular 的 Skill,却在 React 项目上被触发)。
把下面这段文字原封不动地粘贴到一个新的 LLM 对话中:
name: angular-vite-migrator
description: 将 Angular CLI 项目从 Webpack 迁移到 Vite 和 esbuild。当用户想要更新构建器配置、用 rollup 等效插件替换 webpack 插件,或加速 Angular 编译时使用。此外,用你期望触发 Skill 的任务提示 Agent,并检查它的思考过程。和 Agent 来回对话,找出它选择(或不选择)特定 Skill 的原因。
确保你的分步指令是确定性的,不会强迫 Agent 去"编造"(hallucinate)缺失的步骤。
把你的整个 SKILL.md 和目录结构喂给 LLM:
├── SKILL.md
├── scripts/esbuild-optimizer.mjs
└── assets/vite.config.template.ts
强迫 LLM 去寻找漏洞、不支持的配置,以及 Web 工具固有的失败状态。
让 LLM 攻击你的逻辑:
scripts/esbuild-optimizer.mjs 因为遗留的 CommonJS 依赖而失败怎么办?angular.json 包含 Vite 不支持的深度定制 Webpack 构建器(@angular-builders/custom-webpack)怎么办?LLM 经常试图把大型配置文件直接塞进主提示。用这一步来强制执行渐进式披露,缩小 Token 占用。
让 LLM 应用你的修复并重组 Skill:
SKILL.md 严格作为高层步骤集,使用第三人称命令式(例如,执行 esbuild 脚本,读取 Vite 配置模板)。vite.config.ts 模板,或复杂的 angular.json 模式,把它们移除。告诉我创建一个新文件在 references/ 或 assets/ 中,并用一个严格的命令替换 SKILL.md 中的文本,只在需要时读取那个特定文件。