Bug Description
Running curl -fsSL https://claude.ai/install.sh | bash on macOS reports "successfully installed" but:
- Never creates
~/.local/bin/claude (the native launcher)
- Never creates
~/.claude/local/ (the local npm install directory)
- Deletes the existing working npm global install as a "cleanup" step
This leaves the user with a completely broken claude command.
Steps to Reproduce
- Have Claude Code installed via npm:
npm install -g @anthropic-ai/claude-code
- Verify it works:
claude --version → 2.1.42
- Run the native installer:
curl -fsSL https://claude.ai/install.sh | bash
- Observe: output says "✔ Claude Code successfully installed!" with "Location: ~/.local/bin/claude"
- Observe: warning says "installMethod is native, but claude command not found at /Users/rafael/.local/bin/claude"
- Run
claude --version → command not found
- Check
ls ~/.local/bin/claude → does not exist
- Check
ls ~/.claude/local/ → does not exist
What Happens Internally
From the debug log at ~/.claude/debug/:
Install: Starting installation process (force=false, target=undefined)
Install: Calling installLatest(channelOrVersion=stable, forceReinstall=false)
Checking for native installer update to version 2.1.32
Install: installLatest returned version=2.1.32, wasUpdated=true, lockFailed=false
Install: Setup launcher completed with 1 messages
Install: Setup message: installMethod is native, but claude command not found at /Users/rafael/.local/bin/claude
Install: Cleaning up npm installations after successful install
Removed global npm installation of @anthropic-ai/claude-code
Cleaned up 1 npm installation(s)
The flow is:
installLatest("stable") returns wasUpdated=true and version 2.1.32 — the install claims success
setupLauncher() fails to create ~/.local/bin/claude but returns a warning message instead of throwing an error
- Because the install reported success, the cleanup function
VdT() runs npm uninstall -g @anthropic-ai/claude-code, removing the user's working installation
- The bootstrap script's cleanup then removes the downloaded binary with
rm -f "$binary_path"
Net result: old install deleted, new install never materialized.
Expected Behavior
- If the launcher at
~/.local/bin/claude is not created, the install should fail (not report success)
- The cleanup step should not remove existing working installations if the native install didn't succeed
- At minimum, the cleanup should verify
~/.local/bin/claude exists and is executable before removing the npm global install
Environment
- macOS 26.2 (Tahoe / Darwin 25.2.0)
- Apple Silicon (arm64)
- Node.js v22.14.0 (via nvm)
- Claude Code 2.1.42 (was installed via
npm install -g @anthropic-ai/claude-code)
- Shell: zsh
Workaround
Reinstall via npm:
npm install -g @anthropic-ai/claude-code
Bug Description
Running
curl -fsSL https://claude.ai/install.sh | bashon macOS reports "successfully installed" but:~/.local/bin/claude(the native launcher)~/.claude/local/(the local npm install directory)This leaves the user with a completely broken
claudecommand.Steps to Reproduce
npm install -g @anthropic-ai/claude-codeclaude --version→2.1.42curl -fsSL https://claude.ai/install.sh | bashclaude --version→ command not foundls ~/.local/bin/claude→ does not existls ~/.claude/local/→ does not existWhat Happens Internally
From the debug log at
~/.claude/debug/:The flow is:
installLatest("stable")returnswasUpdated=trueand version2.1.32— the install claims successsetupLauncher()fails to create~/.local/bin/claudebut returns a warning message instead of throwing an errorVdT()runsnpm uninstall -g @anthropic-ai/claude-code, removing the user's working installationrm -f "$binary_path"Net result: old install deleted, new install never materialized.
Expected Behavior
~/.local/bin/claudeis not created, the install should fail (not report success)~/.local/bin/claudeexists and is executable before removing the npm global installEnvironment
npm install -g @anthropic-ai/claude-code)Workaround
Reinstall via npm: