[BUG] claude update always downloads latest binary

Resolved 💬 4 comments Opened Mar 3, 2026 by mlafeldt Closed Mar 31, 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?

claude update downloads the latest version every time rather than checking /latest to see if the download is necessary.

❯ BUN_CONFIG_VERBOSE_FETCH=1 time claude update
Current version: 2.1.63
Checking for updates to latest version...
[fetch] > HTTP/1.1 GET https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest
[fetch] > Accept: application/json, text/plain, */*
[fetch] > Accept-Encoding: gzip, compress, deflate, br
[fetch] > User-Agent: axios/1.8.4
[fetch] > Connection: keep-alive
[fetch] > Host: storage.googleapis.com

[fetch] < 200 OK
[fetch] < X-GUploader-UploadID: AGQBYWyqsyqlDpFg2W5uITzBtcGW-kQ-99EVRdjPTrWHopMPe4qZOQnPQGBgWDqs0ozS3j5U3UxKfHc
[fetch] < x-goog-generation: 1772250290741960
[fetch] < x-goog-metageneration: 1
[fetch] < x-goog-stored-content-encoding: identity
[fetch] < x-goog-stored-content-length: 6
[fetch] < x-goog-hash: crc32c=ZmTg6A==
[fetch] < x-goog-hash: md5=y5ToyJdbKurWYcy3l5lwOA==
[fetch] < x-goog-storage-class: STANDARD
[fetch] < Accept-Ranges: bytes
[fetch] < Content-Length: 6
[fetch] < Server: UploadServer
[fetch] < Date: Tue, 03 Mar 2026 08:43:51 GMT
[fetch] < Expires: Tue, 03 Mar 2026 08:43:51 GMT
[fetch] < Cache-Control: no-cache, max-age=0
[fetch] < Age: 0
[fetch] < Last-Modified: Sat, 28 Feb 2026 03:44:50 GMT
[fetch] < ETag: "cb94e8c8975b2aead661ccb797997038"
[fetch] < Content-Type: text/plain
[fetch] < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

[fetch] > HTTP/1.1 GET https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest
[fetch] > Accept: application/json, text/plain, */*
[fetch] > Accept-Encoding: gzip, compress, deflate, br
[fetch] > User-Agent: axios/1.8.4
[fetch] > Connection: keep-alive
[fetch] > Host: storage.googleapis.com

[fetch] < 200 OK
[fetch] < X-GUploader-UploadID: AGQBYWzsIKNjDxJWkPUubZstR03kFVvdFqu56n6ui2ihZFT9Zd5tJcwVXtJGnw3x5jUR1U4WBH3y_xI
[fetch] < x-goog-generation: 1772250290741960
[fetch] < x-goog-metageneration: 1
[fetch] < x-goog-stored-content-encoding: identity
[fetch] < x-goog-stored-content-length: 6
[fetch] < x-goog-hash: crc32c=ZmTg6A==
[fetch] < x-goog-hash: md5=y5ToyJdbKurWYcy3l5lwOA==
[fetch] < x-goog-storage-class: STANDARD
[fetch] < Accept-Ranges: bytes
[fetch] < Content-Length: 6
[fetch] < Server: UploadServer
[fetch] < Date: Tue, 03 Mar 2026 08:43:51 GMT
[fetch] < Expires: Tue, 03 Mar 2026 08:43:51 GMT
[fetch] < Cache-Control: no-cache, max-age=0
[fetch] < Age: 0
[fetch] < Last-Modified: Sat, 28 Feb 2026 03:44:50 GMT
[fetch] < ETag: "cb94e8c8975b2aead661ccb797997038"
[fetch] < Content-Type: text/plain
[fetch] < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

[fetch] > HTTP/1.1 GET https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.63/manifest.json
[fetch] > Accept: application/json, text/plain, */*
[fetch] > Accept-Encoding: gzip, compress, deflate, br
[fetch] > User-Agent: axios/1.8.4
[fetch] > Connection: keep-alive
[fetch] > Host: storage.googleapis.com

[fetch] < 200 OK
[fetch] < X-GUploader-UploadID: AGQBYWxnlMPxelWAiWilmdkciuRZkAUe8yqSrAO9XPszCIMmKBXFzOcYOtRe_E3ZeJCKBxmmAG1sEKo
[fetch] < x-goog-generation: 1772248026138812
[fetch] < x-goog-metageneration: 1
[fetch] < x-goog-stored-content-encoding: identity
[fetch] < x-goog-stored-content-length: 1410
[fetch] < x-goog-hash: crc32c=ZDCT5w==
[fetch] < x-goog-hash: md5=SjAvUsw4VEO7SZHFadYpsw==
[fetch] < x-goog-storage-class: STANDARD
[fetch] < Accept-Ranges: bytes
[fetch] < Content-Length: 1410
[fetch] < Server: UploadServer
[fetch] < Date: Tue, 03 Mar 2026 07:53:41 GMT
[fetch] < Expires: Tue, 03 Mar 2026 08:53:41 GMT
[fetch] < Cache-Control: public, max-age=3600
[fetch] < Age: 3010
[fetch] < Last-Modified: Sat, 28 Feb 2026 03:07:06 GMT
[fetch] < ETag: "4a302f52cc385443bb4991c569d629b3"
[fetch] < Content-Type: application/json
[fetch] < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

[fetch] > HTTP/1.1 GET https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.63/darwin-arm64/claude
[fetch] > Accept: application/json, text/plain, */*
[fetch] > Accept-Encoding: gzip, compress, deflate, br
[fetch] > User-Agent: axios/1.8.4
[fetch] > Connection: keep-alive
[fetch] > Host: storage.googleapis.com

[fetch] < 200 OK
[fetch] < Content-Type: application/octet-stream
[fetch] < X-GUploader-UploadID: AGQBYWz0MtXfboKDzQBUYmcj4cydolmvaE17xFljTYbNz1ZSVItfkuXc1wGciQeA6V5ZVo_nh9BIHI4
[fetch] < Expires: Tue, 03 Mar 2026 09:43:52 GMT
[fetch] < Date: Tue, 03 Mar 2026 08:43:52 GMT
[fetch] < Cache-Control: public, max-age=3600
[fetch] < Last-Modified: Sat, 28 Feb 2026 03:07:16 GMT
[fetch] < ETag: "9dfc4bb89214dc18e1b826552ea1fbfe"
[fetch] < x-goog-generation: 1772248036006351
[fetch] < x-goog-metageneration: 1
[fetch] < x-goog-stored-content-encoding: identity
[fetch] < x-goog-stored-content-length: 192342080
[fetch] < x-goog-hash: crc32c=vU0FJg==
[fetch] < x-goog-hash: md5=nfxLuJIU3BjhuCZVLqH7/g==
[fetch] < x-goog-storage-class: STANDARD
[fetch] < Accept-Ranges: bytes
[fetch] < Content-Length: 192342080
[fetch] < Server: UploadServer
[fetch] < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

Claude Code is up to date (2.1.63)
       33.80 real         6.56 user         3.15 sys

https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.63/darwin-arm64/claude is almost 200M in size, so this seems wasteful and causes the update command to be much slower than it could be.

What Should Happen?

claude update should check if the download is necessary based on /latest

Error Messages/Logs

Steps to Reproduce

Run BUN_CONFIG_VERBOSE_FETCH=1 claude update

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.63

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

❯ claude doctor

 Diagnostics
 └ Currently running: native (2.1.63)
 └ Path: /Users/mathias/.local/share/claude/versions/2.1.63
 └ Invoked: /Users/mathias/.local/share/claude/versions/2.1.63
 └ Config install method: native
 └ Search: OK (bundled)

 Updates
 └ Auto-updates: enabled
 └ Auto-update channel: latest
 └ Stable version: 2.1.50
 └ Latest version: 2.1.63

 Version Locks
 └ 2.1.63: PID 46827 (running)

View original on GitHub ↗

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