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
[Bug]: Agent-sent t3_thread_send in auto mode cancels a Claude thread's running tools, and Claude reads it as the user refusing #23061
Another agent sends a message to a busy Claude thread with t3_thread_send and mode: "auto" (the default). T3 steers it into the active turn, and every tool call in flight is cancelled. Claude gets the SDK's interruption text as each cancelled tool's result: "The user doesn't want to take this action right now. STOP what you are doing and wait for the user to tell you how to proceed." The steered message then arrives as plain user text, with no sign that it came from another thread.
Claude therefore reads the agent's status message as the human cancelling its work. It stops, does not retry the cancelled call, and tells the human it is "holding until you say how to proceed". We have seen this in a long-running coordinator thread: a delegated worker's status update landed during a tool call, and the coordinator dropped its task.
ClaudeAdapterV2.ts:356-357: supportsActiveSteering: true and activeSteeringInterruptsTools: true.
ClaudeAdapterV2.ts:9744: "A steer is sent with priority "now", which cancels the root turn's running tool calls".
ClaudeAdapterV2.steerTurn (around line 9830) builds the user message from turnInput.message.text alone. The message's senderThreadId (it exists on OrchestrationV2ConversationMessage and is carried through Orchestrator/EffectWorker) does not reach the text Claude sees.
The t3_thread_send tool description says mode='auto' "steers a fully active turn".
Related but different: #15351 / #15892 queued delegated-task notifications behind active tools, and #18914 covers notifications interrupting a pending human question. This report is about agent-to-agent t3_thread_send in auto mode.
Expected
Either of these would fix it:
When a message has a senderThreadId (agent origin), auto queues it behind the active turn instead of steering with priority "now". An explicit steer stays available.
When an agent-origin message does steer, the text Claude receives is labelled as coming from another thread, not the user (for example a short leading block naming the sender thread). Claude can then tell the cancelled tools were not a human refusal.
Option 1 avoids the cancellation; option 2 at least makes it interpretable. The tool description could also note that a steer cancels the receiver's running tools.
Environment
T3 Code v0.1.2-nightly.20261021.3486 (Linux desktop), Claude provider via the Agent SDK, sender threads on Codex and Claude.
Activity
juliusmarminge commentedon Oct 21, 2026
Duplicate of https://git.cafe/pingdotgg/t3code/issues/21895, which reports the same agent-sent steer cancelling a Claude thread's running tools and surfacing as a user refusal. A fix is open in https://git.cafe/pingdotgg/t3code/pulls/21158 (agent messages no longer cancel Claude tools). Closing this one so the discussion stays in one place; please add anything new there.