What cache hit rate is normal? AI coding clients, measured
In the week of 2026-09-29, mainstream AI coding clients reached 88%–97% cache hit rate in running conversations on Claude models, and Codex about 96% on GPT. Clients differ little; if yours is much lower, the cause is usually account switching, pauses over 5 minutes, or new conversations.
Week of 2026-09-29 – 2026-10-05 (UTC)
Key takeaways
- Normal on Claude models: 88%–97%, median in running conversations, 7 clients
- Codex on GPT: 96.0%, median of 38 users
- Most common cause of misses: account switching, 37% of Claude Code × Claude misses
- Published combinations: 10, client × model, each with 5+ qualifying users
What cache hit rate is normal for each client
The continuation hit rate only counts requests in the same conversation, on the same model and upstream account, sent within 5 minutes of the previous one finishing: what the client itself achieves. The all-requests rate also includes routing, expiry and new chats, closer to what your bill shows.
| Client × model | Continuation hit rate | All requests | Users |
|---|---|---|---|
| Codex × Claude | 97.1% (93.3%–99.4%) | 92.8% | 7 |
| Claude Code × Claude | 96.8% (94.9%–98.1%) | 90.9% | 120 |
| Codex × Doubao | 96.6% (95.0%–96.8%) | 95.3% | 16 |
| OpenCode × Claude | 96.5% (94.4%–97.5%) | 90.3% | 7 |
| Magpie × Claude | 96.5% (72.3%–98.4%) | 61.6% | 8 |
| Codex × GPT | 96.0% (93.1%–97.2%) | 93.6% | 38 |
| DeepSeek Harness × Claude | 95.6% (93.2%–96.8%) | 87.7% | 7 |
| pi × Claude | 95.1% (93.1%–98.5%) | 82.0% | 9 |
| Z Code × Claude | 88.3% (31.7%–92.0%) | 77.2% | 5 |
| pi × GPT | 68.3% (55.5%–78.5%) | 68.3% | 7 |
Still sampling
- Claude Code × DeepSeek: Sampling: 4 of 5 qualifying users (6 users this week)
- WorkBuddy × Claude: Sampling: 4 of 5 qualifying users (5 users this week)
- Z Code × GPT: Sampling: 4 of 5 qualifying users (4 users this week)
- Claude Code × GPT: Sampling: 3 of 5 qualifying users (8 users this week)
- Codex × DeepSeek: Sampling: 3 of 5 qualifying users (5 users this week)
- pi × DeepSeek: Sampling: 3 of 5 qualifying users (5 users this week)
- DeepSeek Harness × GPT: Sampling: 2 of 5 qualifying users (5 users this week)
- OpenCode × GPT: Sampling: 1 of 5 qualifying users (4 users this week)
Why is my cache hit rate low? Misses by cause, per client
- Claude Code × Claude: Routed to another upstream account or endpoint 37%, New content and prefix changes in a running conversation 22%, Parallel request (previous one still running) 15%
- Codex × GPT: New content and prefix changes in a running conversation 73%, New conversation, or idle for over an hour 11%, Routed to another upstream account or endpoint 10%
- Codex × Doubao: New content and prefix changes in a running conversation 69%, Parallel request (previous one still running) 10%, Routed to another upstream account or endpoint 10%
- pi × Claude: New content and prefix changes in a running conversation 37%, More than 5 minutes idle, cache expired 26%, Routed to another upstream account or endpoint 18%
Why hit rates drop behind relays
- Account switching: the cache belongs to the upstream account, so a turn sent to another account rewrites everything. The most common relay cause; direct connections never have it.
- Format conversion: translating between Anthropic and OpenAI formats can change the prefix or drop cache_control breakpoints.
- Claude Code before v2.1.181, on a custom base URL, put a per-request token in the attribution block at the top of the system prompt, which defeats gateways that cache on the request body; upgrade, or set CLAUDE_CODE_ATTRIBUTION_HEADER=0.
- Self-test: send two requests with the same prefix above the minimum cache length; the second one's cache reads should be close to the prefix length.
Wokey routes a conversation's later requests to the same upstream account whenever it can. From 2026-10-04 to 2026-10-10, ordinary Wokey users hit 92.8% on Claude Opus 5.5 over all requests, against 87.8% for OpenRouter overall.
Compare with OpenRouter cache hit rates · Live: Wokey public cache hit-rate API (last 7 days)
How we measure
- Real user requests through the Wokey gateway; every Monday at 05:00 UTC we compute the previous Monday-to-Sunday week.
- Clients are identified from the request User-Agent. Requests from SDKs, HTTP libraries and downstream relays, whose real client is unknown, are left out, as are enterprise accounts.
- A continuation turn has the same model and upstream account as the previous request of its conversation and starts within 5 minutes of it finishing. Each user's rate is cache reads ÷ input over those turns (input includes cache reads and writes); we report the median over users with at least 20 such turns in the week.
- A cell is published with at least 5 qualifying users; a change of more than 3 points from last week is checked by hand first.
- Known biases: Wokey users only; usage habits vary widely; the all-requests rate includes the gateway's own routing loss (the "routed to another upstream account" cause).
FAQ
What is a normal cache hit rate?
In running conversations on Claude models, the median user of mainstream clients is at 88%–97%; over all requests, including routing, expiry and new chats, it is usually a few points lower. Below 90%, the client itself is rarely the cause.
What do cache hit and cache miss mean?
A prompt cache keeps the unchanged start of a request: system prompt, tool definitions, earlier turns. When the next request starts the same way, that part is read from cache (a hit) and billed at a fraction of the input price; when it differs or the cache expired, it is processed in full (a miss) and usually written to cache again.
Is a higher cache hit rate better?
Higher is better. Cached input is billed at around 0.1× the input price (less on some newer models) and the first token arrives sooner; on Claude subscriptions, cache reads barely count toward your limit.
Why is my cache hit rate so low?
The usual causes are requests routed to another upstream account (common with relays), pauses over 5 minutes that let the cache expire, parallel requests such as subagents, model switches, and new conversations. Each client page lists them by measured share, with what to do.
Do clients differ much in cache hit rate?
Not much. On the same model, Claude Code, pi, OpenCode and others are within a few points in running conversations. The vendor matters more: OpenAI's cache needs the entire prefix to match, so Codex on GPT sits a few points below the Claude clients.
Why do relays have lower cache hit rates?
The cache belongs to the upstream account. A relay that spreads a conversation over several accounts, or changes the prefix while converting formats, rewrites the cache again and again. Test it by sending two requests with the same prefix and checking that the second reads about the prefix length from cache.
Does a low cache hit rate burn my Claude plan limit faster?
Yes. In our measurements of Claude plan limits, cache reads use almost none of the limit, while cache writes count about like uncached input. A cached context costs next to nothing; a missed one counts in full again. Per-plan limits are on the Claude usage limits page (/claude-usage-limits).
How is the cache hit rate calculated?
Cache-read tokens ÷ input tokens, where input includes uncached input, cache writes and cache reads. In the Anthropic format that is cache_read_input_tokens; in the OpenAI format, cached_tokens.
Why are Cline, Roo Code or Cursor not in the table?
A cell needs at least 5 users with enough continuation turns in the week. Cursor's own-key requests come from Cursor's servers, so the gateway cannot see the client; requests via SDKs and relays cannot be attributed either.