[BUG] Linux arm64: Claude Code binary download fails with EINVAL on open() of download target — "binary is missing or damaged" on every launch
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 Linux arm64, Claude Desktop cannot download its bundled Claude Code binary. Every download attempt fails with EINVAL: invalid argument on the open() syscall for the download target path, and the app shows:
Claude Code couldn't start — The Claude Code binary is missing or damaged. Reinstall Claude Desktop to continue.
The failure is deterministic: 3/3 download attempts fail identically on every launch, including from a completely clean ~/.config/Claude/claude-code state (directory deleted, app relaunched — the app recreates the state and fails the same way).
The error dialog and log message ("Download failed. Check your internet connection and try again.") are misleading — the network is fine; the failure is a local filesystem syscall returning EINVAL.
Environment
- App: Claude Desktop 1.37937.1 (packaged), installed via Anthropic apt repository
- Claude Code target version: 2.1.246
- OS: Ubuntu 24.04, arm64, running in a Parallels VM on Apple Silicon
- Node (bundled): 24.18.1
- Filesystem:
~/.config/Claudeis on native ext4 (/dev/sda2), NOT a Parallels shared folder — verified withdf -Tandstat -f - Disk space: ~13 GB free
- Claude Code CLI: not installed (desktop app only)
What I've ruled out
- Stale/corrupt state: fully removed
~/.config/Claude/claude-code; app recreates it and fails identically - Singleton/zombie processes: killed all instances, removed
SingletonLock/SingletonSocket/SingletonCookie - Filesystem type:
df -T ~/.config/Claude→/dev/sda2 ext4;stat -f -c %T→ext2/ext3. Native disk, not prl_fs/NFS/FUSE - Disk space: 13 GB available
- Network: other app network activity in the same session succeeds (bridge websocket connects, GrowthBook loads, OAuth works); the failing syscall is a local
open(), not a network call - Reinstall:
sudo apt install --reinstall claude-desktop— no change
Notes / hypothesis
open() is being called on the path .../claude-code/2.1.246 while a directory can exist at that path (the app itself appears to create it), and returns EINVAL rather than EISDIR — consistent with flag-based file creation such as O_TMPFILE on the parent path. Since this works for x86_64 users but fails deterministically here, an arm64-specific issue with open() flags (whose numeric values differ between x86 and ARM) may be worth checking in the download path (downloadBinaryForTarget). Hypothesis only — the observable facts are the log above.
Also suggest: when all download attempts fail with a filesystem error, surface the actual error instead of "Check your internet connection."
What Should Happen?
The app downloads Claude Code 2.1.246 to ~/.config/Claude/claude-code/, verifies it, and the Code tab starts.
Error Messages/Logs
[info] Starting app { appVersion: '1.37937.1', isPackaged: true, platform: 'linux', arch: 'arm64', nodeVersion: '24.18.1' }
[info] [CCD] Initialized with version 2.1.246
...
[info] [CCD] Binary preflight: .verified missing but download in flight — awaiting
[error] [CCD] Download attempt 2/3 failed Error: EINVAL: invalid argument, open '/home/parallels/.config/Claude/claude-code/2.1.246'
at async open (node:internal/fs/promises:640:25)
at async Yr (/usr/lib/claude-desktop/resources/app.asar/.vite/build/index.chunk-Dc1EpoD2.js:1:264650)
at async l9t.downloadBinaryForTarget (.../index.chunk-Dc1EpoD2.js:13:1858642)
at async l9t.prepareForTarget (.../index.chunk-Dc1EpoD2.js:13:1862831) {
errno: -22, code: 'EINVAL', syscall: 'open',
path: '/home/parallels/.config/Claude/claude-code/2.1.246'
}
[error] [CCD] Download attempt 3/3 failed Error: EINVAL: invalid argument, open '/home/parallels/.config/Claude/claude-code/2.1.246'
[error] [CCD] All download attempts failed
[warn] [CCD] Binary preflight: no binary on disk — attempting repair download
[error] Failed to get commands from temporary query {
error: Error: No path to Claude code executable (Download failed. Check your internet connection and try again.)
at e.resolveBinaryPathFresh (.../index2.chunk-B_VM_CFk.js:1:476981)
}
Steps to Reproduce
- Ubuntu 24.04 arm64 (Parallels VM on Apple Silicon), Claude Desktop 1.37937.1 from the apt repo
- Launch Claude Desktop and open the Code tab
- App attempts to download Claude Code 2.1.246 → all attempts fail with EINVAL as above
- Quit app,
rm -rf ~/.config/Claude/claude-code, relaunch → identical failure from clean state
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.246 (bundled with Claude Desktop 1.37937.1)
Platform
Claude Desktop
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Other
Additional Information
_No response_