🤖 Addy Osmani Agent-Skills 深度研究:让AI编码助手像资深工程师一样工作
📚 学习来源
🎯 核心收获
五大关键洞察
- 工程流程即代码:Agent-Skills 将"资深工程师的纪律"封装成可执行的 workflow,而非参考文档,让 AI 强制执行被默认跳过的关键步骤
- 反借口表机制:每个技能内置"常见借口+反驳"对照表,在 AI 产生"跳过步骤"念头之前进行拦截——这是该项目最独特的设计
- 6阶段开发流水线:DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP,精确镜像 Google/Amazon 等顶级工程组织的成熟流程
- 渐进式披露策略:SKILL.md 作为入口点,支持材料仅在需要时加载,保持 token 使用最小化
- Verification 不可协商:每个技能以具体证据终止——测试通过、构建输出干净、运行时数据验证,"看起来对"永远不够
- doubt-driven-development:对抗性自检流程,CLAIM→EXTRACT→DOUBT→RECONCILE→STOP,附带可选的跨模型升级机制
- 多平台无缝集成:支持 Claude Code、Cursor、Gemini CLI、Windsurf、Copilot、Kiro、OpenCode 等主流 AI 编码工具
一、项目背景与动机
1.1 作者背景
Addy Osmani 是 Google Chrome 团队的工程总监,前端工程领域的传奇人物,著有《Learning JavaScript Design Patterns》,是 Lighthouse 的核心贡献者。他每天都在使用 AI 编码工具,因此敏锐地察觉到了一个普遍问题:AI 编码助手默认会走最短路径,而这条路径恰恰会跳过那些"不出现在 diff 里"但至关重要的工程步骤。
1.2 核心问题
"AI coding agents default to the shortest path — which often means skipping specs, tests, security reviews, and the practices that make software reliable."
当用户说"帮我加一个用户导出功能"时,AI 助手会噼里啪啦写完代码、跑通了,潇洒地说"Done!"。但它没有问导出格式要不要兼容旧版本,没有写测试,没有考虑权限边界,提交的 diff 大到没人能 review。
1.3 项目数据
| 指标 | 数值 |
|---|---|
| GitHub Stars | 30,800+ |
| Forks | 3,600+ |
| Commits | 174 |
| 技能模块 | 22个 |
| Agent角色 | 3个 |
| Slash命令 | 7个 |
| 协议 | MIT |
二、六阶段开发流水线
2.1 Define 阶段——澄清要构建什么
技能:idea-refine、spec-driven-development
这是最重要的阶段,却被大多数 AI 助手默认跳过。Define 阶段的核心是:
- 将模糊的想法转化为具体的提案
- 撰写 PRD(产品需求文档)
- 覆盖目标、命令、结构、代码风格、测试和边界
- 在任何代码之前完成
2.2 Plan 阶段——拆解任务
技能:planning-and-task-breakdown
将规格说明分解为小的、可验证的任务:
- 每个任务应该在一次专注的会话中完成
- 任务有显式的验收标准
- 任务有验证步骤(测试、构建、手动检查)
- 任务按依赖排序,而非按感知的重要性排序
2.3 Build 阶段——编写代码
技能(7个):incremental-implementation、test-driven-development、context-engineering、source-driven-development、doubt-driven-development、frontend-ui-engineering、api-and-interface-design
2.4 Verify 阶段——证明它能工作
技能:browser-testing-with-devtools、debugging-and-error-recovery
五步排查:复现→定位→简化→修复→防护,停止规则:不推进失败的测试或构建
2.5 Review 阶段——合并前的质量门
技能(4个):code-review-and-quality、code-simplification、security-and-hardening、performance-optimization
五个审查维度:正确性、可读性、架构、安全性、性能
2.6 Ship 阶段——部署上线
技能(5个):git-workflow-and-versioning、ci-cd-and-automation、deprecation-and-migration、documentation-and-adrs、shipping-and-launch
三、技能解剖规范(Skill Anatomy)
每个 SKILL.md 都遵循统一的解剖结构,这是 Agent-Skills 项目最核心的设计规范之一。
3.1 Frontmatter(必需)
---
name: skill-name-with-hyphens
description: Guides agents through [task/workflow]. Use when [specific trigger conditions].
---
关键规则:
name:小写、连字符分隔,必须与目录名匹配description:以第三人称描述技能做什么,然后包含一个或多个清晰的"Use when"触发条件。必须同时包含"什么"和"何时"
3.2 标准章节结构
# Skill Title
## Overview
1-2 句话解释这个技能做什么以及为什么重要。
## When to Use
- 触发条件的项目符号列表
- When NOT to use(排除项)
## Core Process
Agent 遵循的主要工作流,分解为编号步骤或阶段。
## Common Rationalizations
| Rationalization | Reality |
|-----------------|---------|
| Agent 用来跳过步骤的借口 | 为什么这个借口是错误的 |
## Red Flags
- 表明技能被违反的行为模式
## Verification
技能流程完成后确认:
- [ ] 退出条件清单
四、反借口表机制(Anti-Rationalization)
这是 Agent-Skills 项目最独特、最值得借鉴的设计创新。
4.1 设计哲学
LLM 训练文本中包含大量关于"为什么走捷径是可以的"的推理。反-rationalization 表通过提供同样强有力的反向推理来预先阻止这一点。
4.2 真实示例
| 借口(Rationalization) | 反驳(Reality) |
|---|---|
| "等代码工作了再写测试" | 你不会的。而且事后写的测试测试的是实现,不是行为。 |
| "这太简单了,不需要测试" | 简单的代码会变复杂。测试记录了预期行为。 |
| "这很简单,不需要规格说明" | 简单任务不需要长规格说明,但仍然需要验收标准。两行规格说明是可以的。 |
| "规格说明会拖慢我们" | 15 分钟的规格说明防止数小时的返工。 |
| "我会晚点再添加测试" | 调试生产环境中的错误比在开发时修复它要贵 100 倍。 |
4.3 企业 AI 培训的启发
- Prompt 技巧工作坊:训练用户识别 AI 偷懒行为的常见模式
- 质量管控:建立企业 AI 使用的反借口清单
- 教育培训:让员工学会对 AI 的"跳过步骤"请求说"不"
五、重点技能深度解读
5.1 doubt-driven-development:对抗性自检流程
这是 Agent-Skills 中最新、最具创新性的技能之一。
触发条件:
- 生产、安全或不可逆决策
- 工作中接触不熟悉的代码
- 自信的输出现在验证比以后调试便宜
交叉模型验证:可选地在交互式怀疑循环中提供跨模型验证——使用不同模型发现单一模型共享的盲点。
5.2 source-driven-development:基于官方文档验证
来源层级(按权威性排序):
| 优先级 | 来源 | 示例 |
|---|---|---|
| 1 | 官方文档 | react.dev、docs.djangoproject.com |
| 2 | 官方博客/更新日志 | react.dev/blog、nextjs.org/blog |
| 3 | Web 标准参考 | MDN、web.dev |
| 4 | 浏览器/运行时兼容性 | caniuse.com、node.green |
5.3 context-engineering:上下文打包策略
六、Agent 角色设计
6.1 三个专家角色
| Agent | 角色 | 视角 |
|---|---|---|
code-reviewer.md | 高级代码审查者 | 五轴审查 |
test-engineer.md | QA 专家 | 测试策略、Prove-It 模式 |
security-auditor.md | 安全工程师 | 漏洞检测、OWASP 评估 |
6.2 多角色协作模式
唯一推荐的多角色编排模式是并行扇出+合并步骤:
七、Google 工程文化的体现
| 概念 | 所在技能 | 应用 |
|---|---|---|
| Hyrum's Law | api-and-interface-design | 每个 observable 行为都会成为依赖 |
| Beyoncé Rule | test-driven-development | 如果你喜欢它,就应该测试它 |
| 测试金字塔 | test-driven-development | 80/15/5 分配目标 |
| Chesterton's Fence | code-simplification | 不要移除代码而不理解为什么添加 |
| 基于主干的开发 | git-workflow-and-versioning | 短寿分支,快速合并 |
| ~100 行 PR 大小 | code-review-and-quality | 可审查的变更范围 |
| Shift Left | ci-cd-and-automation | 质量门尽早设置 |
| 代码即负债 | deprecation-and-migration | 清理旧代码 |
八、多平台支持与安装
| 平台 | 安装方式 |
|---|---|
| Claude Code | /plugin marketplace add addyosmani/agent-skills |
| Cursor | 复制 SKILL.md 到 .cursor/rules/ |
| Gemini CLI | gemini skills install |
| Windsurf | 添加到规则配置 |
| GitHub Copilot | 使用 agents/ 中的 agent 定义 |
| Kiro | 存储在 .kiro/skills/ |
| OpenCode | 通过 AGENTS.md 和 skill 工具 |
推荐起步配置
最小配置:加载三个核心技能
spec-driven-development—— 定义要构建什么test-driven-development—— 证明它能工作code-review-and-quality—— 合并前验证质量
九、与其他 Skills 框架的对比
vs Matt Pocock Skills
| 维度 | Matt Pocock Skills | Addy Osmani Agent-Skills |
|---|---|---|
| 焦点 | TypeScript 类型安全 | 完整工程生命周期 |
| 方法 | 原子化技能集合 | 流程驱动工作流 |
| 深度 | 单个最佳实践 | 6 阶段端到端覆盖 |
| 反借口 | 无 | 有(每个技能内置) |
核心差异
- 工程流程导向 vs 能力封装导向:Agent-Skills 不是封装能力("如何写测试"),而是封装流程("在写代码之前要做什么")
- 强制执行 vs 建议遵循:通过反借口表,技能是强制执行的,而非可选建议
- 完整生命周期 vs 单点覆盖:覆盖从 idea 到 ship 的完整流程
💭 思考与实践
立即可行动项
- 在团队中试点:选择一个小团队,引入 3 个核心技能(spec-driven-development、test-driven-development、code-review-and-quality)
- 建立反借口清单:基于本文分析,建立团队自己的反借口表
- 文档标准化:采用 SKILL.md 格式作为团队 AI 工作流文档的标准
- 验证文化建立:在 AI 辅助工作中建立"必须验证"的文化
中期规划
- AI 使用 SOP 建设:将 Agent-Skills 的理念融入团队 AI 使用规范
- Prompt 工作坊:开展识别 AI 偷懒行为的培训
- 质量门建立:在团队代码流程中建立 AI 辅助的质量门
关键洞察
Agent-Skills 项目最深刻的启示是:AI 编码助手的质量取决于约束它们的流程,而非它们的能力上限。一个遵循严格工程流程的"普通"AI,往往比一个遵循自由发挥的"强大"AI 产生更好的结果。
这也呼应了软件开发中的一条古老真理:纪律和流程比天赋更重要。Agent-Skills 将这一真理带入了 AI 时代。