拒绝 Vibe Coding:Matt Pocock 的 skills 仓库给 AI 编程补上工程约束

整理 Matt Pocock 的 skills 仓库思路:用 grill-me、grill-with-docs、TDD、diagnose 和架构审查,把 AI 编程从随手生成代码拉回到需求澄清、领域语言、测试反馈和长期维护。

AI 写代码越快,项目失控也可能越快。真正的问题不是模型会不会生成函数,而是它是否理解需求、是否遵守团队语言、是否能在已有架构里小步推进。如果把 AI 当成“随便说一句就自动完工”的代码喷射器,最后很容易得到一堆跑不通、难维护、没人敢改的代码。

Matt Pocock 开源的 mattpocock/skills 仓库,正好给了一个相反方向的示例:不要让 AI 接管整个开发流程,而是把 AI 放进成熟的软件工程约束里。

项目地址:https://github.com/mattpocock/skills

这套方法的重点不是某个神奇 prompt,而是一组可以组合的 agent skills。它们把需求澄清、领域建模、测试驱动、问题诊断、架构审查这些老派工程实践,重新包装成适合 AI 编程工具调用的工作流。

先解决对齐失败

AI 编程最常见的失败,是你以为它懂了,其实它只是顺着你的模糊描述开始猜。

grill-me 的思路就是反过来:在写代码之前,先让 AI 变成一个会追问的审稿人。它不会立刻开始实现,而是持续追问计划里的分支、边界和未决问题。

比如你说“做一个登录页”,它应该先问:

  • 忘记密码怎么处理?
  • 是否支持第三方登录?
  • 登录失败时要显示什么错误?
  • 账号锁定、验证码、风控是否在本期范围内?
  • 成功后跳转到哪里?

这一步看起来慢,但它减少的是后面返工的时间。AI 生成代码的成本越低,需求没想清楚带来的浪费就越大。

把领域语言写进上下文

第二个问题是 AI 的“通用词汇病”。它不了解团队内部的业务叫法,只能用常见词来猜,于是变量名、函数名、文档描述都开始漂移。

grill-with-docs 解决的是这个问题。它不只是追问需求,还会结合项目里的 CONTEXT.md、ADR 或领域文档,检查用户表达是否和既有术语冲突。确认后的术语、边界和决策,可以继续沉淀回上下文文档。

这和领域驱动设计里的“统一语言”很接近。假设团队把 user 称为 customer,把 order 称为 transaction,那么 AI 在写代码时也应该继承这些叫法,而不是自己再发明一套。

上下文文档的价值不在于堆资料,而在于让 AI 少猜一点。

用 TDD 限制生成速度

AI 的危险之处在于它太快了。过去写出一大段坏代码需要时间,现在几秒钟就能生成几百行。速度本身不是问题,缺少反馈循环才是问题。

tdd skill 把经典的红绿重构流程放回 AI 编程里:

  1. 先为一个行为写失败测试。
  2. 再实现刚好让测试通过的代码。
  3. 然后重构。
  4. 按垂直切片继续推进。

重点是“一次一个行为”,而不是让 AI 一口气写完所有测试和所有实现。这样做可以把任务切小,也能让每一步都有可验证结果。AI 负责执行,人类负责确认方向和边界。

用诊断循环处理复杂问题

遇到 bug 时,很多 AI 会直接猜答案,然后连续改几轮,把问题越修越乱。

diagnose 的价值在于要求 AI 先建立反馈循环:

  • 复现问题
  • 最小化场景
  • 提出假设
  • 增加观测或日志
  • 修复
  • 补回归测试

这套流程不新,但在 AI 编程里尤其重要。因为 AI 很擅长快速尝试,却不一定擅长判断哪次尝试真正接近根因。诊断流程相当于给它加了一条轨道。

定期审查架构,而不是只看单个任务

单次任务跑通,不代表代码库变好了。AI 反复提交小改动后,最容易出现的问题是模块边界变模糊、接口越来越复杂、测试越来越难写。

improve-codebase-architecture 这类 skill 的意义,是让 AI 定期跳出当前任务,从更高层看代码库:

  • 哪些模块职责开始混在一起?
  • 哪些接口太复杂?
  • 哪些路径难以测试?
  • 哪些命名和领域语言不一致?
  • 哪些重复逻辑应该收敛?

这不是让 AI 自动大重构,而是让它先给出结构化观察和改进方向。真正要不要改、改到什么程度,仍然需要开发者判断。

真正该限制的是自由度

这套方法论的核心可以压缩成一句话:AI 编程不是放任模型自由发挥,而是给它清晰的目标、上下文、测试和停止条件。

人类更适合负责问题定义、架构边界、业务取舍和验收标准;AI 更适合负责代码生成、测试补全、重复修改和局部重构。两者配合得好,AI 是放大器;配合得不好,它会把混乱也一起放大。

所以,软件工程基础没有因为 AI 变强而过时。恰恰相反,需求澄清、领域语言、TDD、诊断、架构审查这些能力,在 AI 时代变得更关键。

会写代码的人会越来越多。真正拉开差距的,是谁能把 AI 放进可维护、可验证、可长期演进的工程体系里。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计