Claude Code CLI unusable on pre-Haswell Intel Macs (no AVX2) — need Node.js fallback or non-AVX binary
Description
Claude Code CLI cannot run on Intel Macs with pre-Haswell CPUs. Since the move to Bun-compiled single-file executables, versions whose npm tarball no longer includes cli.js crash immediately with SIGILL. The last usable version is 2.1.108 (the last to ship cli.js in the tarball).
This isn't the v2.1.15 regression fixed via WebKit/Bun 1.3.7 — that fix addressed a specific JIT bug. The underlying problem is that the @anthropic-ai/claude-code-darwin-x64 binary requires AVX2, which this CPU microarchitecture does not have.
Environment
- Machine: MacBook Pro Mid-2012 (MacBookPro9,2)
- CPU: Intel Core i7-3520M @ 2.90GHz (Ivy Bridge, 3rd gen)
- CPU features: SSE4.2, POPCNT, AVX1.0, AES, XSAVE — no AVX2, no BMI2
- OS: macOS Sequoia 15.7.6
- Memory: 16 GB
- Current working version: 2.1.107 via Node.js wrapper
- Latest version tested: 2.1.114 — SIGILL on launch
How the working install works
Versions up to ~2.1.108 ship cli.js in the npm tarball — a single bundled JS file that runs under Node.js, which JITs to whatever instruction set the CPU supports. I run it via a bash wrapper:
#!/usr/bin/env bash
exec /path/to/node "$HOME/.local/opt/claude-code-current/cli.js" "$@"
This works perfectly. Performance is fine. But from 2.1.114 onward, the tarball only contains cli-wrapper.cjs + install.cjs, which resolve to the platform-specific Bun binary — and that binary SIGILLs.
What I've verified
npm pack @anthropic-ai/claude-code@2.1.108→ containscli.js→ runs fine under Nodenpm pack @anthropic-ai/claude-code@2.1.114→ nocli.js, onlycli-wrapper.cjs→ spawns@anthropic-ai/claude-code-darwin-x64binary → SIGILL- The darwin-x64 binary is a 196MB Mach-O executable with AVX2-dependent code paths (confirmed via
strings)
Request
Any of these would restore support for pre-Haswell x86_64 hardware:
- Continue shipping
cli.jsin the npm tarball alongside the Bun binary (it was there until recently) - Build the darwin-x64 binary with
-march=x86-64-v2(SSE4.2 baseline) instead of requiring AVX2 - Provide
cli-wrapper.cjsas a true Node.js fallback — currently it just spawns the native binary; it could fall back to bundled JS when the binary SIGILLs
Option 1 is the smallest change — the tarball already had cli.js for years. Users on older hardware pay the Node.js overhead; everyone else is unaffected.
Related issues
- #19907 (33 comments) — v2.1.15 AVX regression, fixed via Bun 1.3.7
- #5864 (24 comments) — original "compile without AVX2" request
- #19904 (14 comments) — "CPU lacks AVX support"
- #34481 (open) — SIGILL on Westmere Xeon
This issue has 7 comments on GitHub. Read the full discussion on GitHub ↗