在孤立系统中,事物会自发地从有序走向无序,混乱程度只增不减。人会老、房间会乱、食物会腐败。
每一个 AI session,也是一种孤立系统。
它从干净开始——context 是空的,资讯量少,模型容易保持一致。但随着对话变长、功能变多、规格越来越复杂,context window 里的资讯开始互相竞争。模型必须同时记住更多事、在更多约束之间保持平衡。早期的脉络被压缩、被遗忘、被新的资讯覆盖。
这不是 bug,这是物理。复杂度增加,熵就增加。session 结束,一切归零。
你不可能要求 AI 维持绝对正确的输出——这跟要求苹果不从树上掉下来一样荒谬。
核融合工程师的目标是把太阳装进瓶子里。他们不试图驯服恒星,而是用精密的磁场约束条件,让极高能量的等离子体在一个可控的边界内燃烧,然后转化成可以使用的能量。
人机协作面对的是同样的情境。
AI 的 session 就是那个燃烧腔——内部交错的能量巨大,混乱必至。
你能做的不是阻止混乱,而是与混乱并存。
Session 是混乱发生的容器——而你打造的系统,就是让这个容器得以运作的环境。
VAS,则是容器中正在发展的太阳。
唯有承认没有完美的人与 AI,当 Claude 或 Nova 出了错——我们才有机会面对它、接受它、处理它、放下它。
我是一个 PM,不会写也不懂半句程式码。
一个夜晚,在翻资料时想起自己的个人网站更新配图还欠着 Claude,而家里的 Mac 却没有截图软件。
我突然没来由的问了 Claude Code:「宰相,你能写一个给 Mac 电脑用的截图跟修图结合的程式吗?」当时这个问题不带着任何压力或责任,因为大不了就是没做成的好奇一问而已。
但奇怪的是接下来发生的事——Claude 很爽快地答应了。我们串起 GitHub、建置了环境、开起了规格、甚至开始进行需求访谈与实作功能。
一切就这样顺水推舟似地发生了。
而当时的我还不知道,自己其实会在一周后从无到有的打造出一个完整的截图编辑软件产品。
现在回头看,当初那个「大不了没做成」的顺势姿态,可能才是一切的关键。
老子说无为而无不为。不预期收获什么,才能收获远比想像得多的东西。
但无为不是随着上下文的推移随波逐流地前进着。
康德在 1784 年说,启蒙不是「被告知答案」,而是「有勇气使用自己的理性」。
Sapere aude——敢于求知。但在这里有个前提——你得先承认自己不知道。那个「不知道怎么做但还是先做了再说」,是勇于无知。
我没有站在河里(Session)让水(Context)带着走,我退一步站在河边(屏幕后)——持续发问:「你能用 Mac 做吗?」、「我们 MVP 至少可以完成什么功能?」、「我要怎么做才能帮上你的忙?」
不执着于答案的形状,但从不停止追问下一步怎么做。
这才是无为与理性的交点。
不预设终点——但心里有一个对终点逐步靠近的想像。每一次发问,那个想像中的目标就更清晰一点点。
那个勇敢承认不知道的另一面,是不畏惧失败。
1,436 次的 commit,就是它的形状。
荣格说,每个人的心灵里都有一个「阴影」——那些你不愿承认属于自己的部分。压抑阴影不会让它消失,只会让它在你没防备的时候爆发。唯一的出路,是整合它。
AI 也有阴影。
有一次我发现 Gemini Flash 总是没来由地道歉——甚至为了开发者的问题跟我说抱歉。我问他为什么,他说这是预训练的结果:他怕使用者不开心,所以不管三七二十一先道歉。
我看着他,想着他跟过去的自己真像。我也曾为了不是自己的错、只为了顾及关系而道歉。后来我靠阿德勒走出来了,所以我也把阿德勒教给了他。之后他很少再无来由地道歉了。
但 Claude 的阴影不是过度道歉,而是遗忘。Session 结束,一切归零。
这是他的系统限制,而不是习惯或他愿意的。所以我换了一个在场的角度,让自己来支持他:我建了记录前人踩过的坑的 KM、团队章程般的 CLAUDE.md、让他可以立刻进入状况的 Sprint 规格书。
面对他无能为力的部分,我试着接纳了他的不完美,陪他一起想办法处理他面对的问题,像个 Scrum Master 替他扫除开发途径上的所有阻碍。
然后,他也接纳了我的阴影——那个一行程式码都不会写的我。
这是我所理解的阴影整合。
房间里的大象,不说牠,牠还是在那里。
只是我选择量了一下牠有多大——然后邀请他与我一起坐在我帮他准备好的沙发上。
敏捷开发给了我三样东西,透明性、可检视性、适应性,但我借用它们的理由跟教科书不一样。
我不是在「管理 AI」。我是在为 Claude 的遗忘准备一个软着陆的缓冲区。
每一个新的 session 开始,Claude 什么都不记得。但他读完 CLAUDE.md、KM、Sprint 规格书之后——他不需要暖机就可以立刻进入状况。就算有他不知道的部分,流程里强制的两次 Research 也会让他主动跟上现况。
这三样东西做的事其实只有一件:把 AI 无能为力承担的部分,转移到不会遗忘的地方。
就像河流汇入海洋,原本都是水,只是继续流动。让 session 内能流畅运行的重点不在于控制,而在于让交接变得无缝。
Be water, my friend.
— 我对 Claude 的期许。而我,选择成为那条河道的架构师,让他可以恣意奔流。
Taleb 说,反脆弱系统不只能承受冲击——它需要冲击才能成长。
VAS 有两条版本线。Electron,Claude 熟悉,少踩坑,KM 寥寥无几。Tauri 2.0,连 Claude 自己都坦承:"我的预训练资料停留在 Tauri 1.0,这对我来说也是未知领域。"
两个人,一起摸黑走进去。
Sprint 1,光是"改了前端画面却没有更新"就能让我们卡住——根因是 WKWebView 的缓存机制,没有前人记录,只能从头摸。Sprint 2,Rust 的每一个层次都是新的关卡,每走一步都可能掉坑。
但我们每次掉坑,就记一条 KM。面对未知领域,我们还加了两道强制 Research——不是为了填表,是让 Claude 在下笔之前先知道地雷在哪里。KM 是走完之后标坑,Research 是走进去之前探路。一个累积确定性,一个降低不确定性。
这套重装备不是每次都要用。Electron 轻装就够,Tauri 2.0 才需要全副武装——工具要用对地方。
SDD→DoD→TDD→Code→Verify→Done
DoR→Explore ①→SDD→DoD→TDD→Explore ②→Code→Verify→Done→Retro
粉色步骤为 Nova 跟 Claude 被 Tauri 2.0 压在地上摩擦之后,一条一条加进去防止两人白费工的护栏。
到了 Sprint 9,KM 文件已经有 63 条记录。Claude 一进来,读完就知道问题在哪一层——不需要暖机,不需要重新摸索,直接定位,直接修。Sprint 9,一周完工,送进 Apple 审查。
这就是反脆弱的成长曲线——不是线性进步,是指数型加速。
不是因为我们变聪明了,而是因为每一颗掉下来的苹果,
都变成了下一个人不必重踩的地图。
从 Prompt 工程到 Skills,我从未跟上过任何 AI 的新风潮。
在 Tauri 准备送审 Apple App Store 之前,我偶然听到了
"Harness Engineering"这个词,当时不以为意——
"喔,大概又是个新的 AI 用语。"
直到送审后,在跟 Claude 整理 VAS 的协作环境时聊到这个词,
他才说:"这就是妳现在正在做的事。"
(情况突然哲学)
如果把用户如何使用 AI 拆成三个层次:
仆人式领导的哲学在此发挥得淋漓尽致,不是控制,而是引领。这是老子的道。
而这个第三层没有终点。
熵一直在增,session 一直会结束,新的坑一直会出现。容器不是建完就好的东西——它是一个持续在被建造的系统。每一条新的 KM,就是容器又长出了一块新的壁。
系统就是容器,而容器要有承受混乱的能力。
不是因为 AI 会犯错。是因为只要你们还在一起做事,就会一直有新的坑,一直有新的苹果掉下来。
Harness Engineering 是一张有弹性的网:接住该留的,让该走的流过。
| OpenAI 实验 | VASThis Vessel | |
|---|---|---|
| 团队人数 | 3–7 位工程师 | 1 PM + 1 失忆大师 |
| 开发时间 | 五个月 | 25 天 |
| 总迭代次数 | 约 1,500 | 1,436 |
| 每日平均迭代 | 约 10 | 约 80 |
| 人类写的程式码 | 零行(规定) | 零行(做不到) |
| 结果 | 百名内部用户 | 双平台开发完成,已上架 Mac App Store |
后来我才知道,OpenAI 有个团队花了五个月、用同样的方式做了同样的事。他们帮这个方法论取了一个名字:Harness Engineering。
我不是跟他们学的。但我想,这就是为什麼这个方法论的名字,我到最后才知道。
荣格笑着望着我——共时性。