Signal: Claude Code sends 33k tokens before reading the prompt; OpenCode sends 7k
systima.ai put Claude Code and OpenCode on the same model, the same machine, and the same tasks, and logged everything crossing the API boundary with a proxy sitting between each harness and the model endpoint. The headline number: on a request that asks for a one-line reply, systima.ai reports Claude Code sent roughly 33,000 tokens of system prompt, tool schemas, and injected scaffolding before the user prompt arrived, against about 7,000 for OpenCode. That is fixed overhead you pay on every turn, and it comes straight out of your working context budget. Most of it is tool definitions: systima.ai puts roughly 24,000 of Claude Code's ~33,000 tokens in tool schemas alone, versus about 4,800 of OpenCode's.
The multiple is model-dependent. According to systima.ai the 4.7x gap was measured on Sonnet 4.5, and re-running on Claude Fable 5 narrowed it to about 3.3x because Claude Code sends newer models a smaller system prompt. The more interesting finding for anyone watching a usage dashboard is cache behavior. systima.ai reports OpenCode's request prefix was byte-identical across every run they captured, so it paid to cache once per session and read it back cheaply, while Claude Code rewrote tens of thousands of prompt-cache tokens mid-session, run after run, and on one task wrote up to 54x more cache tokens than OpenCode. Cache writes are billed at a premium, which is what systima.ai says drove the dashboard climb.
Real setups make the floor worse. systima.ai measured a 72KB instruction file (AGENTS.md or CLAUDE.md) adding an average of 20,000 tokens to every request, and five modest MCP servers adding another 5,000 to 7,000, so a working configuration is 75,000 to 85,000 tokens deep before anyone types a word. Subagents compound it: a small task that cost 121,000 tokens done directly cost 513,000 when fanned out to two subagents, because each subagent carries its own bootstrap and the parent then consumes its transcript.
The result is not one-sided. systima.ai found that on a multi-step task Claude Code's whole-task total came in lower than OpenCode's, because it batches tool calls into fewer requests while OpenCode re-pays its smaller baseline turn after turn. So the meter starts higher, but how the session unfolds decides who actually spends more. If you run agents in production, systima.ai's point is that "what does my harness send" is answerable with a proxy and a log, not left to folklore.
Read it in the live terminal →