pi · Claude Code · Codex CLI
三个 Coding Agent Harness 的纯代码实现层面横向对比 — 基于 jayli/pi-coder issue #4 水位报告
综合水位:pi 7.4 / 10 · CC 7.5 · Codex 7.6 —— 差距仅 0.1~0.2,形状是「几处浅坑 + 一个架构级缺口」,没有任何结构性空白
pi(本仓库 v2.1.6)
7.4
加权合计 ÷ 93 · pi 内核 0.87.1
理念:开放、可测试、纪律成文、刻意简化。规则从真实事故复盘里长出来,删除安全做到内核级,系统提示词分段可编程。
Claude Code 2.1.268
7.5
202 MB Mach-O 闭源二进制 · strings 一手取证
理念:一切可配置、面向企业。28 个 hook 事件 × 5 种 handler 的声明层、组织策略下发、最广的插件与 MCP 生态。
Codex CLI 0.154.0
7.6
Rust 闭源二进制 · strings 一手取证
理念:沙箱优先、状态可重建。seatbelt / landlock 双沙箱、world-state 重注入、rollout 全量记录、按模式切推理预算。
一、分析基线 Baseline
横截面比较,只基于代码、二进制与本地数据的一手证据,不做历史版本纵向对比。
| 项 | 值 |
| 评估对象 | jayli/pi-coder @ d82fa69(v2.1.6,2026-09-27,main,与远端一致;评分基线为 bc717f9 v2.1.5,数字已刷新至当前 HEAD) |
| pi 配套 | pi-subagents 0.72.1(子代理 + watchdog)、pi-web-access 0.32.0(web 检索) |
| 扩展规模 | 30 个扩展(v2.1.6 起 destructive-guard/ 已从仓库删除,完整实现在 git 历史里) |
| 代码量 | 实现 83 文件 23,357 行;测试 63 文件 20,949 行;合计 44,306 行(测试占 47%) |
| 测试实跑 | 全量 node --test:1238 用例,1216 通过,22 跳过(沙箱嵌套按设计跳过),0 失败 |
| 环境开关 | 全部行为以 53 个 PI_* 环境变量表达:未设置 = 开,off = 关 |
二、核心评分矩阵 Score Matrix(权重 ÷ 93)
每格加粗者为该维最高分。「上下文文件工程化」一维(权重 7)按报告价值判断移出表外:上下文文件超出尺寸预算不构成有意义的质量差异。
| 维度 | 权重 | pi | CC | Codex | 对比 | 一句话依据 |
| 加权合计(÷93) | 93 |
7.4 | 7.5 | 7.6 |
|
三、11 维雷达图 Radar
同一维度上三家互有胜负:pi 在纪律、子代理治理、抗漂移、提示词可编程性四维同时领先;Codex 在执行稳定性与可观测性最强;CC 在验证闭环、约束广度、任务计划、记忆最全。
pi
Claude Code
Codex CLI
四、三种理念 Philosophies
分数接近,但三家对「harness 应该是什么」的回答完全不同。
pi:纪律成文,刻意简化
“小文件高频在场,胜过截断机器”
- 开放可验证:全部实现开源,1238 个用户可跑的测试;闭源两家的分数只能靠 strings 推断。
- 事故判例化:28KB 全局规则逐条来自真实删除事故的复盘(「障碍不是毁灭的理由」「沉默不是同意」)。
- 内核级安全:删除约束做到 macOS seatbelt 内核层,且只收窄到删除、写入不受限,误报面最小。
- 刻意简化:追齐对手能力但砍掉冗余机器——不做 28 事件 hook 配置层、不做 OAuth 2.1 全套、任务状态不建独立存储。
- 可编程提示词:system prompt 分段可寻址,扩展安全增段不破坏前缀缓存——对手都是封闭整体。
- 终端即产品表面:12+ 显示扩展,diff 渲染 / 命令折叠 / 主题实时切换。
Claude Code:一切可配置
“给用户(和企业)一个声明层”
- 声明式钩子:28 个 hook 事件 × 5 种 handler(command / prompt / agent / http / mcp_tool),验证与拦截都能用户配置。
- 企业治理:remote / managed settings、组织策略下发——单机工具不参赛的领域。
- 记忆系统最完整:
if_version 乐观并发、密钥机械拦截、双 scope。
- 生态最广:插件市场、官方 MCP 目录、内置 TodoWrite / 后台执行 / OTEL 导出。
- 代价:闭源不可测;系统提示词封闭;
bypassPermissions 可写进 settings 默认值,关闭保护存在配置侧路径。
Codex CLI:沙箱优先,状态可重建
“模式决定预算,rollout 重建一切”
- 沙箱双路线:macOS seatbelt + Linux landlock,
approval_policy 与 workspace-write / danger-full-access 模式化。
- world-state 重注入:AGENTS.md 作为世界状态基线,与压缩契约绑定。
- 执行稳定性最强(9 分):完整异步执行 + reconcile 对账自愈。
- 可观测性最强(9 分):rollout 全量记录可完整重建会话。
- 细节领先:
plan_mode_reasoning_effort 按模式切推理预算、update_plan 明文反复读条款、原生 /goal 带预算硬上限。
- 代价:记忆「有机制无数据」(本机实测 0 行);无对等多代理治理面;提示词封闭。
五、优势与短板 Strengths & Weaknesses
pi
优势
- 4 个计分维度同时领先两家:纪律条款质量 9、子代理治理 8、抗漂移 8、提示词可编程性 8。
- harness 自身可测试性 9 vs 2/2:删除边界跑真 seatbelt E2E(真内核 EPERM),用户可复现每一个分数。
- 删除安全纵深独一份:只收窄删除 + 授权可记忆 + 永不删除层内核兜底 + bash / apply_patch 双路线共享授权,连退出码 0 里被掩盖的越界删除也能检出。
- 关闭保护只能靠用户物理按键:dangerous 态没有命令入口,模型侧诱导路径被设计成不存在。
- 记忆索引机械派生:索引扫正文重建,结构性不可能「写了记忆忘更新索引」。
- 显示层 9 分、MCP 零依赖三传输(不计分领域)。
短板
- 无后台执行原语(架构级缺口)→ 执行稳定性 6。2.1.6 更新:扩展级已由
background-tasks/ 补齐(run_in_background / background_output / background_kill),pi 内核侧缺口仍在。
- 验证要求只能用环境变量表达,无声明式配置层。
- 记忆缺乐观并发等 4 件数据安全机制。
- bypass 默认态下 push / publish /
curl | sh 无机械闸,全靠纪律文本。
Claude Code
优势
- 验证闭环 8:Stop hook + 原生 goal 评估,背后是 28 事件 × 5 handler 的用户可配置声明层。
- 约束强制力 9:sandbox-exec + bubblewrap、分层 permissions、四种 defaultMode。
- 任务与计划 9:内置 TodoWrite(15 处命中)。
- 记忆 9:乐观并发 + 密钥机械拦截 + 双 scope,全部实测命中。
- 集成生态 9(不计分):插件市场、官方 MCP 目录、OTEL 全链路导出、完整后台执行套件。
短板
- 抗漂移仅 6:无规则重注入机制,长会话前置规则注意力衰减只能靠压缩缓解。
- 提示词可编程性 3:系统提示词封闭整体,用户侧无可编程面。
- harness 不可测试(2):闭源二进制,用户无法验证其质量。
- 显示层 / 终端 UX 固定(5);子代理治理靠 hook 表达(7)。
Codex CLI
优势
- 执行稳定性 9:完整异步执行 + reconcile 对账自愈,三家最强。
- 可观测性 9:rollout 记录可完整重建会话。
- 约束强制力 9:approval_policy + seatbelt / landlock + Guardian 审查。
- 计划细节领先:按模式切推理预算、明文禁止复读计划、
/goal 带 token 预算硬上限。
- 抗漂移 7:world-state 重注入(注入点近因性略逊 pi 的 core-rules)。
短板
- 子代理治理 6:无对等的多代理治理面(无 watchdog、无预算、无编排脚本)。
- 记忆「真特性、零数据」:
memory_consolidate 存在但本机实测 0 行记录。
- 提示词可编程性 5:系统提示词封闭。
- harness 不可测试(2);显示层固定(6);集成生态配套 6。
六、不计分维度 CC / Codex 不在同一层面竞争
| 维度 | pi | CC | Codex | 说明 |
| 显示层 / 终端 UX | 9 | 5 | 6 | pi 投入最重的领域之一:整行 diff 渲染、命令树状折叠、thinking 横向窗口、主题实时切换、statusline 防闪烁。 |
| 集成生态(MCP / web / subagent) | 7 | 9 | 6 | pi 一条 npm 命令装齐无手配依赖;CC 的生态广度(插件市场 / 官方 MCP 目录)仍更大。 |
| harness 自身可测试性 | 9 | 2 | 2 | pi 的分数可用仓库代码复现;闭源两家的分数来自厂商内部质量保障,用户不可验证。 |
七、pi 的剩余差距 重要、非刻意简化、需要追齐
与「刻意简化」不同,以下是真实差距及优先级。
| 优先级 | 差距 | 性质 |
| P0 | 后台执行原语(run_in_background 一类):pi 0.87.1 dist 0 命中,长任务前台阻塞 | 架构级;2.1.6 起扩展级已由 background-tasks/ 补齐,pi 内核侧缺口仍在(评分未重打) |
| P1 | 验证闭环的声明层:项目专属验证要求无法声明式表达 | 表达能力差距,非触发率问题 |
| P1 | 记忆的版本化写入(if_version 或等价乐观并发):同名写入直接覆盖 | 数据安全差距;CC 把它当一等机制 |
| P2 | 约束强制力的广度:bypass 默认态下 push / publish / 外网下载无机械闸 | plan 态已证明 tool_call 钩子可行,缺的是铺到外发动作 |
| P2 | 任务与计划两处细节:按模式切推理预算、禁止复读计划(Codex 均有) | 各一行改动的成本,尚未做 |
| P3 | 可观测性标准导出:无 OTEL 一类标准面 | 与价值判断重叠,优先级低 |