Skip to content

Claude Update runs claude update on mise command-wrapper installs (Omarchy) and always reports "still outdated" #27339

Closed

Description

@coygeek

What happened

The user, in their own words: "i saw that one of my boxes needs a claude code update. then when i clicked on it ... it shows me this error ... i think its a bug since omarchy has its own claude code installation method, but somehow t3code doesnt detect or understand this."

The box is an Omarchy (Arch-based) Linux machine connected as a remote environment. T3 Code showed Claude as outdated (2.1.312, latest 2.1.314) and offered Update. Each click ended with:

Update failed — omarchy · Claude: Update command completed, but T3 Code still detects an outdated provider version.

Three attempts gave the same result.

Diagnosis

T3 Code does not recognize Omarchy's mise command-wrapper layout as a mise install, so it runs Claude's native claude update, which declines to update a package-managed install and still exits 0.

  • Omarchy installs agent CLIs through a system mise config, /etc/mise/conf.d/omarchy-tools.toml: claude = { version = "latest", lazy = true, auto_update = "4h", ... } (aqua backend aqua:anthropics/claude-code).
  • The first claude on the T3 server's PATH is ~/.local/share/mise/command-wrappers/bin/claude. That entry is a symlink to the mise binary (/usr/bin/mise), which dispatches on argv[0]. codex and grok get the same wrapper. ~/.local/share/mise/shims and ~/.local/share/mise/installs/claude/latest come later on PATH.
  • isMiseCommandPath (packages/provider-core/src/server/maintenanceResolver.ts:238) matches only /mise/installs/ and /mise/shims/. Neither the wrapper path nor its real path /usr/bin/mise matches. isMiseWrapperScript reads the real path, which is the ELF mise binary, not a #! script, so it returns false as well.
  • isClaudeNativeCommandPath (apps/server/src/provider/Drivers/ClaudeDriver.ts:75) does not match either. Claude's nativeUpdate has no requiresCommandPath, and the path has no node_modules, so resolvePackageManagedProviderMaintenance returns the fallback, which is the native updater: ~/.local/share/mise/command-wrappers/bin/claude update. The cached advisory confirms this: "updateCommand": "~/.local/share/mise/command-wrappers/bin/claude update", "canUpdate": true.
  • Running that command by hand with the server's PATH prints Claude is managed by a package manager. Please use your package manager to update. and exits 0.
  • runCommandAndVerify (apps/server/src/provider/providerMaintenanceRunner.ts:536-548) re-probes, still sees 2.1.312, and reports "still detects an outdated provider version".
  • main at c8a606c has the same isMiseCommandPath, so this is not fixed in a newer build.

Codex on the same machine uses the same wrapper but is unaffected, because its native updater sets requiresCommandPath: true and falls back to manual-only.

Possible fixes:

  • Treat /mise/command-wrappers/ as mise-owned in isMiseCommandPath, and treat any command whose real path's basename is mise (or mise.exe) as mise-owned. That covers wrappers in any directory.
  • Optionally, offer mise up <tool> for mise installs whose configured version is latest. On this machine, mise up claude installed 2.1.314 and the wrapper picked it up immediately.
  • As a safety net, treat a native claude update that prints "managed by a package manager" as a failure and show that line. Today the toast shows only the generic message.

Steps to reproduce

  1. On Linux, install mise (2026.10.21 here) and declare Claude as an auto-updating lazy tool, as Omarchy 4.5 does in /etc/mise/conf.d/omarchy-tools.toml: claude = { version = "latest", lazy = true, auto_update = "4h" }. Confirm that command -v claude returns ~/.local/share/mise/command-wrappers/bin/claude and readlink -f resolves it to the mise binary.
  2. Leave the installed Claude Code one release behind npm latest (here 2.1.312 vs 2.1.314, inside mise's 4h auto-update window).
  3. Start T3 Code (desktop app) on that machine. Claude shows an available update with update command <wrapper> update.
  4. Click Update.
  5. Result: "Update command completed, but T3 Code still detects an outdated provider version." The version is unchanged on every retry.

Version

0.1.6-nightly.20261030.3904 (T3 Code Nightly desktop AppImage on the Omarchy machine, viewed from a Mac desktop app as a remote environment; both on the same nightly)

Environment

Omarchy 4.5.0rc2 (Arch Linux, kernel 7.2.8), x86_64; mise 2026.10.21; Claude Code 2.1.312 via mise aqua backend; Node 26.12.1 (mise)

Evidence

$ command -v claude; readlink -f "$(command -v claude)"
~/.local/share/mise/command-wrappers/bin/claude
/usr/bin/mise

$ ~/.local/share/mise/command-wrappers/bin/claude update   # same command T3 runs
Current version: 2.1.312
Checking for updates to latest version...

Claude is managed by a package manager.
Please use your package manager to update.
$ echo $?
0

# caches/claudeAgent.json
"versionAdvisory": {"status": "behind_latest", "currentVersion": "2.1.312", "latestVersion": "2.1.314",
  "updateCommand": "~/.local/share/mise/command-wrappers/bin/claude update", "canUpdate": true, ...}

# server.trace.ndjson: three attempts, command ~0.5 s each, all Success, version unchanged
2026-10-30T01:20:21Z ProviderMaintenanceRunner.runCommand 499.9ms Success
2026-10-30T01:49:22Z ProviderMaintenanceRunner.runCommand 500.0ms Success
2026-10-30T02:41:29Z ProviderMaintenanceRunner.runCommand 488.2ms Success

$ mise up claude
Upgraded 1 tool:
  claude 2.1.312 → 2.1.314
$ claude --version   # via the same wrapper
2.1.314 (Claude Code)

Related issues

#22810 (Chocolatey shim falls through to claude update), #22741 (Vite+ shim updates the wrong install), #26400 (autoUpdatesChannel: stable). All three end in the same "still outdated" message, but each has a different root cause. This one is the missing mise command-wrapper detection in isMiseCommandPath.

Fix applied or workaround

Ran mise up claude on the affected machine, which installed 2.1.314. The wrapper now reports 2.1.314. Workaround for others: update through mise (mise up claude) instead of the T3 Code Update button.

Filed by

Claude Code (claude-opus-5-5) via t3 triage

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions