Agent Skills:给 Agent 打包技能——Anthropic 推出的开放标准

Agent Skills 全解析:一个技能就是一个含 SKILL.md 的文件夹、三阶段渐进式加载(发现→激活→执行)、name/description 等字段约束与命名规范、以及 Claude Code/ChatGPT/Codex/Cursor 等几十个工具共同采纳的生态图景。

  • AI
  • Agent
  • AgentSkills
  • Anthropic
  • 技能
  • 开源标准

前面几篇一直在聊 Agent——LangGraph 讲编排、create_agent 讲入口、MCP 讲怎么接外部世界。 这篇讲的是另一个关键问题:Agent 的"专业技能"从哪来?怎么打包、怎么复用、怎么跨工具共享?Agent Skills 是 Anthropic 提出的一个轻量开源格式,正在成为整个 Agent 生态的事实标准——截至现在, 从 Claude Code、ChatGPT/Codex、Cursor 到 VS Code、GitHub Copilot,几十个主流工具全部支持。

一、它是什么:一个装技能的文件夹

Agent Skills 是一个"轻量、开放的格式,用专门的知识和工作流扩展 AI Agent 的能力"。 核心定义极其简单——一个技能就是一个文件夹,里面有一个 SKILL.md 文件

my-skill/
├── SKILL.md          # 必需:元数据 + 指令
├── scripts/          # 可选:可执行代码
├── references/       # 可选:参考文档
├── assets/           # 可选:模板、资源
└── ...               # 任意其他文件或目录

SKILL.md 的头部是 YAML frontmatter(元数据),后面是 Markdown 正文(指令)。 最精简的技能只有两行:

---
name: skill-name
description: A description of what this skill does and when to use it.
---

为什么这么简单就够了?因为 SKILL.md 本质上就是"告诉 Agent 怎么完成一个特定任务"的说明书, 而 scripts / references / assets 三个可选目录分别装代码、文档和模板。一个技能 = 一个文件夹, 版本管理、分发、复用都变成了文件操作。

二、为什么需要它:Agent 不缺能力,缺"上下文"

Agent Skills 官方主页给了一个很准确的判断:

Agent 越来越能干,但往往没有可靠完成真实工作所需的上下文。

Skills 解决的就是这个"上下文"问题——把程序性知识(怎么做一件事的步骤)和公司、团队、个人专属上下文,打包成可移植、可版本控制的文件夹,让 Agent 按需加载。 具体带来三样东西:

  • 领域专长——把专门知识(从法律审查流程到数据分析管线再到 PPT 格式规范)变成可复用的指令和资源;
  • 可复现的工作流——把多步骤任务变成一致、可审计的流程;
  • 跨产品复用——写一次技能,在任何兼容的 Agent 里都能用。

第三点尤其重要。想想之前写的ECC(284 个技能)和Superpowers(十几个技能)—— 它们都在给 Agent"装技能",但各自是各自的格式。Agent Skills 的价值在于:它把"技能"本身变成了一个标准,让整个生态共用同一套技能。

三、怎么工作:渐进式加载(Progressive Disclosure)

Agent Skills 最巧妙的设计是渐进式加载——Agent 分三个阶段加载技能, 只在需要时才把完整指令读进上下文:

  1. 发现(Discovery):启动时,Agent 只加载每个技能的 namedescription(约 100 tokens),只够判断"什么时候可能用得上";
  2. 激活(Activation):当任务匹配某个技能的描述时,Agent 才把完整的 SKILL.md 指令读进上下文;
  3. 执行(Execution):Agent 按指令执行,必要时才运行打包的代码或读取引用的文件。

规格文档给的参考数字很直观:

阶段加载内容大小参考
元数据name + description约 100 tokens
指令完整的 SKILL.md 正文建议 < 5000 tokens
资源scripts / references / assets 里的文件按需加载

这就是"Agent 可以常备很多技能,却只占很小的上下文"的原因—— 大部分技能平时只是一个名字 + 一句话描述,真正被调用时才展开。 规格文档还建议:SKILL.md 控制在 500 行以内, 详细参考材料放到独立文件里,用相对路径引用、保持一层深度,避免嵌套引用链。

四、规格细节:字段约束与命名规范

SKILL.md 的 frontmatter 字段不多,但每个都有明确约束:

字段必需约束
name1-64 字符,仅小写字母、数字、连字符,不能以连字符开头/结尾、不能连续连字符,必须与父目录名一致
description1-1024 字符,描述"做什么 + 什么时候用",应包含帮 Agent 识别任务的特定关键词
license许可证名或捆绑许可证文件的引用,保持简短
compatibility1-500 字符,指明环境要求(目标产品、系统包、网络访问等),大多数技能不需要
metadata任意字符串键值对,建议键名足够唯一避免冲突
allowed-tools预批准工具列表(实验性),如 Bash(git:*) Read

几个值得注意的设计细节:

  • name 必须等于父目录名——强制了"一个目录一个技能"的组织方式,也避免了歧义;
  • description 是"激活判定"的关键——因为它决定 Agent 什么时候读完整指令, 规格文档特意对比了好/坏例子:"Extracts text and tables from PDF files... Use when working with PDF documents..."就好过干巴巴的 "Helps with PDFs."
  • compatibility 是"能力声明"——写清楚"需要 git、docker、jq、能联网", 让 Agent 别在缺环境时硬上;
  • allowed-tools 目前是实验性——预批准工具的白名单,支持程度因实现而异。

官方还提供了校验工具 skills-ref,一条命令检查 frontmatter 是否合法、命名是否合规:

skills-ref validate ./my-skill

五、生态:一个正在形成的"通用技能标准"

Agent Skills 最初由 Anthropic 开发,以开放标准发布, 现在被一大批产品采用。agentskills.io 首页列出了一个很长的兼容清单—— 摘几个代表性选手:Claude Code、Claude、ChatGPT/Codex、Cursor、VS Code、GitHub Copilot、 Gemini CLI、OpenCode、OpenHands、Goose、JetBrains Junie、Tabnine、Mistral Vibe…… 涵盖主流 AI 助手、IDE、终端编码代理,甚至还有 Spring AI 这样的框架和 Laravel Boost 这样的框架级技能包。

这组名单本身就说明了一件事:当巨头们(Anthropic、OpenAI、Google、微软、JetBrains)都采用同一个技能格式时, 它就不再是某个产品的功能,而是一个基础设施。就像 MCP 统一了"Agent 连接外部系统"的接口一样, Agent Skills 正在统一"Agent 装载专业技能"的格式。两者互补:MCP 管"插什么",Agent Skills 管"会什么"。

我的收获

  1. "一个技能 = 一个文件夹"的极简主义值得抄——没有复杂的包格式、没有注册中心, 就是一个 SKILL.md 加几个可选目录。极简到几乎无法拒绝,这恰恰是它能被全生态接受的原因。
  2. 渐进式加载是"技能体系"能成立的关键——如果每个技能都全文进上下文,Agent 根本装不了几个。 先用元数据做索引、需要时再展开,这个思路和 RAG 的"先检索再精读"殊途同归,都是上下文经济的产物。
  3. "description 决定激活"这个设计点很妙——技能能否被用上,取决于描述写得好不好。 这等于把"元数据质量"上升成了技能的第一生产力,也给所有写技能的人立了个规矩:把"什么时候用"写清楚。
  4. 生态标准化正在发生,而且比想象中快——上次写 MCP 时它已是事实标准,这次 Agent Skills 又给了第二个例子:Anthropic 提出的开放标准,正被整个行业采纳为公共基础设施。对做个人 IP 和 Agent 开发的人来说,现在学习这两种格式,就是押注明天的基础设施。

想深入了解,官方站点在agentskills.io, 完整规格看 specification, GitHub 讨论在 github.com/agentskills/agentskills。 上一站是 MCP,这一站是 Agent Skills——把"接什么"和"会什么"都标准化之后, 下一步就是真正跨工具、跨厂商的 Agent 生态了。