[BUG] Linux arm64: Claude Code binary download fails with EINVAL on open() of download target — "binary is missing or damaged" on every launch

Status Open
Reported on v2.1.246
Maintainer reply None cached
Activity 0 comments · opened Aug 26, 2026

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/Claude is on native ext4 (/dev/sda2), NOT a Parallels shared folder — verified with df -T and stat -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 %Text2/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

  1. Ubuntu 24.04 arm64 (Parallels VM on Apple Silicon), Claude Desktop 1.37937.1 from the apt repo
  2. Launch Claude Desktop and open the Code tab
  3. App attempts to download Claude Code 2.1.246 → all attempts fail with EINVAL as above
  4. 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_

View original on GitHub ↗