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 许可证。
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。