Agent 工程对照
← 返回周报

2026-W41

同一周三家改了 Agent 间消息的投递承诺:openJiuwen 加上确认与重启重投,DeepSeek Harness 删掉团队 outbox、放弃重试

本周落点

本周综述

本周最清楚的一条线索是多 Agent 消息的「投递保证」在三家走向不同方向。openJiuwen 新增 Team Organization,跨团队的 Leader 消息先写共享数据库再发唤醒事件,每个收件团队一份 receipt,Leader 回合处理成功后才确认,团队重新绑定时扫描未确认消息重投。DeepSeek Harness 同一周反过来,把实验性 Agent Team 的第二套 outbox(独立身份、确认、检查点、重试排序)整体删掉,团队消息直接进目标 Agent 的普通 inbox,发送只返回获准的消息 ID 或报错,不在重启后重试、不对重发去重,删除行数多于新增。Codex 则继续扩展消息面板:频道描述、权限与结构化拒绝、本地面板模板。

展开完整综述

三种选择背后是同一个问题:消息的可靠性该由谁负责。openJiuwen 把它放进组织运行时,代价是要求处理逻辑幂等,而且当前只支持同一进程、同一个数据库实例;DeepSeek Harness 的设计记录明说另设一条带回执和排序的投递路径,代价高于它能补回的未投递旧消息,于是把可靠性压回到单一 inbox 所有者。矩阵里 openJiuwen 那一格写的是消息总线支持点对点与发布订阅,DeepSeek Harness 那一格写的是按方向拆开的父子通信,本周两家都在这之上又往前走了一步,但方向相反。

第二条线是 Codex 把 W39 加进来的抢占开关打开了。instant_interrupt 改为默认开启,新的用户输入可以抢占正在进行的响应,并让前台 code-mode 的观察提前返回;code_mode_interrupt 标为稳定并默认开启,打断回合时终止活动的 cell 和嵌套工具调用,已存的会话值保留。两周内从默认关闭到默认开启,说明回合内抢占已经从实验选项变成默认行为,依赖「响应先完成再处理后续输入」的测试都要显式关掉它。

同一周 Codex 还在调整上下文压缩能丢什么:客户端提交的工具输出可以标记 retain,压缩和换新窗口时整条保留、紧急裁剪在它这里停下;另外把技能、记忆、历史搜索等只读工具放出独占调度锁,允许并行执行。前者让「压缩不能丢的内容」从系统判断变成调用方声明,后者把只读与写入的区分落到了调度层。

Pi 上周把 codemode 带进 coding-agent 并发布 1.0.0,这周又发了 v1.0.3、v1.0.4 和 v1.1.0,结构性改动集中在 durable 包,把 codemode 做成能扛过重启的版本:确定性的 code mode 运行,结果先写日志再交付,重启后按日志重放到断点再继续。DeepSeek Harness 发了 0.2.1-alpha.2,除团队消息外还在做会话日志格式的兼容策略与可选插件包,本周没有读到设计文档,判断留到之后。

工程解读

DeepSeek HarnessAgent 间通信 →

DeepSeek Harness:删掉团队 outbox,团队消息直接写入 Agent inbox

改了什么
实验性 agent-team 包里的团队发送不再经过第二套 outbox。新的发送直接通过 Lead 的 Steer 或仅限宿主的子代理 Steer 适配器写入目标 Agent 的 inbox,返回获准的 MessageId 或抛错;发送者沿用现有的 agent-message 来源,成员名写在正文里。接收按普通 Agent 的持久化策略,不确认模型已经处理,也不增加同步 flush。团队不保留尚未被接收的发送意图,重启后不重试,显式重发不去重。历史 mailbox 记录仍可解码并参与投影,保证旧的 Lead 日志能回放,但不再投递或确认。合并改动新增 811 行、删除 1430 行。
为什么改编辑推断
提交信息没有说明原因,合并标题只写了改为直接发往 Agent inbox。随提交入库的设计记录给出了理由:第二套 outbox 用独立身份、确认、持久化检查点和重试排序重复了 Agent inbox 的职责,而 inbox 的 continuation owner 已经提供目标锁、生命周期授权和冷恢复;另设带回执、同目标排序的投递路径,代价高于它能补回的未投递旧消息。据此判断,目的是让每条消息只有一个身份、一个 inbox 所有者。
对开发者的影响
用 DeepSeek Harness 实验性团队功能的人,要把发送失败当作调用方需要处理的错误,不能再依赖框架在重启后补送;升级前尚未被目标记录的消息永远不会送达,升级时最好先让团队排空。自建 Harness 可以借鉴的是先数清系统里有几个投递所有者:如果 Agent inbox 已经负责锁和恢复,再加一层团队队列往往只是在维护第二份接收状态。

openJiuwen:Team Organization 给跨团队消息加上确认与重投

改了什么
在 AgentTeams 之上新增跨团队协作层:多个 Team 的 Leader 通过共享任务池、Leader Inbox 和组织工作空间协作。Leader 消息先写入共享数据库,再发布唤醒事件;广播只存一份正文,但为每个收件团队建一份 receipt;提供发送、读取、列出未确认、确认四个工具,规定只有 Leader 回合成功处理后才确认,团队重新绑定时扫描未确认的 receipt 重新投递。任务状态以数据库为事实来源,事件总线只负责通知与唤醒。工作空间里每个团队只能写自己的 teams 子目录,汇总团队写 summary。改动约 18500 行,含中英文开发文档。
为什么改编辑推断
提交信息只有合并标题和评审人,没有说明原因。随提交入库的文档把它定位为面向多个相对独立团队、产物需要明确验收、执行过程需要持久化恢复的复杂任务,并写明组织运行时负责持久化、通知和唤醒,但不替 Leader 判断是否认领任务或如何回应消息。据此推断,目的是让跨团队协作在进程重启后不丢消息、不丢任务归属。
对开发者的影响
使用 Team Organization 的团队要保证 Leader 处理消息的逻辑幂等,因为运行时只按 message_id 对唤醒去重,未确认的消息会被重投;目前所有成员 Team 必须在同一进程里、共用同一个 TeamDatabase 实例,只共享 PostgreSQL 不能跨进程组成 Organization,跨主机还要另外提供共享的产物存储。自建 Harness 可以借鉴「先落库、再唤醒」的顺序:事件丢了,消息不会丢。

Codex:调用方可以声明哪些工具输出在压缩时不许丢

改了什么
三步改动。第一步,turn 输入新增带 retain 标注的条目,函数调用输出设 retain 为 true 时在历史元数据里记为 client_authored,标注本身不进入模型请求。第二步,app-server 的 turn/start 给 TurnToolOutput 加上可选的 retain 字段,默认 false。第三步,新增默认关闭的 retain_client_tool_outputs 特性:对显式标记、带名字且没有 call_id 的工具输出,远端压缩 v2 和开新上下文窗口时保留原角色整条保留,紧急裁剪工具输出时停在它这里;它和既有保留内容共用 64000 token 预算,超出预算时整条丢弃连同更早的条目,而不是部分截断。
为什么改原文说明
第三个提交的正文写明了原因:客户端提交的工具输出可能携带任务指令,即使标了 retain,这些指令也可能在压缩前被裁掉,从压缩后的历史里消失。
对开发者的影响
通过 app-server 向 Codex 注入任务指令的客户端,可以给这类工具输出加 retain 并打开 retain_client_tool_outputs,避免长任务压缩后丢掉指令;要注意单条过大的输出会被整条丢弃,指令应保持短小。自建 Harness 可以借鉴的是让调用方给条目打保留标记,并让压缩器把它当硬约束,而不是全靠摘要模型判断什么重要。

Pi:durable code mode 先写日志再交付结果,重启后按日志重放

