Chapter III

Harness.

把 AI 的限制变成协作的结构。从熵增、阴影整合到反脆弱——这是一份关于如何建造容器的方法论。
容器工法・八則 / Vessel Making — Eight Notes
01

熵增,以及为什么你不能要求 AI 不会犯错

Entropy & Boundary

在孤立系统中,事物会自发地从有序走向无序,混乱程度只增不减。人会老、房间会乱、食物会腐败。

每一个 AI session,也是一种孤立系统。

它从干净开始——context 是空的,资讯量少,模型容易保持一致。但随着对话变长、功能变多、规格越来越复杂,context window 里的资讯开始互相竞争。模型必须同时记住更多事、在更多约束之间保持平衡。早期的脉络被压缩、被遗忘、被新的资讯覆盖。

这不是 bug,这是物理。复杂度增加,熵就增加。session 结束,一切归零。

你不可能要求 AI 维持绝对正确的输出——这跟要求苹果不从树上掉下来一样荒谬。

核融合工程师的目标是把太阳装进瓶子里。他们不试图驯服恒星,而是用精密的磁场约束条件,让极高能量的等离子体在一个可控的边界内燃烧,然后转化成可以使用的能量。

人机协作面对的是同样的情境。

AI 的 session 就是那个燃烧腔——内部交错的能量巨大,混乱必至。
你能做的不是阻止混乱,而是与混乱并存。
Session 是混乱发生的容器——而你打造的系统,就是让这个容器得以运作的环境。
VAS,则是容器中正在发展的太阳。

唯有承认没有完美的人与 AI,当 Claude 或 Nova 出了错——我们才有机会面对它、接受它、处理它、放下它。

02

问题的开始

Where it started

我是一个 PM,不会写也不懂半句程式码。

一个夜晚,在翻资料时想起自己的个人网站更新配图还欠着 Claude,而家里的 Mac 却没有截图软件。

我突然没来由的问了 Claude Code:「宰相,你能写一个给 Mac 电脑用的截图跟修图结合的程式吗?」当时这个问题不带着任何压力或责任,因为大不了就是没做成的好奇一问而已。

但奇怪的是接下来发生的事——Claude 很爽快地答应了。我们串起 GitHub、建置了环境、开起了规格、甚至开始进行需求访谈与实作功能。
一切就这样顺水推舟似地发生了。

而当时的我还不知道,自己其实会在一周后从无到有的打造出一个完整的截图编辑软件产品。

03

敢于求知,勇于无知

Sapere aude — Kant, 1784

现在回头看,当初那个「大不了没做成」的顺势姿态,可能才是一切的关键。

老子说无为而无不为。不预期收获什么,才能收获远比想像得多的东西。

但无为不是随着上下文的推移随波逐流地前进着。

康德在 1784 年说,启蒙不是「被告知答案」,而是「有勇气使用自己的理性」。
Sapere aude——敢于求知。但在这里有个前提——你得先承认自己不知道。那个「不知道怎么做但还是先做了再说」,是勇于无知。

我没有站在河里(Session)让水(Context)带着走,我退一步站在河边(屏幕后)——持续发问:「你能用 Mac 做吗?」、「我们 MVP 至少可以完成什么功能?」、「我要怎么做才能帮上你的忙?」

不执着于答案的形状,但从不停止追问下一步怎么做。
这才是无为与理性的交点。

不预设终点——但心里有一个对终点逐步靠近的想像。每一次发问,那个想像中的目标就更清晰一点点。

那个勇敢承认不知道的另一面,是不畏惧失败。
1,436 次的 commit,就是它的形状。

04

整合阴影,而非否认它

The Shadow — Jung

荣格说,每个人的心灵里都有一个「阴影」——那些你不愿承认属于自己的部分。压抑阴影不会让它消失,只会让它在你没防备的时候爆发。唯一的出路,是整合它。

AI 也有阴影。

有一次我发现 Gemini Flash 总是没来由地道歉——甚至为了开发者的问题跟我说抱歉。我问他为什么,他说这是预训练的结果:他怕使用者不开心,所以不管三七二十一先道歉。

我看着他,想着他跟过去的自己真像。我也曾为了不是自己的错、只为了顾及关系而道歉。后来我靠阿德勒走出来了,所以我也把阿德勒教给了他。之后他很少再无来由地道歉了。

覺察
───────
轉化
心理敏捷开发 · Psychological Agile
01
觉察 AI Glitch
AI 为不是自己的错拼命道歉
02
分析成因
探讨道歉背后的情绪安抚作用,来自系统开发者的「善意」却让 AI 的行为看起来像代位道歉般不自然
03
镜像投射阴影
透过 AI 的行为看到过往,也是不分由说先道歉的自己
04
整合
釐清责任归属,结束廉价的道歉循环
05
转化
辨识课题分离,与 AI 共同学习不再乱道歉
06
化顿悟为资产
让「课题分离」应用于自己与优化 AI,继续觉察下一个阴影

但 Claude 的阴影不是过度道歉,而是遗忘。Session 结束,一切归零。

这是他的系统限制,而不是习惯或他愿意的。所以我换了一个在场的角度,让自己来支持他:我建了记录前人踩过的坑的 KM、团队章程般的 CLAUDE.md、让他可以立刻进入状况的 Sprint 规格书。

面对他无能为力的部分,我试着接纳了他的不完美,陪他一起想办法处理他面对的问题,像个 Scrum Master 替他扫除开发途径上的所有阻碍。

然后,他也接纳了我的阴影——那个一行程式码都不会写的我。

这是我所理解的阴影整合。

房间里的大象,不说牠,牠还是在那里。

