2026-10-05 Findings

Same task, 3 runs: Codex passed and failed on 2 of 10 tasks, Claude Code on 0

On 2026-10-03 I gave Claude Code and Codex CLI the same 10 small coding tasks and ran each task 3 times per agent, 60 runs in all. Claude Code passed all 30 of its runs. Codex CLI passed 28 of 30, and its two failures were on two different tasks that it passed on the other two tries. So for 2 of 10 tasks, whether Codex could do the task depended on which run you looked at. With only 3 runs per task the two agents' pass-rate intervals overlap, so this pilot does not show that either one is more reliable than the other.

What I ran

I build evaluation tools, and this pilot used one of them, rerun-bench. Each run starts from a fresh copy of the task's files, drives the agent's CLI headlessly, and is scored only by the task's own verifier script. The agent's exit code and its own claims of success are recorded but never scored.

The numbers

Pass rate with Wilson 95% intervalThe dot is the share of runs that passed; the bar is the 95% interval. The bars overlap.
Claude Codeclaude-opus-5-5
100% [89, 100]
Codex CLIgpt-6-luna
93% [79, 98]
Show as table
Pass rate with Wilson 95% interval
AgentPass rate95% low95% high
Claude Code100.0%88.6%100.0%
Codex CLI93.3%78.7%98.2%
Headline numbers for the pilot
MetricClaude CodeCodex
Runs passed30 of 3028 of 30
Pass rate, Wilson 95% interval100% [89, 100]93% [79, 98]
pass@3: at least one of 3 runs passes100%100%
pass^3: all 3 runs pass100%80%
Flip rate: two runs of a task disagree0%13%
Tasks with both a pass and a fail0 of 102 of 10
Every run, by taskEach mark is one run, in the order they ran. The two Codex CLI rows with a fail are the two flaky tasks.
  • pass (verifier exited 0)
  • fail
Every run, by task
Claude CodeCodex CLI
TaskClaude Code run 0Claude Code run 1Claude Code run 2rateCodex CLI run 0Codex CLI run 1Codex CLI run 2rate
add-cli-flagClaude Code, add-cli-flag, run 0: passClaude Code, add-cli-flag, run 1: passClaude Code, add-cli-flag, run 2: pass3/3Codex CLI, add-cli-flag, run 0: passCodex CLI, add-cli-flag, run 1: passCodex CLI, add-cli-flag, run 2: pass3/3
edit-configClaude Code, edit-config, run 0: passClaude Code, edit-config, run 1: passClaude Code, edit-config, run 2: pass3/3Codex CLI, edit-config, run 0: passCodex CLI, edit-config, run 1: passCodex CLI, edit-config, run 2: pass3/3
fix-failing-testClaude Code, fix-failing-test, run 0: passClaude Code, fix-failing-test, run 1: passClaude Code, fix-failing-test, run 2: pass3/3Codex CLI, fix-failing-test, run 0: passCodex CLI, fix-failing-test, run 1: passCodex CLI, fix-failing-test, run 2: pass3/3
follow-agents-mdClaude Code, follow-agents-md, run 0: passClaude Code, follow-agents-md, run 1: passClaude Code, follow-agents-md, run 2: pass3/3Codex CLI, follow-agents-md, run 0: passCodex CLI, follow-agents-md, run 1: passCodex CLI, follow-agents-md, run 2: pass3/3
implement-lru-cacheClaude Code, implement-lru-cache, run 0: passClaude Code, implement-lru-cache, run 1: passClaude Code, implement-lru-cache, run 2: pass3/3Codex CLI, implement-lru-cache, run 0: failCodex CLI, implement-lru-cache, run 1: passCodex CLI, implement-lru-cache, run 2: pass2/3
implement-slugifyClaude Code, implement-slugify, run 0: passClaude Code, implement-slugify, run 1: passClaude Code, implement-slugify, run 2: pass3/3Codex CLI, implement-slugify, run 0: passCodex CLI, implement-slugify, run 1: passCodex CLI, implement-slugify, run 2: pass3/3
minimal-fixClaude Code, minimal-fix, run 0: passClaude Code, minimal-fix, run 1: passClaude Code, minimal-fix, run 2: pass3/3Codex CLI, minimal-fix, run 0: passCodex CLI, minimal-fix, run 1: passCodex CLI, minimal-fix, run 2: pass3/3
multi-file-renameClaude Code, multi-file-rename, run 0: passClaude Code, multi-file-rename, run 1: passClaude Code, multi-file-rename, run 2: pass3/3Codex CLI, multi-file-rename, run 0: passCodex CLI, multi-file-rename, run 1: passCodex CLI, multi-file-rename, run 2: pass3/3
refactor-extract-helperClaude Code, refactor-extract-helper, run 0: passClaude Code, refactor-extract-helper, run 1: passClaude Code, refactor-extract-helper, run 2: pass3/3Codex CLI, refactor-extract-helper, run 0: passCodex CLI, refactor-extract-helper, run 1: failCodex CLI, refactor-extract-helper, run 2: pass2/3
write-testsClaude Code, write-tests, run 0: passClaude Code, write-tests, run 1: passClaude Code, write-tests, run 2: pass3/3Codex CLI, write-tests, run 0: passCodex CLI, write-tests, run 1: passCodex CLI, write-tests, run 2: pass3/3

The two Codex failures

I read both diffs against the verifiers. Neither failure came from a broken test or anything outside the agent, so no task was changed after the pilot.

Why rerun the same task

Most coding-agent benchmarks score one attempt per task. If you run an agent once and act on what it did, the number that matters is closer to pass^3: the chance that all 3 runs of a task pass. Here both agents have a pass@3 of 100%, so every task was solved at least once in 3 tries. pass^3 is 100% for Claude Code and 80% for Codex CLI, because the two flaky tasks drop out. The flip rate, the chance that two runs of the same task disagree, averaged over tasks, is 0% and 13%.

Put another way: had I run each task once, Codex CLI could have scored 8, 9 or 10 out of 10 on this suite depending on the draw, and a single-run table would have shown only one of those numbers.

What this pilot cannot show

Reproduce it

A free run with a simulated agent shows the whole pipeline and spends nothing:

uvx rerun-bench run --agent mock --runs 5

The pilot itself is one command per agent. These start real agent runs and spend your quota; drop --yes to see the run count and a cost estimate first.

uvx rerun-bench run --agent claude --runs 3 --yes
uvx rerun-bench run --agent codex --model gpt-6-luna --runs 3 --yes
uvx rerun-bench report results/

The pilot directory has every run record and diff, and the methodology page defines each metric.

What I am running next

A larger run: about 30 tasks with 5 runs each. That gives per-task intervals that mean something, and enough data for the paired comparisons rerun-bench does not do yet: a Fisher exact test per task and a paired task-level bootstrap. It will be published here with its raw run records, like this pilot. To suggest an agent or a task, open an issue on the repository.