Agent Skills 规范
以下定义了 Agent Skills(智能体技能) 的完整格式规范。(代理技能)
目录结构
一个 Skill 必须是一个目录,该目录至少包含一个 SKILL.md 文件:
skill-name/
└── SKILL.md # 必需
你也可以选择在技能目录下包含额外的支持性子目录,例如:
scripts/references/assets/(代理技能)
SKILL.md 格式
SKILL.md 文件必须从一个 YAML Frontmatter 开始,后面跟随 Markdown 正文内容。(代理技能)
Frontmatter(必需字段)
Frontmatter 必须用 --- 包裹,并至少包括两个必需字段:
---
name: skill-name
description: 这个技能做什么以及何时使用它。
---
也可以包含以下可选字段:
---
name: pdf-processing
description: Extract text and tables from PDF files, fill forms, merge documents.
license: Apache-2.0
metadata:
author: example-org
version: "1.0"
---
Frontmatter 字段说明如下:(代理技能)
name 字段(必需)
- 必须长度 1–64 个字符
- 仅允许使用 小写字母、数字和短横线(
-) - 不允许以短横线开头或结尾
- 不允许包含连续两个短横线 (
--) - 必须与父目录名称匹配
示例(有效):
name: pdf-processing
示例(无效):
name: PDF-Processing # 大写不允许
name: -pdf # 不能以 - 开头
name: pdf--processing # 不能有连续 --
``` :contentReference[oaicite:4]{index=4}
---
#### description 字段(必需)
- 必须是 **非空字符串**,长度最多 **1024 字符**
- 应该描述技能“做什么”和“何时使用”
**好例子**:
```yaml
description: 提取 PDF 文件中的文本和表格、填写表单并合并多个 PDF。 当处理 PDF 文档或用户提及 PDF、表单或文档提取时使用。
差例子:
description: 帮助处理 PDF 文件。
``` :contentReference[oaicite:5]{index=5}
---
#### 可选字段说明
**license**(可选)
- 指定技能适用的许可证
- 推荐使用简短的许可证名称或包括许可证文件名
示例:
```yaml
license: Apache-2.0
``` :contentReference[oaicite:6]{index=6}
**compatibility**(可选)
- 如果技能有特定的运行环境要求,可在此描述
- 最多 **500 字符**
- 例如指定目标产品、系统依赖、网络访问需求等
示例:
```yaml
compatibility: Designed for Claude Code (or similar products)
``` :contentReference[oaicite:7]{index=7}
**metadata**(可选)
- 一组自定义键值对
- 用于存放规范之外的附加属性(如作者、版本等)
示例:
```yaml
metadata:
author: example-org
version: "1.0"
``` :contentReference[oaicite:8]{index=8}
**allowed-tools**(可选/实验性)
- 以空格分隔的工具清单,表示此技能可以使用的 tool 集合
- 注意:不是所有智能体实现都支持此字段
示例:
```yaml
allowed-tools: Bash(git:*) Bash(jq:*) Read
``` :contentReference[oaicite:9]{index=9}
---
### Markdown 正文内容
Frontmatter 之后的 Markdown 部分包含技能的实际执行指令。此部分**没有格式上的强制要求**,可根据需要编写,推荐包含:
- 步骤化指令
- 输入输出示例
- 处理常见边界情况的提示
建议把详细参考资料拆分到 `references/` 子目录,以减少主 Markdown 文件的长度。:contentReference[oaicite:10]{index=10}
---
## 可选子目录
### scripts/
放置可执行脚本代码(例如 Python、Bash、JavaScript 等)。:contentReference[oaicite:11]{index=11}
**要求或建议**:
- 脚本应尽量自包含或明确声明依赖
- 提供有用的错误信息
- 优雅处理边界情形
---
### references/
用于放置附加文档,例如更详细的参考内容或结构化模板:
- `REFERENCE.md` — 详细技术参考
- `FORMS.md` — 表单模板
- Domain-specific 文件(如 `finance.md`, `legal.md` 等) :contentReference[oaicite:12]{index=12}
---
### assets/
放置静态资源文件,例如:
- 文档模板
- 图像示例
- 数据文件(查找表、架构示例) :contentReference[oaicite:13]{index=13}
---
## 渐进式信息披露
为了高效利用上下文(降低 Token 使用量),建议 Skill 结构遵循如下渐进式加载策略::contentReference[oaicite:14]{index=14}
1. **元数据阶段**:在启动时读取所有技能的 `name` 和 `description`(大约 ~100 tokens)
2. **指令阶段**:当技能被激活时加载完整的 `SKILL.md` 正文(建议不超过 ~5000 tokens)
3. **资源阶段**:按需加载其他文件(如 `scripts/`, `references/`, `assets/`)
建议保持主 `SKILL.md` 文件在 500 行以内,将详细资料放到辅助文件以优化上下文使用。:contentReference[oaicite:15]{index=15}
---
## 文件引用
在 Skill 内引用其他文件时,应使用从 Skill 根目录开始的**相对路径**:
```markdown
See [the reference guide](references/REFERENCE.md) for details.
Run the extraction script:
scripts/extract.py
``` :contentReference[oaicite:16]{index=16}
避免过多的嵌套路径引用,这会增加 Skill 被加载时的上下文占用。:contentReference[oaicite:17]{index=17}
---
## 验证(Validation)
你可以使用官方提供的 **skills-ref** 工具来验证 Skill 是否符合规范:
```bash
skills-ref validate ./my-skill
该命令将检查 SKILL.md frontmatter 是否有效,并确保符合命名规范等规则。(代理技能)
