Agent Skills 与 SKILL.md:实测渐进式披露
5 个真实 skill 含 128,374 个 token 指令,却只占 253 个 context token;删短描述后,agent 就找不到它们。
本页内容
以一个安装了五个已发布 skills 的项目为例。先看它们的成本。
ls .claude/skills/next-best-practices next-cache-components vercel-composition-patterns
vercel-react-best-practices vercel-react-native-skillsskill level 1 level 2 level 3 files
next-best-practices 40 966 19,374 19
next-cache-components 28 2,334 0 0
vercel-composition-patterns 59 533 10,667 13
vercel-react-best-practices 68 1,670 53,670 75
vercel-react-native-skills 58 950 37,957 41
------ ------- --------
total 253 6,453 121,668十二万八千个 token 的指令、示例和规则——超过一个 128,000-token context window 所能容纳的量——而让这五个 skill 全部可用的常驻成本是 253 个 token,也就是千分之二。本课程里没有别的东西呈现出这种形状。工具定义无论用不用,每次请求都要付费;而 第 26 章测得,一个 MCP 服务器在还没做任何事之前就需要 1,619 个 token:是上表平均 level-1 行的 32 倍。
本章讲的就是产生这个比例的机制、它失效的两种方式,以及这个机制迫使我们面对、却几乎没人回答的问题:给定一段知识,它到底应该放在四个位置中的哪一个。
为什么本章没有编程语言
链接到此部分:为什么本章没有编程语言第 14 章为本课程后半部分定下规则——连接、重试和取消都用 TypeScript——并声明了五个例外。本章就是其中之一,原因不是偏好。
skill 是一个 Markdown 文件。 不是配置程序的文件,也不是被程序编译的文件:它是模型会去阅读的文档,就像它阅读你输入的消息一样。给本章指定一门编程语言,就意味着没有理解这种格式,而这种误解正是关于 skills 最常见的一种。下面的内容全是 Markdown 和 YAML,外加一个很小的 shell 脚本;这个脚本存在的目的,恰恰是展示代码在 skill 里应该放在哪里、不应该放在哪里。
它解决的账单问题,也就是第 16 章的算术
链接到此部分:它解决的账单问题,也就是第 16 章的算术这里有一条真实指令:某家公司如何撰写发布说明。这是一套流程,不是偏好——它有有序步骤、分类法、语气、模板,以及一个收集原始材料的脚本。
像大多数团队那样,把所有内容都塞进 system prompt,第 16 章的算术就会接管。system prompt 是前缀,而前缀在每一次调用里都要付费。用 o200k_base 测量本章所写的文件夹:
whole thing pasted into the system prompt 1,716 x 40 = 68,640 input tokens $0.1373
as a skill, activated once on turn 12 46 x 40
+ 324 (SKILL.md body)
+ 665 (two reference files read)
= 2,829 input tokens $0.0057
as a skill, never activated at all 46 x 40 = 1,840 input tokens $0.0037使用时便宜 24 倍,不使用时便宜 37 倍。费率沿用第 16 章:每百万输入 token $2.00。
现在说诚实的反驳,因为跳过它的章节就会变成广告。prompt caching 基本抹平了金钱差距。 system prompt 是稳定的,而且位于最前面,这使它成为最理想的缓存候选;按缓存输入每百万 $0.20 计算,同样的 68,640 个 token 成本是 $0.0168,而不是 $0.1373。仍然是 skill 的三倍,但不再是数量级差异。
金钱从来不是最强的论点。真正的论点是这个:
缓存会让永久前缀更便宜。它不会让前缀更小。
到第 40 轮时,system-prompt 版本仍然有 1,716 个 token 的发布说明策略待在窗口里,即使对话主题已经完全是别的事;它仍在争夺 第 24 章所说的模型 attention 预算。skill 版本只有 46 个。缓存错了东西,你买到的只是对干扰项的折扣。
写成公式,令 为轮数, 为元数据, 为正文, 为整个包, 为实际读取的打包文件集合:
本章全部内容,就是第二项乘以 ,与把它乘以一或零之间的区别。
skill 到底是什么
链接到此部分:skill 到底是什么skill 是一个目录。规范短到可以完整写出来:
release-notes/
├── SKILL.md # required: YAML frontmatter + Markdown instructions
├── scripts/ # optional: executable code
├── references/ # optional: documentation read on demand
├── assets/ # optional: templates, schemas, examples
└── ... # anything else you likeSKILL.md 必须以 YAML frontmatter 开头,并且正好有两个必填字段:name 和 description。1 还有四个可选字段,并且没有定义其他字段:
| 字段 | 必填 | 约束 |
|---|---|---|
name | 是 | 1–64 个字符,小写字母、数字和连字符;不能以连字符开头或结尾,不能有连续连字符;必须与目录名匹配 |
description | 是 | 1–1024 个字符,非空;说明 skill 做什么,以及何时使用它 |
license | 否 | 许可证名称,或打包的许可证文件名 |
compatibility | 否 | 最多 500 个字符:目标产品、所需软件包、网络访问 |
metadata | 否 | 从字符串键到字符串值的自由映射,供你自己的工具使用 |
allowed-tools | 否 | 以空格分隔的预批准工具列表;标记为实验性 |
下面是完整的 release-notes skill,正文不到三十行:
---
name: release-notes
description: Write the release notes for a tagged version in this company's house style. Use when preparing a release, drafting a changelog entry, or when someone asks for the notes for a version number or a tag.
allowed-tools: Bash(git log:*) Bash(git tag:*) Read
---
# Release notes
## Procedure
1. Run `scripts/collect.sh <previous-tag> <new-tag>`. It prints one line per merged
pull request: number, title, author and the labels.
2. Drop every line whose labels contain `internal`, `ci` or `chore`.
3. Put each surviving line into exactly one of the four categories in
[references/categories.md](references/categories.md). A change that seems to fit two
belongs in the higher one; the order in that file is the order of precedence.
4. Rewrite each line as a sentence in the voice defined in
[references/voice.md](references/voice.md). The pull request title is a note to
the team; the release note is a note to a stranger.
5. Check the result against [references/examples.md](references/examples.md).
## The one rule that is not negotiable
Every note says what a person can now do, or what stopped happening to them. If a
sentence can only be understood by someone who has read the diff, it is not finished.读一下那段正文是什么。它不是策略——它是一个带操作顺序的目录。策略存在于它点名但没有内联的三个文件里。第一步还把工作交给脚本,因为脚本的代码根本不会进入 context window:进入的只有它的输出。2
三个 level,以及各自的成本
链接到此部分:三个 level,以及各自的成本加载模型有一个名字,也有三个阶段。规范给出这些阶段时附带了 token 预算:1
- 元数据,约 100 个 token:
name和description,每个已安装 skill 在启动时都会加载。 - 指令,建议低于 5,000 个 token:
SKILL.md正文,在 skill 被激活时加载。 - 资源,按需加载:打包文件,只有在某样东西需要它们时才加载。
参考文档在同一张表里放了第四列——何时加载、token 成本、内容——而关键是第三行:访问之前没有成本。3 总结整章的一句话也在那里:
文件在被访问之前不会消耗 context,因此 Skills 可以包含完整的 API 文档、大型数据集或大量示例。未使用的打包内容没有 context 惩罚。3
本章开头的实测表,就是用五个并非为本文而写的 skills 检查这一说法。两行值得对照阅读。
next-best-practices 有 966 个 token 的正文,链接到 19 个文件,这些文件共 19,374 个 token。让它修复 hydration error,agent 会读取正文加上 hydration-error.md:20,340 个 token 中只读 1,409 个,相差 14 倍,另外 18 个文件从未打开。
next-cache-components 有 2,334 个 token 的正文,并且没有任何打包文件。它是一个有效 skill,也写得很好,但它没有 level 3 可供披露。这是这项技术的诚实边界:渐进式披露只有在有东西可以推迟时才省钱。一个知识无法拆分的 skill,在激活时就要支付整个正文的成本,剩下唯一杠杆就是不要激活它。
破坏它:description 就是整个接口
链接到此部分:破坏它:description 就是整个接口Level 1 是基于一句话做出的路由决策。skill 的其他任何东西都不会影响它是否会被打开——不是正文质量,不是示例,不是脚本。所以 description 不是文档。它是查询表面,而且可能写错。
规范用一个好例子和一个坏例子说明了这一点,而坏例子只有四个词:description: Helps with PDFs.1 这值得测量,而不是直接接受。
六个 skills,每个都有一个合理的 description,说明它做什么以及何时使用。二十四个请求,每个 skill 四个,用真人会说的方式表达,而且从不点名 skill。模型在 system prompt 中看到六行,必须回答一个名称或 NONE。使用 greedy decoding,因此结果可复现。然后用同样二十四个请求和同样六个 skills 再跑一次,只是把 description 削减到只剩主题。
rich - sql-review: Review a SQL migration for locks, missing indexes and unsafe
defaults before it runs on the production database. Use when someone adds
or changes a migration, an index, or a table column.
thin - sql-review: Helps with SQL.rich 295 tokens of level 1 for six skills 18/24 correct = 75.0 % [55.1, 88.0]
thin 81 tokens of level 1 for six skills 10/24 correct = 41.7 % [24.5, 61.2]
paired: rich only 9, thin only 1, two-sided sign test p = 0.0215
answered NONE: rich 1 of 24, thin 9 of 24先读区间,正如 第 4 章坚持的那样,也正如 第 29 章会再次坚持的那样:它们重叠,而二十四个案例不能仅凭总体数给两个系统排序。真正定论的是配对比较,而它是 第 15 章的工具:在两个分支意见不一致的十个案例中,九个归丰富 description,一个归稀薄 description。这在常用阈值下成立。
现在读最后一行,那才是真正发现。使用稀薄 description 时,模型在二十四个请求中的九个回答了 NONE。不是选错 skill:而是没有 skill。下面四个是原文逐字摘录:
"Check this migration before I run it against production." -> release-notes
"Will this CREATE INDEX lock writes?" -> NONE
"Is this ALTER TABLE safe to deploy at peak traffic?" -> NONE
"Is 'seamless and powerful' allowed in the app store listing?" -> next-best-practices一个完美的 sql-review skill 已安装,带有正文、示例和清单,却连续三次在它本来要回答的三个问题上从未被打开。对一个 level 1 永远到达不了的 skill,level 2 和 level 3 都无关紧要。
修复成本:214 个 token,也就是 295 和 81 的差值,分摊在六个 skills 上。这是 第 18 章的发现从另一侧抵达。在那里,只改工具的 description,就把日期格式化从 24 个里对 2 个变成 24 个全对。这里,只改 skill 的 description,就把激活从 24 个里 10 个提升到 18 个。两种情况下,系统里最便宜的修复都是一句话;两种情况下,这句话都必须命名触发条件,而不只是主题:不是这个东西是什么,而是用户刚刚说了什么时它适用。
本章按自己的标准还欠一个警告。这是一个 5 亿参数模型,frontier model 的路由表现远好于 75%。请读取机制,而不是数量级:无论哪个模型阅读,路由信号都只有一句话;而任何模型都无法基于你没有写进那句话的信息做选择。
再破坏一次:成本 26,362 个 token 的逃生口
链接到此部分:再破坏一次:成本 26,362 个 token 的逃生口第二种失败与第一种相反。skill 被找到了,level 也正确拆分了,然后 agent 还是把它全读了。
vercel-react-best-practices 是一个真正构建得很好的 skill。它 1,670 个 token 的正文是一张包含八类的优先级表,以及一个点名 70 个规则文件的速查表,每个文件一行。规则就在旁边的磁盘上:70 个文件,最小 132 个 token,中位数 319,最大 1,052。问它一个关于 barrel imports 的问题,诚实成本是正文加一个文件——不到 2,400 个 token,而整个包是 53,670。
然后正文最后一行写着:
## Full Compiled Document
For the complete guide with all rules expanded: `AGENTS.md`AGENTS.md 是 26,362 个 token。它是 70 个规则文件的拼接版:规则之和是 25,784,差值来自它们之间的标题。所以这个 skill 给了 agent 一个选择:读一个中位数 319 个 token 的规则,或者读同样内容的全部版本,价格是前者的 83 倍——而且它用一句没有标明成本、也没有说明何时该这么做的话提供了这个选择。
这不是 bug,文件也没有错;编译好的文档对人类确实有用,对被要求审计整个代码库的 agent 也有用。它是一个带 level-2 邀请的 level-3 文件,这个教训也超出了这一个 skill:从 SKILL.md 指向外部的每条路径,都应该说明它的成本以及何时值得使用,因为模型无法知道某个文件名比它上面的那个文件名贵 83 倍。
同一个文件夹还给了一个关于陈旧性的较小教训。正文说「8 个类别中的 70 条规则」并列出了 70 条;rules/ 目录有 72 个文件,其中两个是脚手架(_template.md 和 _sections.md);旁边的 metadata.json 则说「40+ rules」。同一集合在一个文件夹中有三个计数,一个正确,一个只是算术结果,一个是早期版本遗留。skill 是文档,而文档会像一条已经从旁边代码漂移开的代码注释一样腐烂——区别是,这份文档由一台不会皱眉的机器阅读。
参考实现添加的字段,以及可移植性陷阱
链接到此部分:参考实现添加的字段,以及可移植性陷阱开放规范定义了六个 frontmatter 字段。参考实现 Claude Code 接受二十个。2 有五组值得按名称了解,因为它们正是这种格式不再只是文档的地方:
权限和调用。 allowed-tools 会为触发 skill 的那一轮预批准工具,并且授权会在下一条消息时清除;disallowed-tools 会移除它们。disable-model-invocation 阻止模型自行加载它,这会把 skill 变成由人运行的命令。user-invocable: false 则相反:对人隐藏,只对模型可用,用于背景知识。
隔离和成本。 context: fork 在单独的 sub-agent context 中运行 skill,拥有自己的窗口——也就是 第 25 章的 sub-agent 边界,用一行 YAML 表达——其中 agent 选择类型,background 决定这一轮是否等待。model 和 effort 会改变 skill 激活期间运行的模型,仅限该轮。
参数(arguments、argument-hint)允许人传入会被替换进正文的值,这使 skill 可作为 slash command 使用。作用域(paths)把激活限制在匹配某个 glob 的文件上。dynamic context injection 则是改变心智模型的那一项:形如 !`git diff HEAD` 的一行会在正文发送前运行,其输出会被替换进文本。文档是模板,其中一部分在读取时计算。
现在是陷阱,而且同一份文档也明说了:在 Claude Code 之外——在网页产品中、通过 Skills API、打包时——只允许六个规范字段,任何其他字段在上传时都是硬错误。2 所以,一个在某个产品里完美可用的 skill,会在同一供应商的另一个产品里安装失败,而且失败点是 frontmatter,而不是任何你能通过阅读 prose 测出来的地方。如果你打算让 skill 可移植,六个字段就是全部预算。如果你不打算,就在 compatibility 里说明,它正是为此而存在的。
本章存在就是为了这张表
链接到此部分:本章存在就是为了这张表四种东西经常被混为一谈,而这种混淆不是词汇洁癖:选错了,要么每一轮都花钱,要么失去你以为拥有的保证。
| System prompt | Skill | 工具 | MCP 服务器 | |
|---|---|---|---|---|
| 它是什么 | 每次请求里的文本 | 根目录是 SKILL.md 的文件夹 | 一个 JSON Schema 加上你代码中的 endpoint | 一个讲协议的进程或服务 |
| 模型做什么 | 总是读取它 | 当它判断 description 匹配时读取它 | 调用它,并等待你的结果 | 通过 host 调用它,每个服务器一个 client |
| 它的成本 | 全长,每一轮,永远如此 | 每轮约 50 个 token;若使用,正文读取一次 | 每轮都要付它的 schema;调用时执行 | 每个 schema 加上服务器的 instructions,每一轮 |
| 它能保证什么 | 什么都不能——它是建议 | 什么都不能——它是模型可能跳过的建议 | 你的代码在行动前强制执行的一切 | 服务器强制执行的一切 |
| 谁来写 | 你 | 你、同事或供应商 | 你 | 别人,为许多 host 编写 |
| 章节 | 15 | 本章 | 18 | 26 和 27 |
加粗的两行就是全部区别。skill 是被读取的;工具是被调用的。 skill 是进入 context window 的 prose,会和窗口里的其他所有内容争夺 attention;模型可以遵循它、误读它或忽略它,而系统里没有任何东西会注意到。工具则是一次离开模型之手的调用:你的代码接收参数、验证参数、检查权限并做决定。第 18 章把这描述为模型提出、你的代码处置,而这条分界线正是 skill 不具备的。
所以,六个真实案例,逐一判定:
「用用户的语言回答。不要说出你没有被告知的价格。」
链接到此部分:「用用户的语言回答。不要说出你没有被告知的价格。」System prompt。 它每一轮都适用,它是约束而不是流程,而且只有两句话。总是适用的东西没有什么可以渐进式披露;为了避免每轮支付两句话的成本,而每轮支付一条发现行的成本,并不是节省。
「我们这里如何写发布说明。」
链接到此部分:「我们这里如何写发布说明。」Skill。 它是流程性的,也许四十轮里只需要一次,可以拆成语气、分类法和示例,而且它是人会编辑的 prose。这就是这种格式的设计形状,上面的测量展示了它节省了什么。
「用订单标识符在仓库数据库里查订单。」
链接到此部分:「用订单标识符在仓库数据库里查订单。」工具。 背后有确定性函数,模型不应该即兴编写查询。把它写成 skill——一份解释如何查询仓库的文档——就是把 schema 交给模型然后祈祷。schema 加 endpoint 才会给它一个答案。
「在公司使用的每个 agent 产品里读写我们 tracker 中的 issues。」
链接到此部分:「在公司使用的每个 agent 产品里读写我们 tracker 中的 issues。」MCP 服务器。 这个能力不是你的,多个 host 需要它,而且它有认证故事。这就是第 26 章开头的 问题,协议就是答案,第 27 章还交付了两次。一个从没见过你文件系统的 host 无法发现 skill——而这恰恰是本章末尾标准化工作正在弥合的缺口。
「四百页的品牌手册。」
链接到此部分:「四百页的品牌手册。」四者都不是。 它是要查找的知识,不是要遵循的流程,应该放在 agent 会搜索的索引里:第 19 章。把它作为 level 3 打包是允许的、诱人的,也是错的,因为模型必须仅凭四十个文件名猜出哪个文件包含答案。真正适合作为 skill 的,是一份两页流程,告诉 agent 何时搜索那个索引、低相似度分数意味着什么,以及如何引用找到的内容。
「没有人工介入,绝不要退款超过二百欧元。」
链接到此部分:「没有人工介入,绝不要退款超过二百欧元。」带审批门的工具,绝不是 skill。 这是最重要的案例。写进 SKILL.md,这个限制就是模型读取并通常会遵守的一句话;写进退款工具,它就是在任何钱移动之前运行的分支。一个如果被越过会让你难堪的限制,不是文档。值得记住的规则是:如果忽略这条指令的后果比一个格式糟糕的答案更严重,那么这条指令就不该属于文档。
从内部行话到标准,以及数字
链接到此部分:从内部行话到标准,以及数字这段历史很短,时间点异常清楚,而且几乎没人讲这一部分。
Agent Skills 于 2025 年 10 月 16 日作为某个供应商的功能发布,在那篇公告中被定义为「有组织的指令、脚本和资源文件夹,agents 可以发现并动态加载它们,以便在特定任务上表现更好」;三个 level 通过一个值得保留的类比来描述:「就像一本组织良好的手册,先从目录开始,然后是具体章节,最后是详细附录」。4
2025 年 12 月 18 日,同一页面更新,宣布这种格式成为开放标准,拥有自己的规范 agentskills.io,治理向贡献开放,并提供参考验证器。3 在 2026 年 9 月 7 日阅读时,该标准的 client showcase 列出了 46 个产品——编辑器、终端、云平台和移动运行时,其中包括 Anthropic、OpenAI、Google 和 Mistral 的第一方 coding agents——每个都链接到自己的设置文档。1
它与 MCP 的汇合是在公开环境中进行的,而且有可核查的数字:
| 它是什么 | 打开时间 | 2026 年 9 月 7 日状态 | |
|---|---|---|---|
| SEP-2076 | Agent Skills as a First-Class MCP Primitive:新的 skills/list 和 skills/get 方法,一个 skills capability,一个 list_changed notification | 2026 年 1 月 13 日 | 已关闭,2026 年 2 月 24 日 |
| Skills Over MCP 工作组 | 定义 skills 如何「通过 MCP 被发现、分发和消费」;每周开会;列出 17 名成员,其中 2 名为负责人 | interest group 2026 年 2 月 1 日;working group 2026 年 4 月 16 日 | 活跃 |
| SEP-2640 | Skills Extension,Extensions Track:一个 skill:// 资源约定,扩展标识符 io.modelcontextprotocol/skills,通过 skills/list 发现,并通过 resources/read 获取内容 | 2026 年 4 月 23 日 | 评审中 |
有趣的是关闭,而不是提案本身。SEP-2076 要求在 tools、resources 和 prompts 之外增加第四个 primitive。由它形成的工作组决定答案是不:skills 搭载在已经存在的 resources primitive 上,作为 opt-in 扩展。5 第 26 章在协议自己的 changelog 里测到了同样的本能:sampling、roots 和 logging 被废弃,而不是保留。一个会移除自己所提提案的标准组织表现良好;之所以要把数字摆在前面讲这个故事,是因为你在别处读到的摘要仍会把 skills 描述成 MCP primitive。
接下来往哪里走
链接到此部分:接下来往哪里走现在你可以写一个 SKILL.md,把它拆成三个能够自付成本的 level,读取别人 skill 的 frontmatter,并知道哪些字段上传到别处时无法存活;你也可以回答整章围绕的问题——system prompt、skill、工具还是服务器——并给出理由,而不是凭习惯。
但你还不能判断自己的东西是否有效。
本章中所有重要主张都是测量,最重要的那个是准确率:24 个里 18 个对 24 个里 10 个,每个都有区间,二者之间还有配对检验,因为两个重叠的总体数什么也决定不了。那个工具是借来的。skill 的 description 是路由键,正文是模型可能遵循也可能不遵循的流程;这两者的性质都只能通过多次运行并给返回结果打分来发现——这就是 golden set、你在运行前写好的 grader,以及那个问它是否每一次都有效、而不是至少一次有效的 metric。
第 29 章就是这个,它开头的数字也是本章方法所依赖的数字:一个十次里成功七次的 agent 看起来像 70%,而它的 pass^10——十次全成功的概率——是零。它还在同两百份 transcript 上测量了三个 graders,在没有重新生成一个 token 的情况下得到 0%、13% 和 26%。在你信任刚写进 description 的那句话之前,你需要一个工具告诉你:它比你替换掉的那句话更糟。
Sources and method
链接到此部分:Sources and method本章中的每个 token 计数,都是在 2026 年 9 月 7 日用 tiktoken 0.14.0 和 o200k_base encoding 在本地生成的:对象包括本章开头列出的五个第三方 skills,以及为本章编写的 release-notes skill,其完整文本已在上文部分复现。Level 1 按 host 渲染进 system prompt 的单行 - name: description 测量;level 2 是去掉 frontmatter 后的 SKILL.md 正文;level 3 是文件夹中的其他所有文件。成本使用第 16 章针对 gpt-5.6-terra 测得的费率:每百万输入 token $2.00、每百万缓存输入 token $0.20,并应用到这些计数上——它们是基于实测 token 的算术,不是对真实账单的观察。撰写本章没有调用任何付费 API。
激活实验在一张消费级 GPU 上以 half precision 运行 Qwen/Qwen2.5-0.5B-Instruct,使用 greedy decoding,对六个 skills 发出 24 个请求,跑两次——一次使用说明 skill 做什么以及何时适用的 description,一次把 description 削减到只剩主题,风格类似规范自己的「poor example」。区间为 95% Wilson;配对比较是在十个不一致案例上的双侧 exact sign test;Wilson 区间来自第 4 章,exact paired sign test 来自第 15 章,二者均原样复用。请把数量级理解为一个很小模型的属性,把方法理解为可迁移的。
这里测量的五个 skills 是第三方包,并非为本章所写:来自 vercel-labs/next-skills 的 next-best-practices 和 next-cache-components,以及来自 vercel-labs/agent-skills 的 vercel-composition-patterns、vercel-react-best-practices 和 vercel-react-native-skills。它们的内部计数——70 个规则文件、26,362 个 token 的 AGENTS.md、日期为 2026 年 1 月且声称「40+ rules」的 metadata.json——均于 2026 年 9 月 7 日从磁盘文件读取,是该发布版本的属性,不是对作者的批评:每一个都是任何被编辑次数多于被计数次数的文档树都会出现的那类漂移。
参考资料
链接到此部分:参考资料-
Agent Skills Specification 和 Overview,
agentskills.io/specification以及agentskills.io,读取于 2026 年 9 月 7 日。来源包括目录布局;上文完整复现每项约束的 frontmatter 表(name1–64 个字符且匹配目录,description1–1024 个字符,compatibility最多 500,allowed-tools标记为实验性);优秀和糟糕的description示例;带 token 预算的三阶段渐进式披露描述(元数据约 100 个 token,指令建议低于 5,000,资源按需);建议将SKILL.md保持在 500 行以内;「the agent will load this entire file once it's decided to activate a skill」这一说明;scripts/、references/和assets/约定;skills-ref validate命令;格式「was originally developed by Anthropic, released as an open standard, and has been adopted by a growing number of agent products」的声明;以及 client showcase,其在读取日期列出了 46 个产品。 ↩ ↩2 ↩3 ↩4 -
Claude Code 文档中的 Skills,
code.claude.com/docs/en/skills,读取于 2026 年 9 月 7 日。来源包括「参考实现添加的字段」一节使用的完整字段表——when_to_use、argument-hint、arguments、disable-model-invocation、user-invocable、allowed-tools、disallowed-tools、model、effort、context、agent、background、hooks、paths、shell、metadata、license、compatibility——dynamic context injection 中!`command`会在正文发送前运行的描述,allowed-tools授权会在下一条消息清除的规则,以及合规说明:在 Claude Code 之外只接受六个规范字段,任何其他字段都会在上传或打包时导致硬错误。 ↩ ↩2 ↩3 -
Agent Skills overview,
platform.claude.com/docs/en/agents-and-tools/agent-skills/overview,读取于 2026 年 9 月 7 日。来源包括含四列的 level 表(Level 1 metadata,always,每个 skill 约 100 个 token;Level 2 instructions,when triggered,低于 5k token;Level 3+ resources,as needed,none until accessed);关于打包内容没有 context 惩罚的整句引用;「until a Skill is triggered, only its name and description occupy context」;脚本代码永不进入 context window、只有输出会进入的说明;以及安全部分,其中要求你只使用可信来源的 skills,并警告恶意 skill「can direct Claude to invoke tools or execute code in ways that don't match the Skill's stated purpose」——这是 第 30 章的主题,只是它通过文档而非工具 description 抵达。 ↩ ↩2 ↩3 -
Anthropic,Equipping agents for the real world with Agent Skills,2025 年 10 月 16 日,
anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills,读取于 2026 年 9 月 7 日。来源包括上文引用的定义、目录/章节/附录类比、最初描述的三个 level,以及 agents 需要「more composable, scalable, and portable ways」来获得领域专业知识这一 framing。配套产品公告claude.com/blog/skills记录了 2025 年 10 月 16 日的发布日期,以及 2025 年 12 月 18 日引入组织级管理和开放标准的更新。 ↩ -
Skills Over MCP Charter,
modelcontextprotocol.io/community/working-groups/skills-over-mcp,读取于 2026 年 9 月 7 日。来源包括上文引用的使命声明、changelog 日期(interest group 于 2026 年 2 月 1 日形成,initial charter 于 2026 年 4 月 14 日,2026 年 4 月 16 日转为 working group,SEP-2640 于 2026 年 4 月 25 日链接)、领导层和列出的 17 名成员、每周会议节奏,以及将 draft Skills Extension 命名为「a formal extension using existing Resources primitives」的成功标准。SEP-2076,Agent Skills as a First-Class MCP Primitive,github.com/modelcontextprotocol/modelcontextprotocol/pull/2076,于 2026 年 1 月 13 日打开并于 2026 年 2 月 24 日关闭;它提出了skills/list、skills/get、一个skillsserver capability 和一个skills/list_changednotification,并把 skill 定义为「a named bundle of instructions plus references to tools, prompts, and resources that together teach an agent how to perform a domain-specific workflow」。SEP-2640,Skills Extension,.../pull/2640,于 2026 年 4 月 23 日在 Extensions Track 打开,并包含skill://资源约定和扩展标识符io.modelcontextprotocol/skills。第 26 章把同一工作组列为协议的可选扩展之一。 ↩