[BUG] 'Update available' banner checks npm latest but suggests winget upgrade — winget manifest lag makes the banner permanent on Windows
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 available through my install channel (winget)
What's Wrong?
On Windows with a winget install, the "Update available" banner compares the installed version against the npm latest release, but the remediation it suggests is winget upgrade. The winget manifest trails every release by hours-to-days, so the suggested command reports "no updates available" while the banner keeps showing. Since Claude Code releases ship every few days, for winget users the yellow banner is effectively permanently visible and permanently non-actionable.
Concrete data right now:
- Installed:
claude --version-> 2.1.201 (installed viawinget install Anthropic.ClaudeCode, binary at%LOCALAPPDATA%\Microsoft\WinGet\Links\claude.exe) winget show Anthropic.ClaudeCode-> Version: 2.1.201 (latest available in the winget repo)npm view @anthropic-ai/claude-code version-> 2.1.204
So the banner says an update is available and tells me to run winget, winget says I'm fully up to date, and both are "right" — they're just looking at different channels.
This exact bug was already fixed for Homebrew: the update check was pointed at the install channel's available version instead of npm latest (see #41140, and the regression report #50017 which confirms the intended behavior is "check the channel you installed from"). The winget channel needs the same treatment.
Related: #63238 reports the same symptom on Windows, but the repro there compares against Anthropic.Claude (the Desktop app package) rather than Anthropic.ClaudeCode, and doesn't identify the channel mismatch as the cause.
What Should Happen?
For winget installs, the update check should compare against the version available in the winget manifest (Anthropic.ClaudeCode), same as the Homebrew fix. If querying winget is too slow/unreliable at startup, then at minimum:
- don't show the banner when the suggested remediation command cannot produce an update, or
- show which version the banner is referring to, so users can tell it's manifest lag and not a broken install.
Error Messages/Logs
> claude --version
2.1.201 (Claude Code)
> winget upgrade Anthropic.ClaudeCode
No applicable upgrade found.
> winget show Anthropic.ClaudeCode | findstr Version
Version: 2.1.201
> npm view @anthropic-ai/claude-code version
2.1.204
Steps to Reproduce
- Install Claude Code via
winget install Anthropic.ClaudeCodeon Windows - Wait for a new Claude Code release that hasn't reached the winget manifest yet (a few days at most)
- Launch
claude— yellow "Update available" banner appears suggestingwinget upgrade - Run
winget upgrade Anthropic.ClaudeCode— "No applicable upgrade found" - Relaunch
claude— banner still there
Is this a regression?
No, this never worked for winget (the equivalent Homebrew behavior was fixed in #41140)
Claude Code Version
2.1.201
Platform
Native Anthropic API
Operating System
Windows 11 Pro (10.0.26200)
Terminal/Shell
PowerShell
3 Comments
Still having this issue on winget in v2.1.206. Looks like there was a fix in #55834
@ThomasBenjaminCook I am still seeing this issue on Windows using v2.1.220.
Still reproduces on 2.1.229 (Windows 11, winget install).
Concrete numbers as of today:
winget show --id Anthropic.ClaudeCodereports available: 2.1.229winget upgrade --id Anthropic.ClaudeCode→No available upgrade found.@anthropic-ai/claude-code@latest: 2.1.237claude updateoutput:So the check correctly sees 2.1.237 on the npm channel, then routes to a winget command that cannot satisfy it while the manifest trails at 2.1.229. The banner is unclearable by any action the user can take until the manifest catches up — running the suggested command is a no-op that looks like a failed update.
Re #55834: that PR is still open and unmerged, and it documents the behaviour + adds an update-checker plugin rather than changing which registry the version check compares against — so it doesn't resolve this.