上周,V2EX 上有个帖子火了。
一个开发者写道:他们花了好几天修了一个浮点精度 bug,那段代码里有一堆看起来多余的 amount * 100 / 100。后来让 AI 重构,AI 「优化」掉了这段「冗余代码」,bug 悄悄回来了。
评论区里,很多人说:「遇到过,太真实了。」
这不是 AI 变笨了。这是 AI 编程工具的一个结构性缺陷:它没有记忆。
每次开新会话,AI 都是一张白纸。它不知道你上周修了什么 bug,不知道那段奇怪的代码背后有什么历史原因,不知道你们团队踩过哪些坑。它只能看到当前的代码,然后按照「最优解」的直觉去改。
这个问题,一个叫 Matt Pocock 的工程师,用一种很有意思的方式在解决。
01
什么是 Skills 文件
Matt Pocock 是 TypeScript 社区里的知名人物,Total TypeScript 课程的创始人,前 Vercel 工程师。他不是那种喜欢炒概念的人,他的受众是真实工程师。
今年他开源了一个项目:mattpocock/skills。
项目介绍只有一句话:「My agent skills that I use every day to do real engineering - not vibe coding.」
这句话里有个关键词:not vibe coding。
Vibe coding 是最近流行的一种编程方式——你描述你想要什么,AI 帮你生成,你不太管代码质量,能跑就行。Matt Pocock 明确说,他的 skills 不是这个。
那是什么?
Skills 文件是一种 Markdown 格式的「给 AI 的 SOP(标准操作程序)」。每个 skill 是一个独立的 .md 文件,带有 YAML frontmatter 描述触发条件,可以按需加载。
比如他有一个叫 tdd 的 skill,告诉 AI 如何做测试驱动开发:先写失败的测试,再写最小实现,再重构,测试行为而非实现细节。
有一个叫 diagnose 的 skill,定义了 6 个 debug 阶段:构建反馈循环 → 复现 → 假设 → 插桩 → 修复 → 回归测试。
有一个叫 caveman 的 skill,让 AI 切换到超压缩通信模式,削减 token 用量约 75%,同时保留技术精度。
这些 skill 文件,本质上是在给 AI 打补丁——让它模拟一个有经验的工程师的工作方式。
02
这个范式是怎么兴起的
Skills 文件不是 Matt Pocock 发明的,它有一条清晰的演化脉络。
第一步:CLAUDE.md 的出现
Claude Code 发布后,Anthropic 支持在项目根目录放置 CLAUDE.md,作为 AI 的持久化指令文件。这是「给 AI 写说明书」范式的起点。
第二步:Karpathy 的观察引爆社区
Andrej Karpathy 大量使用 Claude Code 后,写了一篇长文,直接点出了问题所在:
「模型会替你做假设,然后一路跑下去,不检查。它们不管理自己的困惑,不寻求澄清,不指出不一致,不呈现权衡,不在该推回的时候推回。」
「它们喜欢把代码搞复杂,膨胀抽象,不清理死代码……明明 100 行能搞定的,非要搞出 1000 行的庞然大物。」
「这些问题,即使在 CLAUDE.md 里写了简单的修复指令,也还是会发生。」
这段话催生了 forrestchang/andrej-karpathy-skills,把 Karpathy 的观察提炼为四条原则写入 CLAUDE.md,项目迅速积累了 121k stars。
第三步:从单文件到可组合 skill 生态
Matt Pocock 把 CLAUDE.md 的「全局指令」模式进化为「可组合的 skill 文件」——每个 skill 独立,按需加载,而非一股脑塞进单个文件。
Google Chrome 团队的 Addy Osmani 也发布了 addyosmani/agent-skills(35.3k stars),定义了完整的开发生命周期:DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP。
第四步:生态化
随着 skill 文件爆发,出现了专门的分发平台 skills.sh,总安装量已超 90,999。Microsoft、Vercel、Supabase、shadcn 等大厂均已发布官方 skill 包。
这意味着 skills 文件正在从「个人黑魔法」演变为「框架/平台的官方使用说明」。未来每个主流框架可能都会附带一个官方 skill 包,就像现在附带 TypeScript 类型定义一样。
03
Skills 文件解决了什么,没解决什么
Matt Pocock 在 README 里总结了 AI 编程的四大失败模式,以及对应的解法:
失败一:Agent 没做我想要的(沟通鸿沟)
解法:/grill-me 和 /grill-with-docs。这两个 skill 会让 AI 无情地逼问你的计划,直到每个决策分支都被覆盖,同步更新 CONTEXT.md 和 ADR(架构决策记录)。
失败二:Agent 输出太啰嗦(缺乏共同语言)
解法:CONTEXT.md + 领域词汇表。把项目的核心概念、命名约定、技术选型写清楚,让 AI 和你说同一种语言。
失败三:代码跑不起来(缺乏反馈循环)
解法:/tdd 和 /diagnose。强制 AI 先建立可运行的测试,再写实现,再 debug。
失败四:代码变成一坨泥(架构熵增)
解法:/zoom-out 和 /improve-codebase-architecture。定期让 AI 上升一层抽象,给出模块全局地图,识别「深化机会」。
但 skills 文件有一个根本局限,V2EX 帖子里有人说得很准:
「你想到的禁忌才能写进去。」
大多数坑是事后才知道是坑的。那个浮点精度 bug,在它被修复之前,没有人会想到要在 skills 文件里写「不要优化 amount * 100 / 100」。
Skills 文件是静态的,而工程经验是动态积累的。它能捕获你已经意识到的问题,但无法预防未知的坑。
还有一个更深的问题:评论区有人指出,浮点精度 bug 的根本原因是没有抽象出 Money value object,而不是 AI 不知道历史。Skills 文件可能是在用文档补偿本该用代码结构解决的问题。
这个批评是对的。但它不是 skills 文件的否定,而是一个提醒:skills 文件是补丁,不是架构。好的代码结构 + 好的 skills 文件,才是完整的答案。
04
怎么用起来
如果你想试试,最简单的方式是通过 skills.sh 安装:
# 安装 Matt Pocock 的 skills npx skills install mattpocock/skills # 或者安装 Addy Osmani 的 agent-skills npx skills install addyosmani/agent-skills
安装后,skill 文件会出现在你的项目目录里,Claude Code、Cursor、Windsurf 等工具都能识别。
如果你想手动创建,格式很简单:
--- name: my-skill description: 当需要做 X 的时候使用这个 skill --- ## 步骤 1. 先做 A 2. 再做 B 3. 最后做 C
Matt Pocock 还有一个叫 write-a-skill 的元技能——让 AI 帮你把工作流提炼成 skill 文件。这个用法很有意思:你描述你的工作方式,AI 帮你把它结构化成可复用的 skill。
05
一个更大的视角
有人在评论区说了一句话,我觉得说到点子上了:
「Skills 文件是软件工程经典的复辟。」
Matt Pocock 在 README 里大量引用《The Pragmatic Programmer》《Domain-Driven Design》《Extreme Programming Explained》。Skills 文件范式本质上是把 DDD、TDD、ADR 这些被 vibe coding 浪潮冲走的工程实践,以 AI 能理解的格式重新注入工作流。
这不是新发明,这是一次复辟。
Vibe coding 降低了编程的门槛,但也带来了一个副作用:很多人开始觉得工程纪律是多余的,AI 会搞定一切。Skills 文件的流行,某种程度上是市场在纠偏——当你真正用 AI 做生产级开发,你会发现那些「老派」的工程实践,其实一个都不能少。
只是现在,你需要把它们写成 AI 能读懂的格式。
本文由 AI 生成,内容仅供参考,请仔细辨别。
你现在用 AI 编程工具吗?有没有遇到过「AI 把已修复的 bug 重新引入」的情况?欢迎在留言区聊聊你的经历。
夜雨聆风