claude cowork: VM process spins CPU indefinitely on macOS 26.3 (Apple M5)

Resolved 💬 5 comments Opened Feb 16, 2026 by solomon23 Closed Feb 19, 2026

Description

claude cowork fails to start. The underlying com.apple.Virtualization.VirtualMachine process spawns but never reaches a usable state. Instead, it enters a CPU spin loop consuming ~316% CPU (4 vCPU threads) and 1.9GB RAM indefinitely.

Environment

  • Claude Code version: 2.1.44
  • macOS: 26.3 (Build 25D125)
  • Hardware: Apple M5, 32GB RAM
  • Virtualization framework: Version 1.0 (259.4.2)

Observed Behavior

  1. Run claude cowork
  2. The com.apple.Virtualization.VirtualMachine XPC service spawns with 4 vCPU threads, 10 disk I/O threads, 2 virtual clock threads
  3. vCPU threads enter a tight Hv::Vcpu::run()hv_trap loop (hypervisor trap handling + GIC interrupt state sync)
  4. Process consumes ~316% CPU continuously and never completes startup
  5. No crash reports generated — the VM doesn't crash, it just spin-loops

Process Sample (key threads)

The 4 vCPU threads (com.apple.virtualization.thread.cpu-0 through cpu-3) show:

  • ~90% of samples in Hv::Vcpu::run_once()hv_trap (hypervisor exit handling)
  • Remaining samples in GIC interrupt state synchronization (sync_from_gic_state, compute_list_registers)
  • Lock contention visible on os_unfair_lock in GIC list register computation
  • No threads appear idle or in a healthy wait state

All disk I/O threads and the defrag thread are waiting on condition variables (idle), suggesting the VM guest OS never gets far enough to perform disk I/O.

System State

  • System load average during reproduction: 31+ (system under heavy CPU pressure from the VM)
  • No related crash reports in ~/Library/Logs/DiagnosticReports/

Expected Behavior

claude cowork should either start successfully or fail gracefully with an error message instead of consuming all available CPU cores indefinitely.

Workaround

Kill the runaway process:

killall "com.apple.Virtualization.VirtualMachine"

View original on GitHub ↗

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