Skip to content

[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

Closed

Description

@WhiteWarrior625

What happens

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.

Where (v0.1.2-nightly.20261021.3486, 680152e)

  • 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:

  1. 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.
  2. 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

  1. juliusmarminge commented on Oct 21, 2026

    @juliusmarminge
    Member

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions