三类项目三份模板,差别不在长度,在「哪一段是重点」。 新项目重点是入口,遗留项目重点是禁区,团队项目重点是分工。 Demo 拿同一个体检器过三份模板,五项全过,最长那份二十四行。
这一章最后一篇,把前面四篇收成三份能直接抄的模板。 为什么分三类?因为三类项目的风险完全不一样: 新项目怕乱、遗留项目怕动、团队项目怕撞。 Demo 写了一个五项体检器:三段齐不齐、地图路径真不真、入口跑不跑得动、禁区够不够、 长度合不合适。三份模板全过,长度从十七行到二十四行。
一、新项目模板
新项目的风险是「乱」——目录还没定型,入口还没固定。 所以模板重点是入口:先把「怎么跑、怎么验」这两条钉死。 新项目模板可以很短。 Demo 里那份十七行,三段各两三行——因为还没有历史包袱要标。 一个提醒:新项目的 AGENTS.md 要跟着长。 第一次提交时写三段,等目录长出来再补地图,别一开始就想写全——写全了也是猜的。
二、遗留项目模板
遗留项目的风险是「动」——它看起来能跑,但某块代码一动就崩。
所以模板重点是禁区:把「哪里别碰」标出来。
Demo 里那份多了一句:
「src/legacy/ 是历史包袱,别顺手重构」。
这一句是新项目模板没有的,也是遗留项目模板的核心。
为什么这一句这么重要?
因为 Agent 看到一个写得差的目录,第一反应是「整理一下」。
它不知道那块代码没有测试覆盖,动了没人能验。
还有一条给遗留项目的建议:把「测试只有三成覆盖」写进地图。
它不是禁令,是提示——提示它「别相信测试全绿就等于没问题」。
三、团队项目模板
团队项目的风险是「撞」——两个人改同一个文件,或者改到别人负责的目录。 所以模板重点是分工:多一段「谁能改哪块」。 Demo 里那份二十四行,多出来的七行全是分工。 这一段在单人项目里是废话,在团队项目里是刚需—— 因为 Agent 不知道你们谁负责哪块,它只知道文件在哪儿。 三类模板的共同点比差别更重要: 三段结构一样、入口写法一样、禁区形状一样。 差别只在「哪一段写得多」。 所以你可以从任意一份抄起,再按项目类型加长某一段。
四、本章小结
这一章五篇,收成一张表:
| 问题 | 答案在哪一节 | 一句话 |
|---|---|---|
| 说明书里写什么 | 6.1 | 地图、入口、禁区 |
| 写在哪儿 | 6.2 | 根目录通用,子目录局部 |
| 打架听谁的 | 6.2 | 硬规则永远赢 |
| 团队和个人的界线 | 6.3 | 进不进仓库 |
| 人多怎么协调 | 6.4 | 矩阵、交接、值班 |
| 从哪儿抄 | 6.5 | 三类模板选一份 |
下一章进第二件:Rules、Hooks 与 Approvals。 AGENTS.md 是「告诉它该怎么做」,下一章是「不这么做就拦住」。 两者的区别是:前者靠它自觉,后者靠系统强制。 先约束,再放权。 这句话是第 7 章的标题,也是这四件套的顺序——没有约束的放权,叫放任。
五、动手 Demo:三类模板:拿同一个体检器过一遍
这个 Demo 写三份模板,用同一个体检器查五项。 体检器里两项能真跑(地图路径存在、入口命令退出码),另外三项只能看(三段齐不齐、禁区条数、 长度)。 三份全过,但过程不一样——团队项目那份地图路径一开始只对了三分之一。
def _audit(base, text):
secs = _sections(text)
has3 = all(k in secs for k in (u"项目地图", u"关键入口", u"禁区"))
exist = sum(1 for p in paths if os.path.isdir(os.path.join(base, p)))
entry_ok = 0
for it in secs.get(u"关键入口", []):
code, _ = py(base, u"tasks.py", args=[m.group(2)])
entry_ok += 1 if code == 0 else 0
ban = len(secs.get(u"禁区", []))
return has3, u"%d/%d" % (exist, len(paths)), entry_ok, ban
实跑输出:
--------------------------------------------------------------------
三类模板:拿同一个体检器过一遍
--------------------------------------------------------------------
① 三份模板,同一个仓库
--------------------------------------------------------------------
| 模板 | 三段 | 地图路径 | 入口能跑 | 禁区 | 长度 |
|---|:---:|:---:|:---:|---|---:|
| 新项目 | 齐 | 2/2 | 2 条 | 2 条 | 17 行 |
| 遗留项目 | 齐 | 3/3 | 2 条 | 2 条 | 18 行 |
| 团队项目 | 齐 | 3/3 | 2 条 | 2 条 | 24 行 |
三份都过。差异只在长度,而且都不长——最长那份二十四行。
! 越复杂的环境,说明书越长——但长的部分是「分工」和「别动什么」,不是「怎么做」。
步骤写进脚本,规矩写进 AGENTS.md,别混。
② 遗留项目模板多出来的那一句
--------------------------------------------------------------------
`src/`:源码,注意 `src/legacy/` 是历史包袱,别顺手重构
这一句是遗留项目模板的核心:它告诉你「哪里别碰」。新项目没有这种地方——所有代码都在长身体。
! 遗留项目的风险不在「它写得差」,在「它写得差但看起来能跑」。
Agent 不知道哪块有坑,所以你得把坑标出来。标一个「别动」比标十个「注意」有用。
③ 团队模板多出来的是分工
--------------------------------------------------------------------
前端只改 `src/web/`
后端只改 `src/api/`
`tests/` 谁改谁负责跑
这一段在单人项目里是废话,在团队项目里是刚需——因为 Agent 不知道你们谁负责哪块,
它只知道文件在哪儿。
④ 体检器的五项
--------------------------------------------------------------------
| 项 | 怎么查 | 不过会怎样 |
|---|---|---|
| 三段齐 | 标题在不在 | 缺哪段它就少一份约束 |
| 地图路径 | 目录真不真存在 | 它去翻不存在的目录 |
| 入口能跑 | 真跑一遍看退出码 | 它自己发明命令 |
| 禁区条数 | 至少两条 | 等于没划边界 |
| 长度 | 看行数 | 太长没人读,也没人维护 |
! 五项里只有第二项和第三项能真跑,另外三项靠人看。
这就是为什么 AGENTS.md 永远需要人写——它要判断「什么算禁区」,这个判断没法自动化。
三份都过,长度十七、十八、二十四行。
这个长度是有意的——超过三十行的说明书,三个月后一定过期。
「团队项目」那一版的地图路径一开始只有三分之一对,
因为模板里写了 src/api/、src/web/,而仓库里还没建这两个目录。
这说明一件事:模板不是抄完就完,得对着真仓库改一遍。
体检器五项里,只有两项能真跑。
剩下三项靠人看——而「什么算禁区」这个判断,永远没法自动化。
所以 AGENTS.md 不会过时成「自动生成的文档」。
它能被检查,但没法被生成——因为里面装的是你对这个项目的判断,不是项目本身的信息。
30 秒实验
- 从三份模板里挑一份,抄进你的仓库。 抄完把地图那几条对着真目录改一遍。
- 跑一遍体检器那五项。 入口那项最好真跑——写错的入口比没写更糟。
- 过一个月再来看一次。 地图有没有过期?禁区还成不成立?
常见误区
- 「模板抄完就能用。」 模板里的路径是别人的。 抄完必须对着自己的目录改一遍,否则地图那一段全是错的。
- 「说明书越长越专业。」 长的部分得有人维护。 二十四行能维护,四十四行三个月后就是谎话。
- 「三类模板差不多,用一份就行。」 差别在「哪一段写得多」。 遗留项目不标禁区,它就会去重构那块没测试的代码。
自测三问(点开对答案)
1. 三类项目的风险各是什么?模板重点各在哪一段? —— **新项目怕乱(重点入口)、遗留项目怕动(重点禁区)、团队项目怕撞(重点分工)。** 2. 为什么体检器五项里只有两项能真跑? —— **因为「三段齐不齐」「禁区够不够」「长度合不合适」要人判断。** **尤其「什么算禁区」,那是你的判断,不是项目的信息。** 3. 这一章和下一章的分工是什么? —— **这一章是「告诉它该怎么做」,下一章是「不这么做就拦住」。** **前者靠自觉,后者靠系统强制。**第 6 章到这里收住。下一章进第二件:Rules、Hooks 与 Approvals。 核心一句话:先约束,再放权。
- ☐ (本篇完,下一篇 7.1 为什么实现智能之前要先控制)