Skip to main content

Claude Code Slow and Burning Quota? Diagnose Token Burn Before You Change Plans

A
11 min readClaude Code

If Claude Code is slow and burning quota, do not start with a bigger plan or a bug theory. First prove the active route, exact limit or error class, statusline fields, cache behavior, and context shape, then choose the smallest safe fix.

Claude Code Slow and Burning Quota? Diagnose Token Burn Before You Change Plans

Claude Code can feel slow while quota or token usage drops quickly because several different systems can produce the same symptom. The useful first move is to prove the active route, the exact limit or error class, and the context or cache shape before you upgrade, retry, or file a bug.

As of June 1, 2026, the safest diagnosis still starts with official surfaces: /status, /usage, /cost, the Claude Code status line, prompt-cache fields, and the exact error text. Community reports are useful because they show the pain is real, but they cannot tell you whether your current session is hitting subscription usage, API billing, provider rate limits, cache rebuilds, server overload, or a repeatable anomaly.

30-Second Branch Board: Slow + Burn

Use this table before changing your plan, rotating keys, clearing everything, or blaming a bug.

What you seeMost likely ownerProof to capture firstSmallest safe move
Claude Code is slow and shows 529 or overloaded_errorServer-side overload or capacityExact error, any request_id, status page state, active routeDo one bounded same-path retry; use the 529 guide if it repeats
Pro or Max usage drops fast with no API-key routeSubscription usage window or shared plan drain/status, Settings > Usage, five-hour/seven-day reset timingRun a fresh scoped control task before upgrading
Costs or limits do not match your subscription expectationAPI key, provider, or gateway route/status, ANTHROPIC_API_KEY, base URL, Console or provider usageFix the route before interpreting quota; use the billing route guide
One turn is slow and expensive after a pause, model switch, MCP change, /compact, or subagentCache rebuild, TTL expiry, or invalidated prefixcache_creation_input_tokens, cache_read_input_tokens, recent invalidatorsStabilize route/model/MCP and verify the next similar turn; use the cache cost guide
Every turn gets heavier with no exact errorContext bloat, MCP/tool output, old session, model/effort overheadcontext_window.current_usage, /context, /mcp, model, effortClear unrelated work, compact at a natural break, reduce tool output
A small controlled task still burns disproportionatelySuspicious repeatable spikeRoute, model, timestamps, statusline/cache fields, screenshots, control runCollect an evidence packet and escalate

That branch split matters because the wrong fix can waste more usage. A 529 branch wants status and bounded retry. A cache branch wants token-class proof. An API route branch wants billing-owner evidence. A context branch wants session hygiene. A repeatable anomaly wants a clean support packet, not a bigger subscription.

Prove the Active Route Before Reading Any Meter

The same Claude Code terminal can represent different contracts. If you are logged into a Pro or Max plan, subscription usage is the first interpretation. If ANTHROPIC_API_KEY is set, Claude Code can use API authentication instead of subscription authentication. If a provider, base URL, or gateway is active, the provider route may own the limits and billing proof.

Start here:

bash
claude /status /usage /cost

/status tells you the active account or route and is the first subscriber-facing check inside Claude Code. /usage is the official usage command to inspect current usage surfaces. /cost is useful session telemetry, especially for API-style runs, but it is not automatically the authoritative bill for a Pro or Max subscription.

Diagram showing which Claude Code monitor to trust for shared-plan usage, API billing, and suspicious spikes

If you use a status line, make it carry proof instead of decoration. Useful fields include the active model, effort level, context-window usage, current cost, five-hour and seven-day usage percentages, reset timing, and cache creation/read fields when available. A status line cannot solve the issue by itself, but it helps you notice the branch while the session is still active.

The discipline is simple: do not compare a subscription usage message, an API estimate, an SDK cost field, and a provider invoice as if they were one meter. Each belongs to the route that produced it.

Slow Server, 529, 429, or Plan Limit?

Slowness is not always quota burn. A slow request can be server overload, provider congestion, a 529, a temporary throttle, a heavy context turn, or a local branch that forces Claude to read too much before acting.

Read the exact wording before you change anything:

Exact signalMeaningFirst response
529 or overloaded_errorOverload branch, not your personal quota by itselfCheck status, retry same path once or twice with backoff, keep request evidence
429 or rate_limit_error on an API/provider routeAPI or provider rate-limit branchRead headers/provider logs, reduce concurrency, respect retry timing
Subscription session or weekly limit messagePlan usage branchCheck /status and Settings > Usage, then decide wait, usage credits, extra usage, or plan change
No exact error, just slow heavy turnsContext/cache/model/tool branchInspect context, cache fields, model, effort, MCP, and session age

This split prevents two common mistakes. First, a 529 does not mean you need to buy more usage. Second, a 429 on an API route does not prove your Pro or Max subscription is exhausted. If the code, route, and meter disagree with your expectation, solve the mismatch before optimizing prompts.

When Normal Context Growth Looks Like a Bug

Many ugly Claude Code sessions are expensive but ordinary. Claude Code is not just answering a chat message. It reads files, keeps conversation history, uses tools, inspects results, and often loops through edits or tests before it finishes. The visible prompt count can stay low while the carried context grows.

Normal high-burn patterns include:

  • one long session spanning several unrelated tasks
  • broad "look through the repo" prompts
  • repeated test or log output pasted into the main thread
  • many active MCP servers or noisy tool outputs
  • Opus or high-effort settings for routine edits
  • subagents or forks that create separate context and cache behavior
  • resuming an old session when a fresh task would be cheaper

The first control test is not "ask less." It is "make a comparable task smaller." Start a fresh session, keep the same route and model, scope the prompt to one concrete outcome, avoid unrelated files, and compare usage movement. If the fresh task burns much less, the original problem was probably context shape, not a hidden universal quota bug.

Comparison showing the difference between normal heavy-session drain and a suspicious Claude Code usage spike

If MCP is the likely source, use /context and /mcp to see what is active. Disable or defer servers that are not needed for the current task, and prefer CLI tools when a compact command is cheaper than loading a large tool surface. For a deeper cleanup path, use the Claude Code MCP context overload guide.

Cache Rebuild, TTL Expiry, or Cache Bug?

A slow expensive turn can also be a cache branch. Claude Code's prompt caching is prefix-based: if the reusable prefix still matches and has not expired, later turns can read cached input cheaply. If the prefix changes, expires, or belongs to a different route scope, Claude may need to process or write it again.

Do not diagnose cache from total tokens alone. Look for token class fields:

FieldWhat it tells you
cache_creation_input_tokensInput that was written into cache or rebuilt
cache_read_input_tokensInput that was read from an existing cache entry
full input tokensInput that was processed without the cheap read path
output tokensGenerated text or tool output; cache does not make output free

One cache write after a meaningful change can be expected. Repeated high cache creation with low cache reads on similar turns is stronger evidence that something is breaking reuse.

Common invalidators include model switches, effort changes, connecting or disconnecting MCP servers, denying an entire tool, running /compact, changing provider or route, long idle gaps, subagents, worktrees, or Claude Code version changes. If this is your main symptom, do not force the broader usage-limit article to solve it. Use the Claude Code cache miss token costs guide.

Run a Fresh Control Task Before You Escalate

The control task is the line between "this was a heavy session" and "this deserves escalation."

Keep it strict:

  1. Use the same active route you want to test.
  2. Use the same model and effort level.
  3. Start fresh or clear unrelated context.
  4. Ask for one small, comparable task.
  5. Capture /status, /usage, /cost, statusline fields, and cache fields before and after.
  6. Note whether the same slow/burn pattern repeats.

If the controlled task behaves normally, fix the workflow: shorter sessions, narrower prompts, fewer active tools, lower effort for routine work, and natural /compact or /clear boundaries. If the controlled task still burns a disproportionate amount, collect evidence while the state is fresh.

