Google 工程师开源 agent-skills:给 AI 编程工具加上生产级工程能力

Google 工程师开源 agent-skills:给 AI 编程工具加上生产级工程能力

GitHub 本周趋势榜常客,⭐39,101,今日 +1,065 stars —— Google 工程师 Addy Osmani 开源的项目,为 Claude Code、Cursor、Copilot 等 AI 编程工具提供生产级别的工程技能,让 AI 写出来的代码从"能用"进化到"工程化"。


引言:AI 写代码很强,但工程化很弱

用过 Claude Code 或 Copilot 的同学都有这个感受:AI 写一个函数很厉害,但写出来的代码放到工程里就是一堆问题。

没有单元测试、没有 TypeScript 类型检查、没有 ESLint、没有 changelog、没有规范的 commit message……代码是能跑,但放到团队里就是一堆技术债。

这不完全是 AI 的问题,是工程化上下文缺失的问题。AI 不知道你的团队用什么测试框架,不知道代码规范是什么,不知道 commit 怎么写才叫规范。

Addy Osmani(Google Chrome 团队工程师,前端性能领域的大佬,写过《JavaScript 设计模式》、《生产环境性能》等经典书籍)开源的 agent-skills,干的就是这件事:给 AI Agent 补上工程化能力。


核心功能:8 大工程技能覆盖完整开发流程

这个项目本质上是一套结构化的工程技能 prompt 模板,让 AI 在编码过程中自动执行工程规范。

1. testing-best-practices:自动化测试技能

核心功能:在每次代码提交前自动生成单元测试和集成测试,确保覆盖率不低于团队要求。

AI 自动理解被测代码的逻辑,推断边界条件,生成有意义的测试用例,而不只是简单的 happy path。

// AI 生成的测试文件示例
// 原代码:支付处理函数
function processPayment(
  amount: number,
  currency: string,
  cardToken: string
): Promise<PaymentResult> {
  if (amount <= 0) {
    throw new Error('Amount must be positive');
  }
  // ... 支付逻辑
}

// AI 自动生成的测试
describe('processPayment', () => {
  test('throws error for non-positive amount', async () => {
    await expect(
      processPayment(-100, 'USD', 'tok_test')
    ).rejects.toThrow('Amount must be positive');
  });

  test('throws error for zero amount', async () => {
    await expect(
      processPayment(0, 'USD', 'tok_test')
    ).rejects.toThrow('Amount must be positive');
  });

  test('successfully processes valid payment', async () => {
    const result = await processPayment(
      9999, 'USD', 'tok_visa_valid'
    );
    expect(result.status).toBe('succeeded');
    expect(result.amount).toBe(9999);
  });

  test('handles expired card', async () => {
    await expect(
      processPayment(5000, 'USD', 'tok_expired')
    ).rejects.toThrow('Card expired');
  });
});

注意边界测试(-100、0)和异常场景(过期卡)的覆盖,这是大多数 AI 直接生成代码时不会主动加的。

2. typescript-best-practices:类型安全技能

核心功能:确保生成的代码类型安全,避免 any 滥用,提供完整的泛型支持。

// AI 修正前的代码(有类型问题)
function fetchData(url: any) {
  const response = fetch(url);
  return response.json(); // 返回 any 类型
}

// AI 修正后的代码(类型安全)
async function fetchData<T>(url: string): Promise<T> {
  const response = await fetch(url);
  if (!response.ok) {
    throw new ApiError(response.status, response.statusText);
  }
  return response.json() as T;
}

// 使用时自动类型推导
interface User {
  id: number;
  name: string;
  email: string;
}

const user = await fetchData<User>('/api/user/123');
// user.name 自动类型安全,访问错误属性会报错

3. security-best-practices:安全扫描技能

核心功能:自动检查 OWASP Top 10 漏洞,包括注入攻击、XSS、敏感信息泄露等。

// AI 修正前(有 SQL 注入风险)
function getUser(userId: string) {
  return db.query(`SELECT * FROM users WHERE id = '${userId}'`);
}

// AI 修正后(参数化查询)
function getUser(userId: string) {
  const stmt = db.prepare('SELECT * FROM users WHERE id = ?');
  return stmt.get(userId); // 参数化,防注入
}

// AI 还会自动添加:
// - 输入验证和 sanitization
// - 敏感数据的加密存储
// - API 限流和鉴权检查

4. git-best-practices:规范化 Git 技能

核心功能:自动生成符合 Conventional Commits 规范的 commit message。

# AI 修正前
git commit -m "fix stuff"
# AI 修正后
git commit -m "fix(auth): prevent SQL injection in user lookup

- Use parameterized queries instead of string interpolation
- Add input sanitization for userId parameter
- Update unit tests to cover edge cases

Closes #234"

# 分支命名规范
# AI 建议: feature/user-auth / fix/payment-bug / hotfix/security-vuln

5. changelog-best-practices:变更日志技能

核心功能:自动生成符合 Keep a Changelog 规范的 CHANGELOG。

## [2.1.0] - 2026-05-11

