Bug: ARM64 binary replaced with x86_64 during install on Apple Silicon

Resolved 💬 4 comments Opened Dec 10, 2025 by davidfwatson Closed Dec 14, 2025

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 -marm64
  • Not running through Rosetta: sysctl.proc_translated0
  • 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:

  1. Re-downloads from a hardcoded x86_64 URL
  2. Has broken architecture detection in its self-install logic
  3. Falls back to x86_64 as a default

---

Impact (When Bug Occurs)

  1. Performance: Claude runs through Rosetta 2 translation instead of natively
  2. Bash execution issues: Commands may hang or fail due to x86_64/ARM64 shell mismatches
  3. 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

  1. Use an Apple Silicon Mac (M1, M2, M3, etc.)
  2. Verify system is ARM64: uname -m should return arm64
  3. Run official install: curl -fsSL https://claude.ai/install.sh | bash
  4. Check installed binary: file ~/.local/bin/claude
  5. Expected: Mach-O 64-bit executable arm64
  6. Actual: Mach-O 64-bit executable x86_64

---

Suggested Fix

The claude install command needs to:

  1. Properly detect the current architecture when running on Apple Silicon
  2. Download/copy the ARM64 binary instead of defaulting to x86_64
  3. 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

View original on GitHub ↗

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