[BUG] `claude update` reports downgrade and shows three conflicting version numbers

Resolved 💬 5 comments Opened Mar 26, 2026 by jroy-poka Closed Apr 25, 2026

Bug Description

claude update exhibits incorrect version resolution behavior:

  1. Reports current version as 2.1.81
  2. Claims a "new version available" of 2.1.77 — which is older than the current version
  3. Proceeds to "successfully" downgrade from 2.1.81 to 2.1.77
  4. After the update, claude --version reports 2.1.84 — a third, different version

Three conflicting version numbers in a single update cycle. The updater's "stable" channel version check appears out of sync with what npm actually resolves.

Screenshot

claude-update-version-mismatch

<img width="397" height="187" alt="Image" src="https://github.com/user-attachments/assets/58c237aa-10f0-4a5c-8068-3e12d45edfff" />

Steps to Reproduce

  1. Have Claude Code installed globally via npm (npm install -g @anthropic-ai/claude-code)
  2. Run claude update
  3. Observe the version mismatch in the output
  4. Run claude --version to see a third, different version

Environment

  • OS: macOS (Darwin 24.1.0)
  • Shell: zsh
  • Node: v24.13.0 (via nvm)
  • Install method: npm install -g @anthropic-ai/claude-code
  • Install path: ~/.nvm/versions/node/v24.13.0/lib/node_modules/@anthropic-ai/claude-code
  • Claude Code version (actual): 2.1.84

Analysis

The root cause appears to be a mismatch between the "stable" release channel that claude update checks and npm's latest tag:

  • The updater's stable channel metadata thinks 2.1.77 is the latest stable release
  • npm's latest tag points to 2.1.84
  • The updater reports current as 2.1.81 (possibly reading from a cached or stale source)
  • The "global installation update method" likely runs npm install -g @anthropic-ai/claude-code@2.1.77, but npm resolves to a different version

The actual binary is unaffected (2.1.84 is correct), but the UX is confusing and the updater is attempting an unintended downgrade.

Related

  • #33926 — Similar downgrade behavior, but in that case the user was actually stuck on the older version

Expected Behavior

  • claude update should never offer to "update" to an older version
  • The version reported as "current" should match claude --version
  • After update, the reported version should match the actually installed version

View original on GitHub ↗

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