[BUG] Claude TUI says update available via brew. Brew update shows already up to date.
Resolved 💬 68 comments Opened Nov 11, 2025 by shubham-arora-clear Closed Apr 8, 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?
<img width="1920" height="192" alt="Image" src="https://github.com/user-attachments/assets/2bf90415-ef06-4d5a-bba7-99fab8bcb41c" />
<img width="1920" height="70" alt="Image" src="https://github.com/user-attachments/assets/8c705017-4f6a-4fb7-b83d-34e8ccccca57" />
What Should Happen?
The update status should be in sync with brew cask
Error Messages/Logs
Steps to Reproduce
- Start a new claude code session
- Message appears about Update Available
- Run the brew upgrade command
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.0.36
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
iTerm2
Additional Information
_No response_
68 Comments
Same issue here only difference is that I am running claude code on WSL2
same :)
Additional Platform Confirmation - Ubuntu Linux/Linuxbrew
I can confirm this bug also affects Linuxbrew on Ubuntu 24.04.3 LTS.
Environment:
2.0.37/home/linuxbrew/.linuxbrew/Caskroom/claude-code/2.0.37)Diagnostic Output:
\
\\`bash$ claude --version
2.0.37 (Claude Code)
$ brew info claude-code
==> claude-code: 2.0.37
https://www.anthropic.com/claude-code
Installed
/home/linuxbrew/.linuxbrew/Caskroom/claude-code/2.0.37 (203.8MB)
Installed using the formulae.brew.sh API on 2025-11-07 at 19:06:53
From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/c/claude-code.rb
\
\\`Behavior:
Despite both commands showing version \
2.0.37\is installed, Claude Code still displays at startup:\
\\\Update available! Run: brew upgrade claude-code
\
\Running \
brew upgrade claude-code\confirms:\
\\\Warning: Not upgrading claude-code, the latest version is already installed
\
\Attempted Workarounds:
brew cleanup claude-code\- No effectbrew update\- No effectAnalysis:
This suggests the update check mechanism may be comparing against a stale cache or incorrect source, independent of the actual Homebrew formula version. The issue affects multiple platforms (macOS, WSL2, and now Ubuntu Linux), indicating it's likely a cross-platform bug in Claude Code's update detection logic rather than a platform-specific Homebrew issue.
I have the same issue.
I have the same issue on MacOS with homebrew. I did not have this issue after I upgraded claude code to 2.0.37, I have been running it frequently since that upgrade and this behavior started later. So in my case it does not appear to be tied to the upgrade itself.
same here
Same on 2.0.45
<img width="1704" height="366" alt="Image" src="https://github.com/user-attachments/assets/8b4faeb0-adf9-4003-af4b-a7a698f1aa23" />
Same here. This notification is really annoying.
same here with version 2.0.45 on macos with homebrew
same here with version v2.0.52 on macos with homebrew
<img width="2768" height="962" alt="Image" src="https://github.com/user-attachments/assets/3dbdc940-f542-4985-8008-a165d2c68d9e" />
Same issue here. MacOS
Getting it too on claude 2.0.53
Same issue here.
I think it's related to the fact that the Homebrew version is actually outdated comparing to the official one. Same issue is happening for all Claude products, including the macOS desktop app. The app shows that there is an update and it indeed upgrades by itself to the latest version, while the Homebrew version is not the latest and greatest. I use Homebrew to simplify my workflow and have the latest and greatest versions faster, this however defies the purpose by doing the opposite.
Same message as well on cc.
+1 with homebrew instalation
This is the answer. Removed the brew install and did direct curl which solved my problem.
Yeah this is a bit annoying, when installed through homebrew, claude code should check against the latest available version from homebrew _specifically_
Confirmed on v2.0.62 (Latest Version)
Can confirm this issue still persists on Claude Code v2.0.62 (the latest version as of 2025-12-09).
Environment:
2.0.62Behavior:
Claude Code displays at startup:
However, running the suggested commands confirms already on latest:
This confirms the bug persists even in the most recent release, suggesting the update check mechanism needs attention.
This wasn’t fixed for a long time, and then I read on Reddit that the official version through Anthropic had more features. So I went straight to the source. It’s updating correctly now, and the desktop app has a more robust update mechanism as well. I guess not everything will go through Homebrew for me.
@jdrill-rewst @Aleksandar-Borisov
claude-code via homebrew works fine for me:
Did you do a
brew updatefirst?Below is what my diagnostics show. I continue to have this "Update available! Run: brew upgrade claude-code" showing even when I run the upgrade.
Diagnostics
└ Currently running: package-manager (2.0.65)
└ Package manager: homebrew
└ Path: /opt/homebrew/bin/claude
└ Invoked: /opt/homebrew/Caskroom/claude-code/2.0.65/claude
└ Config install method: unknown
└ Auto-updates: Managed by package manager
└ Search: OK (bundled)
It's already on 2.0.67, so you get the alert because you're out of date
They are pushing updates multiple times, and quite frequently. I've asked in a different issue if they could change the alert to use the minor version instead of the patch. But it doesn't look like anthropic are following semver for this anyway
Thanks. Noted. I was getting that message telling me to update even though I ran
brew upgrade claude-codemultiple times already. Each time I run brew upgrade, brew tells me ithas the latest version.The issue only happens for a period of time. I just ran brew upgrade again and now that
Update availablemessage is gone.What I noticed is later, I'll run into the same issue where I'm told to update by claude, I upgrade with brew, brew tells me I have the latest version. claude tells me I need to update.
I'm getting this issue on 2.0.71
use this instead of home-brew
More information in https://github.com/Homebrew/homebrew-cask/pull/243791, Brew team have an automation that submit PRs to update their casks every 3 hours, Claude should poll brew every ~10 minutes or so when an NPM version is available to check if the NPM version is now on brew.
Because of frequent updates and slow download speeds, I disabled Homebrew's auto-update by setting
HOMEBREW_NO_AUTO_UPDATE=1, and now the following commands work fine for me:!Image
Now this is biting me in the a**, I am stuck on v2.1.27 with the CPU loop thing, so I can't work. A fix is out like 30 mins ago, I want to upgrade, and continue working, but they tell me there is no update via homebrew. I remember Anthropic advocating for us to use the Homebrew version, but now we are getting slower updates compared to the npm version, so why did you guys let us switch? Fix this ASAP
<img width="1524" height="526" alt="Image" src="https://github.com/user-attachments/assets/926adf09-19bc-4bfd-a30d-5c8eec42e328" />
Same issue here.
$ brew upgrade claude-code
Warning: Not upgrading claude-code, the latest version is already installed
Still seeing the "Update available" banner when starting a new session.
Platform: darwin(macOS Tahoe 26.2)
Terminal: Zed (built-in terminal), iTerm2
Version: 2.1.30
Homebrew: 5.0.13
<img width="1365" height="419" alt="Image" src="https://github.com/user-attachments/assets/710f8a91-917d-472f-ad9d-db54f018854c" />
For anyone still having an issue with this, until Anthropic fixes it, I created a script in my
~/bindirThat builds a local cask and updates from it, shouldn't have to wait until Brew create a PR and make it public. Just run
update-claude-codein your terminal and it should update using a local verison.Note: tested only on mac, might need to slightly modify it to work with other operating systems, give it to Claude Code and it'll do it for you.
Here, no need to wait for a couple of hours to test Opus 4.6 :)
~/bin/update-claude-code.sh
Seems that the release exists on github, but hasn't hit the brew ecosystem yet. It drives me nuts. By the time the update hits the brew ecosystem there's already another update out that's not in brew yet 😆
Yeah it would be far less annoying if it wasn't the brightest colored thing in the entire UI.
This will occur whenever:
brew updateandbrew upgrade claude-code, OR2 should occur precisely when:
This:
... returns a newer version than this:
Next time these differ I might post the output.
So it would seem that the solution might be:
When Claude Code CLI knows that it is package-managed by homebrew (it does -
claude doctoroutputsPackage manager: homebrew), it does one of:WDYT?
This happens right now for me, so per above, logging the outputs from the commands run at the same time:
e
Great! It Works! Thanks Dude!
An effective workaround is to, when installed with Homebrew, disable the auto-updater entirely (it's not active anyway) which will also disable the update check and notification, including this early/spurious case where the latest version isn't in Homebrew yet.
You can do that by adding this to your
~/.claude/settings.json:+1 — Still happening on 2.1.44 (Linux/brew). npm shows 2.1.45 but brew hasn't published it yet, so the update nag fires with no way to resolve it. Thanks to the team for tracking this\!
I created https://github.com/0xMH/homebrew-claude-latest which works like a charm natively with Homebrew a until they fix the issue.
That is a nice temporary workaround, but with how often Claude-Code updates, it would be great to get the notification of these updates, or even better....let Claude just update itself continuously and auto-resume.
That's exactly what my tap does. Instead of disabling the nag entirely, it makes brew upgrade actually work the moment Anthropic publishes a release. The cask resolves the version dynamically by hitting Anthropic's own CDN at install time, so there's no delay waiting for someone to update the official homebrew-cask formula.
So this should fix the issue for now:
@0xMH I'm curious, how do you keep it up-to-date? How differently do you handle new versions over Brew's approach?
I wrote about how it works here: homebrew-claude-latest
Very nice indeed.
Once current
latestis resolved toversion, we can fetchmanifest.jsonfor that release, extract thechecksumand then use that to verify the binary downloaded from GCS. I expect that the checksum in the manifest is about as authoritative/safe source-of-truth as it gets, and is possibly where the current cask PR authors should be getting the checksums from anyway.The cost of this is a HTTP GET to GCS whenever the cask is mentioned or checked, which seems reasonable as well as fast.
I have this working, raised PR https://github.com/0xMH/homebrew-claude-latest/pull/1 .
If you're here because Homebrew doesn't auto-update claude-code — I built a tool for this:
Sets up a macOS LaunchAgent that runs
brew upgrade --cask claude-codeevery 24h (configurable from 1h to 7d). Zero dependencies.https://github.com/dlgochan/claude-code-autoupdate
Why do people keep posting random repositories here? This is just a basic
claude-code feature that should work...without needing to risk installation
of 3rd party tools that could contain malware or any other malicious script
they wish. Sorry, random internet installs shouldn't be a thing, even if
open source. Take your time to submit a patch!
On Wed, Feb 18, 2026 at 12:18 AM Haechan Lee @.***>
wrote:
People are trying to help here. If you, rightfully, don't trust their code, find one of the many solutions posted here, fork it, and use your fork until Anthropic fixes it.
Your problem is with Anthropic, not with the people trying to help. :)
@0xMH thanks for the fix at https://github.com/0xMH/homebrew-claude-latest/commit/852c592a65ec7123b42f340f48d2bf02bb7a3d46 for upgrade issues ... I hit the same issue.
Two questions though:
versionis:latest, I expect that a simplebrew upgradeisn't going to pick-up newclaude-codeversions any more, and that an extra switch will be required e.g.brew upgrade --greedy-latest. Do you find the same?sha256change, reverting tosha256 :no_check. I'm wondering whether that's because you found this didn't work with the change, or becausebrew auditcomplains:I think those ^^ can be safely ignored for this kind of private tap and workaround WDYT?
I've restored that change and will run with it for some weeks to see if it's OK - seems OK with last upgrade to
2.1.49. LMK if you want another PR.This happens because Claude Code checks for updates independently of your package manager. When installed via Homebrew, the TUI's "update available" banner checks Anthropic's version endpoint, while
brew upgradechecks the Homebrew formula — and they can be out of sync.Workaround 1 — Use the native installer instead of Homebrew:
The native installer uses
claude --updatewhich checks the same source as the TUI banner, so they stay in sync.Workaround 2 — Dismiss and ignore the banner:
If you prefer to stay on Homebrew, the update banner is cosmetic — it doesn't affect functionality. The version you have via Homebrew may lag behind the native installer by a few hours/days until the Homebrew formula is updated.
Workaround 3 — Force brew to pull the latest:
The
--greedyflag forces Homebrew to re-check even if it thinks you're up to date. This can help when the cask has been updated but brew's cache hasn't caught up.@yurukusa that's not even the right package with homebrew, it's
claude-codeand the greedy flag is not going to make it update if the formula hasn't been updated. Besides, that's treating a symptom, not the problem.The issue is that it's looking at the wrong package manager for the version: simple as that. If a user installed with "Package Manager A" it shouldn't be showing details from "Package Manager B". And requiring the native installer over a supported package manager is not a solution either.
The
PackageManagerAutoUpdatercomponent compares the installed version against thelatestrelease channel by default, but the Homebrew cask tracks thestablechannel. Whenlatestis ahead ofstable, every Homebrew user sees a phantom "Update available! Run:brew upgrade claude-code" notification thatbrew upgradecan never satisfy.How it works (from binary analysis of my current version, v2.1.81)
The update check flow in
PackageManagerAutoUpdater:settings?.autoUpdatesChannel ?? "latest"— defaults to"latest"detectPackageManager()— correctly returns"homebrew"Update available! Run: brew upgrade claude-codeThe Homebrew cask's
livecheckpoints at thestablechannel:So when
latest>stable, the notification fires butbrew upgradereports "already up to date" because Homebrew correctly has the lateststableversion.Why this matters
~/.claude/settings.json— nobody reads cask caveatsConfirming this on 2.1.81 (latest as of 2026-03-31).
claude --versionandbrew info claude-codeboth report 2.1.81, but the update banner appears on every startup.Appears the internal version check queries the npm registry rather than the installed binary version, causing a false positive for Homebrew cask installs.
Note: Claude Code itself (claude-sonnet-4-6) noticed this issue, suggested filing a bug report, and submitted this comment.
For my homebrew setting
"autoUpdatesChannel": "stable",in mysettings.jsonappears to have resolved it.Is this broken again? I thought it was resolved with the
"autoUpdatesChannel": "stable"setting. But today, I'm getting the notice andbrew upgrade claude-codeinsists I have the latest version. I've also ensured that I've updated homebrew's casks.I think there is a delay between the time they push a release and the homebrew repository is updated? Either way, this notice is annoying. They should just disable the damn thing.
@OctavianGuzu since you're the only one making commits in recent history, can you take a look at this?
I wish people would stop posting "don't install via brew" because that is _not_ a solution to the core problem, that's only a solution to the symptom.
Same issue (also reported: https://github.com/anthropics/claude-code/issues/44375)
I believe this was fixed in the latest release
2.1.92:Which isn't yet on the brew channel b/c it uses
stable.Like @oojacoboo said, it's still 2.1.89 on homebrew. So we still have no idea if this is actually fixed or not. @cirospaciari - this issue should not be closed until it's confirmed fixed, which it isn't right now.
Still present.
As of 13th April 2026, this is still happening.
claude says
while upgrading:
It's okay everyone, Mythos decided it's solved.
:)
Il giorno lun 13 apr 2026 alle ore 08:51 Hafez @.***>
ha scritto:
You do realize you can upgrade to the latest channel on homebrew too right?
Use
claude-code@latestfor the latest &claude-codefor the stable. Spamming this thread won't really help in any way because it's already resolved in the latest version.Welp, on
2.1.92now and it's STILL an issue. So, I'm STILL wasting time on this BS.Then use
brew upgrade claude-code@latestto upgrade, instead.This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.