改了什么
pi-codemode 新增 start():脚本在虚拟时钟(起始时间,之后取每个结果的时间且不倒退)、固定随机种子、UTC 下运行,禁用 WeakRef 和 FinalizationRegistry;每次工具调用交给宿主,宿主按序号回送结果,VM 严格按序号应用,并在脚本运行前报告引擎版本、预置代码哈希与限制组成的指纹。pi-durable 在此之上做成可持久的 code mode 工具:每个结果先写日志再交付;重跑时从存储的启动数据重新执行脚本,按序回放日志里的结果并核对调用次数,日志里没有的新调用要等回放结束、对照之前的尝试后才真正发出。脚本行为偏离、模块版本或沙箱指纹变化、超过截止时间,都以存储的错误结束。另一处修正:宿主优雅关闭时先关掉沙箱,过去会把「沙箱已关闭」存成脚本结果导致永远无法恢复,现在不存结果,由下一个进程重放。
为什么改原文说明
提交正文写明了目的:宿主在重启后重跑脚本,应得到相同参数的相同调用;durable code mode 让调用对话工具的脚本能扛过重启。关于沙箱关闭的修正,正文写明原因是优雅关闭时被中止的调用会存下错误结果,脚本因此不再继续。
对开发者的影响
在 Pi 上做长时间运行任务的人,可以让 code mode 脚本跨进程重启继续,而不用重做已完成的工具调用;但脚本必须是确定性的,依赖真实时间、随机数或运行时外部状态的写法会在重放时被判为偏离并以错误结束,升级 codemode 模块或改沙箱限制也会让在途的调用失效。自建 Harness 可以借鉴「结果先落日志、重放时核对调用次数、新调用等回放结束才放行」这套顺序,它让恢复过程能证明哪些调用是新的。
影响到的格子(5 条说明)
采集到的提交与发布
openJiuwen23 提交 · 0 release · 446 ★

值得注意的提交

  • 9824919!3136 fix(claudecode): wait for completed replies and mark unobserved inputs
  • e1c2b44feat(trajectory): mark inferences recorded without observing their request
  • 16a0890fix(claudecode): start request log wait after the reply finishes streaming
  • 030187ffix(agent-teams): isolate group chat with a fixed runtime mode
  • 15b9962!3090 merge develop into develop
  • 6df9699fix(tracer): inject per-event trace_id/session_id in trigger
Codex100+ 提交 · 18 release · 128,702 ★

值得注意的提交

  • a9b0815Support Windows clipboard text paste shortcuts in the TUI (#53224)
  • 9f3d255Keep agents navigation available after a thread is archived (#53201)
  • 27065a9Allow restarting managed background servers from the TUI (#53173)
  • 72f999eSimplify the custom terminal drawing API (#53156)
  • 95db2cdKeep remote app-server events deliverable during shutdown (#53155)
  • 8553558Show subagent navigation shortcuts in TUI help (#53153)
DeepSeek Harness100+ 提交 · 1 release · 247,658 ★

当周 release

值得注意的提交

  • 78be1e5Merge master into fix/prune-python-runtime-tests
  • db5c4aaMerge master and resolve integration conflicts for #5523
  • 18678f4Merge origin/master into fix/4931-composer-focus
  • a1a43cbtest(web): restore access mode after narrow Auto check; clarify EXP docs
  • 0616cbctest: keep locale regression commands ASCII on Python 3.10
  • e7c4ef0fix(web): raise Auto review icon A by 0.4px
Pi100+ 提交 · 3 release · 114,373 ★

当周 release

值得注意的提交

  • 0456663fix(durable): closing the code mode sandbox does not decide the script's outcome
  • 127b771feat(durable): code mode result lists the script's tool calls
  • 7b597d1feat(durable): durable code mode (@earendil-works/pi-durable/codemode)
  • 8a9c051feat(codemode): show schema constraints in tool declarations
  • 78a3c10fix(tui): enable kitty images in herdr (#10774)
  • 0fb1aeefeat(codemode): deterministic runs that the host answers (sandbox.start)

每家最多列 6 条代表性提交,已去掉合并、版本号与纯文档提交。

观察名单

观察名单

这几个项目出现在周报里,但还不在对照矩阵中。

Claude Agent SDKAnthropic
16 提交 · 8,250 ★

Anthropic 把 Claude Code 的 Harness 能力下放为可编程 SDK,是「Harness 作为库」这条路线的参照系。

最近一次 release(不限当周):v0.2.165(2026-10-08)

同族的 anthropics/claude-agent-sdk-typescript 只有 examples/scripts/CHANGELOG,属发布仓,不单独采集。