install.sh appears stuck during download and fails silently when installMethod=native exists

Resolved 💬 4 comments Opened Jan 23, 2026 by csaftoiu Closed Feb 28, 2026

Bug Description

The install.sh script at https://claude.ai/install.sh has two issues:

Issue 1: Script appears "stuck" during download (no progress indication)

The script uses curl -fsSL for downloading the ~180MB binary, which suppresses all output including progress. Users see no feedback for several minutes and assume the script is stuck.

Current code (line 41):

curl -fsSL -o "$output" "$url"

Suggested fix:

curl -fL --progress-bar -o "$output" "$url"

Also add a message before the download:

echo "Downloading Claude Code v$version..."

Issue 2: Install claims success but binary not installed

When ~/.claude.json contains "installMethod": "native" (from a previous installation), the claude install command skips copying the binary but still reports "Claude Code successfully installed!" - even though the binary doesn't exist at ~/.local/bin/claude.

The script then shows a contradictory warning:

✔ Claude Code successfully installed!
⚠ Setup notes:
  • installMethod is native, but claude command not found at /Users/.../.local/bin/claude

Suggested fix: Always use --force flag since we're running from a fresh download:

"$binary_path" install --force ${TARGET:+"$TARGET"}

Steps to Reproduce

Issue 1:

  1. Run curl -fsSL https://claude.ai/install.sh | bash
  2. Observe no output for several minutes during the ~180MB download

Issue 2:

  1. Have a previous Claude Code installation (creates ~/.claude.json with installMethod: native)
  2. Remove ~/.local/bin/claude and ~/.local/share/claude
  3. Run install.sh
  4. Observe "successfully installed" message but which claude returns nothing

Environment

  • macOS (Darwin 24.6.0, arm64)
  • curl available

Proposed Complete Fix

 download_file() {
     local url="$1"
     local output="$2"
     
     if [ "$DOWNLOADER" = "curl" ]; then
         if [ -n "$output" ]; then
-            curl -fsSL -o "$output" "$url"
+            curl -fL --progress-bar -o "$output" "$url"
         else
             curl -fsSL "$url"
         fi
 # Download and verify
 binary_path="$DOWNLOAD_DIR/claude-$version-$platform"
+echo "Downloading Claude Code v$version..."
 # Run claude install to set up launcher and shell integration
 echo "Setting up Claude Code..."
-"$binary_path" install ${TARGET:+"$TARGET"}
+"$binary_path" install --force ${TARGET:+"$TARGET"}

---

🐛 Debugged by @csaftoiu with assistance from Bucky (Claude Opus 4.5)

View original on GitHub ↗

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