Systima spliced a logging HTTP proxy at the API boundary and captured the exact JSON payloads that two coding harnesses send, pinning both to the same model and stripping MCP servers, memory files, and workspace state. The result is the cleanest apples-to-apples accounting of harness overhead published so far. Claude Code 2.1.207 opens a session with a 27,344-character system prompt across three blocks, 27 tool schemas totalling 99,778 characters, and roughly 8,000 characters of system-reminder scaffolding: about 32,800 tokens before a single character of the user's prompt is considered. OpenCode 1.17.18 sends a 9,324-character system prompt, 10 tools worth 20,856 characters, and no scaffolding, for roughly 6,900 tokens. Tool definitions dominate both figures, at roughly 24,000 tokens versus 4,800. Strip the tools entirely and the pure system-prompt gap is still more than three to one.
The naive reading of that 4.7x floor is that Claude Code is 4.7x more expensive, and the paper's most useful contribution is showing that this is wrong. On the multi-step write-run-test-fix task, Claude Code issued three model requests for about 121,000 cumulative metered input tokens; OpenCode issued nine for about 132,000. Claude Code batches tool calls in parallel and pays its large baseline three times; OpenCode does one tool call per turn and pays its small baseline nine times. The totals converge, and both harnesses completed every scored task correctly. Where the gap does not close is caching. OpenCode emits a byte-identical prefix on every request, so repeat runs wrote zero cache tokens. Claude Code emits three distinct request classes per session, each with its own cache entry, and was observed re-writing its full ~43k prefix mid-task: 53,839 cache-write tokens against OpenCode's 1,003 on the identical file-summarise job, a 54x ratio at the extreme, 5.9x at the mild end.
The configuration multipliers are larger than the harness gap. A 72KB instruction file adds just over 20,000 tokens to every request on both systems, and Claude Code 2.1.207 silently ignored it entirely until it was renamed. Each small MCP server costs roughly 1,000 to 1,400 tokens per request. Subagents were the single biggest lever: a two-subagent fan-out consumed 513,000 cumulative metered input tokens against 121,000 for the same work done inline, a 4.2x multiplier. Realistic configurations land at 90,817 tokens for OpenCode with eleven MCP servers and 75,000 for Claude Code with four servers plus plugins. As the authors put it, the harness sets the floor and your configuration sets the bill.
The caveats are stated plainly and matter. The sample is small — three runs on the fixed-overhead task, one run per multiplier lane, one machine, one version pair. A local gateway sat in the request path adding a constant offset and silently substituted a newer model snapshot than the one pinned, so the multi-step lane on the second model was excluded. And the authors explicitly decline to claim that Claude Code's premium fails to buy quality: background agents, skills, and orchestration surface may well earn their tokens on harder tasks than the ones measured here. What the study does establish is that on tasks where both harnesses succeed, a large fraction of the difference in bill is scaffolding, not intelligence, and that cache-breakpoint stability is a first-class design property that most agent frameworks are not yet treating as one.
- Hacker News' 547-point thread focused on the cache-rewrite finding rather than the headline 4.7x, treating mid-session prefix churn as the real cost bug.
- Systima frames the audit trail as EU AI Act Article 12 logging, which is also the post's commercial hook.