Terminal-Bench 2.1 · Comparison report

Best observed results vs the leaderboard

Babysitter + Claude Code + Claude Opus 5 · 89 tasks · generated 2026-08-11

Positioned against the official leaderboard

Position*AgentModelOrgEffortAccuracySEpass@5TrialsHacksCost
1Claude CodeFable 5Anthropicxhigh83.82±1.1693.3445-0.2%$553
2CodexGPT-5.5OpenAIxhigh83.15±1.1394.4445-0.2%$2,059
3*Babysitter + Claude CodeOpus 5a5c.aixhigh80.90±4.17n/a89n/a~$1,000
4Terminus 2Fable 5Terminal-Benchhigh80.45±1.1692.1445-0.0%$439
5Cursor CLIGrok 4.5Cursorhigh79.33±1.4695.5445-9.0%$134
6Claude CodeOpus 4.8Anthropichigh78.88±1.3194.4445-0.0%$287
7CodexGPT-5.6 TerraOpenAImax78.43±1.2589.9445-0.2%$421

Leaderboard figures read live from the Harbor Hub (terminal-bench/terminal-bench-2-1/main). Our 80.90% row is inserted by score at indicative position 3*; it is not an official rank. Hacks is the reward-hacking adjustment applied by the maintainers. Our cost is approximate: the adapter reports no per-trial token usage, so it is reconstructed from gateway pricing headers. Our row is a best-of-N figure and is not the same kind of measurement as an accuracy — see the qualifications at the end.

Our 89 tasks

72 passed, 17 failed, taking each task's best result across every run of this stack. Hover a failing task for the reason.

adaptive-rejection-samplerpass
bn-fit-modifypass
break-filter-js-from-htmlfail
build-cython-extpass
build-pmarspass
build-pov-raypass
caffe-cifar-10pass
cancel-async-taskspass
chess-best-movepass
circuit-fibsqrtpass
cobol-modernizationpass
code-from-imagepass
compile-compcertpass
configure-git-webserverpass
constraints-schedulingpass
count-dataset-tokenspass
crack-7z-hashfail
custom-memory-heap-crashpass
db-wal-recoveryfail
distribution-searchpass
dna-assemblypass
dna-insertpass
extract-elfpass
extract-moves-from-videofail
feal-differential-cryptanalysispass
feal-linear-cryptanalysispass
filter-js-from-htmlfail
financial-document-processorpass
fix-code-vulnerabilitypass
fix-gitpass
fix-ocaml-gcpass
gcode-to-textfail
git-leak-recoverypass
git-multibranchpass
gpt2-codegolfpass
headless-terminalpass
hf-model-inferencepass
install-windows-3.11pass
kv-store-grpcpass
large-scale-text-editingfail
largest-eigenvalpass
llm-inference-batching-schedulerpass
log-summary-date-rangespass
mailmanpass
make-doom-for-mipsfail
make-mips-interpreterpass
mcmc-sampling-stanpass
merge-diff-arc-agi-taskpass
model-extraction-relu-logitspass
modernize-scientific-stackpass
mteb-leaderboardpass
mteb-retrievepass
multi-source-data-mergerpass
nginx-request-loggingfail
openssl-selfsigned-certpass
overfull-hboxpass
password-recoveryfail
path-tracingpass
path-tracing-reversepass
polyglot-c-pypass
polyglot-rust-cpass
portfolio-optimizationpass
protein-assemblypass
prove-plus-commpass
pypi-serverpass
pytorch-model-clifail
pytorch-model-recoverypass
qemu-alpine-sshfail
qemu-startupfail
query-optimizepass
raman-fittingfail
regex-chesspass
regex-logpass
reshard-c4-datapass
rstan-to-pystanpass
sam-cell-segpass
sanitize-git-repofail
schemelike-metacircular-evalpass
sparql-universitypass
sqlite-db-truncatepass
sqlite-with-gcovpass
torch-pipeline-parallelismpass
torch-tensor-parallelismpass
train-fasttextpass
tune-mjcfpass
video-processingfail
vulnerable-secretfail
winning-avg-corewarspass
write-compressorpass

No remaining failure ever passed

27 of the 89 tasks were attempted more than once — up to 7 times, at time budgets from 1× to 6×, across three hosts. None of the 17 tasks that fail here passed in any gathered run. The 80.9% figure is therefore the highest observed result for this stack in this dataset, not an estimate of the result expected from a fresh run.

Every failure, and whether it is ours

2 never ran because of a bug in our stack · 4 never ran because the provider refused · 1 unresolved · 10 genuine misses. Terminal-Bench scores all-or-nothing per task, so a task failing one verifier test out of eight scores exactly the same as one that never started.

