[BUG] Cowork dispatches macOS-only extensions to Linux remote → retry loop causes remote OOM and local renderer leak
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?
When a Cowork session is attached to a Linux SSH host, macOS-only Claude Desktop extensions are still dispatched as RemoteProcesses on the remote. Their manifests declare platforms: ["darwin"] (or use macOS-only APIs like AppleScript / Chrome AppleScript). The remote has no node in $PATH, so every spawn fails with exec: "node": executable file not found in $PATH. The app retries indefinitely on a ~15 s cadence per server.
What Should Happen?
- Desktop respects extension
platformscompatibility field and does not dispatch macOS-only extensions to Linux remotes. - At minimum, failed spawns use exponential backoff and eventually disable the extension for that session rather than retrying forever.
Error Messages/Logs
[RemoteProcess:…] Spawn failed: exec: "node": executable file not found in $PATH
[RemoteStdioTransport:Control Chrome] process error: …
[SshMcpServerManager] Failed to connect Control Chrome: connect timeout
[RemoteProcess:…] kill called with signal: SIGTERM
Steps to Reproduce
Reproduction
- Install Control Chrome, Control your Mac, and PDF (By Anthropic) extensions on macOS.
- Configure a Cowork SSH host (Linux) without
nodeon the remote$PATH. - Open Claude Desktop with a Cowork session on that host.
- Leave running for ~60 min.
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
1.3883.0
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Environment
- Claude Desktop:
1.3883.0(macOS arm64) - Claude Code CLI (local embedded):
2.1.111 - Remote CLI (cowork):
2.1.111on Linux arm64 (NVIDIA DGX Spark / GB10) - claude-ssh server:
9a871e263f5ad97516c97c8c8129f94990635ae7
Summary
When a Cowork session is attached to a Linux SSH host, macOS-only Claude Desktop extensions are still dispatched as RemoteProcesses on the remote. Their manifests declare platforms: ["darwin"] (or use macOS-only APIs like AppleScript / Chrome AppleScript). The remote has no node in $PATH, so every spawn fails with exec: "node": executable file not found in $PATH. The app retries indefinitely on a ~15 s cadence per server.
Affected extensions observed
ant.dir.ant.anthropic.chrome-control(manifest:platforms: ["darwin"])ant.dir.gh.k6l3.osascript("Control your Mac" — AppleScript, macOS-only in practice)ant.dir.gh.anthropic.pdf-server-mcp(darwin/win32/linux manifest, butnodewasn't provisioned on remote)
Reproduction
- Install Control Chrome, Control your Mac, and PDF (By Anthropic) extensions on macOS.
- Configure a Cowork SSH host (Linux) without
nodeon the remote$PATH. - Open Claude Desktop with a Cowork session on that host.
- Leave running for ~60 min.
Expected
- Desktop respects extension
platformscompatibility field and does not dispatch macOS-only extensions to Linux remotes. - At minimum, failed spawns use exponential backoff and eventually disable the extension for that session rather than retrying forever.
Actual
~/Library/Logs/Claude/ssh.logfills with, every ~15 s per server:
````
[RemoteProcess:…] Spawn failed: exec: "node": executable file not found in $PATH
[RemoteStdioTransport:Control Chrome] process error: …
[SshMcpServerManager] Failed to connect Control Chrome: connect timeout
[RemoteProcess:…] kill called with signal: SIGTERM
- On the remote, each retry opens and closes an SSH session.
loginctl list-sessionsshows session IDs climbing 600+ per hour.snapd-desktop-i/systemd-logindaccumulate memory per session. - After 55–60 min, the OOM killer fires on the remote:
````
wireplumber.service: killed by the OOM killer (code=killed, status=9/KILL)
- Remote kernel eventually panics / hangs. I observed 14 hard reboots over ~72 hours on a 119 GB RAM box.
- On macOS, the renderer (
Claude Helper (Renderer)) grows handles/heap continuously and crashes every ~40 min.
Impact
Users with any macOS-only extension installed + Cowork on Linux get periodic desktop crashes and — more seriously — hourly hard-crashes of their remote development box.
Workaround
Disable the macOS-only extensions by editing
~/Library/Application Support/Claude/Claude Extensions Settings/<extension-id>.json
to {"isEnabled": false} and restart the app. This immediately stops the loop (verified: SSH disconnects/min dropped from ~60 to ~4, no further OOMs on remote).
Suggested fixes
- Honor
manifest.compatibility.platformswhen picking dispatch target. If target platform isn't in the list, run the extension locally (or surface a UI warning and skip). - Apply exponential backoff to remote
RemoteProcessspawn failures; stop retrying after N failures per session. - In the error message, hint at the platform mismatch when it's likely (e.g. macOS
node-based extension + Linux remote).
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