Claude Code 529 Overloaded: What It Retries For You, and What It Won't
A 529 isn't your usage limit and doesn't touch your quota. Claude Code already retried ten times before it told you. The useful question is which failures it retries automatically, which it deliberately doesn't, and the one environment variable that stops an unattended run dying on a transient capacity blip.
Two things worth knowing before you do anything about a 529.
It is not your usage limit, and it does not count against your quota. It means the API is at capacity across all users right now. Nothing is wrong with your account, your key, or your request.
It has already been retried. By the time an overloaded error reaches you, Claude Code has tried up to ten times with exponential backoff:
API Error: Repeated 529 Overloaded errors. The API is at capacity — this is usually
temporary. Try again in a moment. If it persists, check https://status.claude.com.So hammering the same prompt achieves nothing except joining the queue behind everyone else doing the same thing. The useful moves are different.
Switch model before you retry
Capacity is tracked per model. A 529 on one model doesn't mean the others are saturated, so /model is a more productive response than retrying:
/modelThis is the single highest-value thing in this post if you're blocked right now. Most people retry the same model repeatedly because the error doesn't mention that capacity is per-model.
What gets retried automatically, and what doesn't
Transient failures are retried up to 10 times with exponential backoff before anything surfaces. Knowing the boundary tells you whether waiting will help.
Retried for you:
- Server errors, overloaded responses and timeouts that arrive before any response has streamed
- Connections dropped before Claude completes any part of its response, thinking included
- Stalled streams where nothing has arrived yet
- Temporary 429 throttles
- Requests exceeding the context limit — retried with a reduced
max_tokens
Deliberately not retried:
- TLS certificate validation failures — reported on the first attempt so you can fix them immediately rather than watching ten silent retries
- Mid-stream failures after Claude has started text or tool calls — the completed work is kept instead
- Failures arriving after the response finished — the response is kept and the turn ends normally
- Policy check denials — the denied request is never re-sent to the same model or a fallback
- Spend-limit 429s — a gateway marks these
x-should-retry: false, and they aren't capacity problems
That mid-stream rule is the one people misread as a bug. If Claude got halfway through and the connection died, you'll see something like:
API Error: Connection lost mid-response. The response above may be incomplete.The completed work was kept rather than discarded to start over. Reply continue and it resumes from the last completed block. In non-interactive mode with -p, it does that automatically up to three times before giving up.
While it is retrying, the spinner tells you where you are:
Retrying in Ns · attempt x/yAnd if nothing arrives for 20 seconds while a request is pending, you get a network hint rather than silence. (During advisor review that banner waits 90 seconds instead, because advisors legitimately take longer.)
The flag that keeps unattended runs alive
This is the part missing from most 529 write-ups, and it's the direct answer to issue #60577 — transient capacity errors aborting long-running tasks with no auto-recovery.
If you run unattended — scheduled jobs, CI, long agentic tasks you walk away from — ten retries is not enough, because a capacity blip can outlast the backoff window. Set:
CLAUDE_CODE_RETRY_WATCHDOG=1In unattended sessions that retries 429 and 529 capacity errors indefinitely, and raises the retry count for other transient errors to 300, which is roughly three hours of backoff. It also removes the CLAUDE_CODE_MAX_RETRIES cap entirely.
The related knobs:
| Variable | Default | What it does |
|---|---|---|
CLAUDE_CODE_MAX_RETRIES | 10 | Retry attempts. Capped at 15 as of v2.1.186. |
CLAUDE_CODE_RETRY_WATCHDOG | unset | Set to 1 for indefinite capacity retries in unattended runs. |
API_TIMEOUT_MS | 600000 | Per-request timeout — 10 minutes. |
Don't set the watchdog for interactive work. Sitting through three hours of backoff at your keyboard is worse than seeing the overloaded error and switching model.
Request timed out is a different problem
Ten minutes is the default per-request timeout. If you're hitting it, the cause is usually one of three things, and only one is fixed by raising the limit:
- The model is generating a very large response — break the work into smaller prompts instead
- A slow network or proxy — this is the case where raising
API_TIMEOUT_MSis the right call - High load — retry, or switch model
Reaching for API_TIMEOUT_MS when the real cause is an oversized task just means waiting longer for the same failure.
Session limits look similar and aren't
A capacity error and a usage limit produce different messages, and conflating them sends you down the wrong path:
You've hit your session limit · resets 3:45pm
You've hit your weekly limit · resets Mon 12:00am
You've hit your Opus limit · resets 3:45pmSession and weekly limits are shared across all models, so /model won't rescue you there. But Opus limit and Sonnet limit apply only to that model family — switching does work for those. Usage counts against session and weekly allowances simultaneously.
Since v2.1.234, an interactive session on a claude.ai subscription can wait it out instead:
Usage limit reached · continuing automatically at 3:45pm · esc to cancelPress Esc at an empty prompt to cancel the wait. You can toggle it under /config → Continue automatically at usage limit, and separately in the Desktop app's Code tab — they're independent settings.
If limits are what you keep hitting rather than capacity, the causes are worth understanding separately; I went through them in why Claude Code burns tokens while you're not even using it.
A quick triage order
- Read the message. Capacity (
529), rate limit (429), timeout and usage limit are four different problems. - If it's a 529 overloaded error —
/modelfirst, don't retry the same one. - Check status.claude.com for an active incident before debugging your own setup.
- If it happened mid-response, reply
continuerather than re-running the whole task. - For unattended runs, set
CLAUDE_CODE_RETRY_WATCHDOG=1so a blip doesn't kill a three-hour job. - Run
/statusto confirm which credential is actually active — a 429 often traces to the wrong one.
Key takeaways
- A 529 overloaded error is a capacity error, not a usage limit, and does not count against your quota.
- Capacity is tracked per model, so /model is more likely to unblock you than retrying the same one.
- An overloaded error means it already retried up to 10 times with exponential backoff before telling you.
- Mid-stream failures are deliberately not retried — completed work is kept, and 'continue' resumes from the last block.
- CLAUDE_CODE_RETRY_WATCHDOG=1 retries capacity errors indefinitely in unattended runs. Don't use it interactively.
Frequently asked questions
Does a 529 error use up my usage limit?
No. A 529 is a capacity error, not a usage limit, and it does not count against your quota. It means the API is at capacity across all users at that moment. It is also not an account problem or a bad request.
Should I keep hitting retry when I see a 529?
Not manually. Claude Code has already retried several times with exponential backoff before it shows you that message, so an immediate manual retry just queues behind everyone else doing the same thing. Because capacity is tracked per model, switching with /model is more likely to work than retrying the same one.
How do I stop an unattended Claude Code run dying on a transient 529?
Set CLAUDE_CODE_RETRY_WATCHDOG to 1. In unattended sessions that retries 429 and 529 capacity errors indefinitely, and raises the retry count for other transient errors to 300, which works out to roughly three hours of backoff. It also removes the CLAUDE_CODE_MAX_RETRIES cap.
Why did Claude Code stop mid-response instead of retrying?
That is deliberate. Once Claude has completed a block of text or a tool call, Claude Code keeps the completed work rather than throwing it away to retry. Reply with continue and it picks up from the last completed block. In non-interactive mode with -p it does this automatically, up to three times.
The pattern worth internalising: most of these errors are already being handled for you, and the ones that aren't are unhandled on purpose — because retrying would throw away work or re-send something that was denied. Knowing which bucket you're in turns a vague "the API is broken" into a two-second decision.
If the symptom is the CLI feeling sluggish rather than erroring, that's a separate class of problem — Claude Code slow, hanging, or eating memory covers the silent ones, including a search failure that reports itself as healthy. Managing what these tools carry into a session is the problem ContextZero came out of.
References
- Error reference — Claude Code docscode.claude.com · accessed 2026-08-27
- Environment variables — Claude Code docscode.claude.com · accessed 2026-08-27
- Transient 529 Overloaded errors abort long-running tasks with no auto-recovery (issue #60577)github.com · accessed 2026-08-27
Last reviewed August 27, 2026
Tahir Nazir
Senior AI Engineer & Full-Stack Lead
5+ years shipping AI-powered products — RAG pipelines, agentic workflows, and MCP tooling. Top Rated on Upwork with a 100% job success score.
More about Tahir →Keep reading
New posts land here first. Follow along by RSS, or get in touch if you are building something similar.
Related articles
Why Claude Code Burns Tokens While You're Not Even Using It
Your usage climbs during a long session even when you barely type. The reasons are specific and mostly invisible: every request carries the whole conversation, your prompt cache quietly expires, and scheduled tasks, cross-session messages and idle teammates each resend your full context.TroubleshootingAI Engineering10 min readClaude Code Slow, Hanging, or Eating Memory? Start With the Silent Failures
High CPU, frozen commands and missing search results usually trace to a handful of specific causes — a thrashing auto-compact loop, a bundled ripgrep that won't run, or WSL quietly returning fewer matches while claude doctor reports everything as OK.TroubleshootingAI Engineering8 min readClaude Code Won't Start on Windows? Match the Error, Not the Guide
Raw mode is not supported, 'claude' is not recognized, 32-bit Windows, Exec format error on WSL1 — five different Windows startup failures that get treated as one problem. Each has a distinct cause and a distinct fix, and four of them aren't install failures at all.TroubleshootingAI Engineering8 min read