Claude Code goes silent when using VS Code Remote SSH Extension and Claude Code on Digital Ocean droplet
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Bug report — Claude Code (VS Code extension) goes silent over Remote-SSH; only Reload Window recovers
Summary
The Claude Code panel stops responding — submitted prompts produce no reply at all —
and the only recovery is VS Code "Reload Window." This recurs multiple times per
working session, nearly every day. Reload fixes it every time, without exception, then
it recurs. Net effect: sessions are interrupted constantly, and tokens are spent on
interrupted/abandoned turns and on repeated in-session debugging instead of actual work.
Environment
- VS Code Remote-SSH over Tailscale: Windows PC (UI side) → Ubuntu droplet (extension
host + Claude backend run on the droplet; spinner/panel run on the PC). Everything crosses
the Tailscale/SSH tunnel.
- Droplet: Ubuntu, 3.8 GB RAM, VS Code server commit
7e7950df89055b5a378379db9ee14290772148a. - Claude Code VS Code extension (version auto-attached by
/bug). - Layout: window 1 = Explorer + Editor; window 2 = a single Claude Code panel, created via
View → Editor Layout → Move Editor into New Window.
Symptom signature
- Prompt is submitted; no response renders; UI appears idle/stuck.
- "Reload Window" restores responsiveness 100% of the time (Reload restarts the extension host
and spawns a fresh claude backend with a fresh connection to Anthropic).
- No crash dialog; the box is not out of memory at the time.
What we have RULED OUT (with evidence)
- Not system RAM / OOM-killer.
free -hstays healthy through hangs; no OOM-killer events
in the kernel log; earlyoom is configured to spare gunicorn/sshd.
- Not the network/tunnel.
tailscale pingPC↔droplet stays ~12 ms, direct, through hangs.
(ICMP/tailscale-ping is a separate path from the data streams, so this only rules out gross
tunnel loss — see hypotheses.)
- Not the duplicate backend. "Move Editor into New Window" can leave a second
claude
backend alive; deleting it vs. leaving it makes no difference to the silent-hang issue.
This has been repeatedly confirmed and should not be pursued as the cause.
- V8 extension-host heap OOM is at most a separate, rarer mode. One confirmed SIGABRT heap
OOM was seen (exthost ~1953 MB), but another hang had the exthost at only ~400 MB RSS with no
OOM events — so heap OOM does not explain the routine silent hangs.
Hypotheses for Anthropic to investigate
- Backend→Anthropic stream stalls — the TCP connection stays ESTAB but carries no data
(half-open socket / stalled send-recv queue / silent NAT-mapping expiry on the long-lived
tunnel). Would explain why a fresh connection (Reload) always fixes it and why tunnel pings
look clean.
- UI↔backend / extension-host IPC channel stalls over Remote-SSH — prompt never reaches
the backend, or the response never reaches the PC-side panel, though both processes live.
A decisive discriminator: during a hang, does the backend's session .jsonl grow when the
user hits enter? Growth ⇒ response was generated but not delivered (channel/IPC bug); no
growth ⇒ prompt never processed (then socket state on the backend tells the rest).
Instrumentation already in place (droplet-side, passive, zero token cost)
~/exthost_heap_mon.log— every 5 s: extension-host RSS/VmData, eachclaudebackend
RSS/PPID, system MemAvailable, swap used.
~/ts_tunnel_health.log— every 15 s:tailscale pingto the PC.- Being extended to also log, per backend: session
.jsonlsize+mtime and established
Anthropic connections with send-q/recv-q + retransmit state — so the next incident is
captured automatically.
What would help
Guidance on which extension/backend logs to capture during a hang (and how to raise their
verbosity), and whether there is a known issue with the Remote-SSH IPC channel or backend
keepalive stalling on long-lived connections. Happy to provide the monitor logs around a
timestamped incident.
What Should Happen?
Claude Code should not freeze or go silent.
Error Messages/Logs
Steps to Reproduce
- Start VS Code
- Select 'Connect' and connect to remote droplet.
- Select 'Open folder' and open a folder on the droplet
- So now there is 1 window and one Explorer panel
- If a file is opened, then there is 1 window that has the Explorer Panel and an Editor panel. 1 window, 2 panels
- Now select the Claude icon in the upper right corner of the screen; that adds a 3rd panel to the window. 1 window, 3 panels.
- With the Claude Code panel active, select View / Editor Layout / Move editor into new window.
- Now there is window 1 with an Explorer panel and an Editor panel, and window 2 has one single Claude code panel.
This creates a stale Claude Code PID. Sometimes the PID goes away by itself; sometimes not.
The steps above don't always cause Claude Code to freeze. The freezing is intermittent.
I'm burning lots of tokens ($$) on debugging this issue. Hopefully this will be fixed soon.
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
??
Claude Code Version
2.1.195
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