Study Notes / 2026 ・ No.06
Vibe Coding 札记
做大系统时,AGENTS.md 之外还要放什么
发布
本期要回答的问题
先说结论:“把规格、规则、验证分开,分别放进文件和机制里”
上一期讲了交给智能体的“规矩”——AGENTS.md。
但如果要和 AI 一起做一个有几十个页面的业务系统,光有它还不够。
本期以订单管理系统为例,讲清什么放在哪里、怎么推进。
Vibe Coding 的现状
“Vibe Coding”是 Andrej Karpathy 在 2025 年 2 月起的名字。最初的定义是“完全顺着感觉走,甚至忘记代码的存在”,他本人也说这适合一次性的原型和玩票项目。
一年后的 2026 年 2 月,Karpathy 又为工作中的用法起了另一个名字:“智能体工程(agentic engineering)”——99% 的代码不再自己写,而是指挥智能体去写,自己负责监督。之所以叫“工程”,是因为这里面有技术和专业性。实务中说“Vibe Coding”时,越来越多是指这种用法,本文也按这个意思来写。
为什么需要监督,数据也说明了问题。
| 调查 | 发现 |
|---|---|
| METR (2025 年 7 月) | 对 16 名资深开源开发者的随机对照试验中,使用 AI 工具后完成时间反而延长 19%,而他们自己感觉变快了 |
| Veracode (2026 年 3 月) | 150 多个模型写的代码,通过安全检测的只有 55%。语法正确率已超过 95%,安全性却与 2025 年几乎持平。XSS 防护只有 15% 通过 |
AI 已经非常擅长写“能跑的代码”。但“是否符合正确的规格”“是否安全”“是否与之前的决定矛盾”,放任不管就没有保证。系统越大,这个差距越明显。
AGENTS.md 之外还要什么 ── Q1 的答案
AGENTS.md 是“每次都读的规矩”。既然只能写得很短,其他内容就要放到别处。缺的大致有三样:做什么(规格)、在哪里怎么写(分领域规则和操作手册),以及确认是否完成的机制。
| 放什么 | 内容 | 例子 |
|---|---|---|
| 规格(spec) | 按功能写目的、范围外、验收条件 | specs/012-order-approval/spec.md |
| 计划・任务 | 怎么做、按什么顺序做 | plan.md、tasks.md |
| ADR | 做了什么决定、为什么(设计决策记录) | docs/adr/0007-approval-state.md |
| 产品说明 | 系统为什么存在、术语表、整体结构 | docs/product.md、architecture.md |
| 分领域规则 | 只在 API・页面・DB 等处生效的规则 | .claude/rules/api.md |
| 技能(操作手册) | 重复性工作的步骤 | 新功能的起步方法、发布步骤 |
| 验证机制 | 测试、类型、lint、E2E、CI、钩子 | 每次保存跑 lint,每个 PR 跑 CI |
| 对外连接 | 让 AI 操作 DB、工单、浏览器等 | MCP 服务器 |
关键在于读取的时机不同。如果全塞进 AGENTS.md,每次都得全部读一遍,正如上期介绍的研究,效果反而会变差。
放置的内容,何时被读取
上面三层是“请求”,可能不被遵守。只有最下面一层一定生效
规格驱动的做法
现在的主流是规格驱动开发(Spec-Driven Development)。在让 AI 写代码之前,先把做什么(规格)→ 怎么做(计划)→ 工作拆分(任务)写成文档,由人确认后再进入实现。
工具也逐渐齐备,下面列出有代表性的两个。
| GitHub Spec Kit | Kiro(AWS) | |
|---|---|---|
| 形态 | 开源 CLI + 面向各智能体的命令,支持 30 多种智能体(2026 年发布 v1.0) | 内置规格功能的 IDE |
| 产出的文档 | constitution.md(原则)、spec.md、plan.md、tasks.md,按需有 research.md・data-model.md・contracts/ | requirements.md(或 bugfix.md)、design.md、tasks.md |
| 存放位置 | specs/NNN-功能名/ | .kiro/specs/功能名/ |
| 流程 | constitution → specify → clarify → plan → tasks → analyze → implement | 可以选择从需求开始,或从设计开始 |
名字不同,内容几乎一样:把规格、计划、任务三份文档放进按功能划分的文件夹,每个阶段由人确认。尤其重要的是下面两点。
- 加入让 AI 提问的环节 ── 像 Spec Kit 的 clarify 那样,让 AI 读写到一半的规格,找出“还没定下来的事”。规格的漏洞,越晚发现代价越高
- 规格按功能拆开 ── Kiro 官方也建议不要写一个巨大的规格,而是按“认证”“商品列表”“购物车”等功能分开。每一份越小,AI 和人都越能读完
即使不装工具,手工建好同样结构的文件夹和 Markdown,任何智能体都能按同样方式推进。下一章的布局就是不依赖工具的形式。
文件怎么放 ── Q2 的答案
举个例子:一个公司内部用的订单管理系统,约 30 个页面,有前端、API 和数据库,采购、销售、财务都会用。仓库这样划分:
放置的原则有五条:
- 每次都读的要薄,需要时才读的可以厚 ── AGENTS.md 只写入口和规矩。细节放进 docs/ 和 specs/,由 AGENTS.md 指明位置
- 规格按功能放进带编号的文件夹 ── 编上 012、013,顺序和历史一目了然,也容易和分支名、PR 对应
- 决定写进 ADR,连同理由 ── “为什么用 PostgreSQL”“为什么用状态迁移来管理审批”。当 AI 想擅自改设计时,它就是依据
- 分领域规则用路径限定 ── API 的规则只在碰 API 时读,不要每次都读
- 同一件事不写两处 ── 规则里引用 docs。复制过去,总有一份会过时
作为入口的 AGENTS.md 大致如下。和上期的例子不同,这里把“没有规格就不做”这种推进方式本身写成了规矩。
各工具的存放位置差异如下:
| 作用 | Claude Code | Cursor | Kiro |
|---|---|---|---|
| 每次都读的规矩 | AGENTS.md(或 CLAUDE.md) | AGENTS.md、Always 规则 | .kiro/steering/ |
| 分领域规则 | .claude/rules/(用 paths 限定) | .cursor/rules/(用 globs 限定) | steering 的读取条件 |
| 规格 | specs/(格式自由) | specs/(格式自由) | .kiro/specs/功能名/ |
用一个功能走一遍 ── Q3 的例子
以给订单系统新增“采购审批流程”为例,从规格走到验证。一共 6 个阶段,其中 3 处由人批准。
一个功能的推进方式
想跳过某个阶段,往往是在赶时间的时候。越是这时,返工越大
STEP 1 写规格(spec.md)
目的和验收条件由人来写,因为了解业务情况的只有人。写好后让 AI 读,并请它“把没定下来的事问出来”。
验收条件要写成可以直接变成测试的样子。不写“要好用”,而写“50 万日元以上就进入待审批”。条件和结果一句对一句,到 STEP 5 时 AI 和人都能判断。
STEP 2 定计划(plan.md 与 ADR)
计划让 AI 写,由人判断。要看的是“有没有破坏现有结构”“是否与已定的事矛盾”。像状态怎么管理这类日后难改的决定,要写进 ADR。
STEP 3 拆任务(tasks.md)
一个任务的大小,要一次对话就能做完,而且做完能确认。诀窍是把写测试的任务放在实现之前。
STEP 4–6 实现・验证・关闭规格
- 实现 ── 按 tasks.md 从上往下一个一个做。一个任务一次提交,出问题时回退点很清楚。大范围的调查(比如梳理影响范围)交给子智能体,不让主对话变乱
- 验证 ── 以“测试・类型・E2E 通过”为完成条件,并在 CI 里必跑。人的评审先对照验收条件,再看差异。权限检查遗漏、XSS 这类安全问题要专门看(如第一章的数据,放任不管就有近一半漏过去)
- 关闭规格 ── 把实现过程中定下来的事(比如不需要代理审批)写回 spec.md,让规格与代码一致后再结束。偏离的规格,会在下一个功能里把 AI 带偏
规则与钩子
分领域规则的基本做法是只在碰到那个地方时才读。在 Claude Code 里,只要在 .claude/rules/ 文件开头写上 paths,就只会在读到匹配文件时加载。Cursor 的 .cursor/rules/ 也能用 globs 做到同样的事。
规则只是“请求”。必须遵守的事,要交给钩子或 CI。Claude Code 官方文档也写道:“写上‘不要编辑 .env’只是请求,不是保证。每次都必须遵守的,就做成钩子。”比如,每次改写文件都跑一次 lint 的钩子如下:
| 出现这种情况时 | 该加什么 |
|---|---|
| 同样的错犯了两次 | 在 AGENTS.md 加一行,或写成分领域规则 |
| 同样的步骤讲了三次 | 技能(操作手册) |
| 希望每次都必然发生 | 钩子 |
| 绝对不能发生 | 权限设置、分支保护、CI |
| 调查的内容塞满了对话 | 子智能体 |
此表参考了 Claude Code 官方“逐步完善配置”的建议。不必一开始就全部备齐。
现在的最佳实践 ── Q3 的答案
把和 AI 一起做中等规模网页系统的做法(截至 2026 年 9 月)归纳为 10 条。共同点是这样的分工:人把握“做什么”和“是否完成”,“怎么写”交给 AI。
| 要做的事 | |
|---|---|
| 01 | 每个功能都从规格开始。验收条件写成能变成测试的样子 |
| 02 | 设 3 道人的关卡:规格・计划・验证,不可跳过 |
| 03 | 先让 AI 提问,再做计划。在变成代码之前补上规格的漏洞 |
| 04 | 任务要小,并附验证方法。一个任务一次提交 |
| 05 | 测试先写,至少同时写。把“测试通过”定义为完成 |
| 06 | 每次都读的要薄。AGENTS.md 只写入口和规矩,分领域规则用路径限定 |
| 07 | 重复的步骤做成技能,必须遵守的交给钩子・CI・权限 |
| 08 | 决定写进 ADR,连同理由 |
| 09 | 安全要专门看。把安全规则写进规则文件,CI 里加静态分析,评审时检查权限和输入输出 |
| 10 | 不留下规格与代码的偏差。关闭功能时更新规格 |
反过来,也列出三件应当避免的事:
- 让 AI 一口气写出巨大的规格书 ── 读不完的规格,就是没人确认过的规格
- 不读就提交 AI 写的文档 ── 正如上期的研究,原样放入的自动生成指示反而会拉低效果
- 页面上能跑就当完成 ── “能跑”和“正确”“安全”是两回事
工具和名称今后还会变化。这里列出的,是 Spec Kit、Kiro、Claude Code、Cursor 官方文档中共通的思路,整理成了不依赖工具的形式。
结 — 一页总结
- 在工作中,“Vibe Coding”已变成让 AI 写、由人监督的形式(Karpathy 所说的“智能体工程”)。AI 的代码能跑,但正确性和安全性放任不管就没有保证。
- 放在 AGENTS.md 之外的有:规格(spec・plan・tasks)、ADR、产品说明、分领域规则、技能、验证机制。按读取时机分开放置。
- 规格按功能放在 specs/编号-功能名/,决定放在 docs/adr/,分领域规则用路径限定。
- 一个功能按规格 → 计划 → 任务 → 实现 → 验证 → 关闭规格推进,在规格・计划・验证处由人批准。
- 必须遵守的事,不只写下来,还要用钩子・CI・权限拦住。安全要专门确认。
参考
- The New Stack — Karpathy 的“智能体工程”(2026 年 2 月)
- METR — AI 工具对资深开源开发者生产率的影响(2025 年 7 月)
- Veracode — Spring 2026 GenAI Code Security Update
- GitHub — Spec Kit
- Kiro — Specs
- Claude Code — CLAUDE.md・技能・钩子等的使用区分
- Claude Code — .claude/rules 与路径限定规则
- Cursor — Rules
- Architectural Decision Records(ADR)
Vibe Coding 札记 — 全七章 / 2026.09