Claude Code Sends 33,000 Tokens Before Reading Your Prompt

Systima pinned Claude Code 2.1.207 and OpenCode 1.17.18 to the same model: Claude Code burns ~32,800 first-turn tokens to OpenCode's ~6,900.

Close-up of an electronic circuit board with fine traces and components

Anthropic’s Claude Code and the open-source OpenCode both advertise themselves as coding agents you run in the terminal - a category we covered head-to-head with Cursor and Copilot in April. Under the hood they barely look like the same kind of program. A teardown published July 12, 2026 by the engineering evidence firm Systima pinned both harnesses to the same model and ran them through the same three tasks, and the most striking result comes from the smallest possible request: when asked to reply with the single word “OK,” Claude Code 2.1.207 sent roughly 32,800 tokens before the model ever read the user’s message. OpenCode 1.17.18 sent roughly 6,900.

That gap has consequences for the bill, the cache, and every multiplier you put on top.

The Single-Line Stress Test

Systima’s methodology is unusually disciplined for an AI tooling comparison. The authors stood up an HTTP proxy in front of both harnesses, captured 185 request/response records into a SHA-256 hash-chained audit log, and subtracted out a fixed local gateway envelope of about 6,200 tokens so they were measuring only what each harness chose to send (Systima). They pinned Claude Code 2.1.207 and OpenCode 1.17.18 to claude-sonnet-4-5 and later re-ran a subset against claude-fable-5. Three tasks: T1 was “Reply with exactly: OK” (twenty-two characters); T2 read and summarized a file; T3 was a write-run-test-fix loop on FizzBuzz. Token counts use a measured 4.1 to 4.4 characters-per-token ratio.

On the one-line reply, Claude Code’s opening message was built from three system-prompt blocks totaling 27,344 characters, twenty-seven tool schemas totaling 99,778 characters, and 7,997 characters of <system-reminder> blocks. About 24,000 of the ~33,000 tokens were tool definitions. OpenCode’s opening prompt was a single block of 9,324 characters and ten tools totaling 20,856 characters. The headline number - “roughly 33,000 tokens” against “about 7,000” - is Systima’s own framing, and the calibration numbers (32,800 versus 6,900) match the audit log.

Even when both harnesses were stripped down to zero tools, Claude Code’s system prompt was still 26,891 characters (~6,500 tokens) to OpenCode’s 8,811 characters (~2,000 tokens). Closing the tool set cuts both clients; it does not close the gap.

Beyond the First Turn

The gap shifts as work accumulates. On a single-tool summarize task, Claude Code made six HTTP requests and burned about 199,000 cumulative input tokens; OpenCode made four requests and burned about 41,000. On a multi-step FizzBuzz loop, OpenCode actually spent more in raw totals (~132,000 input tokens across nine serial tool calls) than Claude Code (~121,000 across three parallel batched requests) - because Claude Code front-loads scaffolding while OpenCode pays as it goes. Systima’s gloss is sharp: “the meter starts higher; how the session unfolds decides who spends more.”

The bigger divergence is the cache. Prompt caching is meant to be the cost-optimizer - Anthropic bills cache writes at 1.25x input and cache reads at 0.1x, so anything you can keep stable and re-use is cheap (Anthropic). OpenCode sends byte-identical prefixes across every request and ran the matched file-summarize task by writing 1,003 cache tokens across five requests. Claude Code wrote 53,839. The cache-write gap runs 54x on Sonnet and 52x on Fable 5; over a wider sample Systima measured the same task producing Claude Code cache writes at anywhere from 5.9x to 54x OpenCode’s volume. Mid-session re-writes inside Claude Code cost 43,342 tokens on one run and 36,899 on another - a “Re-writing a byte-identical cache prefix mid-session buys no code quality at all” footgun, per Systima.

Re-pinning to claude-fable-5 shrank Claude Code’s first-turn system prompt from 27,344 to 10,526 characters and its tool schemas from 99,778 to 82,283. The T1 floor gap between the two harnesses narrowed to about 3.3x; it never closed.

When You Stack Configs

Real projects do not run with zero config. Systima dropped a 72KB instruction file into the working directory: both harnesses picked up roughly 20,000 tokens per request on top of their baseline, lifting OpenCode’s T1 from 13,152 to 33,336 metered tokens and Claude Code’s from 39,005 to 59,243. A side observation: Claude Code 2.1.207 ignored AGENTS.md and honored only CLAUDE.md, so authors who document cross-harness conventions get a silent failure mode.

Adding five Model Context Protocol servers shifted both clients, but asymmetrically: Claude Code’s payload grew by about 4,900 tokens (tool count from 27 to 69); OpenCode’s meter grew by 6,967 tokens (tool count from 10 to 52). A BMAD-framework style project template of 8,405 characters (~2,100 tokens) was re-sent on every request and, in Systima’s session, was transmitted nine times across nine requests - a clean example of the kind of repetition prompt caching is supposed to remove but does not, here, because harnesses keep editing the prefix.

Subagents widen the gap further. Claude Code’s main session ran on a ~33,000-token baseline plus five subagent calls, each carrying a 3,554-character system prompt and 24 of the 27 tools. Total subagent burn came to 513,000 tokens, against 121,000 for a comparable direct run - roughly 4.2x. OpenCode’s subagents ship a 1,379-character system prompt and 5 tools.

In a real-world working configuration - eleven MCP servers, 179 tools, 277KB of schemas, 90,817 tokens of cold cache write on OpenCode; four MCP servers plus plugins, 118 tools, 311KB payload, about 75,000 tokens on Claude Code - Systima calls the configuration overhead roughly 12x OpenCode’s 7,000-token floor.

What This Means

Three practical readouts for anyone paying an AI bill or running one of these agents.

First, “the model is the cost” is no longer true. The harness is the cost. If your team’s coding-assistant subscription is the line item you watch, the variable you cannot see - the tokens the harness sends before the user prompt arrives - is now the largest single line in many sessions. A 4x to 12x multiplier on the underlying model price is the difference between “AI pays for itself” and “AI costs more than the developer it replaced.”

Second, prompt caching only saves money if the harness actually keeps the prefix stable. Cache reads are billed at one tenth of input (Anthropic); cache writes are billed at 1.25x input. A harness that rewrites its scaffolding mid-session pays the write premium on every change and never gets to the read. OpenCode, in Systima’s tests, kept prefixes byte-identical end to end. Claude Code re-wrote the same prefix mid-session multiple times. For long-running coding sessions that distinction is more expensive than the model choice.

Third, Anthropic is shipping an aggressively capable coding product that has not yet been tuned for token efficiency, while OpenCode is shipping a deliberately lean one that has not yet been tuned for capability breadth. Neither is a wrong choice for every team - Claude Code on the hardest problems, OpenCode for everything that runs in tight feedback loops - but treating them as interchangeable is what produces the surprise at the end of the month.

The Bottom Line

Pick the harness first, then pick the model. On a one-line prompt, Claude Code 2.1.207 is roughly 4.7x more expensive to send than OpenCode 1.17.18; on a real-world configuration the gap can stretch to about 12x; and on multi-step tasks the two harnesses occasionally cross over. None of these numbers change the fact that you are paying the harness tax on every API call.