[BUG] In-app update notifications default to latest channel even when installed via stable Homebrew cask

Status Fixed / completed
Maintainer reply None cached
Activity 6 comments · opened Mar 30, 2026 · closed Apr 15, 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?

The autoUpdatesChannel setting defaults to "latest", meaning in-app update notifications check the latest release channel regardless of which Homebrew cask is installed.

With Homebrew/homebrew-cask#255221, the claude-code Homebrew cask was changed to track the stable release channel, while a new claude-code@latest cask was introduced for users who want the latest channel. However, Claude Code's update notification system is unaware of this distinction:

  • A user who installs brew install claude-code (stable channel) will still receive notifications about latest channel releases — versions that haven't been promoted to stable yet and are therefore not available via their cask
  • The notification tells them to run brew upgrade claude-code, but that command won't install the version being advertised (since stable lags behind latest)
  • This creates confusing, misleading, and unactionable notifications for stable cask users

What Should Happen?

When Claude Code detects it was installed via Homebrew, it should infer the appropriate update channel from the cask name:

  • claude-code → check stable channel
  • claude-code@latest → check latest channel

The cask name is derivable from the binary path (e.g. /opt/homebrew/Caskroom/claude-code/... vs /opt/homebrew/Caskroom/claude-code@latest/...), which Claude Code already inspects for Homebrew detection.

Alternatively, the autoUpdatesChannel setting could default to "stable" when a Homebrew installation is detected, since Homebrew itself manages version delivery and users who want bleeding-edge have opted into claude-code@latest.

Steps to Reproduce

  1. Install via brew install claude-code (stable channel)
  2. Do not set autoUpdatesChannel in ~/.claude/settings.json
  3. Wait for or trigger an update notification
  4. Observe that the notification references a version from the latest channel that is not yet available on the stable channel or via brew upgrade claude-code

Claude Code Version

Any (default channel behavior)

Platform

Homebrew (macOS/Linux)

Operating System

macOS

Additional Information

Related: Homebrew/homebrew-cask#255221
The autoUpdatesChannel setting is documented at https://code.claude.com/docs/en/setup#configure-release-channel
See also: #23783 (autoUpdatesChannel: "stable" ignored in non-Homebrew installs — now closed)

View original on GitHub ↗

6 Comments

github-actions[bot] · 5 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/32736
  2. https://github.com/anthropics/claude-code/issues/11405
  3. https://github.com/anthropics/claude-code/issues/30790

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

nixpulvis · 5 months ago

I read this thinking that perhaps installing claude-code@latest would suppress the warning, but sadly the upgrade message persisted. Just in case someone else thinks the same might work.

florinungur · 5 months ago

Reproducing on macOS 26.4 (arm64).

$ brew info --cask claude-code | head -2
==> claude-code: 2.1.81

$ claude --version
2.1.81 (Claude Code)

$ curl -s https://registry.npmjs.org/@anthropic-ai/claude-code/latest | python3 -c "import sys,json; print(json.load(sys.stdin)['version'])"
2.1.87

$ brew outdated --cask claude-code
(no output — brew considers it current)

Startup banner says "Update available! Run: brew upgrade claude-code" but brew has nothing to upgrade to. The update checker compares against npm latest (2.1.87) while the brew cask is pinned to stable (2.1.81).

autoUpdatesChannel is not set in settings.json, so it defaults to latest.

chwiese · 4 months ago

Fixed in claude-code 2.1.92 ("Fixed Homebrew install update prompts to use the cask's release channel"). Update notifications now use the channel matching the installed cask: claude-code → stable, claude-code@latest → latest. PR to remove the now-outdated caveat stanza from the claude-code Homebrew cask: Homebrew/homebrew-cask#259447.

iendeavor123 · 4 months ago

This is not fixed in 2.1.92.

Installed via brew install claude-code (stable cask). Still receiving "Update available! Run: brew upgrade claude-code" every session, pointing to a version that doesn't exist in the stable channel.

$ claude --version
2.1.92 (Claude Code)

$ brew info --cask claude-code | head -2
==> claude-code (Claude Code): 2.1.92

$ brew outdated --cask claude-code
(no output — brew considers it current)

$ npm view @anthropic-ai/claude-code version
2.1.112

$ which claude
/opt/homebrew/bin/claude

$ ls -la $(which claude)
/opt/homebrew/bin/claude -> /opt/homebrew/Caskroom/claude-code/2.1.92/claude

  • macOS: Darwin 24.6.0 (arm64)
  • Homebrew cask: claude-code (stable channel, NOT claude-code@latest)
  • autoUpdatesChannel: not set in ~/.claude/settings.json (should auto-detect from cask path)
  • Cask path: /opt/homebrew/Caskroom/claude-code/2.1.92/claude — contains claude-code not claude-code@latest, so stable channel detection should work per the fix described above

The binary path clearly identifies this as the stable cask. The update checker is still comparing against the latest channel (2.1.112) instead of stable (2.1.92). brew upgrade claude-code does nothing because brew correctly knows
2.1.92 is the latest stable version.

github-actions[bot] · 4 months ago

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.