Codex Testing Bench 是一个 仅围绕 Codex 本体 构建的研究型测试台,用来研究 vendored Codex 运行时在真实任务和基准上的行为方式。
整个仓库围绕一个核心原则设计:
- 研究工作台应当能直接从 GitHub 根目录被读懂
- vendored 的 Codex 树应保持为一个固定版本的运行时目标,只承载很薄的一层研究探针补丁
- 本地产物应当足够丰富,能够支撑严肃的内部研究,而不依赖仪表盘或外部遥测系统
这个仓库的目标不是单纯跑分,而是对 Codex 作为 agentic harness 做深入经验研究。
这个 bench 试图回答的问题包括:
- Codex 究竟如何在
thread启动时冻结 runtime 和 session 状态? - Codex 如何在模型原生指令、开发者指令、重建上下文和运行时更新之间组装最终指令?
- Codex 的 compaction 机制到底保留了什么、压缩了什么、遗忘了什么?
- 一个任务中的“工作量”到底有多少来自模型本身,有多少来自 Codex 自己的编排机制?
- Codex 什么时候会进入高产出的 edit / verify 循环,什么时候会把预算消耗在 harness friction 上?
- 我们关于 token 预算和长程调度的论文里提出的方向性观点,哪些能在 Codex 行为中被具体观察到?
当前这套 bench 的主研究线,不是“哪个模型分数更高”,而是:
gpt-5.4与gpt-5.3-codex的行为方式是否存在系统性差异friendly与pragmaticpersonality 是否只是表层语气变化,还是会改变 agent policy- 模型“说更多”到底表现为哪些可观察输出
- “说更多”与工具调用、验证、patch 生成、harness 调节机制之间是如何耦合的
第一阶段的标准实验矩阵是一个固定的 2x2:
gpt-5.3-codex × pragmaticgpt-5.3-codex × friendlygpt-5.4 × pragmaticgpt-5.4 × friendly
并且默认要求:
- 四个 cohort 使用同一批任务样本
- 默认按同一
instance_id做配对比较 - prompt、tool policy、web-search policy、sandbox policy、grading policy 冻结
- 先看行为证据,再看 benchmark 评分
这意味着我们不是在做泛泛的“模型体验对比”,而是在做:
同一 Codex harness 中,模型代际差异与 personality 条件如何改变 agent 的可观察状态外显化、工具耦合模式、验证习惯与任务推进节奏。
现阶段最核心的假设不是某个 benchmark 能否多解几题,而是下面这些更接近架构研究的问题:
H1:gpt-5.4的用户可见输出总体上多于gpt-5.3-codexH2:gpt-5.4多出来的输出,更多是任务桥接语、验证 framing、决策解释,而不是纯礼貌包装H3:gpt-5.4的“说更多”与工具调用之间存在更强耦合,而不是单纯的 verbosityH4:friendly会放大这种可观察状态外显化,pragmatic则更接近压缩后的执行风格H5:这些差异并不纯粹来自 base model,而是和 Codex 的 instruction layering、tool mediation、config freeze、compaction/reconstruction 等 harness 机制共同作用的结果
因此,这个仓库的研究对象始终是:
- 模型本身
- harness 机制
- 两者的交互效应
而不是把脚手架和模型割裂开来单独研究。
这套系统不是只抓最终 patch,而是把一次运行拆成多个可分析层:
- 用户可见输出层
- 工具调用层
- 验证与 patch 层
- Codex 内部 probe 层
- campaign 级比较与 claim evidence 层
因此我们不仅能回答:
- 哪个模型更爱“说”
- 哪个 personality 更简洁
还能回答:
- 它到底说了什么
- 这些话是在工具前、工具后,还是验证前后出现
- 哪些话与实际任务推进强相关,哪些更像热量
- 哪些差异更像 harness 的 regulation / control-rod 效应
- 哪些差异只在某一类任务下出现,例如 bootstrap-heavy、verification-heavy、compaction-likely
这个仓库的主要输出不是仪表盘,也不是最终论文,而是一组证据包:
- campaign 级别的
report.txt - campaign 级别的
model-comparison.md - campaign 级别的
verbosity-analysis.md - campaign 级别的
tool-language-coupling.md - campaign 级别的
linguistic-profile.md - campaign 级别的
phrase-and-tone-analysis.md - campaign 级别的
bridge-language-analysis.md - campaign 级别的
tool-inventory.md - campaign 级别的
tool-route-analysis.md - campaign 级别的
benchmark-research-profile.json - campaign 级别的
personality-analysis.md - campaign 级别的
task-class-analysis.md - 每个运行的
run-evidence.txt - 每个运行的
attempt-log.txt datasets/*.csv形式的研究数据集- 原始与归一化后的本地遥测产物
研究 bench 现在已经内置了两层“长跑自救”机制,避免一次 run 失联后把整个 campaign 卡死:
- 运行时 watchdog
- 每个 run 都有总运行时上限和 idle 上限
- 如果 Codex / App Server 长时间没有完成 turn,也没有新鲜活动,会被判定为超时而失败落盘
- stale-running reconciliation
- 如果某个 run 因异常中断而把
manifest.json永远留在status: running - 后续的
run / grade / report / workspace scan会自动把它重分类为failed - 默认 failure class 为
interrupted - 这样“幽灵 running runs”不会继续占着 campaign 的活跃槽位
- 如果某个 run 因异常中断而把
这意味着:
- 一个长时间停滞的 run,不会再无限期阻塞整个批次
- campaign 状态树会自动从脏状态恢复
- grading / report 会明确把这类问题归为平台/运行中断,而不是模型求解结果
同时,仓库现在还提供一个本地研究控制台 Web App,用于:
- 监视 campaign / cohort / run 的生命周期
- 实时查看 process stdout / stderr
- 实时查看 live run snapshot、最新 message、tool、patch、personality / skill / token 机制事件
- 浏览
report.txt、Markdown 专题和datasets/*.csv - 查看 run 级 artifact、tool、patch、skill、personality 机制
- 在
Live页面直接当 mission control 使用 - 在
Compare页面直接做同题 2x2 研究对比 - 直接发起
prepare / run / grade / report / replay / inspect-codex
控制台现在已经不是简单的 artifact 列表页,而是完整的研究操作面:
CampaignsLiveRunsCompareArtifactsResearchRun Detail
其中 Run Detail 会把一次 run 的:
- timeline
- live snapshot
- 用户可见输出
- tool / route / approval / patch 机制
- personality / instruction / skill 机制
- command ledger
- patch diff
run-evidence.txtattempt-log.txt- turn 级 token pressure strip
- bridge / verification / state externalization 语言强度条
统一放在一个战情页里。
最新一版控制台还额外强化了三件事:
Live- 直接显示
active_live_runs / hottest_live_runs / stalled_live_runs - 带有全局
focus sample / message preview / warning级别的 live overview - 带有
Stream Bus与Control Plane Health,能直接看到控制面连接状态、最近事件、warnings、focus sample 和最新活跃 campaign
- 直接显示
Artifacts- 直接区分
raw truth / derived summary / derived evidence / human dossier - 让证据档案室更接近研究语境,而不是普通文件浏览器
- 直接区分
ActionLauncher- 支持 context quick actions、recent launches、active campaign clone config
- 适合反复做
2x2pilot 和 rerun
现在控制台页签已经各自承担明确职责:
Campaigns- experiment ledger
- operational dossier
- campaign pulse rail
- 对选中 campaign 直接执行
bootstrap-local / run / grade / report - 新增
Active War Rooms,可以直接跳转到当前正在跑的 run
Live- mission control
- active run cards
- process matrix
- live console
- tool / patch / mechanism rails
Jump Desk- 一键跳转 focused run、compare、artifacts
- focused run spotlight
- 选中某个活跃 run 后,直接看到 live message rail、tool / command rail、patch / mechanism rail、attempt log tail 和 operational warnings
Compare- 同题 2x2 board
- pair delta、phrase delta、tool inventory、mechanism surface
Artifacts- campaign / run 两级证据档案室
- Markdown / CSV / JSONL / diff 统一预览
Research- hypothesis / claim / task-class / mechanism 的研究工作台
Run Detail- 单题 Codex war room
- 现在额外包含 operational snapshot、event table counts、artifact type counts、latest report / dataset readiness 和更强的 live rail 统计
- message rail / tool rail / patch rail / mechanism rail / evidence dock
入口文档:
其中新增的研究型数据集现在包括:
message_style.csvcohort_lexical_summary.csvmodel_phrase_deltas.csvpersonality_phrase_deltas.csvtool_inventory.csvtool_route_summary.csvtool_by_turn.csv
这轮之后,语言分析也明确对齐到当前实验 vision,而不再只是做泛泛的 verbosity 统计。现在重点追踪的是:
state externalization- 模型是否把中间状态、局部目标、下一步动作外显出来
bridge language- 工具调用前后的桥接语言是否上升
verification framing- 模型是否更愿意解释验证目标、验证结果与信心状态
personality mechanismfriendly/pragmatic的差异到底是社交包装,还是会改变工具耦合与任务推进节奏
对应地,message_style.csv / linguistic-profile.md / tool-language-coupling.md 现在会显式输出:
bridge_language_score_bpsverification_language_score_bpsstate_externalization_score_bps- 词汇多样性、hapax ratio、最常见 lemma / bigram / trigram
- 第一人称 / 第二人称 / modal / sequencing cue
- artifact / code reference 密度
- 具体工具调用前后的 commentary 量与 route 差异
这套 bench 当前已经明确采用一个新的研究约束:
先建立 Codex 可观测面契约,再扩 probes、报告和 CSV。
原因很简单:
- 有些信息是 Codex 原生协议直接给出的
- 有些只能由 bench 稳定推导
- 有些只能弱推断
- 还有一些当前根本不可观测
如果不先把这几层分开,后面的研究很容易把 inferred 写成 observed。
当前这部分正式文档在:
它们规定了:
- 哪些 turn / token / tool / patch / personality / compaction / collaboration 信息属于原生可观测
- 哪些字段只能稳定推导
- 哪些字段只能弱推断
- 哪些东西当前不应该写成研究结论
后续的 probe、report.txt、Markdown 专题、CSV 数据集都会以这份契约为准。
这些输出的目标是:
- 让人可以直接在 GitHub 上读懂一次实验
- 让后续论文写作可以直接复用 Markdown 结论与 CSV 数据表
- 让我们能够区分“模型行为证据”和“benchmark/harness 环境失败”
- bench:当前激活的外层研究 bench 工作区
- repos/codex:vendored 的 Codex 运行时,仅保留轻量级、研究模式下启用的 probe 补丁
- vendor-benchmarks:vendored 的外部 benchmark 资源
- studies:可复用的 claim catalog、preset 与 benchmark catalog 元数据
- docs:架构、参考资料、probe 分类、artifact 契约和扩展文档
- artifacts:GitHub 可见的 campaign 输出和整理后的研究证据
活跃的 crate 位于 bench/crates:
codex-bench-core- manifest、artifact、IO 辅助、trait 与共享类型
codex-bench-codex- 直接集成 Codex App Server 的进程内运行路径
- 原始事件捕获
- 架构映射生成
- benchmark 运行时“禁止 web search”的强约束
codex-bench-swebench- SWE-bench Verified 适配器
- 通用
repo-patch-jsonl适配路径
codex-bench-nl2repo- NL2RepoBench 适配器
codex-bench-newtonbench- NewtonBench 适配器
codex-bench-probes- 从原始数据到派生 probe 的逻辑
- claim evidence 推导
codex-bench-reportreport.txtrun-evidence.txtattempt-log.txt- replay 文本输出
codex-bench-cliprepare/run/grade/report/replay/inspect-codex
codex-bench-control-plane- 本地 HTTP + SSE 控制平面
- 受管进程注册
- artifact 索引
- research console 数据入口
前端控制台位于:
目前已经有一等支持的本地 adapter:
- SWE-bench Verified
- NL2RepoBench
- NewtonBench
同时,这个 bench 的设计也支持向更多基准扩展:
repo-patch-jsonl是 repo-based patch 类任务的通用桥接层- preset 和 adapter 的边界设计,就是为了以后加入新的 benchmark 家族时不需要改动 Codex shim
换句话说,SWE-bench 只是 v1 主战场,而不是这套系统的边界。 这套架构是为了让后续的:
- Terminal-Bench
- RepoBench
- NL2Repo
- NewtonBench
- 内部 synthetic long-context tasks
都能共享同一套 Codex probe、report、CSV 数据导出和 claim evidence 推导机制。
参考:
这个 bench 会抓取四层证据:
- 原始 runtime 流
- Codex 内部研究探针
- 派生出的行为 probe
- 人类可读的 evidence report
已覆盖的观测信号包括:
- token 输入 / 输出 / cache-read 随时间的变化
- 每个 turn 的 token 增量
- 每条用户可见 assistant 输出的
message-metrics - 每个 cohort 的词汇画像、短语画像与 discourse category 聚合
verbosity-tool-coupling里的语言-工具时序耦合- 命令时间线
- 工具调用时间线
- 具体工具名、route、成功状态、duration、输出体积与前置 commentary
apply_patch活动- skill 使用事件
- compaction 和 reconstruction 证据
- instruction channel 转移
- config-freeze drift
- persistence / resume 效应
- harness friction 事件
- 与本地证据强绑定的 claim evidence label
friendly/pragmaticpersonality 是否真正生效gpt-5.4与gpt-5.3-codex的配对行为差异
参考 docs/probes/probe-taxonomy.md。
以下命令都从 bench 目录执行。
cargo run -p codex-bench-cli -- prepare \
--campaign-root ../artifacts \
--preset-path ../studies/task-presets/swebench-v1.json \
--stage architecture-validation \
--seed codex-study默认的 swebench-v1 preset 会展开为一个第一阶段 2×2 对比矩阵:
gpt-5.3-codex × pragmaticgpt-5.3-codex × friendlygpt-5.4 × pragmaticgpt-5.4 × friendly
如果你只是想做一次最小但真实的“同题四格”实验,那么 architecture-validation 就是最适合的入口:
- 它只抽取
1道题 - 但会把这道题扩成四个 cohort
- 非常适合快速观察
5.3-codex/5.4在friendly/pragmatic下的语言与工具行为差异
如果要显式覆写单个 cohort,可以额外传:
--model--provider--personality--prompt-style--experiment-name
cargo run -p codex-bench-cli -- bootstrap-local \
--campaign-dir ../artifacts/<campaign-id>cargo run -p codex-bench-cli -- run ../artifacts/<campaign-id>run 完成后会自动生成:
reports/report.txtreports/model-comparison.mdreports/verbosity-analysis.mdreports/tool-language-coupling.mdreports/linguistic-profile.mdreports/phrase-and-tone-analysis.mdreports/bridge-language-analysis.mdreports/tool-inventory.mdreports/tool-route-analysis.mdreports/personality-mechanism-analysis.mdreports/patch-mechanism-analysis.mdreports/skill-mechanism-analysis.mddatasets/*.csv- 以及机制专题数据集:
personality_mechanism.csvpatch_chain.csvskill_mechanism.csv
cargo run -p codex-bench-cli -- grade ../artifacts/<campaign-id> \
--command 'python -m swebench.harness.run_evaluation --predictions_path {predictions}'
cargo run -p codex-bench-cli -- report ../artifacts/<campaign-id>grade 完成后会自动把评分结果 ingest 回 campaign / run manifest,并自动刷新上述 Markdown 与 CSV。report 主要用于重建与回填。
- campaign 报告:
artifacts/<campaign-id>/reports/report.txt - 模型对比:
artifacts/<campaign-id>/reports/model-comparison.md - verbosity 专题:
artifacts/<campaign-id>/reports/verbosity-analysis.md - 语言-工具耦合专题:
artifacts/<campaign-id>/reports/tool-language-coupling.md - 语言画像专题:
artifacts/<campaign-id>/reports/linguistic-profile.md - 工具清单专题:
artifacts/<campaign-id>/reports/tool-inventory.md - personality 机制专题:
artifacts/<campaign-id>/reports/personality-mechanism-analysis.md - patch 机制专题:
artifacts/<campaign-id>/reports/patch-mechanism-analysis.md - skill 机制专题:
artifacts/<campaign-id>/reports/skill-mechanism-analysis.md - 单题证据:
artifacts/<campaign-id>/runs/<instance>/attempt-01/run-evidence.txt - 单题线性日志:
artifacts/<campaign-id>/runs/<instance>/attempt-01/attempt-log.txt - CSV 数据集:
artifacts/<campaign-id>/datasets/*.csv
更完整的上手说明见 docs/getting-started.md。
benchmark 运行时被有意地施加了若干约束,以减少污染并让解释更干净。
当前重要策略包括:
-
run默认走有界并行- 当前 preset 默认
max_parallel_runs=2 - 同一 repo 的 workspace/cache 物化阶段会按 repo 再限流
- 当前 preset 默认
-
继续复用本地 dataset snapshot、repo cache、grader venv 与 Rust 编译产物
-
grade失败时仍会自动刷新报告,并把失败归为 benchmark/harness,而不是直接归咎于模型行为 -
benchmark run 只使用本地路径
-
benchmark run 不经过 OpenClaw
-
被评测的 Codex runtime 明确禁用了 web search
-
如果 Codex 仍然发出了 web-search 事件,则该次 benchmark run 立即判为失败
这样做是为了让证据尽可能集中在 repo 本地运行时里的 Codex harness 行为 上。
这个仓库会把 GitHub 可见的研究证据和机器本地的大型中间产物分开。
GitHub 可见:
- campaign manifest
- 选中的数据集快照
- architecture map
- claim catalog
- hypothesis catalog
report.txt- 研究专题 Markdown
run-evidence.txtattempt-log.txt- CSV 数据集
- 摘要型 JSON 产物
仅本地保留:
- 预热后的 repo cache
- worktree 与重量级 workspace
- 全量 raw JSONL 流(除非刻意整理后提交)
- 体积很大的临时文件
详见 artifacts/README.md 和 docs/artifacts/artifact-contract.md。
这个 bench 依赖对 Codex 内部行为的深度观测:
- session/config freeze
- instruction assembly
- compaction 与 reconstruction
- event/listener translation
- tool mediation
- persistence/resume 行为
这些信号只有在 runtime 被固定版本并且可以本地打补丁时才真正可见。
外层 bench 负责 orchestration、reporting 和 extensibility。 vendored Codex 只负责 runtime 行为与研究模式下的轻量 probe 发射。
详见 docs/architecture/bench-architecture.md。
- docs/references/codex.md
- docs/references/benchmarks.md
- DeepWiki Codex
- OpenAI: Unlocking the Codex harness
如果你是第一次进入这个仓库:
- README.md
- docs/getting-started.md
- docs/architecture/bench-architecture.md
- docs/probes/probe-taxonomy.md
- docs/artifacts/artifact-contract.md
如果你是来理解“我们到底在研究什么”的:
- README.md
- docs/probes/probe-taxonomy.md
- studies/hypotheses/model-behavior-v1.json
- 任意一个 campaign 下的
reports/model-comparison.md - 任意一个 run 下的
run-evidence.txt
如果你是来扩展系统的: