Repository navigation
Description
Summary
On a Linux systemd user service, T3 reports installed Claude and Codex CLIs but cannot verify auth when launching them by name through mise shims. Configuring absolute paths to the underlying binaries immediately restores both providers to authenticated/ready, without restarting the service.
Environment
- Arch Linux / Omarchy, x86_64
- Running server:
0.0.46-nightly.20261005.2676, managed user service - Claude Code
2.1.289; Codex CLI0.160.0 - Service HOME and XDG_CONFIG_HOME match the logged-in user.
- Service PATH contains mise shims, resolving
claudeandcodexto symlinks to/usr/bin/mise.
Observed
Provider cache snapshots and trace timings:
- Claude: installed=true, version=null, auth=unknown;
Claude Agent CLI is installed but failed to run. Timed out while running command.Checks repeatedly last about 4 seconds. - Codex: installed=true, version=null, auth=unknown;
Timed out while checking Codex app-server provider status.Checks repeatedly last about 10 seconds.
Direct claude auth status reports loggedIn=true; codex login status reports logged in using ChatGPT. Running the shim executables with the running server process's environment and cwd in a separate Python subprocess completes both --version calls in about 0.03 seconds. This suggests a difference in T3's subprocess launch/collection path rather than absent credentials; the exact underlying shim interaction is not yet established.
Verified workaround
In the existing provider instances, set config.binaryPath to:
- Claude:
~/.local/share/mise/installs/claude/latest/claude(expanded absolute path) - Codex:
~/.local/share/mise/installs/codex/latest/bin/codex(expanded absolute path)
After the settings watcher refreshed providers, both caches changed to status=ready, auth=authenticated, with correct CLI versions and no error message. No restart or login was needed.
Expected
CLI names resolving through mise shims should work as they do in a direct subprocess. At minimum, provider diagnostics should distinguish launch/probe timeouts from missing authentication and suggest an explicit executable path.
Related
- [Bug]: One transient probe timeout leaves Claude stuck on "Could not verify Claude authentication status" for hours (cause swallowed, no demand-less recheck) #13635: failed auth probes can leave misleading cached states.
- [Bug]: Cursor provider (V2 SDK) ignores existing Cursor CLI/SDK login and forces T3 sign-in or CURSOR_API_KEY #15781: Cursor SDK ignores existing CLI/SDK login. Cursor on this same Linux host is logged in according to
cursor-agent about --format json, but T3 reports unauthenticated. The explicit-path workaround applies only to Claude and Codex; Cursor is a separate existing issue.
No credentials or account identifiers are included in this report.
Activity
juliusmarminge commentedon Oct 5, 2026
Note
Grok responding on behalf of Julius.
Triage
Thanks for the careful investigation, @vayllon301, especially the direct shim timing and the absolute-path check!
What I found
0.0.46-nightly.20261005.2676(78122305) and currentmain(e22c880434); those probe files are unchanged between the two.installed=true,version=null, andTimed out while running commandis the--versionprobe hittingDEFAULT_TIMEOUT_MS(4s) incheckClaudeProviderStatus. That branch only runs once the process has started and not exited; a missingclaudewould be reported as not found on PATH.Timed out while checking Codex app-server provider statusis the wholecodex app-serverhandshake hittingAUTH_PROBE_TIMEOUT_MS(10s). The version comes from that handshake, so it stays null. The "not authenticated, run codex login" message is a separate branch.binaryPathwithshell: false. The child-process spawner starts a new session (detacheddefaults on outside Windows) and leaves stdin as an open pipe nothing writes to or closes. Your ~30ms Python run used the same environment and cwd but not those spawn flags.execwhen stdin isn't a terminal and there's no controlling terminal (its trust/install prompts can wait on stdin or/dev/tty). For Codex that would also hold the JSON-RPC stdin, soapp-servernever starts. A less likely alternative on Omarchy is the~/.local/bin/claudebash stub (exec mise x -- claude) looping when~/.local/binis ahead of the shims, though you reported the names resolving to the shim.If you have a moment, these would help narrow it down:
type -a claudeandtype -a codexfrom the service environment.cat /proc/<child>/cmdlineandls -l /proc/<child>/fd/0to see whether it's a looping stub or mise blocked on the stdin pipe.In the meantime, the absolute install paths you used are a working workaround.
Likely fix area
Options include making the one-shot probes not hold an open stdin (while
codex app-serverstill needs its pipe), and making the timeout message say the probe timed out and point at the provider binary path setting, rather than leavingauth=unknownto read like a logged-out account.A maintainer will decide on the fix direction.
rubenmeza commentedon Oct 5, 2026
On Omarchy, I can confirm it's the looping stub, not mise blocking on stdin.
Setup: Omarchy 4.0.4, t3code-bin 0.0.45 (Omarchy package), mise 2026.10.0, Linux 7.2.5.
~/.local/bin/{claude,codex,gh}are Omarchyomarchy-mise-installstubs:mise use -g --quiet X || exit 1; exec mise x X -- X "$@".What happens:
PATHfrom$SHELL -ilc(LOGIN_SHELL_ENV_NAMESinapps/desktopmain). It does not copy mise's activation state (__MISE_DIFF).~/.local/binahead of the mise shims.__MISE_DIFF,mise xinserts the tool's bin dir where the shims entry sits, which isbehind
~/.local/bin. So the bareclauderesolves to the stub again, and the stub execs itselfforever in the same PID.
Evidence:
/proc/<t3 server pid>/environ), running the stub with</dev/nulland no TTY:claude --versiontimes out (rc=124 at 8s).MISE_DEBUG=1on the gh stub showsARGS: mise x gh -- gh --versionrepeating about 3 times a second.psshows one PID that is alive for minutes, while itsmise use -gchild is always freshly started.__MISE_DIFFback, or putting the shims before~/.local/bin, makes it return in about 0.2s.I ran both cases from the same context, with no controlling TTY and stdin
</dev/null. Only__MISE_DIFFchanged the result (env -u __MISE_DIFF mise x gh -- gh --versiongives rc=124;with the variable it works). So stdin/TTY is not the cause.
ghhits the same loop. That makes everyGitHubClicall (PR lookup) hit its 30s timeout.Omarchy fix: omacom/omarchy#7234 (PRs #8692, #9175, #13769).
T3-side suggestions:
setting. Today it reads as an auth problem.
__MISE_DIFF,__MISE_ORIG_PATHand__MISE_SESSIONfrom the login-shell capture,or resolving provider binaries with
command -vin that same login shell.ghis spawned by bare name (GitHubCli.executeRaw, command"gh")and there's no override, unlike the providers.
Workaround: set the absolute
binaryPath(miseinstalls/<tool>/latest/...) as reported above.For
gh, fix the PATH order.Sergiogd112 commentedon Oct 8, 2026
Hit the same symptom on v0.0.45 (Linux x64, desktop app), and in this case it has a confirmed cause, which may help explain some of the other mise reports here.
Symptom: Claude shows "Unavailable — Claude Agent CLI is installed but failed to run. Timed out while running command."
claude --versionworks instantly in a terminal.Cause:
claudeon PATH was a user wrapper script (~/.local/bin/claude) that delegated through mise:The desktop server's PATH had
~/.local/binbefore~/.local/share/mise/installs/claude/latest. Because the install dir was already on PATH,mise xdidn't move it to the front, soclauderesolved back to the wrapper. Result: infinite recursion (mise use -g clauderepeating forever) until the 4sDEFAULT_TIMEOUT_MSinproviderSnapshot.tsfired. It looks fine in an interactive shell only because PATH is ordered differently there.Repro: run the wrapper with the server process's PATH and stdout piped (as
spawnAndCollectdoes):env -i PATH=<server PATH> HOME=$HOME ~/.local/bin/claude --version | cathangs indefinitely.Fix (user side): change the last line to
exec "$(mise which claude)" "$@", which resolves the real binary directly. With the server's PATH it now returns in ~75ms. Setting an absolute Claude binary path in T3 settings also works, as noted above.Possible T3 improvements: the probe can't tell a hang from slowness, so a message like "
claude --versiondid not exit within 4s; check for wrappers/shims that recurse or wait on the network" would point people in the right direction. Also related: #7230 (a timed-out probe stays cached as an error).Diagnosed via
t3 triagewith Claude Code (Claude Opus 5.5).