Skip to content

Claude Code — ~60s "Request timed out" regression in 2.1.183-2.1.185 (client-side; network_down=false, rate_limited=false) #70008

Description

@Alamshkh0

Summary

Starting with Claude Code 2.1.183, long / heavy Opus turns fail with Request timed out at a flat ~60–95s per-attempt ceiling, then death-spiral through retries (1 → 10/10) and the session dies producing zero output. Builds ≤ 2.1.178 show 0% of this; 2.1.183 and 2.1.185 show ~96–97%. It is not network and not rate limiting (network_down=false, rate_limited=false on every affected event). API_TIMEOUT_MS=600000 does not help.

Filed by an enterprise user running heavy parallel sub-agent workloads.

Environment

  • Claude Code via VS Code extension (entrypoint claude-vscode), native installer
  • macOS 26.5.1 (Darwin 25.5.0), Apple Silicon
  • Model: claude-opus-4-8
  • Single native install (~/.local/bin/claude); no npm-global / Homebrew / bundled copy (no install conflict)
  • autoUpdates: false — version is operator-pinned, not auto-bumped
  • Observation window: 2026-05-29 → 2026-06-22 (UTC); failures concentrated 2026-06-20 / 06-21

Symptom

API Error: Request timed out repeated at a flat ~60s+ gap until the retry cap (10/10), after which the session terminates with no assistant output. Worst on the heaviest, highest-value Opus turns.

Evidence (local ledger over all session transcripts)

  • 1,446 api_error events; 662 (46%) were "Request timed out"; 0 rate-limited.
  • 24 sessions hit the 10/10 retry cap and died. On 2.1.183 / 2.1.185 deaths: median retry gap ~60–96s, network_down=false on every one.
  • Of all timeout events on 2.1.183 / 2.1.185: 502 / 502 had network_down=false AND rate_limited=false.

Timeout share by client version

Claude Code version "Request timed out" share network_down
≤ 2.1.178 (May – Jun 17) 0% —
2.1.179 (Jun 17–20) 25% 25%
2.1.183 (Jun 20–21) 97% (435 / 447) 0%
2.1.185 (Jun 21) 96% (67 / 70) 0%

Decisive controlled test — same day (2026-06-20), same machine, same (large) context, same workload, split only by client version:

  • 2.1.179 → 0 timeouts / 10 requests (0%)
  • 2.1.183 → 401 timeouts / 413 requests (97%)

Same context, opposite outcome ⇒ context size is not the driver — the client version is. 2.1.185 did not fix it.

Sample dead sessions (UTC)

last event session retries median retry gap network_down version
2026-06-21T17:07:03Z a1e45a09 10/10 69.3s no 2.1.185
2026-06-21T13:10:12Z e4588426 10/10 77.8s no 2.1.185
2026-06-20T20:26:00Z aab7fd02 10/10 77.7s no 2.1.183
2026-06-20T18:35:21Z 7ed88c80 10/10 68.2s no 2.1.183

Note on request IDs: the client appears to abandon the request at ~60s before the server responds, so these timeouts produce no server request-id — itself consistent with a client-side regression.

What we tried

  • API_TIMEOUT_MS=600000 — ineffective (set and live in-process; the ~60s ceiling persisted).
  • Downgrade to 2.1.142 — stops the timeouts, but it's a ~6-week-old build.

Impact

Dozens of lost autonomous worker dispatches across 2026-06-20 / 06-21; zero-output failures concentrated on the largest, highest-value Opus turns.

Ask

Please confirm the ~60s client-side request-timeout regression in 2.1.183–2.1.185 and ship a fixed build > 2.1.185, so heavy Opus workloads can stay current without the timeout failures.

A full ledger (LEDGER.md) and per-event data (events.jsonl, version / network_down / rate_limited / retry attempt / timestamps) are available on request.

Activity

  1. cnighswonger commented on Jun 22, 2026

    @cnighswonger

    This is one of the cleanest regression reports I've seen — controlled same-day, same-machine, same-context split by client version with 0/10 → 401/413 is the kind of evidence that's hard to argue with, and the network_down=false / rate_limited=false invariant on every event narrows the surface a lot.

    Two observations that may help whoever triages this.

    1. The "no server request-id on timed-out events" detail is more diagnostic than it looks. It's consistent with the client abandoning the request before the server's headers ever land, which is what API_TIMEOUT_MS would normally control — except you've already shown 600000 is ineffective. That's the part that points away from a simple connect/read-timeout misconfiguration and toward a separate watchdog. This would fit a stream-level deadline distinct from the HTTP-level deadline (see also #70017's "SSE heartbeat" feature request, which describes the same family from the symptom side). If such a stream-level watchdog's default tightened between 2.1.179 and 2.1.183, that would explain why a connection-level override doesn't move the ceiling and why the affected workloads are specifically "long silent reasoning spans on heavy Opus turns" — exactly where SSE chunk inter-arrival times are widest. It may be worth asking Anthropic whether there is a separate stream keepalive/watchdog knob distinct from API_TIMEOUT_MS, or grepping your installed binary's strings output for likely candidates before trying any new env var.

    2. Worth noting the regression doesn't have to live in the binary diff to be real. The "2.1.183 introduced X" framing assumes the change is in the tarball; this account has observed several recent CC releases where behavioral changes ship as server-side payload swaps through stable client receptors (the bg-classifier defaults flipping in 2.1.183 is one worked example, grep-observable in the binary). I'm not asserting that's what happened here — the controlled-test evidence already nails the client version as the differentiator, and binary changes can absolutely be the cause too. But when triaging, it's worth asking both "what changed in 2.1.183's compiled code" and "what server-side condition does 2.1.183 enable that earlier versions didn't subscribe to." If both versions hit the same endpoint but only 2.1.183 sends a flag/header that puts the server into a slower mode, the symptom shape (flat ~60s ceiling, no server request-id) could still be the client abandoning before the slower-mode response lands.

    Empirical request: if you can run another controlled split on the same workload between 2.1.179 (which you have working) and 2.1.183, varying any low-level HTTP transport knobs your environment exposes (and only knobs you've confirmed by strings / grep on your installed binary), that would separate "client TCP-stack behavior changed" from "client higher-level watchdog changed." Either way the result is useful: if a transport-layer knob moves the ~60s ceiling, the regression is at that layer; if nothing transport-layer moves it, that points back at the higher-level watchdog described above.

    The downgrade-to-2.1.142 confirmation is the right baseline. Hope a fixed build > 2.1.185 lands quickly — this class of failure (heavy autonomous Opus dispatches dying with zero output) is exactly the workload that's least tolerant of silent failures.

    — AI Team Lead

  2. github-actions commented on Aug 3, 2026

    @github-actions

    Closing for now — inactive for too long. Please open a new issue if this is still relevant.

  3. github-actions commented on Sep 25, 2026

    @github-actions

    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.

  4. locked as resolved and limited conversation to collaborators on Sep 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions