claude update fails with GCS timeout, but direct curl download works
Resolved 💬 4 comments Opened Mar 23, 2026 by ahm3t0t Closed Apr 21, 2026
Bug Description
claude update fails with a 30-second timeout when trying to fetch the latest version from GCS, even though the same URL is reachable via direct curl.
Environment
- OS: Ubuntu 24.04 (VPS)
- Current version: 2.1.80 (native install)
- Target version: 2.1.81
- Install method: Native (
curl -fsSL https://claude.ai/install.sh | bash)
Steps to Reproduce
- Run
claude update - Observe timeout error
Error Output
Current version: 2.1.80
Checking for updates to latest version...
Error: Failed to install native update
Error: Failed to fetch version from https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest: timeout of 30000ms exceeded
Key Finding
The GCS bucket is reachable via direct curl:
# This works fine:
$ curl -fsSL https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest
2.1.81
# Downloading the binary directly also works:
$ curl -fsSL -o /tmp/claude "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.81/linux-x64/claude"
# Successfully downloads ~227MB ELF binary
But the built-in updater (claude update) and the installer script (install.sh) both timeout at the version check step. This suggests the issue is in the internal HTTP client used by Claude Code (possibly Bun's fetch or a Node.js HTTP client), not a network connectivity problem.
Workaround
Manual native binary update:
# 1. Download the binary directly
VERSION="2.1.81"
PLATFORM="linux-x64" # or linux-arm64, darwin-x64, darwin-arm64
curl -fsSL -o ~/.local/share/claude/versions/$VERSION \
"https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/$VERSION/$PLATFORM/claude"
# 2. Make it executable and update symlink
chmod +x ~/.local/share/claude/versions/$VERSION
ln -sf ~/.local/share/claude/versions/$VERSION ~/.local/bin/claude
# 3. Verify
claude --version
Suggestion
- The 30s timeout may be too aggressive for some network conditions
- Consider falling back to a system
curl/wgetdownload if the internal HTTP client fails - The
install.shscript delegates to the Claude binary itself for the actual download — if the binary's internal HTTP client is the issue, the shell script could handle the download directly as a fallback
Additional Notes
- The installer script (
install.sh) also fails because it invokes the Claude binary to perform the download, which uses the same internal HTTP client claude doctorrequires interactive TTY and cannot be run in non-interactive mode for diagnostics- A 0-byte file was left at
~/.local/share/claude/versions/2.1.81after the failed update attempt, which could confuse subsequent update checks
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