Repository navigation
fix(claude): steer interrupts the running turn instead of queueing behind it - #12541
Closed
nekohasekai wants to merge 2 commits into
Closed
nekohasekai wants to merge 2 commits into
nekohasekai wants to merge 2 commits into
Conversation
nekohasekai
force-pushed
the
fix/claude-steer-interrupts-turn
branch
from
September 19, 2026 04:44
ca06d93 to
99db6dc
Compare
…hind it For Claude, Steer was indistinguishable from Queue. The message reached the CLI's stdin at once, but Claude only folds a queued user message into a running turn between tool rounds, so behind a long tool call or a subagent it sat there arbitrarily long and the send-now arrow appeared to do nothing. The only affordance that did land was Stop, which for Claude closes the session and takes its commands and subagents with it. ProviderSendTurnInput gains interruptActiveTurn. The Claude adapter aborts the running turn before opening a new one for the message, waiting on the turn's terminal result rather than the interrupt acknowledgement, which returns while tools are still unwinding. A CLI that refuses or never settles degrades to the previous steer, so a correction is late rather than lost. Wired to all three entry points: the Follow-up behaviour setting, the per-message modifier, and the arrow on a queued row. Queue is unchanged; the queue's own drain and annotation drops do not interrupt. Stop is untouched and stays a hard session boundary for Claude, as pingdotgg#5891 made it. That makes nativeInterruptAndSend load-bearing rather than an optimisation: adapters that do not declare it take a generic interrupt-then-send in ProviderService, which is only safe where interruptTurn leaves the session alive - Codex, Cursor, OpenCode, Grok, Antigravity. Mobile has no send-now affordance and no Queue/Steer setting. Measured against a real Claude Sonnet 5 session running ping -c 40 through Bash: clicking the arrow mid-tool answered the correction after 35.2s before (the ping's remaining runtime) and 2.1s after, with the turn cut from 51s to 15s. Prepared with Claude Opus 5 in T3 Code.
nekohasekai
force-pushed
the
fix/claude-steer-interrupts-turn
branch
from
September 19, 2026 04:45
99db6dc to
2bc6038
Compare
Member
|
we're not making core orchestrator fixes on main right now awaiting v2. if it's still a bug when v2 lands feel free to re-file |
2 tasks done
Open
2 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For Claude, Steer was indistinguishable from Queue: the message reached the CLI's stdin at once, but Claude only folds a queued user message into a running turn between tool rounds, so behind a long tool call or a subagent it sat there arbitrarily long. Stop was the only affordance that landed, and for Claude it closes the session and takes its commands and subagents with it.
This brings the arrow in line with Codex, where sending mid-turn interrupts rather than queues behind the current work.
ProviderSendTurnInputgainsinterruptActiveTurn. The Claude adapter aborts the running turn before opening a new one for the message, waiting on the turn's terminal result rather than the interrupt acknowledgement, which returns while tools are still unwinding; a CLI that refuses degrades to the previous steer. It is wired to the Follow-up behaviour setting, the per-message modifier, and the arrow on a queued row. Queue is unchanged, and Stop stays a hard session boundary, sonativeInterruptAndSendkeeps Claude offProviderService's generic interrupt-then-send, which is only safe whereinterruptTurnleaves the session alive.Claude Sonnet 5 running
ping -c 40through Bash, arrow clicked mid-tool: the correction was answered after 35.2s before and 2.1s after, and the turn went from 51s to 15s.Prepared with Claude Opus 5 in T3 Code.
Summary by CodeRabbit