Skip to content

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

@csaftoiu

Description

@csaftoiu

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:packagingbugSomething isn't workinghas reproHas detailed reproduction stepsplatform:macosIssue specifically occurs on macOSstaleIssue is inactive

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions