独家揭秘!Google 工程师都在用的 AI 编码技能框架到底有多强?

7 阅读10分钟

独家揭秘!Google 工程师都在用的 AI 编码技能框架到底有多强?

当 Claude Code、Cursor、Windsurf 都在追逐"更快更强"时,Google 工程师 Addy Osmani 悄然放出了一个让整个 AI 编码圈地震的技能框架——agent-skills。它不仅重新定义了 AI 编程的工作流程,更把 Google 十年工程实践的精髓全部装进了这几个 Markdown 文件里。今天,我们就来深扒这个项目,看看它到底有什么魔力能让 15,910 颗星星在一周内暴涨。

一、为什么我们需要 AI 编码技能框架?

在开始深入 agent-skills 之前,我想先聊聊我自己踩过的一个大坑。

1.1 我的血泪史:从" AI 写得快"到" AI 写得烂"

去年我用 Claude Code 做一个后台管理系统,AI 确实写得飞快,三个小时搞定了原计划三天的工作量。我美滋滋地提交代码、合并 PR、准备上线——然后事故就来了。

线上报错的频率比需求文档更新还快。用户登录偶发失效、报表导出跑到超时、数据统计永远对不上。最离谱的是,有一个 SQL 注入漏洞被安全团队扫描出来了,当时我的脸都绿了。

我复盘了一下,问题根源在哪里?AI 写得快,但它不懂"工程" 。它不知道:

  • 什么样的代码该有什么样的测试覆盖
  • 哪些边界情况必须考虑
  • 安全红线在哪里
  • 性能陷阱在何方

这不是 AI 的错,是我的错——我没有给 AI 一个真正的"工程师思维框架"。

1.2 agent-skills 的诞生背景

这就是 agent-skills 出现的意义。它不是一堆提示词,而是一套完整的工程技能体系,把资深工程师的思维模式、工作流程、质量标准,全部编码成了 AI 可执行的技能。

这个项目有多火?让我给你一组数据:

指标数据
GitHub Stars15,910+ (且在快速增长)
本周 Stars6,693
支持的 IDEClaude Code, Cursor, Gemini CLI, Windsurf, OpenCode, Codex
技能数量20 个核心技能 + 3 个专家角色 + 4 个参考清单

而且这个项目的作者是 Addy Osmani——Google Chrome 团队的核心工程师,曾主导 PWA、 Lighthouse 等知名项目。他把自己在 Google 学到的工程实践,全部沉淀进了这几个 Markdown 文件。


二、核心架构:六阶段开发模型

agent-skills 把软件工程划分为六个阶段,每个阶段对应不同的技能:

┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ Idea │ ──▶ │ Spec │ ──▶ │ Code │ ──▶ │ Test │ ──▶ │ QA │ ──▶ │ Go │
│Refine│ │ PRD  │ │ Impl │ │Debug │ │ Gate │ │Live │
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘

对应的 7 个 slash 命令:

命令功能核心原则
/spec编写规格说明书规格先行
/plan规划任务分解小而原子
/build增量构建一次一个切片
/test测试验证测试即证明
/review代码审查提升代码健康度
/code-simplify简化代码清晰 > 巧妙
/ship交付上线更快更安全

三、核心技术技能深度解析

3.1 规格驱动开发(Spec-Driven Development)

这是整个框架的基石。我愿称之为"AI 编程最重要的技能,没有之一"。

3.1.1 核心工作流
SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
   │          │          │           │
   ▼          ▼          ▼           ▼
 Human      Human      Human       Human
 reviews    reviews    reviews     reviews

关键点

  • 在写任何代码之前,必须先写规格说明书
  • 规格是人和 AI 之间的"共享事实来源"
  • 代码没有规格 = 猜测
3.1.2 规格模板(可以直接抄)
# Spec: [项目/功能名称]

## Objective
[我们要构建什么,为什么。用户故事或验收标准。]

## Tech Stack
[框架、语言、关键依赖及版本]

## Commands
[构建、测试、lint、开发命令]
Build: npm run build
Test: npm test -- --coverage
Lint: npm run lint --fix

## Project Structure
[目录结构及说明]
src/ → 应用源码
src/components → React 组件
src/lib → 共享工具
tests/ → 单元和集成测试

## Code Style
[代码示例 + 关键约定]

## Testing Strategy
[测试框架、位置、覆盖率要求、测试级别]

## Boundaries
- Always: [必须做的]
- Ask first: [需要先问的]
- Never: [绝对不能做的]

## Success Criteria
[如何判断完成——具体、可测试的条件]

## Open Questions
[任何需要人工输入的未解决问题]
3.1.3 我的使用感受

讲真,我以前觉得写规格是浪费时间。现在用了 agent-skills 之后,我的想法完全变了。

上周我让 Claude Code 做一个文件上传功能。按照老习惯,我直接说"帮我做个文件上传功能,支持 PDF 和图片,大小限制 10MB"。

结果 AI 做了两版都不满意。第一版用了 AWS S3,第二版用了本地存储,但业务场景需要的是阿里云 OSS。

如果我用了 /spec 技能,AI 会先问我:

  • 你希望文件存储在哪里?S3?本地?还是云存储?
  • 有没有文件类型白名单?
  • 上传失败要不要重试?重试策略是什么?
  • 大文件要不要分片?

这就是规格的力量——它把模糊的需求变成了可执行的验收标准。


3.2 测试驱动开发(TDD)

这是让我最惊艳的技能。agent-skills 把 Google 内部测试实践完整搬出来了。

3.2.1 红绿重构循环
RED ──→ GREEN ──→ REFACTOR
 │         │          │
 ▼         ▼          ▼
 测试失败  代码通过   重构优化
3.2.2 测试金字塔
        ╱╲
       ╱  ╲  E2E 测试 (~5%)
      ╱    ╲ 完整用户流程,真浏览器
     ╱──────╲
    ╱        ╲ 集成测试 (~15%)
   ╱          ╲ 组件交互,API 边界
  ╱────────────╲
 ╱              ╲ 单元测试 (~80%)
╱                ╲ 纯逻辑,隔离,毫秒级
──────────────────
3.2.3 Beyonce 规则

"If you liked it, you should have put a test on it."

基础设施变更、重构、迁移——这些不是测试的责任来catch你的bug,你自己要负责。如果一个变更破坏了代码而你没有测试覆盖,那就是你的问题。

3.2.4 状态测试 vs 交互测试
// ✅ 正确:测试函数做什么(状态测试)
it('returns tasks sorted by creation date, newest first', async () => {
  const tasks = await listTasks({ sortBy: 'createdAt', sortOrder: 'desc' });
  expect(tasks[0].createdAt.getTime())
    .toBeGreaterThan(tasks[1].createdAt.getTime());
});

// ❌ 错误:测试函数内部如何工作(交互测试)
it('calls db.query with ORDER BY created_at DESC', async () => {
  await listTasks({ sortBy: 'createdAt', sortOrder: 'desc' });
  expect(db.query).toHaveBeenCalledWith(
    expect.stringContaining('ORDER BY created_at DESC')
  );
});

为什么重要? 交互测试会在你重构时失败,即使行为完全没变。状态测试只关心输入输出,不关心内部实现。

3.2.5 DAMP over DRY

在生产代码中,DRY(Don't Repeat Yourself)是正确的。但在测试中,DAMP(Descriptive And Meaningful Phrases)更好

// ✅ DAMP:每个测试独立可读
it('rejects tasks with empty titles', () => {
  const input = { title: '', assignee: 'user-1' };
  expect(() => createTask(input)).toThrow('Title is required');
});

it('trims whitespace from titles', () => {
  const input = { title: '  Buy groceries  ' };
  const task = createTask(input);
  expect(task.title).toBe('Buy groceries');
});

// ❌ 过度 DRY:共享设置掩盖了每个测试实际验证的内容
3.2.6 实战代码:Bug 复现模式

当收到 bug 报告时,不要直接修复。按这个流程来:

// 步骤 1:写一个复现测试(应该 FAIL)
it('sets completedAt when task is completed', async () => {
  const task = await taskService.createTask({ title: 'Test' });
  const completed = await taskService.completeTask(task.id);
  
  expect(completed.status).toBe('completed');
  expect(completed.completedAt).toBeInstanceOf(Date); // 这里会失败!
});

// 步骤 2:修复 bug
export async function completeTask(id: string): Promise<Task> {
  return db.tasks.update(id, {
    status: 'completed',
    completedAt: new Date(), // 之前漏掉了
  });
}

// 步骤 3:测试通过 → bug 修复 + 回归防护

3.3 代码简化(Code Simplification)

这个技能解决了一个经典问题:为什么 AI 写的代码能跑但看不懂?

3.3.1 Chesterton's Fence(切斯特顿栅栏)

"如果你要拆掉一条栅栏,必须先理解它为什么存在。"

AI 经常在不理解业务背景的情况下"优化"代码。这个技能强制 AI 在简化之前先理解代码的原始意图。

3.3.2 500 行规则

每个文件不超过 500 行。如果超过,问自己:

  • 能拆分成更小的模块吗?
  • 有重复代码可以提取吗?
  • 注释和文档能帮助理解吗?
3.3.3 简化检查清单
- [ ] 函数是否只有一个职责?
- [ ] 变量命名是否清晰?(不包含 ai、temp、data 这种泛泛之名)
- [ ] 是否有隐藏的副作用?
- [ ] 复杂逻辑能否用更简单的表达?
- [ ] 是否有不必要的抽象?(过度工程)
- [ ] 错误处理是否清晰?

3.4 调试与错误恢复

这是每个 AI 编程者的痛。agent-skills 提出了一个五步诊断法

┌─────────────┐
│ 1. Reproduce│ 复现问题
└──────┬──────┘
       ▼
┌─────────────┐
│ 2. Localize │ 定位范围
└──────┬──────┘
       ▼
┌─────────────┐
│ 3. Reduce   │ 简化问题
└──────┬──────┘
       ▼
┌─────────────┐
│ 4. Fix      │ 修复
└──────┬──────┘
       ▼
┌─────────────┐
│ 5. Guard    │ 防护
└─────────────┘
核心原则
  • Stop-the-line 规则:任何测试失败都要立即停止,直到问题被解决
  • Safe Fallbacks:修复时要考虑降级方案
  • Zero-Trust Console:生产代码必须零控制台错误和警告

四、安装与实战

4.1 Claude Code 安装(推荐)

# 从 Marketplace 安装
/plugin marketplace add addyosmani/agent-skills
/plugin install agent-skills@addy-agent-skills

# 如果遇到 SSH 错误(没有配置 SSH key)
git config --global url."https://github.com/".insteadOf "git@github.com:"

# 本地开发
git clone https://github.com/addyosmani/agent-skills.git
claude --plugin-dir /path/to/agent-skills

4.2 Cursor 安装

将任意 SKILL.md 复制到 .cursor/rules/ 目录,或者直接引用 skills/ 目录。

4.3 Gemini CLI 安装

# 从仓库安装
gemini skills install https://github.com/addyosmani/agent-skills.git --path skills

# 从本地克隆安装
gemini skills install ./agent-skills/skills/

4.4 Windsurf 安装

将技能内容添加到 Windsurf rules 配置中。详见 docs/windsurf-setup.md。


五、我的踩坑记录与解决方案

5.1 坑 1:SSH 密钥问题

问题:按照官方文档安装时出现 Permission denied (publickey) 错误。

原因:Marketplace 通过 SSH clone 仓库,但用户没有配置 GitHub SSH key。

解决方案

# 方案 1:配置 SSH key(推荐)
# 生成密钥
ssh-keygen -t ed25519 -C "your_email@example.com"
# 添加到 GitHub:https://github.com/settings/keys

# 方案 2:全局切换到 HTTPS
git config --global url."https://github.com/".insteadOf "git@github.com:"

5.2 坑 2:技能没有被激活

问题:安装了技能但 AI 没有按照技能工作。

原因:没有使用正确的 slash 命令,或者 IDE 没有正确加载技能。

解决方案

  • 使用 /spec、/plan、/build 等命令显式激活
  • 检查 IDE 是否支持该技能(Claude Code 支持最好)
  • 查看 .claude/commands/ 目录确认命令已注册

5.3 坑 3:技能覆盖不完整

问题:某些场景没有对应的技能。

原因:agent-skills 目前主要针对 Web/前端开发场景。

解决方案

  • 参考 docs/skill-anatomy.md 创建自定义技能
  • 可以在 skills/ 目录下添加新的技能

六、与传统开发流程的对比

维度传统开发AI 开发 + agent-skills
规格文档有,但常过时实时更新,与代码同步
测试覆盖靠自觉技能强制要求
代码审查人工自动化 + 人工
调试靠经验五步诊断法结构化
上线手动部署自动化流水线

七、相关论文与参考资料

agent-skills 吸收了 Google 十余年的工程实践,相关论文和资料包括:

  1. Software Engineering at Google》

    1. 作者:Titus Winters, Tom Manshreck, Hyrum Wright
    2. 链接:abseil.io/resources/s…
    3. 贡献:测试金字塔、Beyonce 规则、代码审查规范
  2. Google Engineering Practices

    1. 链接:google.github.io/eng-practic…
    2. 贡献:Code Review 指南、TDD 最佳实践
  3. Hyrum's Law(黑尔斯定律)

    1. 描述:API 的可见行为,即使未文档化,也会被用户依赖
    2. 相关论文:www.hyrulslaw.com/
  4. Chesterton's Fence(切斯特顿栅栏)

    1. 起源:G.K. Chesterton 的文学作品
    2. 应用于软件工程:任何代码改动前需先理解其存在理由

八、总结:为什么这个项目值得你关注?

8.1 核心价值

  1. 工程化 AI 编程:把资深工程师的思维框架变成 AI 可执行的技能
  2. IDE 支持:Claude Code、Cursor、Gemini CLI、Windsurf 都能用
  3. 实战验证:源自 Google 真实工程实践,已经过大量项目验证
  4. 持续迭代:活跃开发中,每周都有更新

8.2 我的推荐

  • 如果你用 Claude Code:一定要安装,这是目前支持最好的
  • 如果你用 Cursor:把核心技能复制到 .cursor/rules/
  • 如果你做前端:frontend-ui-engineering 和 testing-patterns 是必读

8.3 行动建议

  1. 今天就安装 agent-skills
  2. 用 /spec 命令写一个完整的需求规格
  3. 用 /test 命令写测试,然后实现功能
  4. 感受一下"AI 也能写出生产级代码"的体验

参考资料


本文由 AI 辅助编写,使用 agent-skills 进行工程流程管理。