[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

Open 💬 1 comment Opened Jul 13, 2026 by joos81

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_

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