Somebody finally put a logging proxy between the harnesses and the API and measured what actually...
Somebody finally put a logging proxy between the harnesses and the API and measured what actually goes over the wire. Systima did it, and the numbers are not subtle.
Claude Code opens a session with roughly 33,000 tokens of system prompt, tool schemas, and injected scaffolding. OpenCode, running the same model on the same machine, opens with about 7,000.
You haven't typed anything yet.
The breakdown is illuminating:
OpenCode's first message is close to minimal: one system block, ten tools, your prompt.
You'd think prompt caching neutralises all of this. Write once, read cheap. That's true if your prefix stays stable — and that's where the real gap is.
> *"OpenCode emitted byte-identical prefixes across every request and every run... Claude Code emitted three distinct request classes per session, each with its own cache entry. Its system bytes also varied between sessions in the same workspace."*
On the same file-summarise task: Claude Code wrote **53,839 cache tokens** across 5 requests, including one full mid-session re-write of its entire prefix. OpenCode wrote **1,003**.
They tested on two model families. Same pattern both times. The gap ran from 5.9x to 54x depending on cache temperature. Cache writes bill at a premium — 1.25x for the 5-minute tier — which explains why the usage dashboard climbs even on simple tasks.
A baseline comparison undersells the real cost in production. The multipliers:
By the time a real working setup sends its first request, you're 75,000–85,000 tokens deep before the user typed anything. That's 40%+ of a 200k context window, every single request.
On a multi-step write-run-test-fix task, Claude Code batched all tool calls into a single parallel round trip (3 requests total). OpenCode made one tool call per turn and