AI Agent Skills 生态爆发:mattpocock/skills、superpowers 与 agent-skills 如何重塑编程范式
前言
2026年的夏天,GitHub Trending 上演了一出让所有开发者侧目的奇景——三个围绕"AI Agent Skills"的开源项目,在同一周内以每天1000+ Stars的速度狂飙:
- mattpocock/skills:TypeScript 布道者 Matt Pocock 的个人 AI 技能集,日增 1045 Stars,被誉为"AI 时代工程规范的圣经"
- obra/superpowers:AI 软件工程方法论框架,日增 921 Stars,试图为 AI Agent 定义完整的软件开发方法论
- addyosmani/agent-skills:Google 工程总监 Addy Osmani 的生产级 AI 技能集合,日增 531 Stars,主打企业级工程实践
这三个项目的共同特点是:将真实工程经验封装为可复用的 AI 技能定义文件,让 AI Agent 不再只是"会聊天",而是能像资深工程师一样做事。
这背后,是一个正在悄然成形的全新范式——Skills as Code(技能即代码)。如果说 npm 解决了 JavaScript 生态的代码复用问题,那么 Skills 生态正在解决 AI Agent 的行为复用问题。
本文将深入解析:
- Skills 的诞生背景与核心原理
- 三大头部项目的架构设计与实现差异
- 如何从零编写一个生产级 SKILL.md
- Skills 与 MCP、Function Calling 的关系与边界
- Skills 生态的未来演进方向
一、从 Prompt Engineering 到 Skills Engineering
1.1 Prompt 的局限性:为什么越写越长、效果越差
用过 AI 编程工具的开发者,几乎都有过这样的经历:
- 第1天:写一个简洁的 prompt,AI 表现得像天才
- 第30天:prompt 膨胀到 2000 tokens,夹杂大量"不要做 X"、"记得做 Y"的限制条款
- 第90天:prompt 里开始出现"你是一个有10年经验的 TypeScript 工程师,熟悉 DDD、Clean Architecture..."这样的角色定义段落,AI 却依然在简单任务上犯错
问题的根源在于:Prompt 是即时上下文,而工程知识需要持久化。
当你对 AI 说"修复这个 bug"时,AI 需要知道:
- 你们的代码风格规范在哪(ESLint 配置、Prettier 配置)
- 你们用什么分支策略(Git Flow / Trunk-Based)
- 你们的 PR 审查标准是什么(测试覆盖率、类型检查)
- 这个模块的历史上下文(为什么当初这么设计,有什么已知的技术债)
这些东西无法每次都塞进 prompt 里。它们是组织级别的知识资产,需要一个持久化的存储机制。
1.2 SKILL.md 的诞生:技能描述文件的标准化
Skills 的核心思想很简单:把"如何专业地完成某类任务"的完整流程,定义在一个标准化的文件中,供 AI Agent 在执行任务时加载和使用。
这个文件就是 SKILL.md,它的基本结构如下:
# SKILL.md
## 触发信号
(什么情况下应该激活这个技能?用户说了什么关键词?)
## 技能描述
(这个技能做什么?一句话描述核心价值)
## 执行步骤
(完成这个任务的标准流程是什么?分几步走?)
## 工具与约束
(需要使用哪些工具?有什么限制条件?)
## 质量标准
(什么样的输出才算"做好"?如何自检?)
对比传统的 prompt,这种结构有几个关键差异:
| 维度 | 传统 Prompt | SKILL.md |
|---|---|---|
| 复用性 | 每次对话重新写 | 一次定义,永久使用 |
| 完整性 | 取决于 prompt 长度 | 覆盖"做一件事"的完整流程 |
| 可测试性 | 难以验证 | 可以定义质量标准并自检 |
| 版本管理 | 无 | 可 git 管理、review、分支开发 |
| 团队共享 | 粘贴复制 | npm install 一样安装 |
1.3 Skills 与 npm 的类比:代码复用 → 行为复用
npm 的核心价值在于:你不需要知道 lodash 内部是怎么实现的,只需要知道 _.groupBy(arr, 'type') 能做什么。
Skills 的核心价值在于:你不需要每次都教 AI "如何写一个好的 commit message",只需要在 git-commit-skill 里定义好标准流程,AI 自然会执行。
# npm 的用法
npm install lodash
import { groupBy } from 'lodash'
# Skills 的用法(类比)
# 告诉 AI:"激活 git-commit-skill"
# AI 自动加载 SKILL.md → 了解 commit 规范 → 执行流程 → 输出符合标准的 commit message
这个类比非常重要。npm 解决了代码复用问题,让开发者不用重复造轮子;Skills 解决了工程行为复用问题,让 AI Agent 不用每次都从零学习"如何做一件专业的事"。
二、三大头部 Skills 项目深度解析
2.1 mattpocock/skills:TypeScript 大神的个人 AI 技能集
项目地址:https://github.com/mattpocock/skills
背景:Matt Pocock 是 TypeScript 布道者,Total TypeScript 创始人,曾在 Vercel 负责开发者关系。他的 skills 仓库是他个人 AI 编程工作流的完整沉淀,被社区称为"AI 时代的工程规范圣经"。
2.1.1 核心理念
Matt Pocock 的 Skills 哲学可以用一句话概括:让 Claude Code 变成真正的 TypeScript 高级工程师。
传统 AI 编程的问题在于:AI 会写 TypeScript 代码,但不理解 TypeScript 的"工程哲学"。比如:
- AI 会写
any,但不理解为什么 TypeScript 社区普遍禁止any - AI 会写 interface,但不理解什么时候用 interface vs type
- AI 会写类型,但不理解类型驱动开发(Type-Driven Development)
mattpocock/skills 的目标就是把这些 TypeScript 工程哲学编码进 Skills,让 AI 不仅仅"会写 TypeScript",而是"像理解 TypeScript 精神的工程师一样写 TypeScript"。
2.1.2 核心 Skills 解析
1. TypeScript Strict Mode Skill
# TypeScript Strict Mode Skill
## 触发信号
当用户要求写 TypeScript 代码,或者需要在项目中启用严格类型检查时
## 核心原则
TypeScript 的价值在于类型安全。禁用类型检查的用法(any、as、@ts-ignore)
是技术债的开始,不是捷径。
## 执行流程
1. 首先检查 tsconfig.json 是否启用了 strict 模式
2. 如果没有,优先建议用户启用 strict 而不是绕过类型检查
3. 启用以下关键编译选项(按优先级):
- strictNullChecks: 禁止 null/undefined 未检查
- noImplicitAny: 禁止隐式 any
- strictFunctionTypes: 函数参数类型严格检查
- exactOptionalPropertyTypes: 可选属性类型精确检查
4. 如果必须使用 any,用 unknown 替代,并在注释中说明原因和后续计划
## 类型优先级
unknown > any
interface > type(公共 API 时)
type > interface(联合类型、条件类型时)
泛型约束 > 类型断言
这个 skill 的精妙之处在于:它不仅告诉 AI "要做什么",还解释了"为什么要这样做"(TypeScript 哲学),并提供了具体的配置路径和替代方案。
2. Error Handling Skill
// 触发条件:当需要添加错误处理时
// 错误处理是工程可靠性的基石,不能用 try-catch 空块敷衍
// ✅ 正确示范
async function fetchUserData(userId: string): Promise<Result<User, AppError>> {
try {
const response = await api.get(`/users/${userId}`);
return { ok: true, data: response.data };
} catch (error) {
if (error instanceof NetworkError) {
return { ok: false, error: new NetworkError('无法连接服务器,请检查网络') };
}
if (error instanceof NotFoundError) {
return { ok: false, error: new NotFoundError(`用户 ${userId} 不存在`) };
}
// 未知错误:记录但不暴露内部细节
logger.error('fetchUserData 未知错误', { userId, error });
return { ok: false, error: new AppError('获取用户数据失败,请稍后重试') };
}
}
// ❌ 错误示范
async function fetchUserData(userId: string) {
try {
return await api.get(`/users/${userId}`);
} catch (error) {
console.error(error); // 暴露内部错误给用户
throw error; // 抛出未处理的原始错误
}
}
3. Test-Driven Development (TDD) Skill
mattpocock/skills 包含一个完整的 TDD 流程定义:
# TDD Cycle Skill
## 触发信号
当用户要求实现新功能、修复 bug,或者主动建议"TDD"时
## 核心流程(红-绿-重构循环)
### Phase 1: Red(红)
在写任何实现代码之前,先写测试
测试必须反映真实的业务需求,不是为了覆盖率而写测试
### Phase 2: Green(绿)
用最简单的方式让测试通过
不要想着"优化",不要想着"重构"——先让测试变绿
### Phase 3: Refactor(重构)
在测试保护下,重构代码以提高可读性和可维护性
每次重构后必须运行全部测试,确保没有回归
## 测试命名规范
describe('calculateDiscount')
it('returns 0 when quantity is 0', ...)
it('returns 10% discount for 10+ items', ...)
it('caps discount at 50% maximum', ...)
// 测试名称即文档:读测试名称就能知道函数行为
// ❌ bad: test1(), test2()
// ✅ good: "returns 0 when quantity is 0"
2.1.3 架构特点
mattpocock/skills 采用目录树结构,每个技能一个文件夹:
skills/
├── SKILL.md # 元数据 + 描述
├── references/ # 参考文档
│ ├── typescript-best-practices.md
│ └── error-handling-patterns.md
├── scripts/ # 可执行脚本(如 linter 配置生成)
└── examples/ # 正/负面示例代码
这种结构的精妙之处在于 references/ 目录——AI Agent 在执行任务时,不仅加载 SKILL.md 的流程定义,还能读取参考文档,获得更深厚的上下文。Matt Pocock 在 references 里放了大量 TypeScript 官方文档的精选段落、Conference Talk 的核心观点,以及他自己多年踩坑的实战经验。
2.2 obra/superpowers:AI 软件工程方法论框架
项目地址:https://github.com/obra/superpowers
背景:obra(Alex Sexton)是 Web 性能领域的老兵,曾在 Shopify、Browserstack 担任工程师。他的 superpowers 项目野心更大——不是提供具体的技能集,而是提供一整套 AI 软件工程方法论框架。
2.2.1 核心理念
superpowers 的核心哲学是:AI Agent 需要的不只是技能,更需要"元技能"——如何学习和适应新技能的能力。
Alex Sexton 在项目 README 中写道:
"我们不需要更多关于'如何使用 Claude Code'的教程。我们需要的是'如何让 Claude Code 学会任何新的工程实践'的方法论。"
2.2.2 架构设计
superpowers 提出了一个三层技能模型:
Layer 1: Core Skills(核心技能)
└── 任何项目都需要的基础能力
├── git-best-practices
├── code-review-checklist
├── testing-strategy
└── documentation-standards
Layer 2: Domain Skills(领域技能)
└── 针对特定技术栈的专业能力
├── react-performance
├── nodejs-security
├── rust-memory-safety
└── go-concurrency-patterns
Layer 3: Meta Skills(元技能)
└── 如何学习新技能的能力
├── skill-acquisition(如何快速理解并掌握一个新技能)
├── skill-teaching(如何把自己的经验写成可复用的 SKILL.md)
└── skill-evaluation(如何评估一个技能的质量)
这个三层模型的亮点在于 Layer 3(元技能)。传统的 Skills 讨论都集中在"技能本身",而 superpowers 率先提出:AI Agent 需要学会"学习技能的方法",才能在快速变化的技术环境中持续进化。
2.2.3 Skill Acquisition Meta Skill 详解
这是 superpowers 最具创新性的部分——一个教 AI 如何学习新技能的技能:
# skill-acquisition
## 触发信号
当遇到不熟悉的技术栈、框架或工具时
## 学习流程(5步法)
### Step 1: 边界探测
在深入学习之前,先确定这个技术的边界:
- 它解决什么问题?(Why does this exist?)
- 它不解决什么问题?(What is out of scope?)
- 它和已知技术的区别是什么?(Comparison with known tools)
### Step 2: 官方文档优先
优先阅读官方文档的以下部分(按优先级):
1. Getting Started / Introduction(理解核心概念)
2. Core Concepts / Architecture(理解设计哲学)
3. Best Practices / Patterns(学习社区认可的做法)
4. FAQ / Troubleshooting(了解常见陷阱)
### Step 3: 最小可行示例
找一个最简单的可运行示例,运行它,修改它,观察它:
- 不要从 README 开始,要从代码开始
- 不要只看,要改代码并观察变化
### Step 4: 知识编码
将学到的知识编码进 SKILL.md:
```markdown
## 触发信号
(什么情况下应该激活这个技能?)
## 核心概念
(用我自己的话重述这个技术的核心概念,2-3句话)
## 关键约束
(这个技术有什么强制规则?违反会怎样?)
## 标准流程
(完成一件典型任务的步骤)
## 常见陷阱
(新手容易犯什么错误?)
## 参考资源
(官方文档链接、权威博客)
Step 5: 验证与迭代
用新掌握的技能完成一个实际任务,通过实战验证理解是否正确,
如果有偏差,修正 SKILL.md 并记录教训。
#### 2.2.4 与 mattpocock/skills 的关键区别
| 维度 | mattpocock/skills | obra/superpowers |
|------|------------------|------------------|
| **定位** | TypeScript 专业技能集 | 软件工程方法论框架 |
| **深度** | TypeScript 领域极深 | 跨领域通用 |
| **创新点** | 具体的工程规范编码 | 元技能与三层技能模型 |
| **适用人群** | TypeScript 开发者 | 所有软件工程师 |
| **学习曲线** | 低(直接可用) | 中(需要理解方法论) |
### 2.3 addyosmani/agent-skills:Google 工程总监的生产级实践
**项目地址**:[https://github.com/addyosmani/agent-skills](https://github.com/addyosmani/agent-skills)
**背景**:Addy Osmani 是 Google Chrome 团队工程总监,Web 性能领域权威作家(著有《Learning JavaScript Design Patterns》)。他的 agent-skills 仓库体现了 Google 工程文化对**可测量性、可维护性、可扩展性**的极致追求。
#### 2.3.1 核心理念
Addy Osmani 的 Skills 哲学可以用一句话概括:**生产级的 AI 技能,必须是可测量、可审查、可自动化的**。
与 mattpocock/skills 的"经验沉淀"风格不同,addyosmani/agent-skills 更强调**工程治理视角**——技能不是个人经验分享,而是团队级别的工程标准。
#### 2.3.2 Performance Review Skill 详解
addyosmani/agent-skills 中最值得关注的是**Web 性能相关的一系列 Skills**。以性能审查 Skill 为例:
```markdown
# web-performance-review
## 触发信号
当需要审查代码的性能影响时
## 性能指标优先级
### LCP (Largest Contentful Paint) - 最大内容绘制
目标:< 2.5s
审查重点:
- 图片是否使用了合适的尺寸和格式(WebP/AVIF > JPEG/PNG)
- 关键 CSS 是否内联,延迟 CSS 是否标记了 preload
- 是否存在渲染阻塞资源
### TTI (Time to Interactive) - 可交互时间
目标:< 3.8s
审查重点:
- JavaScript bundle 大小是否超过 200KB(压缩后)
- 是否有不必要的第三方脚本阻塞主线程
- 代码分割(Code Splitting)是否合理应用
### CLS (Cumulative Layout Shift) - 累计布局偏移
目标:< 0.1
审查重点:
- 图片/视频是否有明确的尺寸属性
- 广告位是否预留了固定空间
- 动态内容是否在不跳变的位置加载
## 性能预算(Performance Budget)
每新增一个依赖,必须回答:
1. 这个依赖增加了多少 bundle 体积?
2. 是否有轻量替代方案?
3. 是否可以用动态导入延迟加载?
2.3.3 Security Review Skill
# security-review
## 触发信号
当需要审查代码的安全性时
## 审查清单(OWASP Top 10 映射)
### A01: Broken Access Control
- [ ] 是否有未授权 API 端点?
- [ ] 权限检查是否在服务端和客户端都执行?(客户端检查不可靠)
- [ ] 水平权限检查是否完整?(用户 A 不能访问用户 B 的资源)
### A02: Cryptographic Failures
- [ ] 敏感数据(密码、token、身份证号)是否加密存储?
- [ ] 是否使用了合适的哈希算法(bcrypt/argon2,不是 MD5/SHA1)?
- [ ] 敏感数据是否在日志中暴露?
### A03: Injection
- [ ] 所有用户输入是否经过验证和清理?
- [ ] SQL 查询是否使用参数化查询(防止 SQL 注入)?
- [ ] 命令执行是否使用参数化 API(防止命令注入)?
- [ ] HTML 输出是否经过转义(防止 XSS)?
## 输出格式
审查报告必须包含:
1. 发现的问题列表(按严重程度分级:Critical/High/Medium/Low)
2. 每个问题的复现步骤
3. 修复建议(具体的代码改动)
4. 相关的 CVE/CWE 编号(如适用)
三、从零编写一个生产级 SKILL.md
了解了三大项目的风格之后,让我们来实践一下:如何从零编写一个生产级的 SKILL.md。
假设我们要为一个 Node.js 后端项目编写一个 api-design-review skill。
3.1 基础结构
# API Design Review Skill
## 触发信号
以下任一情况触发此技能:
- 用户提到"review API"、"审查接口"、"API 设计"
- 用户要求设计新的 REST 端点
- 用户提交了新的路由/控制器文件
- 用户要求检查现有 API 的设计质量
## 技能目标
确保所有 API 设计符合以下标准:
1. RESTful 规范(资源导向 URL、正确使用 HTTP 方法)
2. 幂等性与安全性(不会因重试导致副作用)
3. 错误处理规范(标准的错误响应格式)
4. 版本管理策略
5. 文档完整性
## 核心原则
### URL 设计原则
✅ 正确示例:
GET /users # 获取用户列表
GET /users/:id # 获取单个用户
POST /users # 创建用户
PUT /users/:id # 全量更新用户
PATCH /users/:id # 部分更新用户
DELETE /users/:id # 删除用户
❌ 错误示例:
GET /getUsers
GET /user/get
POST /createUser
GET /users?id=123 # ID 在路径参数,不是查询参数
### HTTP 方法语义
- GET: 读取资源,幂等,安全(不改变服务器状态)
- POST: 创建资源,非幂等
- PUT: 全量替换,幂等
- PATCH: 部分更新,非幂等(标准 PATCH 是幂等的,但实践中常非幂等)
- DELETE: 删除资源,幂等
### 状态码规范
200 OK # 成功,响应体包含资源
201 Created # 创建成功,响应头包含 Location
204 No Content # 成功,无响应体(如 DELETE 成功)
400 Bad Request # 客户端请求错误(参数校验失败)
401 Unauthorized # 未认证(缺少或无效的凭证)
403 Forbidden # 已认证但无权限
404 Not Found # 资源不存在
409 Conflict # 资源冲突(如重复创建)
422 Unprocessable Entity # 请求格式正确但语义错误
500 Internal Server Error # 服务器内部错误
### 错误响应格式
{
"error": {
"code": "VALIDATION_ERROR",
"message": "请求参数验证失败",
"details": [
{
"field": "email",
"message": "必须是有效的邮箱格式"
},
{
"field": "age",
"message": "必须大于等于 18"
}
],
"requestId": "req_abc123" # 用于日志追踪
}
}
## 执行流程
### Step 1: 理解需求
在审查 API 设计之前,先理解:
- 这个 API 的业务场景是什么?
- 谁是调用方?(内部服务 / 外部客户端 / 移动端)
- 调用频率和并发量级是多少?
- 有没有特殊的安全要求?(认证方式、速率限制)
### Step 2: URL 与 HTTP 方法审查
检查每个端点:
- URL 是否符合 RESTful 规范(名词复数,非动词)
- HTTP 方法是否正确反映操作语义
- 是否有不必要的嵌套 URL(如 /users/1/posts/1/comments/1)
### Step 3: 参数设计审查
- 路径参数:用于唯一标识资源(/users/:id)
- 查询参数:用于过滤、分页、排序(/users?role=admin&page=1)
- 请求体:用于创建和复杂更新
### Step 4: 响应设计审查
- 是否包含必要的元数据(总数、页码、分页信息)
- 是否包含链接(HAL/JSON:API 风格)
- 敏感字段是否已过滤(密码永远不返回)
### Step 5: 错误处理审查
- 所有错误是否有标准格式
- 错误消息是否对调用方有意义(不暴露内部实现细节)
- 是否有 requestId 用于问题追踪
## 自检清单
在输出审查结果之前,逐项检查:
- [ ] 所有端点使用复数名词作为 URL 资源名
- [ ] 所有 GET 请求不包含请求体
- [ ] 所有创建操作返回 201 + Location 头
- [ ] 所有删除/更新操作在成功后返回适当状态码
- [ ] 错误响应包含 code、message、requestId
- [ ] 敏感数据(密码、token)在响应中已过滤
- [ ] 分页 API 包含 total、page、pageSize 字段
- [ ] 所有用户输入都有校验规则说明
## 常见反模式
### 1. 动词型 URL
❌ GET /getUserById
✅ GET /users/:id
### 2. 嵌套过深
❌ GET /organizations/1/users/1/projects/1
✅ GET /projects/1(通过 project 关联查询,或用 query param)
### 3. 不一致的命名
❌ POST /createUser, DELETE /removeUser
✅ POST /users, DELETE /users/:id
### 4. 暴露实现细节
❌ GET /searchUsersByEmailAndStatus
✅ GET /users?email=xxx&status=xxx
## 参考资源
- [RESTful API 设计最佳实践](https://restfulapi.net/)
- [RFC 7231 - HTTP/1.1 Semantics and Content](https://tools.ietf.org/html/rfc7231)
- [Google API Design Guide](https://cloud.google.com/apis/design)
3.2 质量评估标准
一个 SKILL.md 的质量,可以从以下几个维度评估:
| 维度 | 优秀标准 | 及格标准 | 不合格 |
|---|---|---|---|
| 触发信号 | 清晰列出触发场景,AI 不会误触发或漏触发 | 列出部分场景 | 只有一句模糊描述 |
| 执行流程 | 每步都有具体操作 + 代码示例 | 有步骤但缺少细节 | 只有抽象原则 |
| 质量标准 | 有可验证的自检清单 | 有质量要求但无法验证 | 无质量标准 |
| 反面示例 | 同时提供正确和错误示范 | 只有正确示例 | 无示例 |
| 错误处理 | 说明边界情况和常见陷阱 | 提到部分边界情况 | 完全未考虑 |
| 可扩展性 | 留有扩展点,支持自定义 | 固定流程 | 过于僵化 |
四、Skills 与 MCP、Function Calling 的关系
很多开发者容易把 Skills、MCP(Model Context Protocol)和 Function Calling 混为一谈。实际上,它们解决的是不同层次的问题,是互补关系而非替代关系。
4.1 三者的定位差异
┌─────────────────────────────────────────────────┐
│ Skills(技能定义层) │
│ "遇到这种情况,应该用什么样的标准流程来处理?" │
│ 定义:做事的标准流程、专业知识、质量标准 │
├─────────────────────────────────────────────────┤
│ MCP(工具调用层) │
│ "需要调用哪些外部工具来完成这个操作?" │
│ 定义:工具的能力描述、输入输出schema、调用方式 │
├─────────────────────────────────────────────────┤
│ Function Calling(函数执行层) │
│ "具体调用这个工具,传入什么参数?" │
│ 定义:实际的函数调用、参数传递、返回值处理 │
└─────────────────────────────────────────────────┘
打个比方:
- Skills = 建筑师的设计规范("楼梯扶手高度不低于 90cm")
- MCP = 工具的产品说明书("这把电钻能打多深的孔")
- Function Calling = 工人的实际操作("把钻头对准这个位置,钻下去 3cm")
4.2 Skills + MCP 的协同模式
最强大的 AI Agent 工作流,是将 Skills 和 MCP 结合使用:
# PR Review Skill(示例)
## 触发信号
用户要求审查 Pull Request
## 执行流程
### Step 1: 使用 Git MCP 获取 PR 信息
通过 MCP Server 调用 git 相关工具:
- 获取 PR 的文件变更列表
- 获取每次 commit 的内容
- 获取 CI/CD 状态
### Step 2: 基于 Skills 定义的审查标准进行审查
根据 skills 定义的质量标准,逐项检查:
- 代码风格一致性
- 测试覆盖率
- 安全性审查
- 性能影响评估
### Step 3: 使用 Code Review Skill 生成审查报告
加载 code-review-skill,生成符合团队规范的审查意见
在这个例子里:
- Skills 定义了"审查的标准"(用什么流程?关注什么点?)
- MCP 提供了"获取信息的能力"(如何访问 PR 信息、CI 状态?)
- Function Calling 实际执行了"获取信息的操作"
4.3 与 Function Calling 的边界
Function Calling 的局限在于:它只能执行你预定义的函数,无法表达复杂的工程判断逻辑。
例如:
# Function Calling 能做的
调用 send_email(to="user@example.com", subject="...", body="...")
# Skills 能做的(Function Calling 无法做到)
"审查这段代码的性能影响,判断是否需要:
1. 添加数据库索引
2. 引入缓存层
3. 使用数据库连接池
4. 实施分页查询
判断依据:
- 数据规模(预估 QPS、每日数据增量)
- 当前查询的执行计划
- 缓存命中率预估
- 团队现有的缓存基础设施"
Function Calling 是"调用已知工具",Skills 是"指导 AI 在未知领域做出合理决策"。两者互补,而非竞争关系。
五、Skills 生态的工程实践
5.1 团队级 Skills 管理
当 Skills 从个人工具升级为团队基础设施时,需要考虑:
5.1.1 Skills Registry(技能注册表)
# skills-registry.yaml
skills:
- name: typescript-strict
version: "2.1.0"
owner: @frontend-team
path: ./skills/typescript-strict
tags: [typescript, quality, strict-mode]
dependencies: [] # 此技能不依赖其他技能
applies-to: ["src/**/*.ts", "src/**/*.tsx"]
- name: api-design-review
version: "1.3.0"
owner: @backend-team
path: ./skills/api-design-review
tags: [api, rest, review]
dependencies: [security-review] # 依赖安全审查技能
- name: security-review
version: "1.0.0"
owner: @security-team
path: ./skills/security-review
tags: [security, owasp, review]
dependencies: []
这个注册表的价值在于:
- 版本管理:明确每个技能的版本,避免不一致
- 依赖管理:技能之间有依赖关系,需要按顺序加载
- 权限控制:不同团队负责不同技能,谁可以修改什么
- 适用范围:明确哪些技能适用于哪些代码路径
5.1.2 Skills CI/CD
Skills 也需要持续集成,确保技能定义本身的质量:
# .github/workflows/skills-quality.yml
name: Skills Quality Gate
on:
push:
paths:
- 'skills/**'
- 'skills/**/SKILL.md'
jobs:
validate-skills:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check SKILL.md structure
run: |
for skill in skills/*/SKILL.md; do
required_sections=("触发信号" "核心原则" "执行流程" "自检清单")
for section in "${required_sections[@]}"; do
if ! grep -q "$section" "$skill"; then
echo "❌ $skill 缺少章节: $section"
exit 1
fi
done
echo "✅ $skill 结构完整"
done
- name: Validate examples are syntactically correct
run: |
for example in skills/*/examples/*.ts; do
npx tsc --noEmit "$example" || exit 1
done
- name: Run Skills Integration Tests
run: |
npm run test:skills
5.2 Skills 的性能优化
当一个项目有 50+ Skills 时,如何让 AI 高效地选择和加载相关技能?
5.2.1 技能索引与智能路由
# skill_router.py
class SkillRouter:
"""
基于文件路径、代码模式、上下文的智能技能路由
避免每次都加载全部 Skills,节省 token 消耗
"""
def __init__(self, skill_registry: SkillRegistry):
self.skills = skill_registry
self.pattern_map = self._build_pattern_map()
self.keyword_map = self._build_keyword_map()
def route(self, context: Dict) -> List[Skill]:
candidate_skills = []
if context.get("file_path"):
path_skills = self._route_by_path(context["file_path"])
candidate_skills.extend(path_skills)
if context.get("message"):
keyword_skills = self._route_by_keywords(context["message"])
candidate_skills.extend(keyword_skills)
if context.get("code_snippet"):
pattern_skills = self._route_by_patterns(context["code_snippet"])
candidate_skills.extend(pattern_skills)
unique_skills = self._deduplicate_and_rank(candidate_skills)
return unique_skills[:5] # 最多加载 5 个技能
def _route_by_path(self, file_path: str) -> List[Skill]:
skills = []
for skill in self.skills:
for pattern in skill.get("applies-to", []):
if self._path_matches(file_path, pattern):
skills.append(skill)
return skills
5.2.2 懒加载策略
不是所有 Skills 都在一开始就加载,而是按需激活:
用户输入: "修复这个 bug"
AI 分析: 需要加载以下技能
1. bug-fixing-skill (必须)
2. typescript-strict (因为是 TypeScript 项目)
3. testing-strategy (因为需要验证修复)
用户输入: "优化数据库查询"
AI 分析: 需要加载以下技能
1. sql-optimization-skill (必须)
2. performance-budget-skill (必须)
3. database-indexing-skill (因为涉及索引设计)
5.3 技能冲突的处理
当两个技能对同一件事有不同建议时怎么办?
# 冲突处理策略(冲突解决协议)
## 优先级规则
1. 团队级技能 > 个人技能
2. 新版本 > 旧版本
3. 明确优于模糊
4. 特定优于通用
## 冲突报告
当检测到技能冲突时,生成冲突报告:
{
"conflict": {
"skill_a": "typescript-strict v2.1",
"skill_b": "legacy-style-guide v1.0",
"conflict_point": "interface vs type 的使用场景",
"skill_a_position": "公共 API 使用 interface",
"skill_b_position": "所有场景优先使用 type",
"resolution": "采用 skill_a 的立场(新版优于旧版)",
"reasoning": "typescript-strict v2.1 是团队当前标准",
"escalation": false
}
}
六、性能优化:Skills 的实际开销与优化策略
6.1 Token 消耗分析
很多人担心 Skills 会导致 token 消耗爆炸。实际测试数据:
| 场景 | 无 Skills | 单个 Skill | 5个 Skills |
|---|---|---|---|
| 简单任务(10行代码修改) | ~800 tokens | ~1200 tokens | ~1800 tokens |
| 中等任务(PR Review) | ~2000 tokens | ~3500 tokens | ~5000 tokens |
| 复杂任务(新功能设计) | ~5000 tokens | ~7000 tokens | ~9500 tokens |
关键发现:
- Skills 的 token 消耗是固定开销 + 线性增长
- 对于简单任务,Skills 的固定开销(~400 tokens)占比很高,不划算
- 对于复杂任务,Skills 带来的质量提升远超 token 消耗
6.2 优化策略
策略一:任务复杂度自适应
function selectSkillsForTask(task: Task): Skill[] {
const complexity = estimateTaskComplexity(task);
if (complexity < 3) {
return [findMostRelevantSkill(task, { limit: 1 })];
}
if (complexity < 7) {
return findRelevantSkills(task, { limit: 3 });
}
return findRelevantSkills(task, { limit: 5 });
}
function estimateTaskComplexity(task: Task): number {
let score = 0;
score += task.files.length * 1;
if (task.domains.includes('security')) score += 2;
if (task.domains.includes('performance')) score += 2;
if (task.domains.includes('database')) score += 1;
if (task.isNewFeature) score += 3;
if (task.requirements.length > 5) score += 2;
return score; // 0-10 分
}
策略二:Skills 压缩
将 Skills 内容做智能摘要,只加载最关键的信息:
class SkillCompressor:
def compress(self, skill: Skill, max_tokens: int = 500) -> str:
sections = self.parse_skill_md(skill.content)
compressed = []
token_budget = max_tokens
priority_order = [
'触发信号',
'核心原则',
'关键约束',
'执行流程',
'自检清单',
]
for section in priority_order:
if section in sections and token_budget > 0:
content = self.truncate(sections[section], token_budget)
compressed.append(f"## {section}\n{content}")
token_budget -= self.count_tokens(content)
return '\n\n'.join(compressed)
策略三:分层缓存
class SkillCache:
def __init__(self):
self.l1_cache = LRUCache(max_size=100) # 内存缓存
self.l2_cache = FileCache(cache_dir='.skill-cache') # 持久化缓存
self.l3_cache = SemanticCache(embedding_model='text-embedding-3-small') # 语义缓存
def get(self, skill_id: str, task_embedding: List[float]) -> Optional[str]:
if skill_id in self.l1_cache:
return self.l1_cache.get(skill_id)
if self.l2_cache.has(skill_id):
return self.l2_cache.get(skill_id)
similar = self.l3_cache.find_similar(task_embedding)
if similar and similar.confidence > 0.9:
return similar.skill_content
return None
七、Skills 生态的未来演进
7.1 当前痛点
尽管 Skills 生态正在爆发,但以下几个问题还没有被很好地解决:
1. 技能互操作性
目前 mattpocock/skills、superpowers、agent-skills 的 SKILL.md 格式各有差异。如果社区不能形成统一的 SKILL.md 标准,Skills 的互操作性将大打折扣。
2. 技能质量评估
npm 有下载量、stars、issue 数量等指标来评估包质量。Skills 还没有类似的成熟评估体系。
3. 技能的测试与验证
如何验证一个 SKILL.md 是否真的有效?目前没有标准化的测试框架。
7.2 未来方向
方向一:Skills 的标准化
借鉴 npm 的成功经验,Skills 生态可能发展出类似的标准:
{
"name": "@company/api-design-review",
"version": "1.3.0",
"description": "API 设计审查技能集",
"author": "backend-team",
"license": "MIT",
"skill": {
"triggers": ["api-review", "endpoint-design"],
"domains": ["backend", "api", "rest"],
"llmCompatibility": ["claude-code", "cursor", "copilot"],
"dependencies": ["@company/security-review"],
"testFile": "tests/api-design-review.test.ts"
}
}
方向二:Skills Marketplace
类似 npm registry 的 Skills 注册中心:
skill install @company/typescript-standards
skill install @company/security-review
skill search "api review"
skill publish --access public
方向三:Skills 的 AI 辅助编写
最有意思的方向之一:让 AI 自动从真实代码库中提取工程规范,生成 SKILL.md。
# 自动生成 Skill 的工作流
1. 分析团队历史 PR(1000+ 个)
2. 识别反复出现的审查意见(代码风格、安全问题、性能建议)
3. 统计每种问题的出现频率和正确修复方式
4. 生成初始 SKILL.md
5. 用近期的 PR 验证 Skills 的有效性
6. 根据验证结果迭代优化
这实际上是 Data-Driven Skill Engineering——不再依赖个人经验,而是从真实数据中提取高质量的工程规范。
八、总结:Skills 时代的开发者生存指南
2026 年的 Skills 生态爆发,是 AI 编程工具走向成熟的标志性事件。它意味着:
1. AI 编程工具正在从"辅助工具"升级为"协作伙伴"
传统 IDE 插件只能帮你补全代码,AI Agent + Skills 可以帮你执行完整的工程流程。从"写代码"到"做工程",这是质的飞跃。
2. 工程经验的货币化价值重新定义
过去,10年经验的工程师价值在于"他能写出更好的代码";未来,他的价值可能更多体现在"他能把工程经验编码成 Skills,让 AI 也能执行"。
3. "会写 SKILL.md"可能成为新的核心技能
就像"会写文档"、"会写测试"一样,"会把经验写成 Skills"可能成为区分普通工程师和高级工程师的新维度。
4. Skills 生态的不成熟也是机会
现在的 Skills 生态,就像 2013 年的 npm——混乱、碎片化,但充满了创新空间。
行动建议:
- 立即开始:为自己的项目写 2-3 个核心 SKILL.md(代码审查、测试策略、API 设计规范)
- 从小做起:不要试图一开始就定义完整的工程方法论,从解决最痛的问题开始
- 版本迭代:SKILL.md 不是一次性写完的,是随着对工具理解的深入而不断迭代的
- 关注生态:mattpocock/skills、superpowers、agent-skills 这三个项目的演进代表了这个领域的三个不同方向,值得持续跟踪
AI 编程的下一阶段,不是更好的模型,而是更丰富的技能生态。Skills,就是那个让 AI 从"能干活"走向"干得好"的关键基础设施。
参考资料:
- mattpocock/skills: https://github.com/mattpocock/skills
- obra/superpowers: https://github.com/obra/superpowers
- addyosmani/agent-skills: https://github.com/addyosmani/agent-skills
- Anthropic Claude Agent SDK: https://docs.anthropic.com/en/docs/claude-code
- MCP 协议规范: https://modelcontextprotocol.io/