Repository navigation
Description
What happened
The user, in their own words: "i cannot seem to update the claude code runtime. i get the following error: Claude: Update command completed, but T3 Code still detects an outdated provider version."
This was a fresh install of the desktop app. Clicking Update now for Claude in Settings → Providers runs successfully every time, but the Claude version never changes and the same message comes back.
Diagnosis
T3 Code compares a native Claude Code install against npm's latest dist-tag, while claude update follows the update channel set in Claude Code's own settings. With "autoUpdatesChannel": "stable", the two disagree whenever stable is behind latest, and the update can never succeed.
- Claude Code is the native install:
~/.local/bin/claude→~/.local/share/claude/versions/2.1.308. ~/.claude/settings.jsonhas"autoUpdatesChannel": "stable".- npm dist-tags at the time:
stable: 2.1.308,latest: 2.1.312,next: 2.1.312. - The version advisory takes "latest" from
https://registry.npmjs.org/@anthropic-ai/claude-code/latest(fetchNpmLatestVersion,packages/provider-core/src/server/maintenanceResolver.ts:820). It reports 2.1.312 and marks 2.1.308 asbehind_latest. - Update now runs
claude update(native resolver,apps/server/src/provider/Drivers/ClaudeDriver.ts:84). That command follows the stable channel, finds 2.1.308 is current, and exits 0 without installing anything. runCommandAndVerify(apps/server/src/provider/providerMaintenanceRunner.ts:536-548) re-probes, still finds the provider outdated, and returns "Update command completed, but T3 Code still detects an outdated provider version."- 2.1.308 is inside T3's supported range (
>=2.1.280,compatibilityAdvisory.status = supported), so the warning is a false alarm. - Switching the channel to
latestconfirmed the cause.claude updatethen printed "Checking for updates to latest version..." and installed 2.1.312. mainstill fetches the npmlatesttag, so this is not fixed in a newer release.
Possible fixes:
- For native installs, read
autoUpdatesChannelfrom the Claude config dir T3 already resolves (resolveClaudeConfigDirPath), and compare against the matching npm dist-tag (for example/stable). - Or, when the native update exits 0 and the version is unchanged, say that Claude Code's update channel has nothing newer, and stop offering Update now for that version.
Steps to reproduce
- Install Claude Code natively, so
clauderesolves to~/.local/bin/claude. - Set
"autoUpdatesChannel": "stable"in~/.claude/settings.json. - Check that npm's
stabletag is behindlatest:npm view @anthropic-ai/claude-code dist-tags. - Open T3 Code → Settings → Providers. Claude shows an update is available. Click Update now.
- Result: "Update command completed, but T3 Code still detects an outdated provider version." The version is unchanged, and every retry gives the same result.
Version
0.1.3 (desktop app, T3 Code (Beta), fresh install)
Environment
macOS 27.0.1 (26A434), arm64, Node v26.12.1, Claude Code 2.1.308 (native install, stable channel)
Evidence
$ npm view @anthropic-ai/claude-code dist-tags
{ "stable": "2.1.308", "latest": "2.1.312", "next": "2.1.312" }
# T3 provider status cache (caches/claudeAgent.json)
versionAdvisory.status = behind_latest
versionAdvisory.currentVersion = 2.1.308
versionAdvisory.latestVersion = 2.1.312
versionAdvisory.updateCommand = ~/.local/bin/claude update
compatibilityAdvisory.status = supported (recommendedRange >=2.1.280)
# server.trace.ndjson: three update attempts, all Success, version unchanged
09:45:44Z ProviderMaintenanceRunner.runProviderUpdate 2772ms Success
09:45:59Z ProviderMaintenanceRunner.runProviderUpdate 2534ms Success
09:51:30Z ProviderMaintenanceRunner.runProviderUpdate 2609ms Success
# ~/.local/share/claude/versions/ afterwards: 2.1.292, 2.1.304, 2.1.308 (nothing new)
# after changing autoUpdatesChannel to "latest"
$ claude update
Current version: 2.1.308
Checking for updates to latest version...
Updating to 2.1.312...
Successfully updated from 2.1.308 to version 2.1.312Related issues
- [Bug]: Standalone Codex update succeeds but stays outdated when native latest lags npm #23937 has the same symptom for standalone Codex, where the native updater lags npm during a release window. Here the cause is a channel the user chose, which T3 can read from Claude Code's settings.
- [Bug]: Chocolatey Claude installs run
claude updateand are compared against npm, so the update always fails #22810: Chocolatey installs of Claude are compared against npm. - [Bug]: Provider update result message persists after refresh, even once the provider is up to date #24330: the update result message persists after refresh.
None of these covers Claude Code's autoUpdatesChannel.
Fix applied or workaround
With the user's approval, autoUpdatesChannel in ~/.claude/settings.json was changed from "stable" to "latest", then claude update was run, which installed 2.1.312. Users who want to stay on stable can ignore the warning, since the stable version is supported.
Filed by
Claude Code (claude-opus-5-5) via t3 triage
Activity
fairchild commentedon Oct 31, 2026
Hit the same symptom on a nightly build, but with a different cause — worth recording here because the fix proposed above wouldn't have cleared it.
My
autoUpdatesChannelwas already"latest". The mismatch isn't between two channels, it's between two publication pipelines that both call their pointerlatest:latestdist-tag — what the advisory readsclaude-code-releases/latest— whatclaude updatefollowsSo
claude updateis behaving correctly — on thelatestchannel there genuinely is nothing newer than 2.1.314 — and it exits 0. ThenrunCommandAndVerifyre-probes, still sees 2.1.314 < 2.1.316, and returns the message. Permanent loop until the GCS pointer catches up.T3's own cached advisory (
~/.t3/caches/claudeAgent.json):Same code path as the original report, at
e9a11d4:latestfetch —maintenanceResolver.ts:886ClaudeDriver.ts:87-88stillOutdatedbranch —providerMaintenanceRunner.ts:584-595Why the channel-mapping fix is incomplete
Mapping
autoUpdatesChannelto the matching npm dist-tag fixes thestablecase, but not this one: the channel is alreadylatest, and npmlatest(2.1.316) still disagrees with GCSlatest(2.1.314). Any npm dist-tag is the wrong oracle for a native install, because the native installer doesn't read npm at all. For native installs the comparison wantsclaude-code-releases/<channel>as its source of truth.The second suggestion above holds up on its own, and is the cheaper half: when a native update exits 0 and the version is unchanged, treat that as "the update channel has nothing newer" rather than a failure — especially when
compatibilityAdvisory.statusis alreadysupported, as it was here. Nothing was broken; the banner was the only problem.Note on the lag
It's a pointer lag, not a missing build —
claude-code-releases/2.1.316/manifest.jsonreturns 200 with a full platform set includingdarwin-arm64, while thelatestpointer still reads 2.1.314.claude install 2.1.316installed cleanly and cleared the advisory. So a user can escape it manually, but only if they know the npm/GCS split exists.Environment
macOS 27.0.1 (26A434), arm64. T3 Code (Nightly) desktop
0.1.6-nightly.20261030.3940. Claude Code 2.1.314 native (~/.local/bin/claude→~/.local/share/claude/versions/2.1.314),autoUpdatesChannel: "latest",autoUpdates: false.cornishandy commentedon Oct 31, 2026
One more data point on the
claude install 2.1.316escape above: runningclaude updateafterward downgraded my installation back to 2.1.314 while the nativelatestpointer was still behind.So
claude updatecan downgrade an explicitly installed newer version when the native channel pointer lags. If T3 switches to comparing native installs againstclaude-code-releases/<channel>, an installed version newer than that pointer should count as current for the version advisory. T3 shouldn't offer Update now merely because those versions differ: invokingclaude updateunder the conditions above would downgrade the install.T3 Code (Nightly)
0.1.6-nightly.20261030.3940, macOS, native Claude Code,autoUpdatesChannelunset,autoUpdates: false.juanda2222 commentedon Nov 4, 2026
I have been bugged by this a lot and have drafted a proposal here #30612: the course of action should be better messaging around the expectation of
latestvsstablejuliusmarminge commentedon Nov 9, 2026
Thanks for the detailed report. #27958, merged as 6a61904f60, compares native Claude installs against their configured native release channel, fixing the false update warning.