### Added
- 用户认证模块(登录/注册/登出)
- JWT Token 刷新机制
- 第三方登录支持(Google, GitHub)

### Changed
- 重构数据库连接池,提升 40% 吞吐量
- 更新 API 响应格式(统一包装字段)

### Fixed
- 修复用户登出后 Token 未失效的问题
- 修复并发注册时的竞态条件

### Security
- 修复 SQL 注入漏洞(CVE-2026-XXXX)
- 添加 Rate Limiting(每个 IP 100次/分钟)

6. accessibility-best-practices:无障碍合规技能

核心功能:自动检查 WCAG 2.1 合规性,确保生成的 UI 代码符合无障碍标准。

// AI 修正前
<button onClick={handleClick}>Click</button>

// AI 修正后(无障碍合规)
<button
  onClick={handleClick}
  aria-label="提交表单"
  aria-describedby="submit-hint"
  keyboard accessible
>
  提交表单
</button>
<span id="submit-hint" class="sr-only">
  按 Enter 或点击按钮提交表单
</span>

7. performance-best-practices:性能优化技能

核心功能:自动检测性能瓶颈,提供优化建议和实现。

// AI 修正前
function getUsers() {
  const users = db.query('SELECT * FROM users');
  return users.map(u => ({
    ...u,
    posts: db.query(`SELECT * FROM posts WHERE user_id = ${u.id}`)
  }));
}

// AI 修正后(N+1 问题修复 + 索引建议)
async function getUsers() {
  // 一次性查询,避免 N+1
  const users = await db.query(`
    SELECT u.*, p.id as post_id, p.title as post_title
    FROM users u
    LEFT JOIN posts p ON u.id = p.user_id
  `);

  // 按用户分组
  const userMap = new Map();
  for (const row of users) {
    if (!userMap.has(row.id)) {
      userMap.set(row.id, { ...row, posts: [] });
    }
    if (row.post_id) {
      userMap.get(row.id).posts.push({
        id: row.post_id,
        title: row.post_title
      });
    }
  }
  return Array.from(userMap.values());
}

// AI 还会建议添加索引:
// CREATE INDEX idx_posts_user_id ON posts(user_id);

8. code-review-checklist:AI 自检清单

核心功能:提交代码前,AI 自动按清单检查一遍。


如何接入 Claude Code

方式一:自定义 System Prompt(最简单)

~/.claude/ 目录下创建 .claude/descriptions/ 子目录,放入技能文件:

# 克隆技能库
git clone https://github.com/addyosmani/agent-skills ~/.claude/skills

# 告诉 Claude Code 使用这些技能
echo "你是一个专业的 TypeScript 开发者。请遵循以下工程规范:
$(cat ~/.claude/skills/testing-best-practices/system-prompt.md)
$(cat ~/.claude/skills/security-best-practices/system-prompt.md)" >> ~/.claude/settings.json

方式二:配合 Claude Code 的 MCP 协议

# 安装 agent-skills MCP server
npm install -g @agent-skills/mcp-server

# 在 claude_desktop_config.json 中配置
{
  "mcpServers": {
    "agent-skills": {
      "command": "npx",
      "args": ["@agent-skills/mcp-server"]
    }
  }
}

方式三:自定义 .claude/commands/

mkdir -p ~/.claude/commands
# 把技能作为可执行命令使用

实际效果对比

同样实现一个用户注册 API,有/无 agent-skills 差距巨大:

维度 普通 AI 生成 +agent-skills
输入验证 ❌ 无 ✅ Zod schema 完整验证
单元测试 ❌ 无 ✅ 覆盖主流程+边界+异常
错误处理 ❌ 无 ✅ 全局错误处理中间件
TypeScript ❌ any 满天飞 ✅ 完整类型推导
安全 ❌ SQL 注入风险 ✅ 参数化查询+WAF
Git commit ❌ "fix bug" ✅ Conventional Commits
文档 ❌ 无 ✅ 自动生成 API 文档
预估时间 30 分钟 45 分钟(含规范)

短期看 agent-skills 多花了 15 分钟,长期看省去了大量的 code review 返工和安全修复时间。


适用场景

适合的场景

不适合的场景


常见坑点

1. Skill 之间可能有冲突 多个技能同时启用时,prompt 可能互相干扰。比如 security-best-practices 建议用参数化查询,而 performance-best-practices 可能建议用字符串拼接做优化。需要按团队实际需求选择启用哪些技能。

2. 不适用于所有编程语言 虽然 prompt 模板是语言无关的,但部分技能(如 TypeScript 类型安全)只对特定语言有效。建议按技术栈选择对应技能。

3. AI 理解能力有限 agent-skills 的本质是给 AI 提供更好的上下文,但 AI 对复杂工程规范的理解能力有上限。非常复杂的架构决策(微服务拆分、数据库选型)仍需要人来判断。


项目地址:https://github.com/addyosmani/agent-skills 今日新增:1,065 stars | 总星数:39,101 技术栈:Shell(简单脚本),零门槛接入 维护者:Addy Osmani(Google Chrome 团队)

/*]]>*/