Skip to content

Claude Code goes silent when using VS Code Remote SSH Extension and Claude Code on Digital Ocean droplet #72402

Description

@lambdafilter

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • 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 -h stays healthy through hangs; no OOM-killer events
    in the kernel log; earlyoom is configured to spare gunicorn/sshd.
  • Not the network/tunnel. tailscale ping PC↔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

  1. 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.
  2. 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, each claude backend
    RSS/PPID, system MemAvailable, swap used.
  • ~/ts_tunnel_health.log — every 15 s: tailscale ping to the PC.
  • Being extended to also log, per backend: session .jsonl size+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

  1. Start VS Code
  2. Select 'Connect' and connect to remote droplet.
  3. Select 'Open folder' and open a folder on the droplet
  4. So now there is 1 window and one Explorer panel
  5. If a file is opened, then there is 1 window that has the Explorer Panel and an Editor panel. 1 window, 2 panels
  6. 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.
  7. With the Claude Code panel active, select View / Editor Layout / Move editor into new window.
  8. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions