comparison matrix / 对照矩阵
同一个问题,四种架构回答
行是 Harness 工程里绕不开的设计问题,列是四个开源实现。点开任意一行,能看到四家在这件事上的真实代码——固定 commit、标注行号、可跳转 GitHub 核对。四家的做法不同不代表谁更好,而是暴露出这个问题有哪些解法维度。
- 15
- 设计维度
- 4
- 跟踪框架
- 30 / 60
- 带代码的格
带代码仅摘要待补未核实的格子一律标「待补」,不作推测性描述。
2026-W34 周报四家同时在动子代理,openJiuwen 开始长出插件系统本周变化 →循环第 2 章
主循环形态
- openJiuwen
- 有界迭代预算的 for 循环
- Codex
- 无界 loop,回合内反复取用户插话
- DeepSeek Harness
- idle / running / maintenance 三相状态机
- Pi
- 显式内外两层 while,注释直接写明分工
上下文第 4 章
上下文压缩
- openJiuwen
- 按上下文预算比例触发,挂多档压缩器
- Codex
- 三条并行路径:本地摘要 / 远端摘要 / 直接换新窗口
- DeepSeek Harness
- 阈值细分到每个 provider + model
- Pi
- 一行公式,全局单一设置
工具第 5 章
工具定义方式
- openJiuwen
- 抽象基类 + ToolCard 元数据,元类织入生命周期
- Codex
- trait 对象注册表,显式处理重名冲突
- DeepSeek Harness
- defineTool 接口,强制声明规范化输出
- Pi
- TypeBox schema + 工厂函数,内核只有四个工具
运行时第 8 章
沙箱与权限
- openJiuwen
- 策略层规则引擎,三档判定 allow / ask / deny
- Codex
- 协议里的类型枚举,落到 seatbelt / landlock / Windows
- DeepSeek Harness
- 同样三个模式名,但状态是会话事件的折叠结果
- Pi
- 不做沙箱,改问「你信任这个目录吗」
多 Agent第 7 章
子代理隔离
- openJiuwen
- 独立子代理运行时,带并发上限与 LRU 驱逐
- Codex
- 独立线程 + 从父配置派生的角色覆盖
- DeepSeek Harness
- 子代理是可插拔 provider —— 包括别家的 Harness
- Pi
- 内核不提供,示例扩展用独立进程实现
循环第 2 章
停止条件
- openJiuwen
- 迭代预算 + force_finish + 停止评估器
- Codex
- hook 返回、任务完成或取消令牌
- DeepSeek Harness
- turn() 返回值驱动,收敛到 idle 相位
- Pi
- 内层看工具调用,外层看排队消息
循环第 2 章
中断与恢复
- openJiuwen
- 中断状态记住迭代号,从下一轮继续
- Codex
- rollout 回放 + 线程存储
- DeepSeek Harness
- 重放事件日志即恢复
- Pi
- 从当前上下文续跑,用两条断言守住前置条件
结构第 3 章
内核与扩展边界
- openJiuwen
- core 与 harness 分层,harness 内再分 12 个子系统
- Codex
- codex-core 为可嵌入库 crate,上百个 crate 环绕
- DeepSeek Harness
- 无特权内核,运行中的 Harness 是配置生成的插件树
- Pi
- 内核只有循环 + 四工具,其余全在扩展与示例
结构第 3 章
生命周期挂载点
- openJiuwen
- Rails:双层挂载点(core rail + harness rails)
- Codex
- 独立 hooks crate + 工具级 hook 名
- DeepSeek Harness
- hooks 也是一个插件包
- Pi
- 扩展机制(loader / runner / wrapper)
上下文第 4 章
会话状态存储
- openJiuwen
- core/session + checkpointer
- Codex
- rollout / thread-store / state 三个 crate
- DeepSeek Harness
- append-only 事件日志,另有 spill 包
- Pi
- session-backends/sqlite-node
上下文第 4 章
提示词缓存
- openJiuwen
- 不管前缀,管子代理的 KV 缓存亲和性
- Codex
- 请求字段逐个比对,新字段强制显式表态
- DeepSeek Harness
- 不放缓存断点,但把缓存 token 记成不相交三份
- Pi
- 按线路协议声明缓存能力,能力差异写进配置
工具第 5 章
MCP 接入
- openJiuwen
- 工具基础设施下的 mcp 子模块
- Codex
- 既是客户端也是服务端
- DeepSeek Harness
- packages/mcp 插件包
- Pi
- 不支持 —— 全仓库无 MCP 实现
工具第 5 章
Skills 与渐进披露
- openJiuwen
- harness/skills 与 single_agent/skills 双处
- Codex
- 独立 skills crate + 角色级开关
- DeepSeek Harness
- packages/skill 插件包
- Pi
- 单文件 harness/skills.ts
进化第 6 章
评估与自改进
- openJiuwen
- 把递归自我改进做成一级子系统 rsi/
- Codex
- 两阶段记忆流水线,从历史会话里长出记忆
- DeepSeek Harness
- 只收集人类反馈,且明确不回灌模型
- Pi
- 内置 evals 包,直接拿来横向比 Harness 配置
多 Agent第 7 章
Agent 间通信
- openJiuwen
- 层级消息总线团队
- Codex
- agent_communication.rs + 协作工具面
- DeepSeek Harness
- 统一子代理结果契约
- Pi
- 内核无 Agent 间通信