[BUG] Turns hang ~6 minutes then "Connection dropped (ECONNRESET)", sudden onset 2026-09-28, across all sessions on one Mac
What's wrong
Starting 2026-09-28, long-running Claude Code sessions on one Mac began failing with API Error: Connection dropped (ECONNRESET). Before that the same machine and setup had run for months without this error at any meaningful rate.
The failure has a very consistent shape: a turn gets no response at all, then the connection is reset at about 6 minutes. Of 26 failed turns measured on 2026-09-28, 22 landed between 5m54s and 6m09s of turn time. Even trivial one-line prompts fail this way ("Crunched for 6m 0s", then ECONNRESET). Then the session goes into Retrying in 0s · attempt N/10.
- It hits idle and busy sessions alike. It often shows up on the first prompt after a session has sat idle.
- It happens across many concurrent sessions on the same machine, not just one.
- A fresh session (no
--continue) works normally at first. - The network tests clean at the same moments: 0% loss to the gateway, 1.1.1.1 and api.anthropic.com, API answering in ~0.2s, no proxy, no VPN route to the API, no content filter. The status page showed no incident.
Environment
- Claude Code 2.1.283 and 2.1.284 (npm global). 2.1.284 arrived on this machine 2026-09-28 14:02 ET, and the first failures were noticed shortly after. A session on 2.1.282 has been clean so far, but that's only a short sample.
- macOS 26 (Darwin 25.2.0), arm64, Mac mini
- Claude Max (OAuth), Opus models, 1M context
- Wired Ethernet, Starlink uplink. Tailscale installed, but not routing API traffic.
- Sessions run in tmux with
--channels plugin:telegram@claude-plugins-official
Related
#96070, #95616, #94422, #96153, #67091 (the ~346s keepalive pattern may be related)
Separate finding: --continue drops channel servers
Relaunching a session with claude --continue ... --channels plugin:telegram@claude-plugins-official shows the Channels banner, but never spawns the channel plugin's MCP server (no bun child). The same command without --continue spawns it immediately. Reproduced on 2.1.283 and 2.1.284.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Two separate fingerprints in this write-up — worth keeping distinct when bisecting.
1) The ~6 minute hang → ECONNRESET
The 5m54s–6m09s cluster on 22/26 failed turns is the useful signal. That lands near the ~346s keepalive / idle-socket patterns people have been chasing in #96070 / #95616 / #94422 / #67091. A few things that usually split "API / path" from "client idle timeout" without needing a big new sample:
NODE_DEBUG=http,net(or equivalent) and note whether the TCP reset arrives from the peer vs a local close after silence.Status-page clean + ~0.2s API RTT at the same moment already argues against a blunt outage.
2)
--continuedrops the channel plugin MCP serverThis looks independent of the reset: banner shows, but no
bunchild forplugin:telegram@claude-plugins-officialuntil you drop--continue. That smells like continue-path not re-hydrating channel / MCP side-servers the same way a cold start does. If you can grab one log line where the continue path decides "channels already present / skip spawn" vs never registering the plugin server, that would pin it for the team.Happy to compare notes if anyone else on Max + channels + tmux sees the same 6m cliff after 2.1.283/284.
Same symptom here, on the Claude Desktop app (bundled Claude Code), macOS 26 (Darwin 25.6.0).
ECONNRESET count per day, from
~/Library/Logs/Claude/main*.log:| Date | Errors | Bundled CC version |
|---|---|---|
| 2026-09-23 | 4 | 2.1.281 |
| 2026-09-24 | 4 | 2.1.281 |
| 2026-09-25 | 7 | 2.1.281 |
| 2026-09-26 | 4 | 2.1.281 |
| 2026-09-28 | 7 | 2.1.281 |
| 2026-09-29 | 19+ | 2.1.284 (auto-installed 2026-09-29 02:18 local) |
The errors roughly tripled once 2.1.284 landed.
Log pattern:
Every failure has
hadFirstResponse=true, so the reset happens mid-stream. Cycle durations vary widely (180–2400 s) rather than clustering around a fixed NAT timeout.Environment / already ruled out:
curl https://api.anthropic.comis fineCLAUDE_CODE_MAX_RETRIES=10andAPI_TIMEOUT_MS=900000Workaround: I downgraded the standalone CLI (
claude install 2.1.282+DISABLE_AUTOUPDATER=1). It works so far on a short sample. There is no way to pin the version bundled in Desktop, so Desktop is still affected. A way to pin or roll back Desktop's bundled Claude Code would really help until this is fixed.Same signature here, same onset: 2026-09-28 ~22:05 EDT, macOS 26.3 (25D125), Claude Code 2.1.281, Opus 1M on Max, several sessions on one Mac. Big sessions died with
API Error: Connection dropped (ECONNRESET)~360s after each request (server_error, 0 tokens in the transcript). Small, fresh sessions kept working. We saw no relevant incident on status.claude.com at the time.In our case the evidence points to the Mac's own upload path, not Claude Code, and restarting the Mac fixed it. Here's the data in case it helps others triage:
curl --data-binaryPOST tospeed.cloudflare.com/__up): 400KB passed, but ≥800KB stalled and was reset at ~15s (curl exit 56). The same happened against two other unrelated echo servers, on HTTP/1.1 and HTTP/2, over IPv4 and IPv6. ApplenetworkQualitystill reported 130–230 Mbps up, so multi-flow tests looked healthy.curl --limit-rate 500K–1500K) made 3MB pass; at 2MB/s or more it failed.net.inet.tcp.rack=0recovered about half (5/10).Quick check if you hit this: run the upload below. If 3MB takes ~15s and exits 56, and the Mac has been up for weeks, a restart may be worth trying early, before deeper Claude Code debugging.
We haven't proven which component went stale (the TCP stack or the Wi-Fi driver). The original reporter is on Starlink, so the path-loss half may differ. If the Claude Code side could surface "upload stalled" instead of retrying silently for ~6 minutes, it would have saved us a few hours.