Skip to content

第 22 章 · Agent Skills 标准与 SKILL.md

本章目标:理解 Agent Skills 开放标准的核心理念,掌握 SKILL.md 的 frontmatter 字段规范,知道技能如何在不撑爆上下文的前提下按需加载。

22.1 什么是 Agent Skills 标准

Agent Skills 是一个开放标准(specification),定义了 AI 编码智能体如何以统一格式分发能力包。它的核心贡献是:

  • 统一接口:无论使用 Claude Code、Codex、Cursor 还是 Pi,技能的加载方式一致;
  • 渐进披露:启动时只有 name + description 进入系统提示,完整指令按需加载;
  • 自包含:技能目录可携带脚本、资源文件、参考文档,整体可迁移。

标准由 agentskills.io 发布,核心要求只有一条:技能的根目录必须有一个 SKILL.md 文件

text
my-skill/
├── SKILL.md              # 必需:frontmatter + 正文指令
├── scripts/
│   └── helper.py         # 可选:辅助脚本
└── references/
    └── api-reference.md  # 可选:按需加载的详细文档

这个目录结构可以被任何遵守标准的工具发现并加载——这就是"开放"二字的意义。

22.2 SKILL.md Frontmatter 字段详解

SKILL.md 的第一部分必须是 YAML frontmatter,用于给 agent 提供元数据。官方规范定义了以下字段:

字段必需限制说明
name≤64 字符,小写 + 数字 + 连字符技能的唯一标识;不要求与目录名相同(这是 pi 对标准的宽容扩展)
description≤1024 字符最关键的一行——决定 agent 何时触发加载;写得具体才有高命中率
license许可证名称或路径
compatibility≤500 字符运行环境要求(如 Python ≥3.10)
metadata任意键值供工具扩展用的自定义字段
allowed-tools实验性预批准工具列表,避免运行时权限询问
disable-model-invocation布尔值为 true 时技能从系统提示隐藏,只能通过 /skill:name 手动调用

Name 校验规则

有效:changelog-check, pdf-merge, code-review
无效:Changelog-Check(大写)、-pdf(连字符开头)、data--analysis(连续连字符)

Description 的设计原则

description 是触发器,不是功能说明书。好的 description 应该包含触发词适用场景

yaml
# 好:具体、包含触发词
description: >
  Verify CHANGELOG.md covers all notable changes since the last git tag.
  Use when preparing releases or the user mentions changelog.

# 差:模糊,agent 无法判断
description: Helps with PDFs.

官方原话

"The description determines when the agent loads the skill. Be specific."

22.3 渐进披露机制

技能的"渐进披露(progressive disclosure)"是它区别于一次性 prompt 的核心设计:

text
启动时:
  扫描所有技能 → 只把「name + description」注入 system prompt
  (约 50–200 行,不撑爆上下文)

运行中:
  agent 判断任务匹配某技能 → 用 read 工具加载完整 SKILL.md
  (按需读取,而非全量加载)

执行时:
  按 SKILL.md 中的指令行事,引用相对路径下的 scripts/references

这意味着:你可以安装几十个技能,但常驻上下文的成本只有几十个描述

22.4 与 MCP / AGENTS.md 的分工差异

很多读者会问:Skill 和 MCP 工具、AGENTS.md 有什么不同?三者的定位如下:

维度Agent SkillMCP ToolAGENTS.md
形态Markdown 指令包远程可调用函数项目级说明文件
加载时机按需 read持续注册到工具列表启动时加载
作用范围特定任务工作流通用能力(搜索/数据库等)整个项目的上下文
动态性可替换/可组合独立服务静态
典型场景"发版前检查 changelog""搜索 GitHub issues""本项目技术栈是 FastAPI+SQLModel"

三者互补:AGENTS.md 给全局背景,MCP 提供跨项目通用的基础能力,Skills 封装针对特定任务的最佳实践。

22.5 校验规则速查

问题行为
缺少 description❌ 不加载(唯一硬拦截)
name 超长或含非法字符⚠️ 警告,仍加载
name 与目录名不一致✅ 允许(pi 的扩展)
同名冲突(多处发现)⚠️ 警告,保留先发现者
未知 frontmatter 字段✅ 忽略,不影响加载

本章小结

  • Agent Skills 是开放标准,核心是 SKILL.md 文件;
  • description 决定触发时机,必须具体化;
  • 渐进披露让上下文成本控制在几十个描述;
  • 与 MCP/AGENTS.md 分工不同,三者可叠加使用;
  • description 是唯一硬拦截,其他问题仅警告。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. Agent Skills 标准中,哪个 frontmatter 字段缺失会导致技能被拒绝加载?

2. 以下哪个 name 值是符合规范的?

3. 渐进披露的核心目的是什么?

4. 关于 name 与目录名的关系,以下说法正确的是?

🛠️ 动手实践

  1. ~/.pi/agent/skills/test-skill/SKILL.md 创建一个名字为 test-skill 的技能,description 写明"当用户提到单元测试或 test coverage 时使用"。
  2. 故意写一个缺 description 的技能,观察 agent 是否忽略它。
  3. 在 description 中分别测试"模糊版"和"具体版",对比 agent 触发率。

完成练习后,进入下一章:编写高质量技能