Smallest Fix Ladder

Decision board comparing wait, usage bundles, extra usage, upgrade, and API paths after Claude Code limits are reached

Choose the smallest fix that matches the branch:

BranchFirst fixDo not do first
529 or overloadWait briefly, retry same path, keep request evidenceUpgrade plan or rotate keys
Subscription usage drainStart fresh, scope task, check reset/usageTreat /cost alone as billing truth
API/provider 429Respect retry timing, reduce concurrency, inspect provider limitsAssume subscription quota is gone
Cache rebuildStabilize model/MCP/route, verify cache creation/read fieldsCompact blindly after every expensive turn
Context/MCP overheadClear unrelated work, reduce MCP/tool output, use CLI where cheaperAdd more tools to solve a tool-overhead problem
Model/effort overheadUse Sonnet/Haiku or lower effort for routine workKeep Opus/high effort as default for every task
Suspicious repeatable spikeBuild evidence packet and escalateBuy more headroom to hide the symptom

Plan changes belong late in the sequence. Upgrade when your normal repeatable workload needs more room. Buy extra usage or usage credits when overflow is temporary and understood. Switch to API billing when you want explicit token economics, spend ceilings, or automation throughput. Do not let one unexplained slow session decide the whole economics of your workflow.

Escalation Packet for Suspicious Spikes

When the spike repeats after controls, collect a packet that lets support, a teammate, or a GitHub issue compare the same route and context shape:

  • timestamp and timezone
  • Claude Code version
  • active route from /status
  • whether ANTHROPIC_API_KEY, base URL, provider, or gateway was active
  • model and effort level
  • exact error text, including 429, 529, or limit message
  • statusline rate/context fields before and after
  • cache_creation_input_tokens and cache_read_input_tokens when relevant
  • recent invalidators: model change, MCP change, /compact, subagent, route change, upgrade, long idle gap
  • screenshot or written note from Settings > Usage when on subscription usage
  • API Console/provider billing proof when on API/provider route
  • the fresh control task result

That packet is more useful than a dramatic complaint. "Same route, same model, fresh task, no MCP change, five-hour usage jumped from X to Y, cache creation stayed high, repeated twice" gives someone a real comparison. "Claude ate my quota" does not.

Frequently Asked Questions

Why is Claude Code slow and burning through quota?

The common branches are overload, subscription usage, API/provider rate limits, cache rebuilds, context bloat, MCP/tool overhead, model or effort choice, and repeatable anomalies. Start with route and exact error or meter proof before choosing a fix.

Should I trust /status, /usage, or /cost?

Use /status to confirm route and allocation context, /usage for the current usage surface, and /cost as session-level cost telemetry. /cost is useful, but it is not automatically the authoritative bill for every subscription case.

Is a slow expensive turn always a cache bug?

No. It can be a normal cache write, TTL expiry, changed prefix, model switch, MCP change, /compact, route change, or subagent behavior. Use cache_creation_input_tokens and cache_read_input_tokens before calling it a cache bug.

Is 529 the same as hitting my Claude Code quota?

No. 529 or overloaded_error is the overload branch. Check status and retry the same path with bounded backoff before changing quota or billing assumptions.

Is 429 the same as 529?

No. 429 is the rate-limit branch, usually API or provider rate limiting. 529 is overload. If you are on a subscription route and see a plan usage message, that is a third branch.

When should I upgrade to Max or buy more usage?

Upgrade or buy extra usage after you know the drain is normal for your repeatable workload. If the drain is suspicious, first run the fresh control task and collect proof. More headroom can hide a problem without explaining it.

What is the fastest usage-saving change?

For many users, the fastest change is a fresh, scoped session for unrelated work, plus fewer active MCP/tool surfaces and a cheaper model or effort level for routine edits. If cache fields show repeated creation, stabilize the route/model/MCP setup and verify the next similar turn.

#Claude Code#Usage Limits#Token Burn#Rate Limits#Troubleshooting
Share: