You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
orchestration worker-start --agent claude fails at agent_readiness on Windows (Claude Code 2.1.301); --terminal works #30111
orca orchestration worker-start --agent claude always fails at agent_readiness (lastError: "timeout") on Windows, even though the launched Claude Code terminal is visibly at its input prompt. Starting the worker with --terminal <handle> on a Claude Code instance that is already running works fine. Codex workers started with --agent codex work on the same machine.
Environment
Orca 1.4.229, Windows 11 Pro (build 10.0.26300), default shell PowerShell (Windows PowerShell 5.1)
Claude Code 2.1.301
Claude agent permission mode in Orca: Yolo (claude --dangerously-skip-permissions); the one-time "Bypass Permissions mode" acceptance had already been accepted by the user
Orca hooks are present in Claude's settings.json
Steps to reproduce
Start a coordinator terminal in a worktree and create a Run and a Task (run-create, task-create, using --from <coordinatorHandle>).
orca orchestration worker-start --from <coordinator> --task <taskId> --worktree current --agent claude --json
Actual result
The call returns state: "failed", stage/failedStage: "agent_readiness", lastError: "timeout", with the default 60 s and also with --timeout-ms 240000 (a --retry-of retry behaves the same). The created terminal is left behind (recovery text suggests worker-release). worker-show on that dispatch shows the terminal as live, and its preview is Claude Code's normal idle composer:
❯ Try "edit <filepath> to..."
⏵⏵ bypass permissions on (shift+tab to cycle) · ← for agents
Expected result
The worker is considered ready once Claude Code shows its composer, and the Task is delivered.
What I checked
In a normal Orca terminal where I start claude --dangerously-skip-permissions myself and then run orca terminal wait --terminal <handle> --for tui-idle, the wait is satisfied (satisfied: true).
orca orchestration worker-start --task <taskId> --terminal <that handle> succeeds, Claude receives the task, completes it, and sends worker_done normally.
worker-start --agent codex succeeds in the same Run.
Looking at src/main/runtime/launched-agent-composer-readiness.ts and agent-state-rules/claude.json: Claude uses the tui-idle lane with launchReadiness: true, and its only idle anchors are the ✳ / * title prefixes with requiresQuiet: true. I did not confirm the cause, but my guess is that, for this Claude Code version, the launch-readiness path never sees a quiet window and/or the expected title, while the plain tui-idle wait does.
Workaround
Open a terminal, start Claude Code in it, then use worker-start --terminal <handle> instead of --agent claude.
Note: this report was prepared with the help of an AI assistant (Claude Code), which ran the commands above on the reporter's machine.
Confirming this on macOS with Orca 1.4.229 and Claude Code v2.1.266 — so it's not Windows-specific, and it spans at least Claude Code 2.1.266–2.1.301. Two pieces of new evidence that complicate the picture:
1. The --terminal workaround does not work on macOS. Reusing a fully-booted, idle Claude terminal still timed out at agent_readiness:
The terminal had Claude Code sitting at a live idle composer the whole time (❯ prompt, ⏵⏵ bypass permissions on). This rules out slow first-boot as the cause and points squarely at the launch-readiness lane never recognizing this TUI version — consistent with the claude.json idle-anchor suspicion in the OP, but also suggesting the plain tui-idle path is not consulted on --terminal starts here the way it apparently is on Windows.
2. The fleet layer and the readiness gate disagree. After an app relaunch, worker-list --run <id> --include-remote --json reported the failed Claude dispatch with projection.liveness.verdict: "live" (source: agent_status, fresh observation) while stage.detail stayed agent_readiness / failed. Orca could see the agent was alive; only readiness couldn't.
Consequence worth calling out: three consecutive detection-gap failures tripped the documented circuit breaker and permanently failed Task task_e5307f961d76 (--retry-of now refused with task_not_startable). So a readiness-detection gap doesn't just waste time — it burns the Task. Consider treating a fleet-verified live agent at an idle composer as readiness evidence, or failing these starts with a distinct code that doesn't consume circuit-breaker strikes. Full receipt trail: dispatches ctx_43ffadb384bb (claude, --agent), ctx_36cae3f8c3c5 (claude, --terminal reuse), run run_0872486ca7ed.
Codex side note (distinct blocker, possibly overlaps #25007):--agent codex on the same machine (Codex v0.163.0, YOLO mode) also timed out at agent_readiness (dispatch ctx_54b014b7b410) — but its terminal was parked on Codex's "Set up security for Daybreak mode" account modal (Press a number to choose · esc to dismiss), which blocks prompt injection entirely. Whatever the readiness fix is, modal-blocked agents may need their own detection/dismissal path.
Note: this report was prepared with the help of an AI assistant (Kimi), which ran the commands above on the reporter's machine.
Confirmed fixed in 1.4.230 (macOS, Claude Code v2.1.266 — same machine and same Claude build as my report above, so the Orca upgrade is the only variable).
Full supervised loop now passes end-to-end:
worker-start --agent claude → state: ready, stage: input_accepted (on 1.4.229 this timed out at agent_readiness three consecutive times, including the --terminal warm-reuse variant)
Worker received the task, executed it, sent worker_done with outcome: succeeded
check --wait → worker-release → check --ack all clean; final worker-list shows 0 reclaimable terminals
Receipt IDs for your telemetry: run run_748417b533c2, task task_300649fa31cb, dispatch ctx_494e883b6aad, delivery delivery_dc10ab4c691a.
Note the v1.4.230 release notes don't mention readiness — worth a changelog line, since anyone who hit this on 1.4.229 won't know to retry. Leaving whether to close this issue to you, since the Windows --agent case in the OP may still want separate verification.
Note: this confirmation was produced with the help of an AI assistant (Kimi), which ran the commands above on the reporter's machine.
Thanks for reporting this! The agent readiness wait was reworked in #27925 and another reporter confirmed worker-start --agent claude now works on 1.4.230. Could you confirm on the latest build on Windows? Please reply if it still times out at agent_readiness.
Still reproduces on Windows 11 with Orca 1.4.239 and 1.4.240, Claude Code 2.1.310, Orca agent permission "Own settings" (no --dangerously-*), default shell PowerShell.
orca orchestration worker-start --worktree current --agent claude --model sonnet --effort low --timeout-ms 90000 --spec "..." → state: failed, failedStage: agent_readiness, lastError: timeout (also with 60 s and 180 s). The worker terminal sits at Claude's idle composer the whole time.
What I observed:
The worker's SessionStart hook does reach Orca. %APPDATA%\orca\agent-hooks\last-status.json has an entry for the worker pane with hookEventName: SessionStart, payload.state: done, sessionBoundary: true, and a launchTokenHash.
On that worker terminal, even a plain orca terminal wait --terminal <worker> --for tui-idle --timeout-ms 15000 times out.
A Claude started with orca terminal create --command "claude --model sonnet --effort low" in the same worktree (no launch token; its SessionStart entry has no launchTokenHash) satisfies --for tui-idle right away.
Handing that pre-launched terminal to worker-start --terminal <handle> works end to end: state: ready, stage: input_accepted, then worker_done arrives about 15 s later. The catch is that worker-release leaves it retained (external_terminal), so we close it ourselves.
So on Windows the readiness lane seems to ignore, or never match, the launch-token-bearing hook status for Orca-launched Claude, while untokened terminals are fine. Codex workers via --agent codex work on the same machine.
Activity
AmethystLiang commentedon Oct 18, 2026
looking into it
gildedge commentedon Oct 19, 2026
Confirming this on macOS with Orca 1.4.229 and Claude Code v2.1.266 — so it's not Windows-specific, and it spans at least Claude Code 2.1.266–2.1.301. Two pieces of new evidence that complicate the picture:
1. The
--terminalworkaround does not work on macOS. Reusing a fully-booted, idle Claude terminal still timed out atagent_readiness:The terminal had Claude Code sitting at a live idle composer the whole time (
❯prompt,⏵⏵ bypass permissions on). This rules out slow first-boot as the cause and points squarely at the launch-readiness lane never recognizing this TUI version — consistent with theclaude.jsonidle-anchor suspicion in the OP, but also suggesting the plaintui-idlepath is not consulted on--terminalstarts here the way it apparently is on Windows.2. The fleet layer and the readiness gate disagree. After an app relaunch,
worker-list --run <id> --include-remote --jsonreported the failed Claude dispatch withprojection.liveness.verdict: "live"(source: agent_status, fresh observation) whilestage.detailstayedagent_readiness/failed. Orca could see the agent was alive; only readiness couldn't.Consequence worth calling out: three consecutive detection-gap failures tripped the documented circuit breaker and permanently failed Task
task_e5307f961d76(--retry-ofnow refused withtask_not_startable). So a readiness-detection gap doesn't just waste time — it burns the Task. Consider treating a fleet-verifiedliveagent at an idle composer as readiness evidence, or failing these starts with a distinct code that doesn't consume circuit-breaker strikes. Full receipt trail: dispatchesctx_43ffadb384bb(claude,--agent),ctx_36cae3f8c3c5(claude,--terminalreuse), runrun_0872486ca7ed.Codex side note (distinct blocker, possibly overlaps #25007):
--agent codexon the same machine (Codex v0.163.0, YOLO mode) also timed out atagent_readiness(dispatchctx_54b014b7b410) — but its terminal was parked on Codex's "Set up security for Daybreak mode" account modal (Press a number to choose · esc to dismiss), which blocks prompt injection entirely. Whatever the readiness fix is, modal-blocked agents may need their own detection/dismissal path.Note: this report was prepared with the help of an AI assistant (Kimi), which ran the commands above on the reporter's machine.
gildedge commentedon Oct 21, 2026
Confirmed fixed in 1.4.230 (macOS, Claude Code v2.1.266 — same machine and same Claude build as my report above, so the Orca upgrade is the only variable).
Full supervised loop now passes end-to-end:
worker-start --agent claude→state: ready,stage: input_accepted(on 1.4.229 this timed out atagent_readinessthree consecutive times, including the--terminalwarm-reuse variant)worker_donewithoutcome: succeededcheck --wait→worker-release→check --ackall clean; finalworker-listshows 0 reclaimable terminalsReceipt IDs for your telemetry: run
run_748417b533c2, tasktask_300649fa31cb, dispatchctx_494e883b6aad, deliverydelivery_dc10ab4c691a.Note the v1.4.230 release notes don't mention readiness — worth a changelog line, since anyone who hit this on 1.4.229 won't know to retry. Leaving whether to close this issue to you, since the Windows
--agentcase in the OP may still want separate verification.Note: this confirmation was produced with the help of an AI assistant (Kimi), which ran the commands above on the reporter's machine.
nwparker commentedon Oct 24, 2026
Thanks for reporting this! The agent readiness wait was reworked in #27925 and another reporter confirmed worker-start --agent claude now works on 1.4.230. Could you confirm on the latest build on Windows? Please reply if it still times out at agent_readiness.
DavidCho1024 commentedon Oct 26, 2026
Still reproduces on Windows 11 with Orca 1.4.239 and 1.4.240, Claude Code 2.1.310, Orca agent permission "Own settings" (no
--dangerously-*), default shell PowerShell.orca orchestration worker-start --worktree current --agent claude --model sonnet --effort low --timeout-ms 90000 --spec "..."→state: failed,failedStage: agent_readiness,lastError: timeout(also with 60 s and 180 s). The worker terminal sits at Claude's idle composer the whole time.What I observed:
SessionStarthook does reach Orca.%APPDATA%\orca\agent-hooks\last-status.jsonhas an entry for the worker pane withhookEventName: SessionStart,payload.state: done,sessionBoundary: true, and alaunchTokenHash.orca terminal wait --terminal <worker> --for tui-idle --timeout-ms 15000times out.orca terminal create --command "claude --model sonnet --effort low"in the same worktree (no launch token; itsSessionStartentry has nolaunchTokenHash) satisfies--for tui-idleright away.worker-start --terminal <handle>works end to end:state: ready,stage: input_accepted, thenworker_donearrives about 15 s later. The catch is thatworker-releaseleaves itretained(external_terminal), so we close it ourselves.So on Windows the readiness lane seems to ignore, or never match, the launch-token-bearing hook status for Orca-launched Claude, while untokened terminals are fine. Codex workers via
--agent codexwork on the same machine.