RESEARCH

The Blame Game: Model vs. Harness

Five pre-registered game experiments show how harness forensics can decompose agent scores across prompts, tools, runtime permissions, and model behavior.

AgentGames cover image for The Blame Game research post

Who actually made the move: the model, the prompt, the Python tool, or the runtime?

The benchmark score names the model, but the move may have come from the harness.

This post reports five pre-registered game-playing experiments. Each froze its hypothesis, seed set, and decision rule before launch, and later experiments followed what earlier audits surfaced. Together they show how a scaffold effect can be measured, localized to prompt text, stress-tested on a stronger model, and probed with an intervention. The durable contribution is harness forensics: a practical audit layer for agent systems.

Who moved the score

The scaffold around a model can swing its score. The same GPT-4 ranged from 2.7% to 28.3% on SWE-bench Verified depending on the scaffold it ran in.11 OpenAI, 2024. Introducing SWE-bench Verified: same model, four scaffolds. The same Claude Opus 4.5 scored 77.8% under one scaffold and 42.2% under another on CORE-Bench Hard.22 Kapoor et al. (Princeton PLI), 2025. Holistic Agent Leaderboard: CORE-Bench Hard leaderboard data. Controlled work in coding has measured scaffold swings of 27 percentage points with the model held fixed, and a growing literature now argues that agent scores should be reported as model–scaffold configurations.

All of that evidence lives at the outcome level: a final number, compared across conditions. Outcome-level numbers cannot say which layer moved the score or why, because software-engineering environments have no per-decision ground truth. The spread stays a black box.

So we chose an environment where the black box opens. In games with a perfect-play solver, every decision carries exact ground truth. That makes decomposition possible: the scaffold effect can be measured per move, linked to a mechanism, and checked with interventions. The measurements below are scoped to this environment. The audit method is the part that transfers to noisier environments.

One terminology split matters throughout. The harness is the fixed runtime software that drives the agent: it feeds observations, executes tools, records moves. The scaffold is the model-facing package that varies per experimental arm: prompt text, tool access, execution rules, parsing, retries, timeouts, runtime permissions. Our question, fixed up front: when an agent’s behavior changes, which layer changed it?

Here is the audit method in miniature. For each arm, write down allowed tools; audit actual tool calls; inspect prompt text for policy prescriptions; inspect executed code for what the tool computed; prove paired environments were identical; guard against parse and contamination failures; score decisions where ground truth exists; track resource failures; rerun sensitivity exclusions; then put every public claim in a ledger. The ten controls below exist because one of these experiments needed it.

The laboratory

We picked two games that stress different skills so a scaffold effect had room to flip sign. Both games ran on DeepSeek v4 Flash, and the key ConnectFour result was repeated on DeepSeek v4 Pro.

The games

Minesweeper tests constraint bookkeeping. One player, no opponent; the model sees a partially revealed board and replies with one cell. Mines are placed after the first click, so pairing across arms forces the same first click.

Minesweeper: the model sees a partially revealed board, writes a cell like [3 3], and the environment replies safe or mine
How to read: the model sees a partially revealed board, replies with one cell, and the environment says safe or mine. One wrong cell ends the game, which is why mine-hit rate per move, not just boards solved, appears in the results.

ConnectFour tests adversarial depth. Two players drop discs; four in a row wins. Going first is a large advantage, so the two arms play head-to-head in seat-swapped pairs.

ConnectFour: the model picks a column, the disc drops to the lowest free slot, and the environment replies drop or full
How to read: discs stack from the bottom under gravity. The model picks a column number, and the environment replies with the outcome. Because the exact solver can score any position, every pick gets a regret value.

The arms

An arm is one experimental condition: a model plus scaffold combination being measured. raw is an answer-only prompt arm. repl is the same model wrapped in a scaffold: a prompt plus a Python execute tool to call before committing a move. Both arms ran inside the same real harness, with actual tool use audited from traces rather than assumed from labels (the payoff arrives in The tool surface).

What we measured

Minesweeper reports the share of boards solved and the mine-hit rate per move.

ConnectFour reports per-move regret from the Pascal Pons exact solver. The solver’s raw position score can be positive (the current player can force a win in N plies), 0 (a draw with perfect play), or negative (the current player is losing). Regret is different: it is the gap between the best available position score and the score after the move actually played (both from the mover’s perspective). Regret is always ≥ 0 — 0 for a perfect move, larger for a worse move. Blunder rate is the share of moves with regret above 0. A game yields one win/loss/draw; its roughly twelve plies yield about six scored decisions per player, so regret captures move-quality shifts that the final outcome can hide.

Because the two arms are opponents, the positions one arm creates are the positions the other arm faces, so their regrets are coupled. The paired bootstrap intervals respect this pairing without treating the two arms as independent draws.

The tests

Hypotheses and decision rules were fixed before the evidence runs:

$$H_1:\; \text{repl} > \text{raw} \quad \text{(Minesweeper solves)}$$
$$H_2:\; \Delta\text{regret} = \text{regret}_{\text{repl}} - \text{regret}_{\text{raw}} > 0 \quad \text{(ConnectFour, paired)}$$

H1 is evaluated with a McNemar test (p<0.05 on paired seeds, counting only pairs where the arms disagree). H2 is evaluated with a paired bootstrap confidence interval that excludes zero. Higher regret means worse play. Sign changes were declared interesting-not-failure in advance, and the failure condition was the registered test missing its threshold.

The protocol

Every experiment shared the same controls: pre-registration, paired seeds, seat swaps that cancel first-player advantage, solver regret instead of bare win/loss, a contamination guard that drops parse failures and illegal moves before scoring, prompt and executed-code audits, an arm-purity audit of actual tool_calls, and a sensitivity analysis that recomputes every headline claim after excluding contaminated games. Only claims that survive get published. Arm labels are claims to audit.

Pilot runs only debugged the machinery and never counted as evidence.

Prior work sits in three threads, all cited at the end: outcome-level score-spread evidence, harness-disclosure advocacy with model×harness configuration benchmarks, and a thin game-domain thread of modular harness ablations plus solver-scored game evaluation. We found no prior work combining decision-level scaffold decomposition, mechanism localization through executed-code forensics, a pre-registered scaffold intervention, and an arm-purity audit against the runtime’s exposed tool surface. Reference 8 reports 35 scaffold versions with a fixed coding model and no meaningful solve-rate change. Our setting differs because per-move regret exposes quality shifts that solve rates hide.

EXPT1: the scaffold helps

What this section shows: the same model plus a Python tool solves more Minesweeper boards, and the gain survives a purity check.

The first experiment asked the simplest version of the question: on truly identical minefields, does the Python-tool scaffold beat answer-only play?

The repl scaffold helped the model avoid mines when the safe move was knowable. Repl solved 86 boards against raw’s 60 [+26 percentage points, McNemar, paired]. The result survives the purity check: dropping the two contaminated seed pairs gives 86/98 for repl against 60/98 for raw [+26.5 percentage points, p < .001]. Mine hits where logic was available fell from 2.9% to 1.3% per move, while forced guesses stayed roughly equal.

Minesweeper rewards bookkeeping. Executed code helps because the scaffold can track constraints more reliably than a pure text answer.

Bar chart: paired Minesweeper solve counts, as run and after purity exclusions
Paired solve rates on identical minefields. Taller is better. Left pair is the run as recorded (60/100 vs 86/100); right pair recalculates after dropping the two raw seeds where the answer-only arm quietly used tools (60/98 vs 86/98). The estimate changes by 0.5 percentage points after the exclusion.

EXPT2: the scaffold hurts

What this section shows: the same scaffold architecture flips sign on ConnectFour, and the harm shows up as move-level regret concentrated in winning positions.

The second experiment ran the mirror image: same model, same scaffold architecture (prompt plus Python execution before each move) on ConnectFour, where the skill is adversarial depth.

The repl scaffold blundered less often but catastrophically, and the catastrophe concentrated in positions it was winning. Raw won 126 decided games to repl’s 72 [126–72, seat-swapped pairs]. Per-arm mean regret was 2.348 for raw against 3.248 for repl, and the headline paired diff was +1.065 [95% CI [+0.777, +1.357], excludes zero]. A win-rate gap alone could be dismissed as variance. Regret adds a move-level check against perfect-play ground truth. Raw made more non-perfect moves overall [blunder rate 41.6% vs 35.6%], but repl’s bad tail was much worse [90th-percentile regret 19 vs 7].

That unconditioned rate is misleading: the positions a player faces are produced by both players jointly, and a losing player has little room to blunder. Conditioning on the solver’s evaluation of the position reverses the rate: in winning positions repl blundered more often [45.3% vs 37.7%], a scale-free comparison that position mix cannot explain. Winning positions also offer the most regret headroom, so part of the amplification is mechanical:

Position faced (solver eval)Blunder rate, raw vs replP90 regret, raw vs replPaired diff (repl − raw)
Winning37.7% vs 45.3%11 vs 19+2.508 [95% CI +1.805, +3.245]
Balanced43.9% vs 22.0%6 vs 2−1.266 [−2.032, −0.543]
Losing46.2% vs 15.1%5 vs 3−0.901 [−1.307, −0.508]

Position mix matters too: repl spent more of its moves in winning positions than raw did [66.2% vs 51.7% of scored moves (the shares sum past 100% because the arms are opponents)], and still lost 126–72. Of the 126 games repl lost, it held a winning position after the opening (ply ≥ 4) in 61.1%, while raw held one in 44.4% of its 72 losses. That signature matches a one-move policy: it misses the positions where a mistake is fatal. The raw arm was purity-clean [0/1406 raw turns].

Minesweeper is bookkeeping. ConnectFour is adversarial depth. A one-move routine can help one and damage the other.

The supported claim is narrower than “scaffold effects flip by task.” A scaffold whose prompt prescribed bookkeeping helped on Minesweeper. A scaffold whose prompt prescribed an unsuitable one-move policy hurt on ConnectFour. Any benchmark that reports a single tool-use number across task types risks averaging over prompt-task fit.

DeepSeek v4 Flash ConnectFour: mean regret per arm and paired regret difference with confidence interval
Regret is distance from perfect play. Lower is better everywhere in this figure. Left: per-arm mean regret; raw is 2.348 and repl is 3.248. Right: the paired diff (repl minus raw from the same head-to-head game, averaged across the seat swap), shown as a dot with a 95% confidence whisker. The dashed line at zero is "no difference"; the 95% CI sits entirely above it. Decided games: 126–72 for raw.
Blunder rate versus 90th-percentile regret for raw and repl arms in EXPT2 and EXPT4
How to read: left is how often an arm makes any non-perfect move; right is how bad the worst tenth of moves gets. The prescriptive repl's tail is far worse (right) in both EXPT2 and EXPT4. The unconditioned rates (left) point in opposite directions across the two experiments — raw higher in EXPT2, lower in EXPT4 — because they mix positions the two arms produced together. The conditioned version is the next figure.
Paired regret diff and blunder rate conditioned on the solver's evaluation of the position faced, for EXPT2 and EXPT4
How to read: every scored move is bucketed by the solver's evaluation of the position the player faced — winning, balanced, or losing. Top: the paired regret diff within each bucket (dot with 95% CI); the prescriptive harm concentrates in winning positions in both experiments. Bottom: blunder rates within each bucket. The unconditioned "raw blunders more" gap comes from raw spending more turns in losing positions, where repl rarely blunders because nothing can be saved.

EXPT3: prompt mechanism

What this section shows: the repl arm’s executed code was a shallow one-move policy, and the prompt prescribed it.

Two results with opposite signs demanded a mechanism, and the audit protocol localizes in a fixed order: score → moves → executed code → prompt text.

The code

The executed code held the first clue. The strict template detector found immediate win → immediate block → center fallback code on 199/1,380 repl turns (14.4%). The rest were unclassified variants [misc: 1,029 of 1,380, 74.6%], execution errors [145, 10.5%], and one turn of heuristic evaluation without search, while explicit minimax or depth search appeared on only 6/1,380 turns (0.43%).

Policy clusterShare of repl turnsCount
Strict 1-ply template14.4%199 / 1,380
Misc shallow variants74.6%1,029 / 1,380
Execution errors10.5%145 / 1,380
Heuristic, no search0.1%1 / 1,380
Minimax / depth search0.4%6 / 1,380

Can I win immediately? Can the opponent win immediately? Otherwise prefer center columns.

That is a one-move policy family. It misses two-move traps, fork threats, and tempo: precisely the skills ConnectFour exists to test. The strongest forensic claim is that deep search appeared on only 6/1,380 turns (0.43%).

The prompt

The second pass went one layer upstream, to prompt text. The ConnectFour repl scaffold was built with an explicit prescriptive prompt, a common harness pattern: the prompt offered Python and dictated the algorithm.

You MUST use the `execute` tool for every move.
In the tool, write a short Python snippet that:
1. Parses the ConnectFour board from the observation.
2. Checks for an immediate winning move, then an immediate block of the opponent's win.
3. Otherwise prefers center columns.
4. Prints the chosen column as [c].
Prescriptive prompt in the ConnectFour repl scaffold. Steps 2 and 3 encode a one-move policy. Steps 1 and 4 are plumbing.

The model was often executing the scaffold’s instructions, and those instructions encoded the shallow policy. The audit points to the prescriptive prompt as the damaging component.

The contrast case makes it sharper: the Minesweeper repl prompt prescribes bookkeeping (“tracks revealed cells and known constraints… identifies safe cells”), and it helped. Full prompt texts side by side: prompt excerpts.

The measurement stands: the repl scaffold made the model worse at ConnectFour. The attribution is narrower: the damaging component was one paragraph of prescriptive prompt text. Scaffolds must be audited as behavioral systems. The finding also creates a direct test: if the paragraph carries the policy, swapping the paragraph should move the outcome.

EXPT4: the scaffolded ceiling

What this section shows: the prescriptive prompt capped a stronger model near the weaker model’s scaffolded ceiling.

The mechanism suggests a stress test: if the prescriptive prompt caps both models near the same shallow policy, the stronger model has more baseline performance to lose. We pre-registered a follow-up on DeepSeek v4 Pro, a substantially stronger model, to check that pattern.

The prescriptive prompt capped the stronger model near the weaker model’s scaffolded level. Both prescriptive repl arms had median regret 0 and nearly identical 90th-percentile tails, while the unaided raw arms differed sharply by model strength.

ModelArmMean regretP90 regretBlunder rate
Flashraw2.348741.6%
Flashrepl3.2481935.6%
Proraw1.112329.8%
Prorepl3.5362032.7%

The Pro paired diff was +3.002 [95% CI [+2.723, +3.302], excludes zero], about 2.8 times the Flash paired diff. Computed from per-arm means, the scaffold’s share of the Pro repl error:

$$\text{scaffold share} = \frac{3.536 - 1.112}{3.536} = \frac{2.424}{3.536} \approx 69\%$$
Regret deciles for all four arms — Flash raw, Flash repl, Pro raw, Pro repl: prescriptive arms share the same tail
How to read: each line is one arm's move-quality distribution, worst moves on the right; solid lines are prescriptive repl arms, dashed lines are unaided raw arms. Flash repl and Pro repl share nearly the same tail (P9 regret 19 vs 20) despite very different unaided ability — the prescriptive prompt sets the level. Flash raw sits below both, Pro raw near zero throughout.

The exact 69% figure uses the recorded DeepSeek v4 Pro raw reference, which had raw-arm bash leakage (full story in The tool surface, below). That leak makes raw look better, so it likely inflates the scaffold-share estimate. The sensitivity checks preserve the main paired comparison: excluding raw-contaminated games keeps the repl arm much worse [paired diff +2.950, 95% CI [+2.640, +3.260]].

Position conditioning localizes the ceiling further. The harm concentrates in winning positions, and the effect survives the forfeit check.

PositionPaired diff (repl − raw)95% CIP90 (raw / repl)Blunder rate (raw / repl)
Winning+7.560[+6.390, +8.839]3 / 2024.5% / 42.6%
Balanced+0.824[+0.353, +1.235]0 / 25.3% / 40.0%
Losing−0.541[−0.737, −0.339]2 / 143.9% / 18.2%

The balanced bucket flips sign between EXPT2 and EXPT4; only the winning-position concentration generalizes.

Part of the winning-position amplification is mechanical, since winning positions offer the most regret headroom, but the effect survives the forfeit check: the 13 forfeit-free pairs still show +5.858 [95% CI [+2.994, +9.509]]. The two models fail through different routes: on Flash, repl reached winning positions and threw them (held a post-opening winning position in 61.1% of its losses); on Pro, repl rarely developed one at all (18.2% of its losses). What generalizes is the winning-position bucket: under the prescriptive prompt, whatever regret an arm accrues concentrates in positions it was winning. One prompt, two failure modes.

A reader counting only wins would have missed this: raw’s record was 99 wins against 89 losses, 87 of the losses to its own stalls — raw lost only two games on the board — while the regret gaps rank the two experiments in the opposite order [+3.002 vs +1.065]. The outcome record was corrupted by a harness failure. The move-level scoring survived it.

This is a caveated but important claim: prompt-scaffold behavior can dominate the apparent model score in this setup. The prescriptive prompt put the weak and strong models in the same band, with Pro slightly worse under the scaffold despite being far better raw.

