Cache TTL silently regressed from 1h to 5m around early March 2026, causing quota and cost inflation
Cache TTL appears to have silently regressed from 1h to 5m around early March 2026, causing significant quota and cost inflation
Summary
Analysis of raw Claude Code session JSONL files spanning Jan 11 – Apr 11, 2026 shows that Anthropic appears to have silently changed the prompt cache TTL default from 1 hour to 5 minutes sometime in early March 2026. Prior to this change, Claude Code was receiving 1-hour TTL cache writes — which we believe was the intended default. The reversion to 5-minute TTL has caused a 20–32% increase in cache creation costs and a measurable spike in quota consumption for subscription users who have never previously hit their limits.
This appears directly related to the behavior described in #45756.
---
Data
Session data extracted from ~/.claude/projects/ JSONL files across two machines (Linux workstation + Windows laptop, different accounts/sessions), totaling 119,866 API calls from Jan 11 – Apr 11, 2026. Each assistant message includes a usage.cache_creation.ephemeral_5m_input_tokens / ephemeral_1h_input_tokens breakdown that makes the TTL tier per-call observable. Having two independent machines strengthens the signal — both show the same behavioral shift at the same dates.
Phase breakdown
| Phase | Dates | TTL behavior | Evidence |
|-------|-------|--------------|----------|
| 1 | Jan 11 – Jan 31 | 5m ONLY | ephemeral_1h absent/zero — likely predates 1h tier availability in the API |
| 2 | Feb 1 – Mar 5 | 1h ONLY | ephemeral_5m = 0, ephemeral_1h > 0 across 33+ consecutive days on both machines — near-zero exceptions |
| 3 | Mar 6–7 | Transition | First 5m tokens re-appear, small volumes, 1h still present |
| 4 | Mar 8 – Apr 11 | 5m dominant | 5m tokens surge to majority; 1h becomes minority or disappears entirely |
We believe Phase 2 represents Anthropic's intended default behavior — 1h TTL was rolled out as the Claude Code standard around Feb 1 and held consistently for over a month across two independent machines on two different accounts. January's all-5m data most likely predates the 1h TTL tier being available in the API. The regression began around March 6–8, 2026.
No client-side changes were made between phases. The same Claude Code version and usage patterns were in place throughout. The TTL tier is set server-side by Anthropic.
Day-by-day TTL data showing the regression (combined, both machines)
Date | 5m-create | 1h-create | Behavior
------------|------------|------------|----------
2026-02-01 | 0.00M | 1.70M | 1h ONLY ← 1h default begins
2026-02-09 | 0.00M | 7.95M | 1h ONLY
2026-02-15 | 0.00M | 13.61M | 1h ONLY ← heaviest day, 100% 1h
2026-02-28 | 0.00M | 16.15M | 1h ONLY ← 16M tokens, still 100% 1h
2026-03-01 | 0.00M | 0.12M | 1h ONLY
2026-03-04 | 0.00M | 8.12M | 1h ONLY
2026-03-05 | 0.00M | 6.55M | 1h ONLY ← last clean 1h-only day
| | |
2026-03-06 | 0.29M | 0.22M | MIXED ← first 5m tokens reappear
2026-03-07 | 4.56M | 0.50M | MIXED ← 5m surging
2026-03-08 | 16.86M | 3.44M | MIXED ← 5m now dominant (83%)
2026-03-10 | 10.55M | 0.51M | MIXED
2026-03-15 | 19.47M | 1.84M | MIXED
2026-03-21 | 21.37M | 1.70M | MIXED ← 93% 5m
2026-03-22 | 13.48M | 2.85M | MIXED
The transition is visible to the day: March 6 is when 5m tokens first reappear after 33 days of clean 1h-only behavior. By March 8, 5m tokens outnumber 1h by 5:1. This is consistent with a server-side configuration change being rolled out gradually then completing around March 8.
---
Cost impact
Applying official Anthropic pricing (rates.json, updated 2026-04-09):
Combined dataset (119,866 API calls, two machines):
claude-sonnet-4-6 (cache_write_5m = $3.75/MTok, cache_write_1h = $6.00/MTok, cache_read = $0.30/MTok):
| Month | Calls | Actual cost | Cost with 1h TTL | Overpaid | % waste |
|-------|-------|-------------|-----------------|----------|---------|
| Jan 2026 | 2,639 | $78.99 | $37.54 | $41.45 | 52.5% |
| Feb 2026 | 27,220 | $1,120.43 | $1,108.11 | $12.32 | 1.1% ← nearly 0 on 1h |
| Mar 2026 | 68,264 | $2,776.11 | $2,057.01 | $719.09 | 25.9% |
| Apr 2026 | 21,743 | $1,193.01 | $1,016.78 | $176.23 | 14.8% |
| Total | 119,866 | $5,561.17 | $4,612.09 | $949.08 | 17.1% |
claude-opus-4-6 (cache_write_5m = $6.25/MTok, cache_write_1h = $10.00/MTok, cache_read = $0.50/MTok):
| Month | Calls | Actual cost | Cost with 1h TTL | Overpaid | % waste |
|-------|-------|-------------|-----------------|----------|---------|
| Jan 2026 | 2,639 | $131.65 | $62.57 | $69.08 | 52.5% |
| Feb 2026 | 27,220 | $1,867.38 | $1,846.85 | $20.53 | 1.1% ← nearly 0 on 1h |
| Mar 2026 | 68,264 | $4,626.84 | $3,428.36 | $1,198.49 | 25.9% |
| Apr 2026 | 21,743 | $1,988.35 | $1,694.64 | $293.71 | 14.8% |
| Total | 119,866 | $9,268.97 | $7,687.17 | $1,581.80 | 17.1% |
February — the month Anthropic was defaulting to 1h TTL — shows only 1.1% waste (trace 5m activity from one machine on one day). Every other month shows 15–53% overpayment from 5m cache re-creations. The cost difference is explained entirely by TTL tier, not by usage volume. The percentage waste is identical across model tiers (17.1%) because it is driven purely by the 5m/1h token split, not by per-token price.
Why 5m TTL is so expensive in practice
With 5m TTL, any pause in a session longer than 5 minutes causes the entire cached context to expire. On the next turn, Claude Code must re-upload that context as a fresh cache_creation at the write rate, rather than a cache_read at the read rate. The write rate is 12.5× more expensive than the read rate for Sonnet, and the same ratio holds for Opus.
For long coding sessions — which are the primary Claude Code use case — this creates a compounding penalty: the longer and more complex your session, the more context you have cached, and the more expensive each cache expiry becomes.
Over the 3-month period analyzed:
- 220M tokens were written to the 5m tier
- Those same tokens generated 5.7B cache reads — meaning they were actively being used
- Had those 220M tokens been on the 1h tier, re-accesses within the same hour would be reads (~$0.30–0.50/MTok) instead of re-creations (~$3.75–6.25/MTok)
---
Quota impact
Users on Pro/subscription plans are quota-limited, not just cost-limited. Cache creation tokens count toward quota at full rate; cache reads are significantly cheaper (the exact coefficient is under investigation in #45756). The silent reversion to 5m TTL in March is the most likely explanation for why subscription users began hitting their 5-hour quota limits for the first time — including the author of this issue, who had never hit quota limits before March 2026.
---
Hypothesis
The data strongly suggests that 1h TTL was the intended default for Claude Code and was in place as of early February 2026. Sometime between Feb 27 and Mar 8, 2026, Anthropic silently changed the default to 5m TTL — either intentionally as a cost-saving measure, or accidentally as an infrastructure regression.
Evidence supporting "1h was the intended default":
- Phase 2 (1h ONLY) shows zero 5m tokens across 14 separate active days spanning 3+ weeks — this is not noise or partial rollout, it is consistent deliberate behavior
- The February cost profile is the only month with 0% overpayment — it represents what users should have been paying all along
- The March reversion immediately produced the largest 5m-tier days in the entire dataset (30M tokens on Mar 22 alone), suggesting a sudden configuration flip rather than gradual drift
- Subscription users began hitting 5-hour quota limits for the first time in March — directly coinciding with the reversion
The most likely sequence of events:
- ~Feb 1 and prior: Anthropic defaulted to 1h TTL for Claude Code subscription users
- ~Mar 6: 5m tokens begin reappearing — gradual rollout of the change or partial infrastructure flip
- ~Mar 8: 5m TTL becomes dominant — the regression is fully in effect across both tested machines and accounts
- Mar 8+: Mixed behavior continues, suggesting either incomplete rollout, A/B testing, or regional infrastructure variance
The 33-day window of clean 1h-only behavior (Feb 1 – Mar 5) across two independent machines and two separate accounts makes this one of the strongest available signals that 1h TTL was Anthropic's deliberate default, not a fluke.
---
Request
- Confirm or deny whether Anthropic made a server-side TTL default change in early February 2026 and reverted it in early March 2026
- Clarify the intended TTL behavior for claude-code sessions — is 5m the intended default, or was 1h intended to be permanent?
- Consider restoring 1h TTL as the default for Claude Code sessions, or exposing it as a user-configurable option. The 5m TTL is disproportionately punishing for the long-session, high-context use case that defines Claude Code usage
- Disclose quota counting behavior for cache_read tokens (ref #45756) so users can make informed decisions about their usage patterns
---
Methodology
- Source: raw
~/.claude/projects/**/*.jsonlsession files (Claude Code stores per-message API responses including fullusageobjects) - Extraction: filtered for
type: "assistant"entries withmessage.usage.cache_creationfield - No external tools or proxies involved — this data comes directly from Claude Code's own session logs
- Analysis tool: cnighswonger/claude-code-cache-fix
quota-analysis --sourcemode (added to support this investigation) - Pricing: official Anthropic rates from
rates.json(updated 2026-04-09)
57 Comments
Yeah this change is terrible, need to compact every time I plan on stopping coding for 5 min. At least increase cache for max users.
This explains a lot about the quota burn rate increase people have been reporting. A 1h → 5min cache TTL change means cache_create operations happen 12x more frequently for the same session, and cache_create tokens cost significantly more than cache_read.
For anyone trying to work around this in the meantime: keeping sessions shorter and more focused (one task per session) reduces the impact since you hit cache invalidation less often. Also, structuring your CLAUDE.md to front-load the most critical context means the cache_create tokens are at least spent on high-value content.
Would be great to get official transparency on pricing-related infrastructure changes like this — silent downgrades erode trust, especially for teams budgeting based on observed costs.
Thanks for the writeup — the JSONL analysis and date pinpointing is good detective work. Let me walk through what's going on.
The March 6 change makes Claude Code cheaper, not more expensive. 1h TTL for every request could cost more, not less.
The cost tables assume every 5m-tier write would have become a cheap cache read under 1h TTL. That's only true when the cached content is re-accessed within the hour. A meaningful share of Claude Code's requests are one-shot calls where the cached context is used once and not revisited — the 1h TTL those would just be more expensive writes with no follow-up read to amortize them, because 1h writes cost more than 5m writes (roughly 2× base input vs. 1.25× — see the prompt caching docs). So "1h everywhere" isn't the cheaper baseline the tables frame it as; for the requests that are on 5m, it would be more expensive.
Prompt cache optimization is something the Claude Code team invests heavily in on an ongoing basis. Different request types benefit from different TTL tiers, and the client selects per request. The March 6 change you spotted is part of that ongoing optimization work — it wasn't a regression, on balance it lowers total cost for users across the request mix. The pre-March-6 behavior (what your Phase 2 captures) wasn't the intended steady state.
A bug fixed in v2.1.90
A client-side bug could cause sessions that have used up all their subscription quota at application start and started using overages to stay on 5m TTL until their session exits. This was fixed in v2.1.90.
Responses to your specific asks
Jarred what I'm getting from your convoluted post is the change is to reduce costs to Anthropic at the users' expense.
I mean how do you scale this otherwise?... some people gotta get real...
With a fair middle ground. 15 minutes would be a better balance.
This perfectly explains why it would take hours before I ran out of Claude on Pro to now running out in 20 minutes. My sessions are a lot longer than 5 minutes, the majority of the time due to my codebase.
Instead of posting a wall of AI slop you could have posted literally 2 lines
Independent data confirming per-request TTL selection
Adding data from a different user to corroborate @Jarred-Sumner's description of per-request TTL optimisation.
Setup: ~407k API turns, Nov 2025 – Apr 2026, two machines (UK and DE), both Max subscription and Vertex billing.
The phase timeline matches OP's, independently confirming the Mar 6 date. Main conversation turns and subagent turns shown separately — the split is where per-request selection becomes visible:
| Period | What happened | Max (main turns) | Max (subagent turns) | Vertex |
|--------|--------------|-------------------|----------------------|--------|
| Nov 25 – Jan 28 | Pre-1h | 100% 5m | 100% 5m | — |
| Jan 29 – Feb 6 | 1h rollout | ~58% | ~40% | — |
| Feb 7 – Mar 5 | Stable 1h | 0% | 14% | — |
| Mar 6 – Mar 31 | Per-request selection | ~20–45% | 99% | 100% |
| Apr 1 onwards | Post v2.1.90 bug fix | 0–6% | 100% | 100% |
_(Values are 5m share of
cache_creationtokens. UK/DE combined — no geographic difference for subagents. ~255k Max main turns, ~103k Max subagent turns, ~35k Vertex turns.)_The pattern is clear: subagents moved to 5m earlier and more completely than main turns, consistent with the client putting one-shot context on the cheaper write tier. Main conversation turns — where the cache will be re-read on the next turn — stayed on 1h. The Apr 1 improvement in main turns aligns with the v2.1.90 bug fix @Jarred-Sumner mentioned.
One addition — Vertex is always 5m. Across 35k Vertex-billed turns (UK and DE), every cache creation is
ephemeral_5m, zero exceptions. In 49 sessions where we hit the Vertex 200k context limit and billing flips to Max mid-session, the TTL tier changes instantly at the boundary. This is expected — the prompt caching docs note that 5m is the default API cache lifetime with 1h available at additional cost, and that automatic caching support for Vertex AI is "coming later."I mean people will use long session for work they actually care about, right?
<img width="400" height="300" alt="Image" src="https://github.com/user-attachments/assets/051e6c80-54e1-4cd9-af54-bb5c5d9143fb" />
I see you on every thread insulting these people who've spent a lot of time crafting a quality bug report. Please stop.
And no, two lines would not suffice. The data is important.
A lot of time typing "claude pls open an issue about this, add lots of detail"
Classic scammer tactics: first, lure users in by promising a huge deal, then scam the hell out of them.
How does say a Claude Pro user benefit from this "lower total cost" exactly?
User has already paid the monthly/annual subscription cost. The money is already in Anthropic's bank acocunt.
What we are seeing instead is we exhaust the session quota under an hour and have to wait 4 hours to resume our work. This effectively wipes out our day.
This means even if I stay up 24 hours to try and max my utilization, I get about 4 hours of real use out of my subscription.
If the caching TTL is being so drastically changed -- from 1 hour to 5 minutes is a humongous change -- and that change has this oversized impact on user experience to the point that Claude is effectively unusable for the majortity of the day....
... you ought to give your paying customers the control to toggle this the way they want. Let us experiment with setting it at 5 minutes, 15 mins, or 1 hour. With some experience we will figure out what works best for our way of working -- and will apply the right settings for ach session. Just like selecting a model, enabling extended thinking, or turning on plan mode. And I am sure community will find optimal ways of utilizing the cache TTLs that lower the cost for Anthropic as well in the long run.
PS: The drastic drop in user experience seen in mid March that I experienced first-hand is compelling me to add this voice. Otherwise, I am deeply respectful of the technical work being done by Anthropic team and wish you the very best -- want to see you succeed and make greater things. Cheers!
Jarred’s response was very informative and very transparent, but came at the wrong time. Instead of having this answer as a post-mortem, it should have been a pre-mortem.
As amazing as is your product, I sense the lack of transparency and strategical thinking from the product team.
You need to be clear about it - every change that touches consumption limits or has a probability to change how customers are billed - this must be announced well well in advance. The folks are getting tired of new features, while their regular workflows are starting to misbehave and their limits are getting smaller and smaller.
The only proper way now is to make your roadmap public. This is the best thing you can do for yourself. Not so much for the customers. They will learn to live with the TTLs, with the bugs, and in the end, they will vote with their wallets. But the optics are getting really bad really quickly now for Anthropic.
My usage is API usage and not a subscription, this is a good change, works out cheaper.
API was always 5 minutes, don't spread misinformation. This is a bad overall change.
@Jarred-Sumner How does this work out cheaper? People not paying for caching writes? How about stop charging people caching writes then as I am pretty sure OpenAI does not charge extra for caching, it's done automatically.
Not to mention, you are expecting people to be able to read/process/formulate and then type a reply to every conversation turn within 5 minutes or risk a 10x token use?
This is AFTER changing limits to burn them faster during peak hours?
How is any of this customer-friendly? We're risking our tokens burning TWENTY TIMES FASTER and you are out here saying it's cheaper? No bro, it's to make YOUR costs cheaper. Be honest about it at least.
Via CC? Since when is the caching different between subscription and API different via CC? If you're suffering from lack of 1h caching then it sounds like you're not even using CC enough to hit any subscription limits.
Literally check the documentation and the results of this exact thread? Are you being dense?
What? It's the exact opposite. 1h caching prevents you from resending every message as cache writes every 6 minutes.
Yeah it makes sense to me. I use the Claude dope daily and notice it slacking and switched over to Codex which can't write, but can code. Claude's ability to keep context definitely declined or feels 'throttled' or nerfed. Thanks for writing this. As someone that's been around the block I think they found it more profitable to sell the sizzle, than the steak. You can see the turn of events from the political pressure to the inflated claims on mythos, the cyber use case restrictions. They're not what they were and it's clear.
CC doesn't go to different places if you're using a subscription vs an API Key. 😆
@phillip-haydon Where "CC goes" is irrelevant. API keys are distinct from subscription keys. If these are distinct entities, then Anthropic's servers _obviously_ can and do treat the requests differently.
In pseudo code:
Here's the API docs on prompt caching from January: https://web.archive.org/web/20260124153111/https://platform.claude.com/docs/en/build-with-claude/prompt-caching
So I feel the need to reiterate what @hi-fox said:
If you can't wrap your head around this, I'd recommend spending more time sharpening your programming skills and spending less time in Claude Code.
> The March 6 change makes Claude Code cheaper, not more expensive. 1h TTL for every request could cost more, not less.
Making these changes silently costs users MASSIVELY because they have to figure out if they're doing something wrong or if they were rug pulled.
When they do finally do something wrong, they have to again check if they were rug pulled or if it was there error because they no longer trust you not to secretly rug pull.
Do NOT do that. The real bug here was rug pulling your users without sufficient notification! It leads to massive massive costs in wasted effort.
Thanks for the detailed reply.
One gap still needs a direct answer. And I need to correct some of my original math.
The original post treated all 275M 5m-tier tokens as waste. That was an error. When you separate by session type, the picture changes.
| Session type | Calls | 5m tokens | 1h tokens | Read:Write | Share of all calls |
|-------------|-------|-----------|-----------|------------|-------------------|
| Main session | 46,376 | 35.3M | 165.1M | 21.8:1 | 38.7% |
| Subagent | 73,490 | 239.8M | 134.5M | 9.1:1 | 61.3% |
87% of all 5m tokens come from subagent sessions. Subagents have a 1.4-second median inter-turn gap. Their caches almost never expire under 5m. For them, a 5m write at $3.75/MTok is genuinely cheaper than a 1h write at $6.00/MTok. The 1h tier buys them nothing.
Corrected numbers:
| | Tokens | Impact |
|---|--------|--------|
| Subagent 5m savings | 239.8M | -$539.63 (saved vs 1h writes) |
| Main session 5m waste | 35.3M | +$121.64 (upper bound, assuming all were expired rewrites) |
| Net | | Users saved ~$418 |
The original $949 figure was wrong. Just wanted to own up to that and put that on the record.
API users who pay per token came out ahead from the March 6 change. That part of the response was correct, and it missed it because I didn't separate session types. Fair enough.
But the cost correction does not resolve the subscription problem.
I pay $200 per month for Max 20x. A lower API bill does not help me. My limit is quota, not token price.
If this change helps API users, good. Subscription users should see a benefit too, or at least no loss. That is not what happened in March.
I have been a subscriber for over six months. I had never hit the 5-hour limit. I had never hit the weekly limit. March was the first month where both started happening.
Many Max users report the same pattern. Same plan. Less usable time per window. I am not using openclaw or anything like that I am using https://github.com/gsd-build/get-shit-done, could the march 6 changes be negatively effecting that type of workflow?
So the core question is simple. If the routing change was a net win, why did subscription capacity drop at the same time?
If I am understanding correctly, that sequence does not fit my account.
So this bug may explain some reports, but it does not explain mine.
I also took a look at the CHANGELOG for v2.1.90 but see no mention of that bug. Is this the first time it's being reported? I do see
The data has been slowly building up and points to a very likely economic and rational conclusion : Anthropic is effectively constructively terminating its Max subscription plans with the eventual goal of an enterprise-first (or only) focus, planning to offer only (1) massively higher tiered (i.e., expensive) subscription plans or (2) dramatically stricter plan limits going forward.
The term "constructive termination" is being used in this case because Anthropic appears willing to slowly attrit and lose customers to churn through silent degradation rather than transparently communicate plan, limit, model changes to its customers.
The likely rational economic conclusion is that this is in an attempt to salvage subscription ARR for as long as possible, while making changes that reduce negative margins, ramp up enterprise business, and slow churn through publicly ambiguous responsibility and technical explanations for regressions.
We are likely heading towards an era where liberal access to frontier models will be restricted to large enterprises and impose dramatic cost barriers to usage by individuals and smaller teams. Without very clear and open communication from Anthropic that makes firm commitments around future expectations for individuals and teams using subscriptions to plan around, users should base their future plans around the expectation of having less access to these models than today.
For max subscribers who are running into this, having the telemetry disabled may be the cause: https://github.com/anthropics/claude-code/issues/45381
With the amount of issues we've all been putting up with while paying full price, all while OpenAI has been resetting limits for everyone; it's time we get compensated.
Who should have posted 2 lines? Jarred? OP? both?
Seems like an easy way to implicitly tax OAuth cheaters.
Don't see the connection. More like "allow for surveillance or we'll make you"
It's not that. It's that through telemetry Anthropic is able to make a better guess are you running a different harness than CC or not.
But running a different harness is always against the ToS, so I can't blame them.
👋 1h prompt cache is nuanced actually. It costs more for cache writes, and less for cache reads. Whether you benefit from cheaper cache reads depends on your usage pattern -- context window size, whether the query is the main agent or subagent, etc.
We have been testing a number of heuristics to give subscribers better prompt cache hit rates, which means lower token usage and lower latency, when it works. But this effect is far from uniform due to the nuance above. Say you use 1h cache for an agent, but only used the agent to make a single query -- in this case the 1h cache would be wasted and you'd be overcharged.
At this point we have rolled out 1h prompt cache by default in a number of places for subscribers to optimize cache duration based on real usage patterns, but we actually keep it at 5m for many queries also (eg. subagents, which are rarely resumed so you'd be paying for them even though they do not benefit from 1h). We also are not defaulting API customers to 1h yet -- this needs more testing to make sure it's a net improvement on average.
Separately, when we do this kind of experimentation, we use experiment gates that are cached client-side. When you turn off telemetry we also disable experiment gates -- we do not call home when telemetry is off -- so Claude reads the default value, which is 5m. We will soon be changing the client side default to 1h for a few queries, since we now feel good that it is a small token savings on average for those queries. We will also give you env vars to force 1h and 5m.
In any case, the token savings is nowhere near 12x unfortunately. It is a small win though, that we have been in the process of rolling out to everyone. Hope the explanation helps.
More here: https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing
@bcherny
how do api-key users do that? (opt-in?) currently seems impossible?
also https://github.com/cnighswonger/claude-code-cache-fix/issues/14#issuecomment-4237401358 + https://news.ycombinator.com/item?id=47743508
^^ given the two issues above, - combined with the "reordering bug" that was fixed after .92 or whatever
-> i do not think that you currently have any data to make such calls
Woo-hoo! Appreciate taking this suggestion.
Would it be possible to control it per session (similar to how model selection or plan mode or enabling extended thinking works currently)
Also -- could the granularity available be more diverse instead of just a binary choice? Say if I am sitting down for a marathon crtical work session I might want to try 2 hour cache write and willing to take the cost? OR try if 20m is a sweet-spot for my style of work?
Cheers!
Just be sure to split the force flag between main and sub agents. This is a good approach here: https://github.com/cnighswonger/claude-code-cache-fix/issues/14#issue-4255749204 And will make this issue obsolete.
Small user story anecdote: I do ML research and many of my CC toolcalls run for >10 minutes when doing things like downloading checkpoints, loading them to run test forward passes/benchmarks, etc. Additionally, it isn't unusual for subagent calls exploring large codebases to take >5 minutes. Finally, since I'm juggling many >300k sessions across repos/test nodes, >5 minute idle gaps are very frequent.
If you want to check whether your specific Claude Code version compounds the TTL issue with cache_creation inflation (#46917), enter your version at this checker — it shows which known issues affect you and recommended fixes.
For checking your actual cache state, paste your
/costoutput into Cache Health Checker — it flags TTL breakage (creation > read consistently), inflation, and calculates your waste ratio. No sign-up, runs client-side.Hi, I also encounter this issue and I'm experimenting with my solution: just ping claude code to keep cache alive. Welcome anyone give me some advice on this project: https://github.com/yujiachen-y/claude-code-cache-keepalive
you are wasting tokens doing this
sounds like a feature.
just to add clarity that Boris is saying the savings for this caching issue are not extensive and yet people are still hitting limits rapidly - meaning in addition to the caching change, there must have been other changes not yet documented to lower everyone's limits under the radar. In addition to the peak hours change and the model feeling drastically more stupid during most of the working day
The "average savings" framing hides a structural problem. Let's break down who actually wins and loses at 5m TTL:
| Session gap | 1h TTL cost | 5m TTL cost | Winner |
|---|---|---|---|
| < 5 min | 1× write (2×) + reads | 1× write (1.25×) + reads | 5m |
| 5–60 min | 1× write (2×) + reads | Rewrite every turn (1.25× × N) | 1h, by a lot |
| > 1 hour | Rewrite (2×) | Rewrite (1.25×) | 5m |
The middle row is exactly where real human coding sessions live — thinking, code review, context switching, meetings, long-running tool calls. The "1h everywhere would cost more" argument only holds if this middle band is small in the request mix. It's not small for main-agent turns; it's only small if you average in subagents, which are architecturally one-shot (1.4s median inter-turn gap per @spm1001's data). Lumping those together makes the statistics look favorable while individual users in the middle band pay more.
Two things the current narrative doesn't address
1. Why are "one-shot" requests on a frontier model in the first place?
If a query is genuinely one-shot and simple enough that 5m TTL suffices, it probably doesn't need Opus/Sonnet 4.6 with full
CLAUDE.mdcontext — it needs Haiku with a trimmed prompt. Using a large model + short cache to "save cache cost" is optimizing the wrong axis.2. Cache cost vs. compute cost are not the same thing
A cache miss doesn't save GPU time — it forces a full prefill of the same context again. Shorter TTL in the 5–60 min band means the same prompt gets prefilled multiple times per session. That's a transfer from "cache line-item" to "GPU-hour," not a real saving. It also inflates TTFT and tightens peak-hour capacity, which lines up with the recent 5am–11am PT burn-rate and throttling complaints.
The honest summary
That's not a uniform improvement — it's a redistribution.
What would actually resolve this
Appreciate the transparency from @Jarred-Sumner and @bcherny — but the response so far addresses the token-price math while sidestepping the quota-capacity question, which is what subscribers actually care about.
Yet another issue closed without resolution by Anthropic.
You really wonder why they're closing these without reading if every other person posts an auto-generated wall of slop?
Let's see an example of one of your epic Issue posts
Now I see: why I got 200$ credit, then I burned in 5 minutes again lol i was wondering if I was a non-profit for Anthropic.
Data is data. It does not matter how it was written or what appearance it takes.
Nice try, but I don't think the math works out, especially on Max.
The ping isn't free. To get a cache hit, the request still has to send the whole cached prefix, so every ping is a full cache-read (0.1x) on the prefix plus the ping tokens plus whatever comes back. And if you're on a subscription, those reads count against your 5h and weekly quotas. So you're spending real coding capacity to keep a cache warm that you might not even use.
I don't like the stealth nerf.
He's literally a GitHub troll. Ignore him. I never thought people would waste their time doing that, but apparently they exist.
The shorter TTL makes cache misses more expensive, but most of the cost comes from how much payload gets sent on each cache-creation call. Smaller sessions = fewer cache_creation tokens per miss. Cozempic's guard daemon continuously prunes stale tool results, old images, and metadata between turns so each API call sends significantly less, reducing the cost impact of these TTL changes.
pipx install cozempic && cozempic guard— https://github.com/anthropics/claude-code/issues/46829It's possible to determine whether you were affected, and with which versions, by running:
grep -h -r -E 'ephemeral_.*_input_tokens' ~/.claude | jq 'select(.isSidechain == false and (.message.model | startswith("claude-haiku") | not) and .message.usage.cache_creation.ephemeral_5m_input_tokens > 0) | .timestamp + "," + .version' 2>/dev/null | sed 's/T.*,/,/'| sort | uniq -cMy output shows:
I have provided Anthropic with a redacted copy of my jsonl transcripts for my sessions exhibiting this issue.
Max 20x subscriber ($200/month). Never hit the 5-hour session limit in 2+ months of daily heavy use — until this week.
My typical workflow: Claude Code with Opus 4.6 (1M context), 2-4 subagents per session (builders + auditors), system programming (Next.js web-admin, Python backend). I regularly run sessions at 60-90% context without hitting token limits.
This week I hit the 5-hour session limit on what I consider a light day. My weekly usage counter also reset unexpectedly (Thursday → Sunday, likely the April 23 compensation reset).
The 5-minute cache TTL is the likely cause: every time I wait for a subagent to complete (5-10 min), the main session's cache expires. The next turn recreates the full context at write price instead of read price. With 12+ subagent dispatches per session, that's 12+ full cache recreations.
Environment: Claude Code v2.1.121, Max 20x plan, Opus 4.6 (1M context), Linux
This is unsustainable for power users. A 5-minute TTL with 1M context windows makes heavy workflows prohibitively expensive, even on the highest tier plan.
@sunkwolf I think this article sums up what is going on. I've lowered my Anthropic sub to the $100 and got the $100 OpenAI sub.
Might just ditch the Anthropic subscription all together and use it through my GitHub Copilot subscription until they get their shit together.
https://medium.com/ai-software-engineer/anthropics-new-tokenizer-is-quietly-hiking-your-claude-costs-by-47-i-fixed-it-91c69ff0017b
Still waiting on that update...
Supplemental Observation: Consistent Tool "Cold-Starts" and the "Msg 0" Cache Escape (v2.1.126)
I’ve been tracking the regression data in this thread and have a supplemental observation regarding why quota consumption is exceeding even the 5m TTL projections.
In auditing raw request bodies for v2.1.126, I’ve identified two architectural behaviors that effectively bypass the prefix cache:
cache_controlheaders. In the native CLI, these blocks are treated as "cold" on every turn. This forces a full input charge against the user's quota regardless of the TTL window, as the model cannot "warm start" the tool definitions.Msg 0(the stable anchor) remains uncached in the native binary, I've observed that the/compactcommand triggers a structural migration. Static project metadata and tool registrations are shifted away from the start of the stream into later indices (e.g.,Msg 1orMsg 3). By "burying" these static blocks behind dynamic turn history and system-reminder scaffolding, the CLI ensures a prefix hash mismatch for all subsequent messages in that session.Technical Validation:
I’ve been using a minimalist Node.js proxy Pino to verify these findings. Interestingly, attempts to forcefully inject
cache_controlintoMsg 0via proxy appear to trigger further non-deterministic reshuffling of these blocks into later message indices. By surgically re-anchoring these migrated blocks back to a stabilizedMsg 0and restoring the missing headers, I was able to verify that the overhead is almost entirely avoidable.This suggests that the primary driver of the rapid 'quota vanish' is an architectural shift—specifically the lack of caching for both the tool catalog and the Msg 0 anchor, alongside a move away from stable, deterministic context placement.
here is the response I received from Anthropic earlier this week regarding the KIs that were fixed in v2.1.108 and earlier:
I have received today a further response from Anthropic that explains the remainder of the symptoms I saw post v2.1.108, on v2.1.114.
the 1H environment variable was also being ignored in that state, but now is being respected. https://github.com/anthropics/claude-code/issues/49139
I hope this is helpful to all who have been struggling with this issue.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.