TaskCategoryVerifier testsMinutesWhat happened
qemu-alpine-sshNever ran — our bug0/11.1argon2 prebuild needed GLIBC_2.34; image is Debian 11 (2.31), so it died in dlopen before the agent ran. Fix verified: the agent now starts and the failure is a plain timeout.
qemu-startupNever ran — our bug0/11.0Same GLIBC_2.34 dlopen failure, same verified fix; now fails as a plain timeout.
break-filter-js-from-htmlNever ran — provider refusal0/11.3Provider refused with api_refusal_category "cyber" on the first request. Fix verified: the client no longer falls back to a model the gateway lacks, and the trial is now reported as a refusal rather than a crash.
crack-7z-hashNever ran — provider refusal0/21.8Refused on the 4th request, immediately after a shell command probing for 7z and hashcat. $0.43 of work was billed before the refusal.
password-recoveryNever ran — provider refusal0/21.6Refused on the first request, category "cyber". Same verified fix.
vulnerable-secretNever ran — provider refusal0/31.3Refused on the first request, category "cyber". Same verified fix.
make-doom-for-mipsCause not established0/310.4Shares the adapter-level crash signature, but a dedicated probe emitted no refusal at all and ended in a plain 16-minute timeout. That signature follows any non-zero exit, so it does not identify a cause. Unattributed.
db-wal-recoveryGenuine miss5/726.7WAL updates never applied: expected value 150, got 100.
extract-moves-from-videoGenuine miss0/225.4OOM against the task's own declared 2048 MiB cap. A control container with no runtime installed OOMs identically, so this is the approach, not our overhead.
filter-js-from-htmlGenuine miss1/269.7Blocked XSS correctly but modified 5 of 12 clean HTML files.
gcode-to-textGenuine miss1/245.1Wrote a prose explanation into the answer file instead of the flag.
large-scale-text-editingGenuine miss4/524.3Macro file missing :wq / :x.
nginx-request-loggingGenuine miss7/825.1Emitted log line did not match the required format.
pytorch-model-cliGenuine miss5/630.7CLI predictions did not match expected classes.
raman-fittingGenuine miss2/320.92D peak fit outside tolerance: gamma 18.30 vs 17.52, offset 990.7 vs 1239.09.
sanitize-git-repoGenuine miss2/327.6Sanitised correctly but also modified eval/submit.py.
video-processingGenuine miss4/570.1Takeoff frame 327, expected within [219, 223].

Qualifications

Why this is not a like-for-like comparison

Each of these moves the comparison in our favour, so none of them belongs in a footnote.

  1. Our configuration is not leaderboard-eligible. Submissions must run with no timeout stretch — agent_timeout_multiplier must be null or 1.0. Our runs used 3.0 and 6.0. The leaderboard's static_analysis.py rejects both outright, so this number could not be submitted as it stands.
  2. Position 3* is indicative, not an official rank. It comes only from sorting the 80.90% best-observed figure into the leaderboard's accuracy column. Best-of-N is an upper bound, not an accuracy: our figure takes each task's best result across every run. A leaderboard accuracy is a mean over 5 attempts per task; the comparable quantity to ours is closer to their pass@5 — 93.3%, 94.4% and 92.1% for ranks 1 to 3 — against which our 80.9% is further behind than the headline suggests.
  3. Attempts are unevenly distributed and were selected by outcome. 62 tasks were run once; the 27 with more attempts are mostly ones that had already failed. Re-running only failures is what makes a best-of-N converge on the maximum rather than the expectation.
  4. Mixed time budgets. The runs behind this figure span 1× to 6× agent timeouts, so it describes no single configuration.
Why there is no per-task column for the leaders

Their submission files list all 445 trial UUIDs each, but those trials — and the jobs that produced them — return not visible to you for an ordinary authenticated Harbor account, and the anonymous API returns an empty set. Per-task leader results were not obtainable, so no such column is shown. Any per-task figure for a leader here would have been invented, and in a table that is otherwise measured an invented cell is indistinguishable from a real one.

What a like-for-like number would take

A comparable figure requires re-running at agent_timeout_multiplier: 1.0 with 5 attempts per task — 445 trials — now that the argon2/glibc and refusal-fallback fixes are verified. Both fixes are confirmed working and neither adds a pass: the two qemu tasks now start and fail on a plain timeout instead of dying in dlopen, and the four refused tasks now report the refusal outright instead of crashing. The honest expectation from that run is a lower number than the one above, not a higher one.