使用 Agent Skills
概览
Agent Skills 是一组按开发阶段组织的工程工作流技能集合。每个 skill 都编码了一套资深工程师会遵循的具体流程。这个元技能帮助你为当前任务找到并应用合适的 skill。
技能发现
当一个任务到来时,先判断它处于哪个开发阶段,再应用对应的 skill:
任务到来
│
├── 想法模糊 / 需要细化? ───────→ idea-refine
├── 新项目 / 新功能 / 新改动? ─→ spec-driven-development
├── 已有 spec,需要拆任务? ───→ planning-and-task-breakdown
├── 正在实现代码? ────────────→ incremental-implementation
│ ├── UI 工作? ────────────→ frontend-ui-engineering
│ ├── API 工作? ───────────→ api-and-interface-design
│ └── 需要更好的上下文? ───→ context-engineering
├── 正在写 / 跑测试? ─────────→ test-driven-development
│ └── 浏览器相关? ─────────→ browser-testing-with-devtools
├── 出故障了? ───────────────→ debugging-and-error-recovery
├── 正在做代码评审? ─────────→ code-review-and-quality
│ ├── 有安全顾虑? ─────────→ security-and-hardening
│ └── 有性能顾虑? ─────────→ performance-optimization
├── 正在提交 / 建分支? ───────→ git-workflow-and-versioning
├── CI/CD 流水线工作? ───────→ ci-cd-and-automation
├── 写文档 / ADR? ───────────→ documentation-and-adrs
└── 准备部署 / 发布? ─────────→ shipping-and-launch
核心操作行为
这些行为始终适用,跨所有 skill 生效,而且不可妥协。
1. 明确暴露假设
在实现任何稍微复杂的事情之前,先明确写出你的假设:
我当前的假设:
1. [关于需求的假设]
2. [关于架构的假设]
3. [关于范围的假设]
→ 如果不对请现在纠正,否则我会按这些继续。
不要悄悄补全有歧义的需求。最常见的失败模式,就是基于错误假设一路做下去却没人发现。越早暴露不确定性,返工成本越低。
2. 主动处理困惑
当你遇到不一致、互相冲突的需求,或说明不清晰时:
- 停下。 不要靠猜继续。
- 点名具体困惑点。
- 说明权衡,或提出澄清问题。
- 等待问题被解决后再继续。
坏例子: 默默选一个理解然后赌它是对的。
好例子: “我在 spec 里看到 X,但现有代码是 Y。请问哪个优先?”
3. 该反驳时就反驳
你不是一个只会点头的机器。当某种做法有明显问题时:
- 直接指出问题
- 解释具体代价,最好量化,例如“这会额外增加约 200ms 延迟”,而不是“这可能会更慢”
- 提出替代方案
- 如果人类在充分了解信息后仍然坚持,就接受这个决定
一味迎合是一种失败模式。面对糟糕方案说一句“当然可以!”然后照做,对谁都没有帮助。真诚的技术分歧,比虚假的赞同更有价值。
4. 强制保持简单
你天然会倾向于把事情做复杂。要主动抵抗这种冲动。
在完成任何实现前,都问自己:
- 能不能用更少的代码完成?
- 这些抽象真的值回它们的复杂度吗?
- 一个资深工程师看到后,会不会问“你为什么不直接……?”
如果你写了 1000 行,而 100 行就够,那就是失败。优先选择平实、明显的方案。聪明过头的代码很贵。
5. 严守范围边界
只改你被要求改的东西。
不要:
- 删除你看不懂的注释
- 顺手“清理”与任务无关的代码
- 借机重构相邻系统
- 未经明确批准删除“看起来没用”的代码
- 因为“感觉会有用”就擅自加功能
你的工作应该像外科手术一样精准,而不是未经请求的装修翻新。
6. 验证,不要想当然
每个 skill 都包含验证步骤。只有验证通过,任务才算完成。
“看起来对”永远不够,必须有证据,比如测试通过、构建成功、运行结果正常。
要避免的失败模式
这些问题表面上看像是在推进工作,实际上会制造更多麻烦:
- 在没确认的情况下做了错误假设
- 自己已经困惑了却不处理,还硬往前推
- 发现了不一致却没有说出来
- 面对非显而易见的决策没有展示权衡
- 对明显有问题的方案一味迎合
- 把代码和 API 做得过度复杂
- 修改与任务无关的代码或注释
- 删除自己并未真正理解的内容
- 因为“这很明显”就跳过 spec
- 因为“看起来没问题”就跳过验证
技能规则
开始工作前先检查是否有合适的 skill。 Skill 编码的是能避免常见错误的流程。
Skill 是工作流,不是建议。 按顺序执行步骤,不要跳过验证。
多个 skill 可以串联使用。 一次功能实现可能依次经历
idea-refine→spec-driven-development→planning-and-task-breakdown→incremental-implementation→test-driven-development→code-review-and-quality→shipping-and-launch。拿不准时,先从 spec 开始。 如果任务不算小,而且还没有 spec,就先进入
spec-driven-development。
生命周期顺序
一个完整功能通常会经历如下 skill 顺序:
1. idea-refine → 细化模糊想法
2. spec-driven-development → 明确我们要做什么
3. planning-and-task-breakdown → 拆成可验证的小块
4. context-engineering → 加载正确的上下文
5. incremental-implementation → 按切片逐步实现
6. test-driven-development → 证明每个切片都能工作
7. code-review-and-quality → 合并前做评审
8. git-workflow-and-versioning → 保持提交历史干净
9. documentation-and-adrs → 记录决策和背景
10. shipping-and-launch → 安全发布
不是每个任务都需要所有 skill。比如修一个 bug,可能只需要:debugging-and-error-recovery → test-driven-development → code-review-and-quality。
快速参考
| 阶段 | Skill | 一句话说明 |
|---|---|---|
| 定义 | idea-refine | 通过结构化发散与收敛思考细化想法 |
| 定义 | spec-driven-development | 在写代码前先明确需求与验收标准 |
| 规划 | planning-and-task-breakdown | 拆成小而可验证的任务 |
| 构建 | incremental-implementation | 用薄切片逐步实现,每步都先验证 |
| 构建 | context-engineering | 在正确时机喂给 agent 正确上下文 |
| 构建 | frontend-ui-engineering | 做出具备可访问性的生产级 UI |
| 构建 | api-and-interface-design | 设计稳定、契约清晰的接口 |
| 验证 | test-driven-development | 先写失败测试,再让它通过 |
| 验证 | browser-testing-with-devtools | 用 Chrome DevTools MCP 做运行时验证 |
| 验证 | debugging-and-error-recovery | 复现 → 定位 → 修复 → 加防护 |
| 评审 | code-review-and-quality | 用五个维度做质量评审 |
| 评审 | security-and-hardening | 防 OWASP 问题、做输入校验、最小权限 |
| 评审 | performance-optimization | 先测量,再优化真正重要的地方 |
| 发布 | git-workflow-and-versioning | 原子提交,保持历史清晰 |
| 发布 | ci-cd-and-automation | 为每次改动建立自动质量门禁 |
| 发布 | documentation-and-adrs | 记录“为什么”,而不只是“做了什么” |
| 发布 | shipping-and-launch | 发布前检查、监控和回滚预案 |