Repository navigation
[Bug]: Claude Code provider update hangs and leaves a stale warning #8280
Description
Activity
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.Issue needs maintainer review and initial categorization.
on Aug 26, 2026 hey @bozzhik, can you verify this behaviour. if there is no homebrew installation. then it still shows brew upgrade command which is incorrect. isHomebrewCommandPath() treats every /usr/local/bin/* path as Homebrew. The RPC reaches the remote server, then fails with spawn brew ENOENT. In my usecase i was using a remote box which is linux and has not homebrew installtion.

hey @bozzhik, can you verify this behaviour. if there is no homebrew installation. then it still shows brew upgrade command which is incorrect. isHomebrewCommandPath() treats every /usr/local/bin/* path as Homebrew. The RPC reaches the remote server, then fails with spawn brew ENOENT. In my usecase i was using a remote box which is linux and has not homebrew installtion.
Thanks — I checked this against my setup.
I cannot reproduce the no-Homebrew remote Linux case because my environment is macOS 15.7.3 arm64 with T3 Code (Alpha) 0.0.34. Claude Code 2.1.231 is installed via Homebrew Cask, Claude resolves to
/opt/homebrew/bin/claude, and brew is available at/opt/homebrew/bin/brew. Runningbrew upgrade claude-codereports that the latest version is already installed.I also checked the current main implementation:
isHomebrewCommandPath()classifies every path starting with/usr/local/bin/as Homebrew. In a no-Homebrew environment this results in a brew upgrade command, and spawning brew fails with ENOENT. I was able to reproduce that classification and failure locally by simulating a PATH without Homebrew, but I have not tested it on an actual remote Linux box.So this looks like a valid related issue, but it is separate from my original report: my report is about the in-app
server.updateProviderrequest hanging for more than 120 seconds on macOS even though Homebrew is installed and the Claude version is already current.Thanks for looking into it. I can open an issue and link a pr.
I believe the issue is that the version of Claude Code on Homebrew is always slightly behind and thus the warning is always present ...
Confirming the hypothesis in the comment above, with evidence from a
t3 triagesession on an affected machine.The Homebrew cask genuinely lags npm, and T3 compares against npm regardless of install channel. Measured today:
$ curl -s https://registry.npmjs.org/@anthropic-ai%2Fclaude-code/latest | jq -r .version 2.1.257 $ curl -s https://formulae.brew.sh/api/cask/claude-code.json | jq -r .version 2.1.236 $ claude --version 2.1.236 (Claude Code) $ brew upgrade --dry-run claude-code Warning: Not upgrading claude-code, the latest version is already installedresolveLatestProviderVersion(apps/server/src/provider/providerMaintenance.ts:456) always fetches fromregistry.npmjs.org, even whenresolvePackageManagedProviderMaintenancehas already classified the install as Homebrew-managed and builtbrew upgrade claude-codeas the update command. The advisory is therefore unsatisfiable by its own suggested command until the cask is bumped. Same root cause as #7730.Second, separable defect: the failure is invisible in the provider settings card. The server does reach a correct terminal state —
providerMaintenanceRunner.ts:356-377re-verifies, finds the provider stillbehind_latest, and setsunchangedwith the message "Update command completed, but T3 Code still detects an outdated provider version." ButProviderInstanceCard.tsxnever readsupdateState; it only swaps the button label between "Updating" and "Update now" (lines 753-757). The message is discarded.Trace from two consecutive clicks:
ProviderMaintenanceRunner.runProviderUpdate durationMs: 437.79 exit: Success ProviderMaintenanceRunner.runProviderUpdate durationMs: 411.91 exit: SuccessThe user sees a sub-second spinner, no explanation, and an infinitely re-clickable button. Note this differs from the original report's >120s hang — here the command returns almost immediately; the shared symptom is the silent no-op.
ProviderUpdateEnvironmentRows.tsxdoes handleunchanged(renders a "Retry" button with a warning tone), so the gap is specific to the settings card.Repro: install Claude Code via
brew install --cask claude-code; wait for any npm release to land ahead of the cask bump (happens every release); open Settings → Providers → Claude → "Update now". Spinner, then nothing, repeatable indefinitely.Environment: T3 Code 0.0.37, macOS darwin arm64 25.5.0, Node v26.5.0, local server via
npx t3. Claude Code 2.1.236 via Homebrew cask,clauderesolving through/opt/homebrew/bin/claude→/opt/homebrew/Caskroom/claude-code/2.1.236/claude. Not fixed onmain— the last commit touchingproviderMaintenance.tsis dc0ff8f (2026-08-15), and0.0.38-nightly.20260901.1248still has the npm-only lookup.Workaround: disable the "Check provider versions" toggle in Settings, or wait for the cask bump.
Investigated with Claude Fable 5 in Claude Code, alongside
t3 triagemachine facts.
Before submitting
Area
apps/desktop
Steps to reproduce
Expected behavior
T3 Code should run the configured update command shown in the provider dialog (brew upgrade claude-code), refresh the provider version and status, and remove the Claude still needs an update warning when the installed version is already current.
Actual behavior
Clicking Update has no visible effect. The UI stays on Updating providers / Running provider update command. for a long time. A slow-request warning then reports 1 request waiting longer than 120s and shows server.updateProvider. After that, T3 Code still reports Provider still needs an update / Claude still needs an update, and the Claude provider remains at v2.1.231 with the Update button still available.
When I run the suggested command manually, Homebrew reports: Warning: Not upgrading claude-code, the latest version is already installed.
Impact
Minor bug or occasional failure
Version or commit
T3 Code (Alpha) 0.0.34 (and previous)
Environment
macOS 15.7.3 (24G419), arm64; T3 Code (Alpha) 0.0.34; Yandex Browser 26.6.3.910; Homebrew 6.0.19. Claude Code 2.1.231 installed via Homebrew Cask claude-code; Codex CLI 0.149.1; OpenCode CLI 1.18.23 installed but disabled in T3 Code. Claude and Codex are enabled in T3 Code; Cursor, Grok, and OpenCode are disabled. The suggested Claude update command is brew upgrade claude-code.
Logs or stack traces
Screenshots, recordings, or supporting files
codex-clipboard-a8673327-eb13-4007-b639-1b13fccc3911.png
image (1).png
codex-clipboard-5a481ad1-82d3-4ac4-8097-ca3ae1532b0e.png
codex-clipboard-7aa6fe97-575b-442a-8bca-82c3b8355d15.png
codex-clipboard-08b3f8fa-3f47-4e66-8fa7-5e5403ca776b.png
codex-clipboard-47d61257-240c-4ea8-97e1-d6154a511f8d.png
codex-clipboard-076527ad-23ce-4ab5-9104-c165565a9f63.png
Workaround
No confirmed workaround. Running brew upgrade claude-code manually confirms that Homebrew already has the latest Claude Code version installed, but T3 Code continues to show Claude as outdated.
Related issues and PRs:
This report focuses on the additional failure mode: the in-app server.updateProvider request remains pending for more than 120 seconds and the update flow never settles.