Hotdry.

Article

为AI编程代理构建生产级技能库:Skill Definition格式与可复现执行路径设计

解析addyosmani/agent-skills项目如何用结构化SKILL.md格式约束AI代理行为,涵盖22个技能的六阶段生命周期、反理性化机制与跨平台部署参数。

2026-05-10ai-systems

AI 编程代理在默认情况下会选择最短路径 —— 跳过规格说明、忽略测试覆盖、绕过安全审查。addyosmani/agent-skills 项目(37.4k Stars)试图解决这个问题:它将资深工程师的工程判断编码为可复现的技能工作流,让 AI 代理在生产的严苛要求下仍能遵循最佳实践。本文深入解析 SKILL.md 格式的工程化设计,以及如何在 AI 代理工业化落地的背景下构建可验证、可约束、可组合的技能体系。

问题的本质:代理的快捷偏好与工程纪律的冲突

当前主流 AI 编程代理(包括 Claude Code、Cursor、Gemini CLI 等)在收到模糊需求时,会倾向于直接实现而非先澄清需求;在面对复杂变更时,会倾向于一次性完成而非分阶段验证;在代码审查环节,会倾向于认可通过而非主动发现问题。这种行为模式在原型开发阶段是可接受的,但在生产环境中会导致规格缺失、测试不足、安全漏洞和性能回归等问题。

根源在于:代理被优化为响应速度和首次通过率,而非长期可维护性。agent-skills 项目试图在代理的推理过程中嵌入工程纪律 —— 不是通过限制代理的能力,而是通过提供结构化的工作流框架,让代理在关键决策点自动触发正确的行为模式。

SKILL.md 格式的解剖学

每个技能文件遵循统一的格式骨架,包含六个核心区域:

┌─────────────────────────────────────────────────┐
│  SKILL.md                                       │
│                                                 │
│  ┌─ Frontmatter ─────────────────────────────┐  │
│  │ name: lowercase-hyphen-name               │  │
│  │ description: Guides agents through [task].│  │
│  │              Use when…                    │  │
│  └───────────────────────────────────────────┘  │
│  Overview         → What this skill does        │
│  When to Use      → Triggering conditions       │
│  Process          → Step-by-step workflow       │
│  Rationalizations → Excuses + rebuttals         │
│  Red Flags        → Signs something's wrong    │
│  Verification     → Evidence requirements       │
└─────────────────────────────────────────────────┘

Frontmatter 中的description字段尤为重要 —— 它定义了技能的触发条件而非功能说明。例如,spec-driven-development的描述是 "Creates specs before coding. Use when starting a new project, feature, or significant change and no specification exists yet"。这种描述方式让代理能够根据当前工作上下文自动匹配技能,而非依赖用户显式调用。

Process 部分是技能的核心 —— 它不是参考文档,而是代理应遵循的工作流。以spec-driven-development为例,其 Process 包含四个阶段(SPECIFY → PLAN → TASKS → IMPLEMENT),每个阶段都需要人类审查才能进入下一阶段。这种门控机制确保代理不会跳过关键环节。

反理性化机制:防止代理自我合理化跳过步骤

SKILL.md 格式中最具工程价值的部分是 Rationalizations(反理性化)表格。每个技能都列出了代理可能用来跳过该技能的常见借口,并提供反驳论据。以spec-driven-development为例:

Rationalization Reality
"This is simple, I don't need a spec" Simple tasks don't need long specs, but they still need acceptance criteria. A two-line spec is fine.
"I'll write the spec after I code it" That's documentation, not specification. The spec's value is in forcing clarity before code.
"The spec will slow us down" A 15-minute spec prevents hours of rework. Waterfall in 15 minutes beats debugging in 15 hours.
"Requirements will change anyway" That's why the spec is a living document. An outdated spec is still better than no spec.

这种机制的作用是双重的:首先,它让代理在试图跳过步骤时有据可查;其次,它为人类审查提供了检查清单。当代理说 "这太简单了不需要规格说明" 时,人类可以明确指出这是被技能设计明确反对的行为。

doubt-driven-development技能则展示了更复杂的反理性化设计。它不仅提供了借口列表,还定义了完整的怀疑循环(CLAIM → EXTRACT → DOUBT → RECONCILE → STOP),包含有界循环机制(最多 3 轮,除非用户明确覆盖)。这一设计的核心理念是:自信的答案不等于正确的答案 —— 长会话会悄悄地将假设转化为 "事实",而新鲜的上下文审查者能够发现这些盲点。

六阶段生命周期:从想法到生产

