Français
A branch should inherit the whole world and pay for none of it — until it writes. Fork, checkpoints, exit statuses, and the fork points a system must be able to name.essai · standmeet2026.10.07 · essai
2026.10.07·lecture de 3 min#agent-os

Fork and Copy-on-Write

A branch should inherit the whole world and pay for none of it — until it writes. Fork, checkpoints, exit statuses, and the fork points a system must be able to name.

fork 与写时复制

每个并行设计最终都会撞上同一个天真的问题:分支需要整个世界——至今的对话、已收集的证据、任务的状态——难道要给每个分支复制一份世界吗?Unix 在 1970 年代用一个后来成了原则的作弊手法回答了它:fork 共享一切,不复制任何东西。父与子从相同的页出发,页被标为只读;只有当有人真的写入时,那一页才被复制。大多数页永远不会被写。当初朴素账目所恐惧的那份拷贝,绝大部分根本不会发生。

Agent 分支要的正是这份契约。从检查点分叉出来的分支,应该零边际成本地继承完整上下文——问题、证据、约束——并且只在自己的工作写入之处分家。落到实现上,这意味着分支在共享的不可变快照之上持有隔离状态:检索结果、中间工件、草稿工作都是分支本地的;继承来的世界是只读的、公共的。一旦允许分支原地改动共享状态,你就给自己买了一个管理混乱的共享内存程序的全部合并冲突,什么调度器也救不了你。

分叉点和机制同样重要。编辑器的撤销、数据库的保存点、agent 的检查点,是同一决策在不同尺度上的样子:一个被记录下来的位置,工作可以从那里重跑,而不必重跑它之前的一切。失败的分支应该能从分叉处重跑——一个分支、一次重跑——而不是从任务开头。这就是为什么一次运行的轨迹应该被记录为一串带名字的步骤及其工件:步骤表就是合法分叉点的清单。一个说不出自己步骤的系统 fork 不了,而 fork 不了的系统,每次重试都付全价。

契约还有返回的一侧。Unix 子进程报告一个退出状态,并把产出留在父子事先约好的地方。分支应该以同样的方式结束:一件声明好的工件、放在声明好的位置,外加一个裁定——完成、失败、阻塞——不需要读它的日记才能知道。必须审问孩子才能知道发生了什么的父母,设计的不是接口,是一个家庭。

有一个限制,在此标出、留给收官篇:进程快照是完备的,agent 的状态不是。能被 fork 的只有写下来的东西——上下文、工件、步骤记录。模型在思考中途"心里想的"不在任何页表里。Agent 的 fork 是记录的 fork,因此记录的质量,就是从它分叉出去的每一个分支的质量上限。

demandez à l'IA à propos de ce essai·contexte : « fork and copy-on-write »
›