Hotdry.

Article

Agent Skills 的 YAML Schema 与生产级技能定义格式

解析 Addy Osmani 开源的 agent-skills 仓库中 YAML 格式的原子化技能单元设计,涵盖 frontmatter Schema、反理性化机制与渐进式披露策略。

2026-05-11ai-systems

AI 编码代理在缺乏明确约束时往往选择最短路径 —— 跳过规格说明、绕过测试、忽视安全审查。这种行为模式在原型阶段影响有限,但一旦进入生产环境,缺乏结构化引导的代理将持续产出技术债务。Addy Osmani 开源的 agent-skills 项目正是针对这一问题的系统性解法:它不是一组提示词模板,而是一套完整的技能定义格式规范,通过 YAML frontmatter 与结构化 workflow 将资深工程师的工程判断编码为可验证、可复用的技能单元。本文从 format specification 层面深度解析其设计哲学与工程化参数。

核心架构:六阶段生命周期映射

agent-skills 将软件工程拆解为六个阶段:Define(澄清构建目标)、Plan(任务拆解)、Build(编码实现)、Verify(证明正确性)、Review(质量门禁)、Ship(部署上线)。每个阶段对应若干原子化技能,总计 22 个技能节点,覆盖从模糊想法到生产发布的完整链路。

这种分阶段设计的深层逻辑在于工程判断的时序性。一个 API 设计决策如果在实现前未经验证,后期修复成本将指数级增长。将技能节点按生命周期排列,本质上是在约束 AI 代理的行为顺序 —— 它不能跳过 Define 直接 Build,不能绕过 Verify 直接 Ship。这种约束不依赖硬编码的 if-else,而是通过技能的触发条件和退出标准内嵌到每个技能单元中。

YAML Frontmatter Schema 规范

每个技能的核心文件为 SKILL.md,其 YAML frontmatter 定义了技能的元数据边界:

---
name: lowercase-hyphen-name
description: Guides agents through [task]. Use when...
---

name 字段采用 kebab-case 命名,这是斜杠命令系统的入口点。例如 planning-and-task-breakdown 对应 /plan 命令,代理启动时可通过解析 name 字段实现命令到技能的映射。name 同时也是多代理系统中技能引用的唯一标识符 —— 当一个技能需要调用其他技能时,通过 name 进行精确寻址而非模糊匹配。

description 字段是触发判断的核心依据。格式规范要求 description 必须包含「Guides agents through [task]. Use when...」模板,这一约束保证了 description 的信息密度:前半句说明技能的功能范围,后半句定义激活条件。代理或调度器在解析上下文后,通过关键词匹配 description 中的「Use when」子句决定是否激活该技能。

description 的长度控制是渐进式披露设计的第一个体现点。过于冗长的 description 会增加每次触发判断的计算成本,过于简略则无法提供足够的激活信号。规范要求将补充信息下沉到正文各节,而非堆积在 frontmatter 中。

结构化正文设计

技能正文遵循一致的五节结构:Overview(技能功能描述)、When to Use(激活条件)、Process(分步工作流)、Rationalizations(反理性化表)、Verification(验证证据要求)。

Process 节是整个技能定义的核心。 不同于传统文档的 prose 风格,Process 采用严格的可执行步骤序列。每个步骤包含明确的输入、动作和输出定义。例如 incremental-implementation 技能将实现过程定义为「Thin vertical slices - implement, test, verify, commit」,每个子步骤都有可观测的退出条件。这种设计使得代理的执行轨迹可回溯、可中断、可续传 —— 当代理在第三个步骤中断时,接续代理可以通过读取 Process 定义恢复到准确状态。

Rationalizations 节是 agent-skills 最具创新性的设计模块。它预判代理可能用来跳过某些步骤的「合理化借口」,并为每个借口提供结构化的反驳。例如面对「I'll add tests later」的理性化,Rationalizations 表中记录了反驳论据和验证要求。代理在执行过程中若触发这些借口模式,系统可自动调取对应的反驳内容进行干预。

Verification 节定义了技能的退出标准。与泛化的「确保质量」不同,Verification 节要求提供具体的可观测证据:测试通过率、构建输出、运行时数据。规范明确禁止「Seems right」这类主观判断,证据必须是可以被外部系统校验的客观存在。

反理性化机制的实现细节

反理性化(Anti-rationalization)机制的设计源于一个核心观察:AI 代理与人类工程师一样,会在压力下寻找「合理」的捷径。这些捷径在直觉层面看起来合理,但在系统工程视角下往往是风险积累的起点。