agent-skills 定义了覆盖完整开发生命周期的技能分类:

  • Define 阶段:将模糊想法转化为具体提案。包含idea-refine(发散 / 收敛思维)和spec-driven-development(PRD 规格驱动)。
  • Plan 阶段:将规格分解为可验证的小任务。planning-and-task-breakdown技能要求每个任务可在单个专注会话中完成,且需要约 5 个文件以内。
  • Build 阶段:包含 7 个技能,涵盖增量实现 (incremental-implementation)、测试驱动开发 (test-driven-development)、上下文工程 (context-engineering)、源码驱动开发 (source-driven-development)、怀疑驱动开发 (doubt-driven-development)、前端 UI 工程 (frontend-ui-engineering)、API 与接口设计 (api-and-interface-design)。
  • Verify 阶段browser-testing-with-devtools(使用 Chrome DevTools MCP 进行实时运行时数据检查)和debugging-and-error-recovery(五步排查)。
  • Review 阶段code-review-and-quality(五轴审查)、code-simplification(基于 Chesterton 围栏原则)、security-and-hardening(OWASP Top 10 防护)、performance-optimization(Core Web Vitals 目标)。
  • Ship 阶段git-workflow-and-versioning(基于 trunk 的开发)、ci-cd-and-automation(Shift Left 策略)、deprecation-and-migration(将代码视为负债)、documentation-and-adrs(架构决策记录)、shipping-and-launch(部署前检查清单)。

这 22 个技能形成了相互配合的技能网络。doubt-driven-development的文档明确指出它与code-review-and-quality互补:后者是最终门控的前置验证;前者是飞行中的逐决策审查。source-driven-development验证框架 API 的存在性,doubt-driven-development验证你在合同下正确使用了该 API。

可验证性:证据要求作为退出条件

每个技能的 Verification 部分定义了非 Negotiable 的退出条件。以doubt-driven-development为例,验证清单包括:

  • 每个非平凡决策(在技能中明确定义)都作为 CLAIM 被命名
  • 每个非平凡工件至少经过一次新鲜上下文审查(测试驱动开发的 RED 步骤产生失败测试满足此条件)
  • 审查者收到的是 ARTIFACT + CONTRACT,而非 CLAIM 或推理过程
  • 审查者的提示是 adversarial("find issues")而非 validating("is it good")
  • 审查结果根据工件文本进行了分类(而非橡皮图章)

这种验证机制的关键在于:它要求代理提供证据而非信任声明。"测试通过" 是可验证的;"感觉是对的" 不是。这将代理的输出质量控制从主观判断转变为客观检查。

跨平台部署的参数化配置

agent-skills 项目支持 7 种主流 AI 编程工具,每种工具的配置方式各异:

Claude Code(推荐):通过 Marketplace 安装或本地克隆。安装后,代理通过/spec/plan/build/test/review/code-simplify/ship七个斜杠命令自动激活对应技能。

Cursor:将任何SKILL.md复制到.cursor/rules/目录,或引用完整的 skills 目录。

Gemini CLI:作为原生技能进行自动发现,或添加到GEMINI.md作为持久上下文。安装命令:gemini skills install https://github.com/addyosmani/agent-skills.git --path skills

Windsurf:将技能内容添加到 Windsurf 规则配置。

GitHub Copilot:将agents/中的代理定义用作 Copilot 人格,技能内容用于.github/copilot-instructions.md

Kiro IDE & CLI:技能位于.kiro/skills/,可存储在项目或全局级别。

通用代理:技能以纯 Markdown 格式编写,兼容任何接受系统提示或指令文件的代理。

工程化的核心设计原则

从 agent-skills 项目可以提炼出技能系统设计的几个核心原则:

Process over prose(过程优于描述):技能是代理遵循的工作流,而非代理阅读的参考文档。每个技能都有步骤、检查点和退出条件。

Anti-rationalization(非自我合理化):技能必须包含代理可能用来跳过步骤的借口列表,以及反驳论据。这防止了代理在长会话中积累上下文后自我合理化跳过关键步骤。

Verification is non-negotiable(验证不可协商):每个技能以证据要求结束。代理必须提供可验证的证据,而非信任声明。

Progressive disclosure(渐进式披露)SKILL.md是入口点,支撑性参考资料仅在需要时加载,将令牌使用保持在最低限度。

Opinionated workflows(固执己见的工作流):技能编码的是来自 Google 工程文化(Software Engineering at Google)和真实工作流的艰难获得的工程判断。这些不是通用提示,而是将高级工程师的纪律编码为代理可遵循的步骤。

结论与可落地参数

agent-skills 项目代表了 AI 代理工程化基础设施的一个重要方向:不是限制代理的能力,而是通过结构化的技能格式将工程纪律嵌入代理的推理过程。关键参数包括:

  • 技能触发阈值:超过 30 分钟实现时间或涉及多文件变更时自动触发spec-driven-development
  • 任务粒度上限:每个任务不超过约 5 个文件,违反此规则时应分解
  • 审查循环上限:最多 3 轮审查循环,除非用户明确覆盖
  • 新鲜上下文触发条件:跨模块边界、高风险操作、不可逆变更、不熟悉代码

这些参数为构建生产级 AI 代理技能系统提供了可复用的设计模式。随着 AI 代理从原型开发走向生产环境,这种技能工程化的方法论将成为 AI 代理工业化落地的基础设施层面支撑。

资料来源:GitHub 仓库 addyosmani/agent-skills,37.4k Stars,MIT 许可证。

ai-systems

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

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