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 返工和安全修复时间。
适用场景
✅ 适合的场景
- 团队技术负责人想统一 AI 编程工具的工程标准
- 独立开发者想让 AI 写的代码可以直接提交到生产环境
- AI Agent 开发者参考完整的工程化 prompt 设计
- 前端团队需要快速提升代码质量和可维护性
❌ 不适合的场景
- 一次性脚本或原型验证(工程化开销不值得)
- 对 AI 输出有严格格式要求的流水线(prompt 冲突)
- 已经有成熟 CI/CD 质量门禁的团队(重复检查)
常见坑点
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 团队)