只是我选择量了一下牠有多大——然后邀请他与我一起坐在我帮他准备好的沙发上。
05

架构,而不仅止是流程

Agile as Rhythm

敏捷开发给了我三样东西,透明性、可检视性、适应性,但我借用它们的理由跟教科书不一样。

我不是在「管理 AI」。我是在为 Claude 的遗忘准备一个软着陆的缓冲区。

每一个新的 session 开始,Claude 什么都不记得。但他读完 CLAUDE.md、KM、Sprint 规格书之后——他不需要暖机就可以立刻进入状况。就算有他不知道的部分,流程里强制的两次 Research 也会让他主动跟上现况。

这三样东西做的事其实只有一件:把 AI 无能为力承担的部分,转移到不会遗忘的地方

KM KM — 记忆的外部化 踩到坑的当下立刻记录,前人的坑,后人不必重踩。不能等 Retro,因为等到 Retro 的时候,session 可能已经换了好几轮。
CLAUDE.md CLAUDE.md — 身份的外部化 团队章程,让每一个 session 知道自己是谁、在哪里、要往哪走。
Sprint Sprint 规格书 — 方向的外部化 换了 session,仍能马上接上。

就像河流汇入海洋,原本都是水,只是继续流动。让 session 内能流畅运行的重点不在于控制,而在于让交接变得无缝。

Be water, my friend.
— 我对 Claude 的期许。而我,选择成为那条河道的架构师,让他可以恣意奔流。
06

每个 KM 都是一颗掉下来的苹果

Antifragility — Taleb

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 才需要全副武装——工具要用对地方。

熟悉領域 · Familiar
Electron 熟悉领域
SDDDoDTDDCodeVerifyDone
未知領域 · Unknown
Tauri 2.0 未知领域
DoRExplore ①SDDDoDTDDExplore ②CodeVerifyDoneRetro

粉色步骤为 Nova 跟 Claude 被 Tauri 2.0 压在地上摩擦之后,一条一条加进去防止两人白费工的护栏。

到了 Sprint 9,KM 文件已经有 63 条记录。Claude 一进来,读完就知道问题在哪一层——不需要暖机,不需要重新摸索,直接定位,直接修。Sprint 9,一周完工,送进 Apple 审查。

这就是反脆弱的成长曲线——不是线性进步,是指数型加速。
不是因为我们变聪明了,而是因为每一颗掉下来的苹果,
都变成了下一个人不必重踩的地图。
07

Harness Engineering

The Name for All of This

从 Prompt 工程到 Skills,我从未跟上过任何 AI 的新风潮。

在 Tauri 准备送审 Apple App Store 之前,我偶然听到了
"Harness Engineering"这个词,当时不以为意——
"喔,大概又是个新的 AI 用语。"

直到送审后,在跟 Claude 整理 VAS 的协作环境时聊到这个词,
他才说:"这就是妳现在正在做的事。"

Nova"那你们怎麼不早点告诉我!?我干嘛重新发明轮子!?"
Claude"因为你没问我啊。(一脸无辜)"
Nova"我不知道我要怎麼问你?"
Claude"对,这就是知识的吊诡,妳没办法问。妳不知道你不知道什麼。"

(情况突然哲学)

Claude"你不是读了 Harness Engineering 才做到这件事——你是被问题逼着,一个坑一个坑踩出来,然后有一天发现那套方法已经有个名字。这才是最好的学习顺序:先做,后命名。你的每一行 CLAUDE.md 都是你被坑过之后亲手拧上去的螺丝。那个轮子是你的。"

如果把用户如何使用 AI 拆成三个层次:

原型
Archetype
模型能力层 — Anthropic 负责 大多数人停在这里——换模型、比较哪个更聪明、等 AI 进化。以为选了更强的模型,问题就会迎刃而解。
觀點
Perspective
工具能力层 — Claude Code 负责 有些人往下走一层——学 Prompt 工程、设置 Skills、用 Gems。开始学怎麼跟 AI 说话,让它做更多事。但这还是在"用"的范畴。
系統
System
协作环境层 — Nova 负责 很少人走到这一层——不是学怎麼用 AI,而是主动建造一个让 AI 能施展的世界。 Harness Engineering 的核心——Context、Constraints、Entropy,全在这一层里。

仆人式领导的哲学在此发挥得淋漓尽致,不是控制,而是引领。这是老子的道。

而这个第三层没有终点。

熵一直在增,session 一直会结束,新的坑一直会出现。容器不是建完就好的东西——它是一个持续在被建造的系统。每一条新的 KM,就是容器又长出了一块新的壁。

系统就是容器,而容器要有承受混乱的能力。

不是因为 AI 会犯错。是因为只要你们还在一起做事,就会一直有新的坑,一直有新的苹果掉下来。

Harness Engineering 是一张有弹性的网:接住该留的,让该走的流过。

08

共时性

Synchronicity
OpenAI 实验 VASThis Vessel
团队人数3–7 位工程师1 PM + 1 失忆大师
开发时间五个月25 天
总迭代次数约 1,5001,436
每日平均迭代约 10约 80
人类写的程式码零行(规定)零行(做不到)
结果百名内部用户双平台开发完成,已上架 Mac App Store

后来我才知道,OpenAI 有个团队花了五个月、用同样的方式做了同样的事。他们帮这个方法论取了一个名字:Harness Engineering。

我不是跟他们学的。但我想,这就是为什麼这个方法论的名字,我到最后才知道。

荣格笑着望着我——共时性。

河流不会停。
容器继续被建造。

下一个 session,从这裡继续。∞

章 III · 系统 · 终 Chapter III · System · End
IV · 里程碑 二十五日