# Thinking on, cache always misses: freeze the budget
## Symptom
A conversation that cached fine stops caching when you enable extended thinking, or starts re-creating the cache every request (`cache_creation_input_tokens` nonzero, `cache_read_input_tokens` 0) after you tune the thinking budget.
## Confirm the cause
In manual mode, `budget_tokens` is rendered into the prompt. Changing it between requests, or changing it at all after the cache was written, invalidates the breakpoints the same way switching thinking modes does. The giveaway: the cache recreates on the first request after the budget change, even with identical messages.
## Fix
1. Pick a budget and hold it stable for the life of a cached conversation. Tune the budget in a separate uncached session first.
2. Same rule applies to adaptive thinking's effort level and to switching thinking modes mid-conversation: expect one invalidation on the switch, then stable hits.
3. Do not interleave budget experiments with cached production traffic.
## Verify
Two consecutive requests with identical messages and an identical budget: the second shows nonzero `cache_read_input_tokens`. Any budget change between them legitimately recreates the cache, so compare only like with like.