[BUG] Cowork VM heartbeat failures cause repeated SIGKILL — 4GB VM insufficient for MCP servers + plugins

Resolved 💬 3 comments Opened Feb 3, 2026 by Gabriel9901 Closed Feb 7, 2026

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?

Cowork sessions repeatedly crash with SIGKILL due to VM heartbeat failures. The Cowork VM (hardcoded at 4GB memory) becomes unresponsive under load, triggering heartbeat timeout → VM restart → SIGKILL of all active processes. This happens consistently — 11 occurrences across 3 days in my logs.

The issue does NOT occur in Claude Code CLI, which runs as a native macOS process with full system RAM available.

Root Cause from Logs

Each Cowork subprocess loads 12 MCP servers + 10 knowledge-work plugin directories inside a fixed 4GB VM. The VM runs out of memory, stops responding to heartbeat pings (2-second interval), and after 3 consecutive failures (6 seconds), the VM is force-restarted and all active processes receive SIGKILL.

Log pattern (cowork_vm_node.log):

[Heartbeat] Guest not responsive: Heartbeat ping timed out
[Heartbeat] Guest not responding (failure 1/3)
[Heartbeat] Guest not responsive: Heartbeat ping timed out
[Heartbeat] Guest not responding (failure 2/3)
[Heartbeat] Guest not responsive: Heartbeat ping timed out
[Heartbeat] Guest not responding (failure 3/3)
[Heartbeat] 3 consecutive failures - triggering VM restart
[VM:heartbeat] Heartbeat failure detected, restarting VM...
[VM] Guest disconnected unexpectedly, terminating 1 active processes with SIGKILL
[Process:xxx] Exited, code=null, signal=SIGKILL, duration=9617ms

VM memory allocation (cowork_vm_swift.log):

[VM] startVM called for .../claudevm.bundle with memoryGB=4
[VM] Configuration created:
  - Memory: 4GB

Per-process load (from spawn logs):

  • 12 MCP servers passed via --mcp-config (Linear, Notion, Claude in Chrome, mcp-registry, Control Chrome, Excel, PowerPoint, Word, Metabase, osascript, PDF Tools, cowork)
  • 10 --plugin-dir entries (cowork-plugin-management, data, enterprise-search, finance, legal, marketing, product-management, productivity, sales, customer-support)
  • ~69KB of stdin buffered per spawn

All 11 Occurrences (Feb 1-3, 2026)

| Date | Time | Processes Killed | Duration Before Kill |
|------|------|-----------------|---------------------|
| Feb 1 | 08:34 | 1 | — |
| Feb 1 | 08:46 | 1 | — |
| Feb 2 | 10:52 | 1 | 1,568,510ms (~26 min) |
| Feb 2 | 19:56 | 1 | 11,092ms (~11 sec) |
| Feb 2 | 20:37 | 1 | 11,005ms (~11 sec) |
| Feb 2 | 20:58 | 1 | 9,562ms (~10 sec) |
| Feb 3 | 10:10 | 1 | 9,617ms (~10 sec) |
| Feb 3 | 11:29 | 1 | 9,570ms (~10 sec) |
| Feb 3 | 11:36 | 2 | 29,716ms, 20,947ms |
| Feb 3 | 11:37 | 1 | — |
| Feb 3 | 12:12 | 1 | — |

Note: Several processes were killed within ~10 seconds of spawning, suggesting the VM is already at capacity when new processes start.

What Should Happen?

  1. The VM should have enough memory to run the MCP servers + plugins it loads
  2. MCP servers should be lazy-loaded (only initialize when actually called by the model), not all eagerly loaded at spawn
  3. If memory is tight, a graceful degradation mechanism should exist instead of SIGKILL
  4. The VM memory allocation should scale with the number of installed extensions

Steps to Reproduce

  1. Install 8+ MCP extensions in Claude Desktop (Office suite, Chrome control, etc.)
  2. Start a Cowork session
  3. Send multiple messages that trigger tool use
  4. VM will become unresponsive and heartbeat monitor will trigger SIGKILL

Claude Model

Claude Opus 4.5 (claude-opus-4-5-20251101)

Is this a regression?

Unknown — Cowork has always had this issue for me.

Claude Code Version

2.1.22 (spawned by Desktop for Cowork), 2.1.17 (CLI)

Claude Desktop Version

1.1.1093

Platform

Anthropic API (via Claude Max subscription)

Operating System

macOS 26.2 (Build 25C5048a) — MacBook Pro M4 Pro, 24GB RAM

Terminal/Shell

N/A (Cowork runs inside Claude Desktop, not terminal)

Additional Information

Why this doesn't affect Claude Code CLI:

  • CLI runs as a native macOS process with full 24GB RAM
  • CLI only loads 4 MCP servers (not 12)
  • CLI doesn't load any knowledge-work plugins
  • CLI has no heartbeat monitor / VM constraint

Relevant log files:

  • ~/Library/Logs/Claude/cowork_vm_node.log — Heartbeat failures + SIGKILL events
  • ~/Library/Logs/Claude/cowork_vm_swift.log — VM configuration (4GB memory)
  • ~/Library/Logs/Claude/coworkd.log — cgroup creation + cleanup failures

cgroup cleanup failures (from coworkd.log):

[process:xxx] failed to cleanup cgroup: failed to remove cgroup xxx:
remove /sys/fs/cgroup/coworkd/xxx: device or resource busy

Suggested fixes:

  1. Increase VM memory from 4GB to 8GB (or scale based on extension count)
  2. Lazy-load MCP servers — only initialize when the model calls a tool from that server
  3. Increase heartbeat failure threshold from 3 to 5+ (current 6-second window is too aggressive)
  4. Add memory monitoring inside the VM to preemptively unload unused MCP servers

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