[BUG] Claude Code ≥ 2.1.205 livelocks at 100% CPU with no output (even on --version) on KVM guests with generic CPU model (kvm64) — silently breaks Code tab in Linux desktop beta
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?
On a KVM virtual machine using the hypervisor's generic CPU model ("Common KVM processor", i.e. kvm64/qemu64 — the Proxmox default), recent Claude Code builds hang forever at 100% CPU on a single core, producing no output and never exiting — even for claude --version. There is no error message and no crash; the process just spins indefinitely.
Broken: 2.1.205 (bundled with the Linux Claude Desktop beta) and 2.1.207 (current npm @latest)
Working: 2.1.91 (npm) on the exact same machine
Because the Linux desktop beta (app 1.20186.1) downloads its own bundled engine to ~/.config/Claude/claude-code/2.1.205/, this bug makes the entire Code tab unresponsive: every prompt shows "thinking" forever while the spawned engine process spins at 100% CPU. The Chat tab works normally, which makes it very hard for users to guess the cause. Wiping ~/.config/Claude/claude-code and letting the app re-download does not help (same version, same behavior), and it reproduces in an empty project directory with --safe-mode-equivalent conditions (no plugins/MCP/hooks involved — bare --version is enough).
Root cause (diagnosed)
The generic kvm64 CPU model masks modern x86-64 instruction set extensions from the guest. Before the fix, the guest CPU flags were essentially a Pentium-era set:
Model name: Common KVM processor
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush
No SSE4.2, no POPCNT, no AVX/AVX2. Claude Code ≥ 2.1.205 appears to ship on a newer Bun runtime that assumes at least SSE4.2/POPCNT-level features; on this CPU model it enters a userspace thread livelock during startup instead of failing with an error.
Confirming fix: switching the VM's CPU type to host passthrough (Proxmox: CPU type host; libvirt: host-passthrough), then stop/start of the VM. After that the guest sees sse4_2, popcnt, avx2, and:
$ ~/.config/Claude/claude-code/2.1.205/claude --version
2.1.205 (Claude Code)
returns instantly. The desktop app Code tab works after this change as well.
Steps to Reproduce
Actual: process spins at 100% CPU indefinitely with no output. In the desktop app, every Code-tab prompt hangs on "thinking" forever.
Diagnostics
strace summary (10 s of ~/.config/Claude/claude-code/2.1.205/claude --version)
Only ~1,200 syscalls total during 10 seconds of 100% CPU — the spin is almost entirely in userspace. Profile is dominated by futex (with many timeouts/errors) and sched_yield, i.e. a thread-coordination livelock shortly after thread creation:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- -------------------
64.54 0.047198 117 403 149 futex
25.40 0.018578 69 266 sched_yield
1.38 0.001007 125 8 clone3
1.30 0.000948 18 51 mmap
1.18 0.000863 9 89 rt_sigprocmask
0.85 0.000624 21 29 3 openat
0.71 0.000522 13 39 read
...
0.00 0.000000 0 28 28 rt_sigreturn
0.00 0.000000 0 14 14 rt_sigsuspend
0.00 0.000000 0 28 tgkill
------ ----------- ----------- --------- --------- -------------------
100.00 0.073132 60 1212 219 total
No io_uring involvement. RSS stays ~10–28 MB; the hang occurs before any real work.
Desktop app process view while "thinking forever"
The app spawns its bundled engine, which immediately pegs a core (grew to 6+ min CPU time, no output):
/home/<user>/.config/Claude/claude-code/2.1.205/claude --output-format stream-json --verbose --input-format stream-json --permission-prompt-tool stdio --setting-sources=user,project,local --strict-mcp-config --permission-mode default [100% CPU, R state, indefinitely]
Reproduces identically with plugins loaded or not, in populated and empty project directories.
Environment
Guest OS: Debian GNU/Linux 12 (bookworm), kernel 6.1.0-50-amd64 (Debian 6.1.176-1, 2026-07-02), x86_64
Virtualization: KVM (systemd-detect-virt → kvm), 8 vCPUs, CPU model "Common KVM processor" (kvm64)
Claude Desktop (Linux beta): 1.20186.1, Electron 42.5.1, installed from Anthropic apt repository
Bundled engine: 2.1.205 at ~/.config/Claude/claude-code/2.1.205/
Also broken: @anthropic-ai/claude-code@2.1.207 via npm (Node v18.20.4 — npm engine warning noted, but the hang also occurs with the desktop-bundled standalone binary, so Node is not involved at runtime)
Working on same machine: @anthropic-ai/claude-code@2.1.91 via npm
Unrelated but co-occurring on this system: WebGL blocklist GPU errors at desktop app startup, worked around with --disable-gpu; the engine livelock is independent of that (reproduces with bare CLI binary, no app).
This configuration (Proxmox/KVM with default CPU model) is extremely common in homelab environments, so the silent-hang failure mode is likely to affect many Linux beta users and is very hard to self-diagnose.
Workaround (for affected users)
Set the VM's CPU type to host (Proxmox: Hardware → Processors → Type: host; libvirt: <cpu mode='host-passthrough'/>; QEMU: -cpu host), then fully stop and start the VM. If live migration across heterogeneous hosts is needed, a specific modern model such as x86-64-v3 also works.
What Should Happen?
Expected: version string prints, or a clear error such as "unsupported CPU: requires SSE4.2/POPCNT".
Detect required CPU features at startup and fail fast with a clear error message ("Claude Code requires a CPU with SSE4.2/POPCNT; your VM exposes the generic kvm64 model — set CPU type to 'host' or x86-64-v2+") instead of livelocking silently.
Consider having the desktop app surface engine-startup failures in the Code tab UI instead of an indefinite "thinking" state.
Error Messages/Logs
Steps to Reproduce
Create a KVM/QEMU VM with the default/generic CPU model (kvm64 — e.g. Proxmox default "Common KVM processor"), Debian 12.
Install Claude Code ≥ 2.1.205 (or install the Linux Claude Desktop beta and open the Code tab, which downloads engine 2.1.205).
Run claude --version.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.91
Claude Code Version
2.1.205
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Xterm
Additional Information
_No response_
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