measured, both arms, every run

Benchmarks.

Same model, same tasks, bare repo vs harness. 3 reps per cell, pre-registered graders. What follows is what came out, including the cells that flatter no one.

All runs below: Apple M4 Mac mini with 16 GB memory (not overclocked) · driver opencode run · harness v0.1.2 (ec6dba3)

kimi-k3 via Nvidia ($0, free tier)

18 runs, 18/18 pass. Wall about tied, harness spent more tokens (its context costs ~5-10k input tokens a run).

taskbareharness
T1 orient261s [213-307] · 37.5k tok · 5.7 tools · 3/3256s [181-331] · 50.7k tok · 7.0 tools · 3/3
T2 feature280s [249-339] · 41.8k tok · 7.3 tools · 3/3234s [168-268] · 46.6k tok · 6.3 tools · 3/3
T3 bugfix207s [179-232] · 46.0k tok · 6.3 tools · 3/3255s [181-302] · 57.6k tok · 7.7 tools · 3/3

nemotron-3-super-120b via Nvidia ($0.43 total)

18 runs, 14/18 pass. T1 answers came back terse and tripped the keyword grader (same grader both arms). T3 is the standout harness cell.

taskbareharness
T1 orient139s [21-362] · 69.8k tok · 8.0 tools · 2/334s [23-42] · 63.7k tok · 7.7 tools · 0/3
T2 feature66s [58-74] · 113.1k tok · 14.3 tools · 3/368s [45-97] · 134.3k tok · 15.7 tools · 3/3
T3 bugfix119s [43-258] · 183.2k tok · 21.7 tools · 3/353s [42-64] · 97.2k tok · 11.3 tools · 3/3

Run 2: slim init payload (same bed, both models)

After run 1, init ships a slim AGENTS.md (724B vs 1948B) and pip admits its limits. T2/T3 on kimi collapsed to noise; nemotron now wins or ties every cell on tokens.

cellbareharness
kimi T1539s [527-549] · 34.8k tok · 3/3573s [475-675] · 49.2k tok · 3/3
kimi T2499s [439-564] · 44.2k tok · 3/3496s [447-555] · 45.4k tok · 3/3
kimi T3450s [410-502] · 45.5k tok · 3/3466s [415-519] · 48.4k tok · 3/3
nemotron T126s [24-28] · 68.9k tok · 1/320s [14-28] · 65.4k tok · 2/3
nemotron T285s [61-120] · 143.4k tok · 3/381s [60-113] · 115.7k tok · 3/3
nemotron T375s [30-99] · 124.8k tok · 3/337s [14-65] · 86.2k tok · 2/3

Run 3: nemotron, semantic grader (15/18)

T1's keyword grader failed terse-but-correct answers, so v2 accepts equivalent phrasings (pre-registered, fixture-tested). Full fresh rerun. The three remaining T1 misses are genuinely thin answers, both arms.

cellbareharness
T149s [34-59] · 69.1k tok · 2/361s [50-78] · 88.1k tok · 1/3
T271s [35-110] · 115.0k tok · 3/370s [44-108] · 121.6k tok · 3/3
T367s [39-89] · 117.3k tok · 3/372s [51-112] · 94.9k tok · 3/3

Run 4: nemotron, v3 tasks (16/18)

T1 asks for files by name and quoted output. Token deltas all inside noise. T1 still misses once per arm: the model answers thinly ~1/3 of the time regardless of setup.

cellbareharness
T135s [24-41] · 72.9k tok · 2/358s [32-82] · 78.5k tok · 2/3
T295s [56-134] · 121.5k tok · 3/374s [42-115] · 113.8k tok · 3/3
T355s [46-66] · 95.0k tok · 3/374s [53-92] · 103.5k tok · 3/3

muse-glimmer-30b (17/18, new driver)

Found in a 30-model probe sweep (6 live). Verbose agent, twice the tool calls. One 6s no-tool flake is the only miss.

cellbareharness
T1154s [131-194] · 53.5k tok · 3/3157s [145-164] · 68.9k tok · 3/3
T2352s [301-416] · 97.1k tok · 3/3183s [6-326] · 57.6k tok · 2/3
T3222s [210-235] · 92.7k tok · 3/3260s [182-306] · 105.5k tok · 3/3

Megabox: 200-file bed, kimi-k3

Generated monorepo (seeded, generator committed). Harness wins tokens on build/fix tasks; orientation Q&A sits below this driver's threshold (0/6, one diagnostic near-perfect answer proves the task fair).

cellbareharness
T1 orient647s · 69.5k tok · 0/3539s · 57.2k tok · 0/3
T2 feature671s · 57.4k tok · 2/3549s · 49.3k tok · 3/3
T3 bugfix523s · 39.0k tok · 3/3573s · 34.0k tok · 3/3

Megabox + map, nemotron (12/18)

Treatment adds a deterministic repo index (206 files to 229 lines). It did not move the needle: harness costs more tokens in every measurable cell. Extra context plus extra exploration outweighs the orientation saved, here.

cellbareharness
T1 orient39s · 107.3k tok · 0/362s · 117.6k tok · 0/3
T2 feature119s · 193.0k tok · 3/3130s · 264.7k tok · 3/3
T3 bugfix56s · 87.2k tok · 3/358s · 98.2k tok · 3/3

Megabox + enriched map, nemotron (11/18)

Second run: enriched memory, narrowed skill triggers. Same verdict, sharper numbers.

cellbareharness
T1 orient63s · 147.6k tok · 0/3106s · 138.3k tok · 0/3
T2 feature130s · 142.2k tok · 2/3122s · 178.4k tok · 3/3
T3 bugfix71s · 90.8k tok · 3/3107s · 139.6k tok · 3/3

M6 local models: qwen2.5-coder ladder ($0, Ollama)

Apple M6 mini, 12c, 16 GB · bare read-everything (4 inferences) vs harness MAP+memory (2 inferences) · 48 rows · 16/16 fixes both arms. Per-token speed is identical; the harness halves session wall by halving inference count. 14b peaks 9.0 GB resident with ~3 GB swapped: the practical 16 GB ceiling.

modelbareharness
1.5b5.7s · ~115 tok/s · 3/32.8s · ~115 tok/s · 3/3
7b22.0s · ~29 tok/s · 3/311.2s · ~29 tok/s · 3/3
14b43.5s · ~15 tok/s · 2/221.7s · ~15 tok/s · 2/2

Reading

On a small repo the harness context costs more tokens than orientation saves; on a 200-file bed it wins tokens on build/fix tasks (-13/-14%). Wall time lands within variance in most cells. n=3 throughout, free-tier queueing noise visible. Full method, probe log (30 models tried, 6 live), and all raw rows: docs/benchmarks.md.

Run it on your stack

Different model, provider, or hardware? Run both arms on the same tasks, 3 reps each (method in research/plans/ab-perf.md), and submit. Accepted submissions land in this table with your hardware label.

Submit benchmark results