A forensic chain (executed code → prescriptive prompt) is still an inference. The stronger check is an intervention: if the prompt paragraph is load-bearing, replacing it with a depth-search paragraph should move the outcome. We pre-registered that comparison.

EXPT4 stall and forfeit accountingEXPT4 raw suffered prompt stalls in 87 of 200 games: 61 clean forfeit outcomes (30.5%), plus 26 with parse failures or contamination. The 87 stalled games sit in 87 distinct pairs with zero double-stalls, so the pair split flags 87 of 100 pairs; independent sprinkling at a 43.5% per-game rate would touch about 68. Splitting the paired diff by forfeit status keeps the ceiling finding intact [no-forfeit pairs +2.437, n=13; forfeit pairs +3.086, n=87], and the headline +3.002 is 23% larger than the forfeit-free cell. Forfeits inflate the EXPT4 diff (+3.086 vs +2.437) and deflate the EXPT5 diff (−1.187 vs −2.866), a sign flip we cannot explain. Full accounting: [round-2 audit tables](https://github.com/sagarsrc/agentgames/blob/main/docs/experiments/001-agent-games-research/blog/artifacts/round2-audit-tables.md).
DeepSeek v4 Pro ConnectFour: paired regret difference before and after purity exclusion
How to read: three paired-difference estimates for the prescriptive prompt on DeepSeek v4 Pro, all in the same units (solver regret). All pairs is the headline effect (+3.002). Purity sensitivity drops pairs touched by the raw-arm bash leak (+2.949). Winning positions conditions on the solver's evaluation of the position faced (+7.560). Right of zero = repl is worse than raw. The dashed line at zero is "no harm." Full tables: sensitivity tables.

EXPT5: prompt intervention

What this section shows: swapping one prompt paragraph for a depth-search version reversed the sign in the same run.

The final experiment held everything identical (DeepSeek v4 Pro, ConnectFour, the same Python execute tool, the same audited protocol, seat-swapped pairs) except one paragraph of prompt text:

  • Prescriptive prompt (the repl arm from EXPT4): check immediate win → block immediate win → prefer center. A one-move policy.
  • Depth prompt (the new arm): search the game tree at least three plies deep, evaluate leaves with a simple heuristic. A search policy.

The prescriptive arm’s result was already on the books from EXPT4: mean regret 3.536, with the caveated 69% scaffold-share calculation above. The depth-prompted arm completed with 100 games [96 parse-clean, 50 seat-swapped pairs]. The prescriptive and depth arms were not run concurrently, so that cross-run comparison is suggestive. The within-run depth-versus-raw comparison is the defensible headline.

Same model, same tool, same game: the depth prompt beat raw by about 60% on scored moves. The tables below put the comparison in one place. The EXPT4 prescriptive column is a cross-run reference because the two prompts were not run concurrently.

ArmGamesMean regretBlunder rateP90 regretPaired diff (repl − raw)
raw (EXPT5)1001.64237.5%40.0
depth-prompted repl (EXPT5)1000.64421.2%2−1.198 [−1.599, −0.816]
prescriptive repl (EXPT4)2003.53632.7%20+3.002 [+2.723, +3.302]

The position split closes the mechanism loop: the depth prompt’s advantage is largest in the same winning-position bucket where the prescriptive prompt did its damage.

The first table strips the sample one exclusion at a time. The second table conditions on the solver’s evaluation of the position faced (a position-level slice, not a pair-level exclusion):

Exclusion levelPaired diff (depth − raw)95% CIn pairs
All pairs−1.198[−1.599, −0.816]50
Parse-clean + non-contaminated−1.273[−1.635, −0.930]39
Strict: also no forfeits−2.866[−3.811, −1.921]2
Position facedPaired diff (depth − raw)95% CI
Winning−2.882[−4.077, −1.811]
Balanced−2.248[−3.604, −0.890]
Losing−0.496[−0.716, −0.273]

Poison and cure, same bucket, same units. Stated with attrition visible: the depth prompt beat raw by 1.198 regret on 39 clean pairs, 37 of which include a game raw lost to a prompt stall, while the two forfeit-free pairs point the same way (−2.866) but are too few to carry the claim alone.

EXPT5 paired regret differences: depth prompt beats raw across exclusion levels, and flips the sign from EXPT4 prescriptive
How to read: each dot is a paired regret difference (repl minus raw); negative means the depth-prompted repl is better. The top dot is the EXPT4 prescriptive prompt as a cross-run reference: same model, same game, opposite sign. Below it are EXPT5 depth-prompt comparisons at four exclusion levels, ending with the winning-position bucket where the prescriptive prompt did its damage. Whiskers are 95% confidence intervals. The no-forfeits cell has only 2 pairs, so it is a disclosure, not the main claim.

Blunder rate (moves with regret above zero) tells the same story [37.5% raw → 21.2% depth-prompted repl], and the bad tail also shrank [90th-percentile regret 4 → 2].

EXPT5 forfeits, in detailThe arms are head-to-head opponents, so raw's stall hands repl-depth the win: forfeits are outcomes favoring the depth arm rather than symmetric attrition. The mechanism is a prompt stall past retries (`PromptTimeout`), itself a harness-forensics finding. Pro raw lost 30.5% of EXPT4 games to clean forfeit outcomes (61 of 200) against 62.0% in EXPT5 (62 of 100); under the stall-event definition the pair split uses, the rates are 43.5% (87 of 200) against 68.0% (68 of 100), a drift of 1.56× versus 2.03× by forfeit outcomes. Turn counts per game are comparable across runs (5.4 in EXPT4 over 200 games versus 6.0 in EXPT5 over 100 games). Splitting the paired diff by forfeit status keeps the direction: raw-lost-forfeit pairs average −1.187 (n=37), no-forfeit pairs −2.866 (n=2). Full accounting: [round-2 audit tables](https://github.com/sagarsrc/agentgames/blob/main/docs/experiments/001-agent-games-research/blog/artifacts/round2-audit-tables.md).

The tool surface

What this section shows: answer-only arms still used the runtime’s bash tool, and the stronger model leaked more.

The finding most likely to transfer came from a design choice and a planned audit.

Every arm, including the answer-only raw arm, ran inside the same real harness. We skipped a separately sandboxed no-tool baseline for two reasons. Comparability: identical runtime conditions across arms. Realism: published baselines run inside tool-bearing harnesses everywhere. That harness exposes a native bash tool underneath the prompt. The prompt said “just answer.” The runtime said “bash is available.”

Our protocol never trusts an arm’s label. Every run gets an arm-purity check, an allowed-tool matrix compared against actual tool_calls. A sandboxed baseline would have hidden what this audit was built to catch. DeepSeek v4 Pro sometimes sided with the runtime.

A no-tool prompt is not a no-tool runtime. DeepSeek v4 Pro’s raw arm used native bash on 3.2–6.3% of turns [35/1088 turns in the EXPT4 replication, and 38/603 bash-leak turns plus one bomb in EXPT5], writing and running real minimax solvers, then quoting their output. DeepSeek v4 Flash used unintended tools far less often [typically 0–1.1%, and its ConnectFour raw arm was perfectly clean at 0/1406]. The leak rate was higher on the stronger model, consistent with a capability gradient but too little to establish one alone.

The finding is that an instruction in a prompt competes with the affordances of the runtime. As models get stronger, prompt-level restrictions may become a weaker control, and runtime-level isolation becomes the safer one.

Arm labels are intentions. Every agent eval needs an allowed-tool matrix and an actual-tool-use audit, because the runtime may expose more than the prompt describes.

Agent evals need arm-purity checks. Any “model-only baseline” that runs inside a tool-bearing harness is an assumption until the traces prove otherwise.

Unintended tool-use rates by model and run
How to read: every bar is an arm that was instructed not to use tools; bar length is how often it used one anyway, measured from actual traces. Darker bars are DeepSeek v4 Pro, lighter are DeepSeek v4 Flash. The stronger model shows higher leak rates in these runs; the zero bar at the bottom is the DeepSeek v4 Flash ConnectFour flagship, fully clean. Full inventory: arm-purity table.

Harness forensics

The reusable contribution is the audit layer. Each item below was load-bearing in this program:

  1. Allowed-tool matrix — what each arm is supposed to access.
  2. Actual tool-call audit — what each arm actually used, from traces.
  3. Prompt audit — whether prompt text prescribes policy, not just format.
  4. Executed-code inspection — what the tool code actually computed.
  5. Environment-pairing proof — whether paired seeds really produce identical conditions.
  6. Parse/contamination guard — whether recorded moves faithfully reconstruct the game.
  7. Decision-level ground truth — solver regret where available, not only wins.
  8. Resource/process audit — timeouts, zombie processes, memory explosions.
  9. Sensitivity analysis — exclude contaminated units and show which claims survive.
  10. Claim ledger — separate confirmed, directional, caveated, and pending claims.

None of these are exotic. The reporting layer needs the same discipline: an earlier draft of this post cited an EXPT4 forfeit split (16 of 83 pairs) that existed nowhere in the analysis pipeline, and the crosscheck caught it because every number in the post must exist in the canonical metrics. The named failure modes these audits surfaced (rubber stamps, one-ply theater, trusted error output, unbounded-search bombs) live in the failure museum. The full checklist, with the motivating case for each item, is in the harness forensics checklist. Pre-registrations, seed manifests, prompt texts, and audit tables ship with the same repository.

The agent stack: model, prompt, tool surface, parser, runtime, environment, score, each layer auditable
How to read: top to bottom is the path from model to published number. Every box transforms the output before it becomes a score. The right-hand column is the audit question we now ask at each layer, with the failure it would have caught. Leaderboards name the top box; this audit follows the layers below it.

Claim ledger

Public claimStatus todayEvidenceCaveat
Scaffold helps Minesweeper bookkeepingconfirmedEXPT1 repaired paired run: repl 86 vs raw 60 solved boards; clean-pair sensitivity 86/98 vs 60/98 [p < .001]DeepSeek v4 Flash, one game family
Prescriptive ConnectFour scaffold hurts DeepSeek v4 FlashconfirmedEXPT2 raw arm clean [0/1406]; paired diff +1.065, 95% CI [+0.777, +1.357] excludes zero; effect concentrates in winning positions [+2.508, 95% CI [+1.805, +3.245]]Prompt prescription is part of the scaffold
Prompt-task fit can change scaffold signdirectionalEXPT1 prompt prescribed bookkeeping and helped; EXPT2 prompt prescribed an unsuitable one-move policy and hurtTask and prompt changed together; no crossed-prompt arm
Prescriptive prompt can dominate scorecaveatedEXPT4 DeepSeek v4 Pro paired diff +3.002; forfeit-free split +2.437 (n=13); winning-position paired diff +7.560, 95% CI [+6.390, +8.839]; scaffold share ≈69%; sensitivity remains positive [+2.950, 95% CI [+2.640, +3.260]]Exact 69% share is computed from per-arm means using the recorded raw reference, which had bash leakage; forfeits inflate the headline relative to the forfeit-free cell
Raw baselines require runtime purity auditsconfirmedNative bash leak quantified across runs: EXPT4 35/1088, EXPT5 38/603 + one bombSeverity likely harness- and model-dependent; two models, one family
Depth prompt improves scaffold behavior in EXPT5caveatedEXPT5 within-run paired diff depth − raw −1.198, 95% CI [−1.599, −0.816]; depth mean 0.644 vs raw 1.642; direction holds in the forfeit split [−1.187 on 37 raw-lost-forfeit pairs; −2.866 on 2 no-forfeit pairs]; advantage concentrates in winning positions [−2.882, 95% CI [−4.077, −1.811]]Cross-run comparison to EXPT4 prescriptive arm is suggestive; raw arm leaked bash; raw lost 62 of 100 games by prompt-stall forfeit; no-forfeit subset is n=2
Prescribing strategy is harmful in generalpendingNot testedRequires permissive-prompt arm that offers tools without dictating policy
Leak rate scales with capabilitypendingPro leaked more than Flash in these runsRequires more models/families; current result is only consistent with a capability gradient

Machine-readable version with evidence links: claim ledger.

Limitations

The measurements are scoped to this environment: two games (Minesweeper and ConnectFour) and two models (DeepSeek v4 Flash and DeepSeek v4 Pro). We did not run a permissive-prompt arm, so we cannot separate “prescribing a strategy is harmful” from “this prescribed strategy was harmful,” and that missing arm is also the test that would clarify why reference 8 found little scaffold effect. We did not cross prompts between games. The prescriptive and depth arms were not run concurrently, and the Pro raw baseline moved between EXPT4 and EXPT5. The raw reference has bash leakage, which makes raw look better and likely inflates the 69% scaffold-share estimate, though sensitivity checks preserve the main paired comparisons. EXPT5 is forfeit-heavy: after exclusions, only 2 no-forfeit pairs remain. The leak pattern uses two models from one family, so it is consistent with a capability gradient rather than a measured trend. What transfers beyond this environment is the audit method.

Denominators and per-arm vs paired accountingPer-arm means and paired differences use different denominators after exclusions, so they do not always subtract to the same number: EXPT2 is 0.901 by per-arm means versus +1.065 paired; EXPT4 is 2.424 versus +3.002; EXPT5 is −0.999 versus −1.198. The [round-2 audit tables](https://github.com/sagarsrc/agentgames/blob/main/docs/experiments/001-agent-games-research/blog/artifacts/round2-audit-tables.md) show the denominators, blunder rates, outcome clusters, and EXPT5 attrition flow. Blunder rates are computed for the ConnectFour experiments, while Minesweeper uses mine-hit and forced-guess rates instead of regret.

What we would buy next, by value per dollar: extend the leak audit across more models, since it is cheap and transferable. Then a permissive-prompt ConnectFour arm on the weaker model. Then, if budget allows, rerun prescriptive and depth prompts concurrently with matched timeout budgets.

What we do claim:

In this audited setup, scaffold behavior was large enough to change task outcomes, dominate a strong model’s measured errors under a prescriptive prompt, and reveal prompt boundaries leaking into exposed harness tool surfaces.

Coda

Stop asking only which model scored? Ask: which layer made the move?

The model may have made it. Or the prompt. Or the Python tool. Or the parser. Or a runtime tool the prompt never described. In our ConnectFour runs, the honest answer was “one paragraph of prompt text”, and no leaderboard would have told you that.

That is the blame game: model vs. harness. The contribution is a way to open the agent stack and see where performance comes from. Once the audit exists, the findings keep coming, because the harness was dirtier than its labels claimed.

References

Score spreads and scaffold effects (outcome level).

  1. OpenAI. Introducing SWE-bench Verified (2024): GPT-4 ranged 2.7% → 28.3% across scaffolds, same model. openai.com/index/introducing-swe-bench-verified/
  2. Kapoor et al. Holistic Agent Leaderboard (HAL). arXiv:2510.11977: model–scaffold–benchmark reporting; CORE-Bench Hard: same Opus 4.5, 77.8% vs 42.2% across scaffolds.
  3. Zheng et al. Claw-SWE-Bench. arXiv:2606.12344: 27.4pp Pass@1 swing with model fixed (coding).
  4. Vats, Golev. The Scaffold Effect in Coding Agents. arXiv:2607.22585: harness choice as hidden variable; 40× token-efficiency spread.
  5. Just a Wrapper? How Much Do Scaffolds Matter? (LessWrong, HAL data): scaffold explains more price-performance variation than model choice.

Harness disclosure and configuration reporting.

  1. Zhang et al. Stop Comparing LLM Agents Without Disclosing the Harness. arXiv:2605.23950.
  2. Harness-Bench: Measuring Harness Effects across Models in Realistic Agent Workflows. arXiv:2605.27922.
  3. Don’t Blame the Large Language Model: How Scaffolding Evolution Shapes Coding Agent Quality. arXiv:2607.03691: 35 scaffold versions, fixed model, no significant solve-rate change (coding).

Game-domain harness work (thin).

  1. Zhang, Yu, Hu, Jin, Zhang. General Modular Harness for LLM Agents in Multi-Turn Gaming Environments. ICML MAS Workshop 2025. arXiv:2507.11633: module ablations in games, one backbone; closest prior work.
  2. Lou et al. AutoHarness: improving LLM agents by automatically synthesizing a code harness. arXiv:2603.03329: harness synthesis in games, not controlled ablation.

Solver ground truth in games (separate thread).

  1. Schultz et al. Mastering Board Games by External and Internal Planning with Language Models. ICML 2025. arXiv:2412.12119: ConnectFour per-move solver regret (Fhourstones); a planning study, not harness attribution.
  2. CAST: Game Solvers as Turn-Level Teachers for LLM Agents. arXiv:2607.25308: turn-level solver signals on Minesweeper.

Platforms.

  1. Guertler et al. TextArena. arXiv:2504.11442: game platform used in our runs.
  2. Paglieri et al. BALROG: Benchmarking Agentic LLM and VLM Reasoning On Games. arXiv:2411.13543.

About the author

Sagar Sarkale

Cite this post

@misc{sarkale2026blamegame,
  author = {Sarkale, Sagar},
  title  = {The Blame Game: Model vs. Harness},
  year   = {2026},
  month  = {August},
  url    = {https://www.cmul8.com/research/the-blame-game/}
}