The previous post covered prompt caching cost mechanics. While researching it I bumped into a dramatic controversy β in March 2026 Anthropic silently changed Claude Code’s cache TTL from 1 hour back to 5 minutes, with community-measured monthly costs inflating 15β53%. Reddit and HN exploded.
But every public claim is somebody else’s billing statement or issue #46829. I wanted to know whether my own machine was affected. After scanning 95 days of native logs, the answer turned out richer than expected: I not only reproduced the March 6 regression precisely, but also discovered a second wave starting April 9 β five consecutive days, 4,840 API calls, sub-agents 100% downgraded to 5m, and no public report I can find.
The Evidence Is in ~/.claude/projects JSONL
Claude Code writes complete API interaction logs at:
| |
Each assistant response carries a usage.cache_creation object that directly tells you which TTL bucket this write went to:
| |
These fields come straight from Anthropic’s API, bypassing any client-side display logic. If the client wanted to lie, the server wouldn’t go along β this data is the truth from the server itself.
A Python script that scans every project, splits by date, and separates main agent from sub-agent:
| |
95-Day Timeline
Scanning my machine from January 9 through April 13, four phases with three transitions emerge:
| Phase | Window | Sub-agent | Main agent | Event |
|---|---|---|---|---|
| 1 | 1/9 ~ 2/5 | 100% 5m (28 days) | no data | 1h not yet rolled out |
| 2 | 2/6 | 79% 1h (transition starts) | β | The 2/1-announced 1h upgrade actually goes live |
| 3 | 2/7 ~ 3/5 | 100% 1h stable (28 days) | 100% 1h | 1h golden era |
| 4 | 3/6 ~ 4/8 | 1h β 5m mixed, swinging 6%β97% | 100% 1h | First regression (the one cnighswonger reported) |
| 5 | 4/9 ~ now | 100% 5m stable (5 days) | 100% 1h | Second regression (no public report) |
Key days around each transition:
| |
Decoding the Three Transitions
Transition 1: 2026-02-06 β 1h Rollout Goes Live
Anthropic announced “TTL upgraded from 5m to 1h” on 2/1. The actual rollout landed on 2/6. My logs show sub-agent flipping from 100% 5m to 79% 1h overnight, matching the announcement.
Transition 2: 2026-03-06 β First Silent Regression
This is the event cnighswonger reported in issue #46829, using the same methodology to scan 119,866 API calls β on March 6, sub-agent went from 100% 1h to 74%. I reproduced it precisely: 3/5 still 100% 1h, 3/6 dropped to 74%, 3/7 spiked to 9.8M tokens of 5m writes.
The following month (3/6β4/8), sub-agent oscillated wildly between 6% and 97% 1h share. The server’s TTL decision logic was unstable.
Anthropic employee Jarred Sumner defended in The Register’s coverage that “sub-agent 5m is cheaper for one-shot calls” β barely plausible for the mixed phase 4 behavior. But the next event breaks that defense.
Transition 3: 2026-04-09 β Second Silent Regression (Original Finding)
Starting 4/9, sub-agent 1h share dropped to zero. Five consecutive days, 100% 5m, across 4,840 API calls. No public report I can find.
Why this matters:
Not noise. 4,840 calls with zero 1h, while 4/8 was still 68% 1h. This is a sharp binary cutover, not gradual drift.
Not a quota-triggered downgrade. Anthropic’s docs say exceeding 5h quota triggers a server-enforced downgrade. But main agent is 100% 1h on the same days β quota mechanism would have downgraded both.
Not a client version issue. Same client, same day, two different TTL behaviors for main vs sub.
Not a workflow change. API call volume sits in the normal range (631β1268 per day), comparable to early April.
The only plausible explanation: starting 4/9, the server changed sub-agent default TTL from “mixed” to “hard-coded 5m”. And no changelog, no announcement, no issue mentions it β the same silent-rollout pattern as 3/6.
Why Main Agent Was Never Affected
Across all 95 days, main agent has zero 5m writes. Every TTL action Anthropic took only touched sub-agents:
| Claim | Did my data verify it |
|---|---|
| Reddit “Anthropic silently changed TTL on 3/6” | β Strongly verified (precise 3/6 transition) |
| Sumner “main agent unaffected” | β Verified (main 100% 1h across 95 days) |
| “Regression only hits sub-agent” | β Verified |
| Sumner “sub-agent 5m is a one-shot optimization” | β οΈ Partially refuted (4/9 100% 5m isn’t optimization, it’s forced downgrade) |
| New finding: 4/9 sub-agent 100% 5m | π Original |
Anyone Can Reproduce This
Save the script above as ~/bin/cc-ttl-timeline.py and run:
| |
If you see corresponding 3/6 and 4/9 transitions in your sub-agent β you’re a silent regression victim, please add a data point to issue #46829. If you don’t see them β the regression isn’t a 100% rollout and you’re in the control group.
Both outcomes have value. The point is this evidence chain doesn’t depend on anyone’s claims β the source is local JSONL written by Claude Code to your disk, and the cache_creation object structure is part of Anthropic’s public API spec. To fake this the server would have to lie in its own API responses.
Why Not Just Use cnighswonger’s npm Package
cnighswonger/claude-code-cache-fix is excellent, but it only sees data captured after install β its monitoring tools (status line, cost-report, quota-analysis) read ~/.claude/usage.jsonl, which only exists while the interceptor is loaded.
For historical audit, only Claude Code’s own ~/.claude/projects/*.jsonl works. That’s what this post uses.
The two are complementary:
| Scenario | Tool |
|---|---|
| Look back, find regression transition dates | The Python script in this post |
| Live TTL state visibility + fix client cache bugs | cnighswonger’s package |
| General token usage analysis | ccusage |
Closing
“Did Anthropic silently change cache TTL?” β everyone should scan their own data. Community rumors and Anthropic’s official statements aren’t enough. Only the JSONL on your disk doesn’t lie.
The result is valuable either way: see the regression β you’re a victim, contribute evidence; don’t see it β you’re in the control group, which is also evidence that the rollout isn’t 100%.
I’ll keep scanning every few days to see how long the 4/9 wave persists and whether it spreads to main agents. If your data shows similar 100% 5m sub-agent behavior post-4/9, please comment on issue #46829 or reach out.
References
- Cache TTL silently regressed from 1h to 5m β GitHub Issue #46829 β cnighswonger’s original evidence
- Followup: Anthropic quietly switched the default β r/ClaudeAI
- Anthropic: Claude quota drain not caused by cache tweaks β The Register
- Anthropic downgraded cache TTL on March 6th β Hacker News
- cnighswonger/claude-code-cache-fix β fixes client cache-busting bugs + live monitor
- Prompt Caching β Claude API Docs
- ccusage β Claude Code Usage CLI
