Bug Report: Claude Code Install - ARM64 Binary Replaced with x86_64 on Apple Silicon
Date: December 10, 2025
Affected Version: Claude Code v2.0.64
Platform: macOS (Apple Silicon / ARM64)
Severity: Medium - Affects subset of Apple Silicon users
Summary
On at least one Apple Silicon Mac, the claude install self-installation command replaced a correctly-downloaded ARM64 binary with an x86_64 binary. This caused Claude Code to run through Rosetta translation instead of natively. While this may not affect all Apple Silicon users (as it would be more widely reported), documenting the issue may help identify edge cases in the installation logic.
Environment
- OS: macOS (Darwin 24.5.0)
- Architecture: Apple Silicon (ARM64)
- System confirms ARM64:
uname -m → arm64
- Not running through Rosetta:
sysctl.proc_translated → 0
- Claude Code Version: 2.0.64
- Install Method: Official install script from https://claude.ai/install.sh
Evidence
Step 1: Install script downloads correct ARM64 binary ✅
When running the official install script with debug output added, we confirmed:
# Script correctly detects ARM64
OS: Darwin
Arch: arm64
Platform: darwin-arm64
# Downloads from correct URL
Downloading from: https://storage.googleapis.com/.../2.0.64/darwin-arm64/claude
# Downloaded binary is ARM64
DEBUG: Downloaded binary architecture:
/Users/david/.claude/downloads/claude-2.0.64-darwin-arm64: Mach-O 64-bit executable arm64
Step 2: claude install command replaces it with x86_64 ❌
After the install script runs claude install, the binary changes architecture:
# After 'claude install' runs
Setting up Claude Code...
✔ Claude Code successfully installed!
# Final binary is now x86_64
DEBUG: Final installed binary architecture:
/Users/david/.local/bin/claude: Mach-O 64-bit executable x86_64
Visual Proof
Before claude install:
/Users/david/.claude/downloads/claude-2.0.64-darwin-arm64: Mach-O 64-bit executable arm64
After claude install:
/Users/david/.local/bin/claude: Mach-O 64-bit executable x86_64
Root Cause
The bug is NOT in the install script (bootstrap.sh), which correctly:
- Detects the platform as
darwin-arm64
- Downloads the ARM64 binary from the correct GCS bucket path
- Receives an ARM64 binary from the server
The bug IS in the compiled claude binary itself. When the downloaded ARM64 binary executes claude install, it either:
- Re-downloads from a hardcoded x86_64 URL
- Has broken architecture detection in its self-install logic
- Falls back to x86_64 as a default
Impact (When Bug Occurs)
- Performance: Claude runs through Rosetta 2 translation instead of natively
- Bash execution issues: Commands may hang or fail due to x86_64/ARM64 shell mismatches
- User experience: Degraded performance and increased CPU usage
Note: This appears to affect a subset of installations rather than all Apple Silicon users, suggesting a specific edge case or environmental factor.
Workaround
Bypass the claude install command by directly copying the downloaded ARM64 binary:
#!/bin/bash
VERSION="2.0.64"
PLATFORM="darwin-arm64"
GCS_BUCKET="https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases"
# Download ARM64 binary
curl -fsSL "$GCS_BUCKET/$VERSION/$PLATFORM/claude" -o ~/.claude/downloads/claude-$VERSION-$PLATFORM
# Verify it's ARM64
file ~/.claude/downloads/claude-$VERSION-$PLATFORM
# Copy directly to install location (SKIP 'claude install')
cp ~/.claude/downloads/claude-$VERSION-$PLATFORM ~/.local/bin/claude
chmod +x ~/.local/bin/claude
# Verify final binary
file ~/.local/bin/claude # Should show: arm64
Result: Claude Code runs natively on Apple Silicon with full ARM64 performance.
Reproduction Steps
- Use an Apple Silicon Mac (M1, M2, M3, etc.)
- Verify system is ARM64:
uname -m should return arm64
- Run official install:
curl -fsSL https://claude.ai/install.sh | bash
- Check installed binary:
file ~/.local/bin/claude
- Expected:
Mach-O 64-bit executable arm64
- Actual:
Mach-O 64-bit executable x86_64
Suggested Fix
The claude install command needs to:
- Properly detect the current architecture when running on Apple Silicon
- Download/copy the ARM64 binary instead of defaulting to x86_64
- Test self-installation on ARM64 systems to ensure architecture is preserved
Additional Notes
- Bootstrap script (bootstrap.sh) is working correctly and doesn't need changes
- Server is correctly serving ARM64 binaries at the
darwin-arm64 path
- The issue is isolated to the
claude install self-installation logic in the compiled binary
- Workaround confirmed working on macOS 14.5 (Darwin 24.5.0) with Apple Silicon
Files for Reference
The following debugging scripts and notes are available if Anthropic engineers need more details:
claude-install-debug-notes.md - Complete debugging investigation
diagnose-claude-install.sh - Script to diagnose the issue
fix-claude-arm64.sh - Working workaround script
- Modified install script with debug output showing the architecture change
Contact: @davidfwatson
Bug Report: Claude Code Install - ARM64 Binary Replaced with x86_64 on Apple Silicon
Date: December 10, 2025
Affected Version: Claude Code v2.0.64
Platform: macOS (Apple Silicon / ARM64)
Severity: Medium - Affects subset of Apple Silicon users
Summary
On at least one Apple Silicon Mac, the
claude installself-installation command replaced a correctly-downloaded ARM64 binary with an x86_64 binary. This caused Claude Code to run through Rosetta translation instead of natively. While this may not affect all Apple Silicon users (as it would be more widely reported), documenting the issue may help identify edge cases in the installation logic.Environment
uname -m→arm64sysctl.proc_translated→0Evidence
Step 1: Install script downloads correct ARM64 binary ✅
When running the official install script with debug output added, we confirmed:
Step 2:
claude installcommand replaces it with x86_64 ❌After the install script runs
claude install, the binary changes architecture:Visual Proof
Before
claude install:/Users/david/.claude/downloads/claude-2.0.64-darwin-arm64: Mach-O 64-bit executable arm64After
claude install:/Users/david/.local/bin/claude: Mach-O 64-bit executable x86_64Root Cause
The bug is NOT in the install script (bootstrap.sh), which correctly:
darwin-arm64The bug IS in the compiled
claudebinary itself. When the downloaded ARM64 binary executesclaude install, it either:Impact (When Bug Occurs)
Note: This appears to affect a subset of installations rather than all Apple Silicon users, suggesting a specific edge case or environmental factor.
Workaround
Bypass the
claude installcommand by directly copying the downloaded ARM64 binary:Result: Claude Code runs natively on Apple Silicon with full ARM64 performance.
Reproduction Steps
uname -mshould returnarm64curl -fsSL https://claude.ai/install.sh | bashfile ~/.local/bin/claudeMach-O 64-bit executable arm64Mach-O 64-bit executable x86_64Suggested Fix
The
claude installcommand needs to:Additional Notes
darwin-arm64pathclaude installself-installation logic in the compiled binaryFiles for Reference
The following debugging scripts and notes are available if Anthropic engineers need more details:
claude-install-debug-notes.md- Complete debugging investigationdiagnose-claude-install.sh- Script to diagnose the issuefix-claude-arm64.sh- Working workaround scriptContact: @davidfwatson