Rationalizations 表的结构化设计包含三个字段:借口(Rationalization)、反驳(Rebuttal)、验证(Verification)。以代码审查场景为例,当代理试图以「这只是小改动,不需要审查」绕过审查流程时,系统检索到对应的借口条目,调取预先编写的反驳内容:「Change sizing 规范要求~100 行的变更粒度,任何超出此范围的变更都应被拆分。即使是小改动,也需要通过审查建立变更可追溯性。」验证字段则要求代理提供代码行数统计作为客观证据。

这一机制的实现不依赖运行时的大模型推理,而是一种模式匹配加预定义响应的结构。代理执行过程中,系统持续监测当前上下文是否触发 Rationalizations 表中的已知借口模式,匹配后立即注入对应的反驳内容。这种设计将计算成本从每次执行前移至技能编写时,保证了运行时的低延迟响应。

渐进式披露与上下文管理

渐进式披露(Progressive Disclosure)是 agent-skills 解决上下文窗口限制的核心策略。其原则是:frontmatter 提供最小激活信号,正文提供执行指引,参考文献提供深度补充,只有在需要时才加载后续层级。

这一设计的实现依赖分层引用结构。每个技能正文中以相对路径引用 references/ 目录下的补充材料。例如 frontend-ui-engineering 技能在 accessibility 相关步骤中引用 ../references/accessibility-checklist.md,但该引用仅在执行到该步骤时才被解析加载。这与传统的全量上下文注入形成鲜明对比 —— 代理不需要在启动时接收完整的技能库,而是按需索取。

上下文压缩的另一个维度是技能间的引用复用。当 code-review-and-quality 需要执行安全审查时,它不重复定义安全检查项,而是引用 security-and-hardening 技能的 name,通过技能编排系统实现跨技能调用。这种设计保证了两点:一是技能定义的无冗余,二是安全标准在代码审查场景和独立安全审查场景中的一致性。

自动触发与命令映射

agent-skills 提供七条斜杠命令作为技能入口:/spec(规格驱动开发)、/plan(任务拆解)、/build(增量实现)、/test(TDD)、/review(代码审查)、/code-simplify(简化)、/ship(部署上线)。每条命令精确映射到生命周期中的某个技能或技能组合。

自动触发机制是命令映射的扩展。系统通过 Hooks 监测代理的当前上下文,当检测到「正在设计 API」这类意图时,自动激活 api-and-interface-design 技能;当检测到「正在修改用户界面」时,激活 frontend-ui-engineering。这种意图识别不依赖复杂的 NLP 模型,而是一种基于关键词和上下文模式匹配的轻量级判定。

触发判断的置信度阈值在规范中定义为隐式约束:当代理的当前任务描述与技能的 description 匹配度超过某个内部阈值时,技能被激活。这个阈值的具体数值由各 Agent 客户端自行实现,但规范提供了设计指引 —— 阈值的设定需要在「过度触发」和「遗漏激活」之间取得平衡。对于高风险技能(如 security-and-hardening),阈值应适当降低以提高敏感度。

生产级技能定义的设计原则

综合以上分析,agent-skills 的 YAML Schema 设计遵循四项核心原则。

原子化原则:每个技能聚焦单一工程活动,边界清晰,可独立验证。这使得技能可以被精确组合,也为技能库的模块化演进提供了基础。

可执行原则:Process 节不是流程描述,而是可逐行执行的操作序列。代理的执行路径与技能定义的步骤序列一一对应,不存在「描述了一套流程但代理自行决定执行顺序」的情况。

可验证原则:每个技能必须定义客观的退出证据。代理完成任务后,不是提交「已完成」的主观判断,而是提供测试结果、构建日志、运行时数据等可被外部系统校验的证据。

最小化原则:frontmatter 和正文的每个字段都有明确的用途,不存在装饰性信息。渐进式披露机制确保代理只加载当前所需的上下文,不做提前预加载。

落地参数与实现建议

对于计划在自己的 Agent 系统中实现类似技能定义格式的团队,以下参数可作为起点:

frontmatter 字段规范:name 仅允许 lowercase + hyphen,description 强制包含「Guides agents through... Use when...」模板,正文文件路径与 name 一致。

Process 节粒度控制:每个步骤的输出应当可观测、可中断、可续传。建议单个步骤的预期完成时间不超过代理的上下文保持窗口。

Rationalizations 表维护:在技能上线后持续收集代理的实际行为模式,补充新的借口条目。建议建立月度 review 机制,评估反理性化机制的覆盖率。

Verification 标准制定:定义每类技能的最小验证证据集。例如构建技能必须包含构建成功输出和测试通过报告,缺一不可。

触发阈值调优:初期将置信度阈值设置在 0.6–0.7 范围,上线后根据触发的精确率和召回率数据调整。对于安全相关技能,优先保证召回率。


资料来源:GitHub - addyosmani/agent-skills

ai-systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com