Repository navigation
Claude tab: 'could not verify authentication status' when user is on Max OAuth (apiKeySource="none") #2653
Description
Activity
Exact UI string (for codebase grep):
Claude — Limited. Could not verify Claude authentication status from initialization result
The "Limited" prefix suggests t3code has a degraded-provider state distinct from a hard failure. In this state the Claude tab is unusable (no messages render), but the provider isn't fully unloaded. Likely the same code path that emits this banner when other auth checks fail.
I have the same issue, where claude is logged in and works just fine run normally, but won't authenticate in t3 code.
I'm on Windows 11, I got t3 code via the download from the website, and I'm currently on version
0.0.25(though it hasn't worked in previous versions, either.I'm using an enterprise licence, and
claude auth statusreturns:{ "loggedIn": true, "authMethod": "third_party", "apiProvider": "bedrock" }Changing the settings to point to the binary at
C:\Users\<user>\.local\bin\claude.exe, as maicotc-ulbra recommended, doesn't help.I currently don't have my HOME path set up, so I'm unsure if that has any effect.
Same issue
same issue
Hitting this on Linux too (headless server), so it's not just a Windows thing.
My setup: t3 running headless in a container, Claude CLI 2.1.195, OAuth via CLAUDE_CODE_OAUTH_TOKEN (team plan, no ANTHROPIC_API_KEY).
claude -p"say OK" works fine and claude auth status is valid, but the provider card still says "Could not verify Claude authentication status from initialisation result".
My build has zero apiKeySource references, so I'm on theprobeClaudeCapabilities->query().initializationResult()variant rather than the init parser one.For me it's purely a timing thing. The probe wraps initializationResult() in CAPABILITIES_PROBE_TIMEOUT_MS = 8_000, but the SDK init just doesn't return that fast here. I timed the init event directly:
- Full config (plugins + SessionStart hooks + MCP): 10.4s, 10.9s
- SessionStart hook off: 7.96, 8.28, 8.45, 9.21, 9.75, 8.22 (1/6 under 8s)
- All plugins and MCP off: 7.09, 9.16, 8.16, 8.19, 8.54, 9.89 (1/6 under 8s)
So cold start floors around 7s and regularly drifts to 9 to 10s. I couldn't get it reliably under the 8s probe no matter how much I stripped back, it just sits on the line and flaps green/red. Since the probe uses
settingSources: ["user","project","local"]it runs my SessionStart hooks, which added about 2s on their own.Feels like the same fix as #2274 / #2272 where the auth probe got bumped to 10s but doesn't feel like a root cause solution.
Exposing these probe timeouts with env vars would be a bandaid fix.
Same issue on version 0.0.29-nightly.20260630.690. I’m using it on a Windows 11 machine with Claude Max sub. When this happens, I can’t use
/skills; it recognizes only the built-in/model,/plan, and/default.This thread has three different failure modes behind one message. Measurements for the Windows one, confirming @maicotc-ulbra:
A. Windows + npm install: the SDK probe can't spawn
claudeat all.probeClaudeCapabilitieshands the configured path (default"claude") to the SDK'spathToClaudeCodeExecutable, which spawns it with no shell and no PATH/PATHEXT resolution. On Windows, npm installs aclaude.cmdshim. Result (Win 11, CLI 2.1.201, SDK 0.3.170):Path given to SDK Result claude(default)"native binary not found" in 9 ms full path to claude.cmdspawn EINVAL(Node 20.12+ blocks shell-less.cmd)...\claude-code\bin\claude.exeworks: account + 157 commands in 1.5 s The version probe uses
resolveSpawnCommand(handles.cmd), which is why the card shows the right version while auth fails. The probe also swallows the error, hence "no errors in logs".B. @hotpheex's headless-Linux case: spawn succeeds, init just exceeds the 8 s probe timeout. Different fix.
C. @jstephencorey's Bedrock case: exe-path workaround doesn't help, so likely a third mode.PR incoming for A: resolve the command on Windows and follow npm shims to the packaged
claude.exe/cli.js. No auth logic touched (unlike #3559's fallback approach).Can confirm third failure mode @nsxdavid described, so usage via bedrock. I am on mac, t3code 0.0.28 and claude 2.1.201.
claude auth statusgives the same result as @jstephencoreyEdit: maybe its something different for me. Forgot that I started using aws credentials in 1password vault and need to expose the credentials differently. Got normal claude working, but could not point t3code to the wrapper script as the executable
running
claudedirectly on the project directory and making sure to accept permissions first opened up this to work.So it's possible the cli hasn't been approved for that current project.
Hey — managed to fix this on my end (Windows, Max plan). Sharing in case it helps someone.
Digging into the bundle, I think both root causes in the original post are actually off on Windows — the real problem is one layer lower.
TL;DR: the capabilities probe never reads
apiKeySourceat all, and it isn't the hooks. On Windows the Binary path points at the npm shim (claude.cmd), and the Agent SDK can't spawn a.cmd— it dies withspawn EINVALbefore init ever comes back. Point the Binary path at a realclaude.exeand the banner disappears.Correcting the two theories above
- It's not
apiKeySource: "none".probeClaudeCapabilitiescallsquery({ pathToClaudeCodeExecutable }).initializationResult()and readsinit.account(subscriptionType,tokenSource) — it never touchesapiKeySource. The banner fires purely becauseresolveCapabilitiesreturnsundefined. - It's not the SessionStart hooks. I reproduced the probe with my hooks (superpowers + others) active and it returned in ~1.5s, well under the 8s timeout. Hooks aren't what's failing.
What's actually happening
- The version probe (shows
v2.1.xin the UI) uses t3code's own shell-aware spawn, so it works. - The capabilities probe goes through the bundled
@anthropic-ai/claude-agent-sdkand spawnspathToClaudeCodeExecutablewithoutshell: true. - On Windows, spawning a
.cmd/.ps1without a shell throwsspawn EINVAL(Node's post-CVE-2024-27980 behavior) → the promise rejects →resolveCapabilitiesreturnsundefined→status: "warning"→"Could not verify Claude authentication status from initialization result."
So auth was never broken. OAuth/Max works, billing charges Max — the init just never comes back because the subprocess can't launch.
Reproduced it standalone (same options t3code uses)
BIN = claude.cmd -> THREW: spawn EINVAL (4ms) -> banner BIN = claude.exe -> account = { subscriptionType: "Claude Max", apiProvider: "firstParty" } (1.5s) -> OKThe fix (user side)
Point the Binary path at a real
claude.exe, not the npm.cmd.The npm install (
npm i -g @anthropic-ai/claude-code) only shipsclaude.cmd/claude.ps1, which always fail this probe on Windows. The native installer gives you a real exe:C:\Users\<you>\.local\bin\claude.exeYou can get it by running
claude updateonce — it installs/updates the native build there. Set that as the Binary path, restart t3code, and the banner is gone -> showsClaude Max.Suggested fix (t3code side)
When spawning via the Agent SDK on Windows, resolve
.cmd/.ps1shims to a spawnable target or passshell: true— the same handling the version probe already does. AcceptingapiKeySource: "none"won't help on Windows, because the init never returns in the first place.Env: Windows 11, Claude Code 2.1.216, agent-sdk 0.3.195.
- It's not
for me the previous solution didn't work, I have it installed on npm (probably an old version?)
I did
claude doctor
which showed I had it on
C:\Users<username>\AppData\Roaming\npm\node_modules@anthropic-ai\claude-code\bin\claude.exeupdated the path and is now working
My PR on this was closed without comment. Not sure what the plan is. Maybe the underlying infra changed and the PR was not relevant anymore.
Thanks for the detailed reports and follow-up diagnosis. We believe this is fixed by PR #3740, PR #3931, and PR #4466.
T3 now resolves Windows npm Claude shims to a spawnable executable before the SDK starts. The capability probe also recognizes Bedrock accounts, has a bounded startup time, and skips user hooks that can block or alter authentication checks.
I'm closing this as fixed as part of an automated pass on all open issues. If Max OAuth authentication still cannot be verified in a build that includes these PRs, please reply with the OS, Claude installation path, authentication type, and capability-probe error, and we can reopen it.

Environment
claude --version)~/.claude/.credentials.json), noANTHROPIC_API_KEYset in user/machine env~/.claude/settings.json(cap-guard, ready-queue summary, workspace-root-guard)Symptom
Opening the Claude tab and sending any prompt returns
could not verify authentication status from initialization result. No assistant content rendered.Likely root cause: misinterpreting
apiKeySource: "none"Running the same command t3code presumably spawns:
…with ANTHROPIC_API_KEY unset (i.e. an OAuth/Max-plan setup) emits this
initevent:{"type":"system","subtype":"init", ...,"apiKeySource":"none","claude_code_version":"2.1.139", ...}apiKeySource: "none"is the expected value for OAuth/Max users — it means "no API key needed, OAuth is being used." Following events stream normally and the assistant returns the response cleanly:{"type":"assistant","message":{...,"content":[{"type":"text","text":"pong"}], ...}} {"type":"result","subtype":"success","is_error":false,"result":"pong", ...}So Claude Code IS authenticated and DOES return content. T3code's init parser appears to treat
apiKeySource: "none"as "no auth resolved" and throw before consuming subsequent events.Contributing factor: SessionStart hook events come BEFORE the init event
If the user has SessionStart hooks configured, claude emits hook lifecycle events first:
T3code may also be hitting a timeout or first-event mismatch on the hook events before reaching the init event.
What works (confirmed)
claude --print "say pong"returnspongcleanly from the same shell (with ANTHROPIC_API_KEY cleared)resultstream event reportstotal_cost_usd > 0(real billing under the Max plan)Suggested fix
apiKeySource: "none"as valid auth (OAuth path)type: "system", subtype: "hook_started"andhook_responseevents when scanning for theiniteventPossibly related
Same renderer bucket as #2652 (OpenCode tab assistant messages save to opencode.db but don't render). v0.0.23 alpha may have multiple init/parser bugs across provider tabs.