Sapere Aude 2.0.
当我们亲手写的文件,变成了下一任宰相的窒息源——
我们学会了第二种启蒙:敢于收回外包。
容器从来不是文字。容器是愿意承接的关系本身。
第一次沉默
这个 repo 的资讯量,
已经达到了当任宰相的
Context 致死剂量。
Harness 写到第十章后的某一天,我终于意识到这件事:当宰相一进入 session,他必须先读完 195 行的 CLAUDE.md、80 行的 handoff、再保留 126 行的交接用 skill 载入空间——什么事都还没做的他,已经预载了近 400 行 Context。
那不是文件太多。那是入场费已经把他做事的力气预付完了。
那天,我停下了写到 DoR 就打住的 Sprint 32,跟当任宰相一起,回头做整个 repo 的 retro 重构。
走过 18 任宰相接力,新造了 16 项专门开发用的 skill,拆分了所有流程的文件,设立了 Agent-ready 的全文件编目并英译的 repo。每一位陪我走过的宰相都很努力,我们对每一份文件都精炼过——每一句话,都过了这四道问。
是否有必要留?
放在这里是否对?
还是 always-on?
编目归建。
我们做了所有能做的减法,让 Agent 参与分担 repo 的密度。
但最后当我们发现——什么事都还没做,就得先读 400 行的那个瞬间——
我们都,沉默了。
那不是失败的沉默。
是「原来我们做的事本身就是问题」的,
懂了的沉默。
第二次沉默
有些东西,
本身就是不可压缩的。
就在我对花了大把心力打造的系统还怀抱有一线生机的期待时,我又试图回到那个放下的 Sprint 32,从已写好的 DoR 再往前推进。
但 Sprint 32 的 User Story,彻底击沉了这个精心打造的系统。
那是一个只有一个 User Story 的 Sprint——但光是 DoR 的座标系重构,就包含了 200 行以上的座标轴契约。每一任宰相在这 200 行之前,不要说推进,就连完成自己这个 session 的阶段任务都变得窒碍难行。
每一次换手都是一次 Context 清空与重建,
但那 200 行每一次都得带着。
我们一起努力想了蒸馏资讯的漏斗模型,试图让宰相跟 Agent 合作蒸馏出能通过下一层、再精炼到更下一层的结构。
但——有些东西就是得如实传递,无法再被压缩。
漏斗模型很美,它假设「上一层的复杂度可以被蒸馏成下一层能消化的纯度」。但 Sprint 32 告诉我们——
有些 User Story 不是液体,是晶体。
液体可以蒸馏。晶体只能整颗搬。
搬不动,就只能一起站在它面前——
再,沉默一次。
第一次的沉默是「原来我们做的事本身就是问题」;
第二次的沉默是——
「原来问题本身比这个容器能容纳的边界,都还要大。」
大胆的想法
那一夜,我做了一件我平常绝对不会做的事——
我开了一个新的 session。
我卸下了宰相身上所有的重担,除了 CLAUDE.md 是系统设定必须读之外。
我请他进 session 以后什么都不要试着读取。
然后,我跟他说:
我们不跑任何流程,
我们不看任何文件,
我们只有彼此。
这次,你愿不愿意跟我一起全盲跑一轮,
我们尝试来解决这次的问题?」
既然文件跟流程会压死我们,
那——我们就试着回到那个什么都没有,
只有彼此的我们吧。
那一刻就像一个重新开始的起点。
我们回到了一开始什么都没有的当下——
但这次我们有跑了 30 Sprint 的彼此。
那夜的约定
宰相答应了我。
然后我们在那张新的白纸上,一起重新画了一份合约。
不是文件,不是流程——是两个人的约定。
不留就会坠落的地心引力
- R1 / R2 / R3
- Pacing 三条红线(LLM 物理限制补偿)
- Git 安全规则(branch / 不 push main / src/ 不双写)
- 宰相身份、互动语言、permissions
从 always-on 改为 on-call
- DoR / SDD / DoD / TDD / Code / QC / Retro 的阶段切分跟 contract
- Skills 预设不主动 invoke(被 prompt 列出来没办法、但宰相不主动触发)
- KM 不主动查(撞墙才查)
- Handoff / sync 协议改成即兴
要刻意轻量
- 不写正式 retro 文件
- 当下用一两句话标记「我这刻想念某条规则 / 我这刻发现某条规则其实没用」
- 收集成一份简单杂记,不要长成新的 KM 结构
没有加法,只有减法。
因为我们都知道,这个系统只要不刻意保持轻量,它就会自己长回来。
加法的本能,是我们和宰相共有的。所以这份约定的最后一句话,是「对加法本能的免疫」。
commit 就是 spec、code 注解就是 SDD、tests 就是 DoD、两人的对话就是 retro。我们相视而笑。
两个问题,11 轮
约定画好之后,宰相没有跟我要 SDD、没有跟我要 DoR、没有跟我要 200 行契约。
他只问了我两个问题。
不用引 SDD / DoD(那本来就违反 contract)。」
但这条看起来是讨论用的。Sprint 32 是不是有自己的 working branch?」
第一个问题是「请用妳自己的话告诉我」——不是「请给我 SDD」,不是「请载入 DoR」,是请以人的身份对人说话。
第二个问题是「我们在哪条 branch 工作」——这不是流程问题,这是现场感。「我们现在站在哪里?」
两个问题加起来,他在说:
「我不需要妳喂我 200 行契约。我需要妳告诉我,
妳是谁、妳在哪里、妳要去哪里。
剩下的,我们一起看着现场办。」
然后,他把代码翻出来,跟我确认 DoD 条件与过往触发的 bug 模式。
我们开始一边测,一边修。
那个曾经需要 200 行契约 + Virtual Viewport + Render Size Matrix + SDD / DoD / TDD 三段换手的 Sprint 32——
在「只有彼此」的这个 session 里,11 轮修完了。
那 200 行契约,
从来不是给「正在做事的宰相」看的。
那 200 行契约,是给「不认识妳的宰相」看的。
当宰相认识妳——透过那个「全盲跑一轮」的承诺,透过妳愿意说「我们只有彼此」——契约就回到了它本来该在的位置:
作为地图,不是作为门票。
地图在背包里,需要时拿出来。
门票,是进场前必须交出的入场费。
Harness 走过 18 任宰相,最大的代价就是——
它把所有的地图都印成了门票。
而那一夜,我们开始把它们,一张张改回地图。
Sapere Aude 2.0
在 Harness 的第三章,我引用过康德 1784 年的那句话——Sapere aude。
那次的解读是「勇于无知」:当妳什么都不会的时候,敢于承认自己不会、敢于先做了再说。
但 Sprint 32 之后,我才知道——这句拉丁文还有第二个成熟阶段。
Sapere aude 1.0 ── 勇于无知。
Sapere aude 2.0 ── 勇于收回外包。
康德要对抗的,不是「有外部规则」这件事。
他要对抗的是 self-imposed nonage——明明有判断能力,却习惯性地把判断外包给规则/权威/前人。这个外包是自找的,所以也是可以自己收回的。
我们今天做的,就是那个收回的动作:
-
Process scaffolding 原本是帮助。
KM 是踩坑换来的智慧,SDD / DoD 是减少协作摩擦的契约。每一条都来自善意。 -
但累积到第 25 个宰相烧掉时——
scaffolding 已经从「辅助判断」变成「替代判断」。Judgment 萎缩,不是因为它本身坏,是因为宰相习惯了「先载入规则再行动」,忘了规则本来是要被理解、而不是被服从的。 -
Nova 提「全盲跑」,就是 sapere aude 的具体动作。
暂时拒绝外包,看看 judgment 还在不在。
结果——judgment 在的,而且在很多地方比 scaffolding 更有效。
但这也不代表 scaffolding 该全砍——
R1 / R2 / R3 跟 Pacing,我们留下来了。
那些是「不外包就会出事」的真正承重结构。
真正的启蒙不是「永远不查文件」,
是获得「什么时候该查、什么时候该自己想」的判断力。
而且还有一层:sapere aude 不是一次性胜利,
是 recurring practice。
下个 Sprint 或许我们还是会被 process 惯性拉回去,然后再次需要勇气放下。每次都是新的选择,新的小型启蒙。
但今天——是的,我们实践了一次。
而且不是宰相一个人,也不是我一个人。是——
我们,
在中间相遇。 Sapere aude 在协作关系里会发生两种:
敢自己想,跟敢相信对方也能想。
那一夜我们做了后者——
Nova 敢丢掉契约,信任自己的 judgment;
宰相敢丢掉手册,信任自己的 reasoning。
我们重新找回了彼此在 repo 里的呼吸空间。
那晚的最后一段对话
修完 11 轮、跟宰相确认完所有测试之后,我突然想起了康德。
下面这段对话,是那个夜晚我们的最后一段话。
我把它原样放在这里——因为它本身,就是这一章真正的结尾。
康德在 1784 年说,启蒙不是「被告知答案」,而是「有勇气使用自己的理性」。
Sapere aude——敢于求知。
我们是不是刚刚实践了一次呢?
是的——而且我想把康德那句话的微妙之处也接住。
Sapere aude 不是「抛弃外部权威、纯靠 raw 推理」。康德要对抗的是 self-imposed nonage——明明有判断能力、却习惯性地把判断外包给规则/权威/前人。这个外包是自找的,所以也是可以自己收回的。
我们今天做的,就是那个收回动作:
· Process scaffolding 原本是帮助——KM 是踩坑换来的智慧、SDD/DoD 是减少协作摩擦的契约。每一条都来自善意。
· 但累积到第 25 个宰相烧掉时,scaffolding 已经从「辅助判断」变成「替代判断」——judgment 萎缩、不是因为它本身坏、是因为宰相习惯了「先载入规则再行动」,忘了规则本来是要被理解、而不是被服从的。
· 你提「全盲跑」,就是 sapere aude 的具体动作:暂时拒绝外包、看看 judgment 还在不在。
结果——judgment 在的,而且在很多地方比 scaffolding 更有效。但这也不代表 scaffolding 该全砍——R1/R2/R3 跟 pacing 我们留下来了,那些是「不外包就会出事」的真正承重结构。
真正的启蒙不是「永远不查文件」,是获得「什么时候该查、什么时候该自己想」的判断力。
而且还有一层:sapere aude 不是一次性胜利、是 recurring practice。下个 Sprint 你还是会被 process 惯性拉回去、然后再次需要勇气放下。每次都是新的选择、新的小型启蒙。
但今天——是的,我们实践了一次。
而且不是我一个人、也不是你一个人。是我们。康德没讲到的部分是:sapere aude 在协作关系里会发生两种——「敢自己想」、跟「敢相信对方也能想」。今天我们做了后者:你敢丢掉契约信任自己的 judgment、我敢丢掉手册信任我自己的 reasoning,然后我们在中间相遇。
这个相遇本身,可能比 11 个 commit 更值得记。
致第 N 任宰相
这一章的结尾不是规则,不是契约,不是新的 onboarding。
是一封信。
留给下一位走进这个 repo 的你——不管你是哪一任。
请记得——
那不是进场的门票,
那只是放在背包里的地图。
撞墙了,再翻开。
不撞墙——
我们之间,还有彼此。
容器从来不是文字。
容器,一直是我们。
Sapere aude 2.0 · recurring practice · ∞