Business BenchA benchmark for AI agents on business work
File tasks·results from 16 September 2026
Results, 16 September 2026
Two AI agent setups each did all 187 file tasks 3 times, and every answer was checked with the same rules. Proto (built by ERP.AI) used DeepSeek V4.1 Flash; Codex (OpenAI) used GPT-5.6 sol. Because the models differ, this compares complete setups, not the agents alone.
Keep in mind
The two setups differ in model, agent and run dates, so this does not show which part made the difference. The final grading rules were fixed after the answers existed, by ERP.AI, which builds Proto; the original grades are kept alongside, and the grading changes section lists every answer whose verdict changed.
Newer results
Desk comparison, 28 September 2026: Proto and Codex on the same model, plus Proto on DeepSeek, each doing every task three times (Proto / DeepSeek V4.1 Flash 502 of 561, Proto / GPT-6 sol 495 of 561, Codex / GPT-6 sol 487 of 561).
Frozen and raw scores
System
Frozen pass rate
Frozen / 561
Raw / 561
All 3 / 187
Median min
p90 min
Est. model cost / attempt (USD)
Proto / DeepSeek V4.1 Flash
Proto CLI, runtime c8f62dd60 · DeepSeek only, no fallback, high reasoning, temperature 0
90.37%
507
447
147
2.08
7.59
0.0393
Codex / GPT-5.6 sol
Codex CLI 0.154.0 · OpenAI via Codex CLI, high reasoning, CLI-managed sampling
84.31%
473
431
141
2.25
6.72
0.3906
The lead is 6.06 percentage points under the frozen scorer. A paired, task-clustered bootstrap (20,000 resamples, seed 20260916, each task's 3 repetitions kept together) gives a descriptive 95% interval of +1.25 to +11.05 points. Task identifiers, rather than task families, are resampled. The interval does not account for related families, scorer selection, development exposure, or a different workload.
attempt acceptanceall 3 acceptedat least one accepted
Proto / DeepSeek V4.1 FlashProto CLI, runtime c8f62dd60
90.4%[87.3%, 93.2%]
Codex / GPT-5.6 solCodex CLI 0.154.0
84.3%[79.9%, 88.6%]
60%70%80%90%100%
Figure 1. Attempt pass rate (pass@1, filled), share of tasks passed in all 3 repetitions (pass^3, open) and in at least one (pass@3, square). Whiskers: 95% percentile intervals from 20,000 bootstrap resamples of the 187 tasks, repetitions kept together; the value column gives the pass@1 interval. All-three acceptance describes repeated execution of fixed inputs; at-least-one acceptance assumes hindsight selection using the grader. Neither is a deployment success probability. See repeated outcomes.
By repetition
System
Rep 1 frozen
Rep 2 frozen
Rep 3 frozen
Rep 1 raw
Rep 2 raw
Rep 3 raw
Proto / DeepSeek V4.1 Flash
171 / 187
167 / 187
169 / 187
147 / 187
148 / 187
152 / 187
Codex / GPT-5.6 sol
152 / 187
160 / 187
161 / 187
138 / 187
145 / 187
148 / 187
The same supplied inputs are used in each repetition. Repetition identifiers are bookkeeping labels, not matched random seeds or simultaneous trials. Variation here measures execution repeatability; new fixture instances and held-out templates require separate experiments.
By category
Proto / DeepSeek V4.1 FlashCodex / GPT-5.6 sol
Spreadsheet41 tasks
+4.9 ppProto − Codex
Bookkeeping36 tasks
+0.9 ppProto − Codex
Reports30 tasks
+27.8 ppProto − Codex
Reformatting26 tasks
−5.1 ppProto − Codex
Extraction26 tasks
+1.3 ppProto − Codex
Drafting19 tasks
+21.1 ppProto − Codex
Tooling9 tasks
−25.9 ppProto − Codex
40%50%60%70%80%90%100%
Figure 2. Frozen attempt pass rate per category (3 repetitions of each task). The value column is the difference between the two systems in percentage points. Categories hold 9 to 41 tasks, and one attempt changes a category rate by 3.70 points in the smallest category versus 0.81 in the largest. A task changing all 3 repetitions has 3 times that effect.Counts by category
The published mix weights categories by task counts. Equal category weights change the Proto-minus-Codex gap from 6.06 to 3.55 percentage points. The control below changes weights without rerunning an agent or changing a verdict.
Change category weights to inspect the ranking's dependence on workload composition. Weights are relative: 2 gives a category twice the weight of 1. The released mix gives each task equal weight.
Enter nonnegative finite weights, with at least one positive weight.
Weighted observed acceptance: Proto + DeepSeek 90.37%; Codex + Sol 84.31%. Difference, Proto minus Codex: +6.06 pp.
This calculation holds each observed category rate fixed and changes only its weight. It supplies no new-task prediction, confidence interval, failure-severity weighting, or estimate of business demand.
What the frozen scorer changed
The runner recorded original verdicts at execution time. The shared conservative-v7 package then evaluated retained outputs; its source is released at scoring/frozen-v7. It includes native workbook recalculation and declared equivalence rules for 7 tasks. These are evaluator changes on the same artifacts, not improvements from rerunning or repairing an agent's work.
System
Pass → pass
Fail → pass
Ungraded → pass
Pass → fail
Fail → fail
Ungraded → fail
Net pass change
Proto / DeepSeek V4.1 Flash
447
56
4
0
54
0
+60
Codex / GPT-5.6 sol
430
40
3
1
87
0
+42
The original gap is 2.85 points and the frozen gap is 6.06: a 3.21-point change in the measured comparison. Ungraded attempts remain in the full original denominator without being relabeled as ordinary agent failures. Each transition row accounts for all 561 attempts.
The scorer was authored after outputs existed. A shared rule makes the primary scores comparable under that rule; its hash makes later changes detectable. Neither establishes that revisions were independent of the outputs or that every revised judgment is correct. The public ledger supports arithmetic verification, while independent artifact adjudication requires access to retained outputs that remain private.
Scorer manifest: b4720db00f2a55461ca70767a4baf8dd2d25aa9d301e8fe22ea13d21ccca358f. Every frozen receipt in this release points to this manifest. Verdicts are recorded as raw_passed and passed; raw_grader_error_count distinguishes ungraded originals.
Execution accounting
System
Timed out
Nonzero exit
Passing, abnormal exit
Raw grader errors
Frozen grader errors
Missing usage
Proto / DeepSeek V4.1 Flash
3
3
0
4
0
0
Codex / GPT-5.6 sol
0
0
0
3
0
0
Every frozen pass also completed normally. The desk budget was 1,200 seconds per attempt.
Most-failed required check types
System
Failed check types among frozen failures (count)
Proto / DeepSeek V4.1 Flash
custom 24csv_values_match 23xlsx_value_present 19
Codex / GPT-5.6 sol
xlsx_value_present 141xlsx_no_errors 31custom 28
Resource use
System
Input tokens
Cached input
Uncached input
Output tokens
Est. cost, sum USD
Summed task time (h)
Price basis, USD / 1M (in / cached / out)
Proto / DeepSeek V4.1 Flash
823.6M
775.7M
47.9M
20.9M
22.06
31.5
0.15 / 0.003 / 0.6
Codex / GPT-5.6 sol
166.0M
150.3M
15.6M
4.8M
219.13
30.9
4 / 0.4 / 20
Costs are estimates from captured usage and the list prices in bench/prices.json. Codex ran through a subscription and is priced at API list price. Proto has lower estimated model spending, more input and output tokens, and a worse p90 duration. These are different resource dimensions. Summed durations measure occupied task time, not elapsed campaign time under concurrency.
Costs exclude infrastructure, human review, repair, and uncaptured usage. Proto records 16,954 completed model responses and nine request starts without completed responses; Codex exposes 561 task-level usage aggregates rather than comparable request counts. See spending per accepted attempt for the campaign accounting ratio.
Per-task matrix
3 squares per cell, one per repetition. Green is a frozen pass; a green square with a hollow centre passed under the frozen scorer but was originally failed or ungraded; grey is a fail; a hollow grey centre is a timeout. One task passed nowhere; 116 passed everywhere.
pass pass, frozen scorer only fail fail, timed out
model: gpt-5.6-solreasoning: highcli_version: 0.154.0sampling: CLI-managed; not asserted matched to Proto
Source cohorts: Proto
broad-desk-v43-c8f62dd60 r1; repeat-desk-v43-c8f62dd60 local r1/r2 map to logical r2/r3
Source cohorts: Codex
full-1-codex-sol r1/r2/r3
Evidence verification
Original result hashes, receipt scorer identity and frozen verdicts checked for every attempt during export; frozen scorer package file hashes verified.
Scorer note
Immutable manifest retains original assembly-status text; subsequent 1341-attempt replay reported zero differences. Original bytes are preserved.
Cost note
Captured-usage API-equivalent estimate from the frozen pricing table, not subscription or reconciled provider billing. Errored/interrupted requests without captured usage have unknown additional cost, not proven zero cost.
Limitations
Development task set; different models and non-contemporaneous cohorts. Not a causal harness-only or unseen-generalization comparison. Raw artifacts remain private; hashes identify but do not reconstruct them.
Build track
No completed fully acceptance-validated build campaign published.
Excluded
Later Proto-vs-Proto experiments, pilots, tuning history, unrelated old arms, raw traces and credentials.
Verify the released data with python bench/export_campaign.py --verify, which checks matrix completeness, score arithmetic, the ledger hash, and every file in the frozen scorer package against results/latest/attempts.jsonl. It does not re-grade the original artifacts, which remain private; their hashes are in the ledger.