t3_thread_send agents pick mode "queue" for running threads since the tool copy cut, so messages queue instead of steering
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 68/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- typescript
调研方向
查找工具 t3_thread_send 的说明和 OrchestratorMcpThreadSendInput.mode schema;issue 未提供它们的文件路径。阅读当前副本和 schema,然后更新内容,说明 auto 是通常的默认值,而 queue 用于有意分开的后续轮次。当两处说明都引导代理使用 auto,除非明确打算使用 queue 时,即为完成。
由索引模型根据 Issue 内容生成。
描述
What happened
The t3 orchestrator in nightly seems to almost always send messages as queued messages instead of mid session steers. This used to be the other way around.
An orchestrating agent thread used t3_thread_send to message another thread that was mid-turn. The message showed up in the target thread's queue instead of being steered into the running turn, so the user had to promote it to a steer manually. The user reports this started a few days ago on nightly and does not depend on the provider.
Diagnosis
The server's delivery logic is working as designed. The agent explicitly passed mode: "queue":
mcp__t3-code__t3_thread_send { threadId: "ccd69e8e-…", mode: "queue", message: "FYI from another thread (no action needed): …" }
→ { runId: "…:ordinal:4", status: "queued", delivery: "queued" }
With mode omitted or set to "auto", ThreadManagementService.sendToThread would have picked steer_active. The target's run 3 was running and its provider turn was running (it was in the middle of a long tool call), so latestSteerableRun() would have matched.
What changed is the agent's choice of mode. In this user's history, every t3_thread_send call before 2026-10-25 passed mode: "auto" (11/11, which resulted in started or steered). The first call after updating passed mode: "queue". The likely trigger is #24850 ("cut T3's agent instructions and tool copy by 60%", 2026-10-25), which rewrote the t3_thread_send description:
- Before: "…mode='auto' starts an idle thread, steers a fully active turn, or queues behind a turn that is not yet steerable. Use queue for a separate follow-up turn, steer for an in-flight update, or restart to interrupt-and-restart the active turn. …"
- After (still on
main): "mode:'auto'starts an idle thread, steers a running turn, or queues.queue: new turn.steer: mid-turn update.restart: interrupt and restart. …"
The new copy lists the four modes as equal options. Neither the description nor the schema (OrchestratorMcpThreadSendInput.mode is a bare optional literal with no description) tells the agent that auto is the default and the normal choice. For an informational "no action needed" message, queue: new turn looks like a reasonable pick to the model. But that delays the message until the target's current turn ends and adds a whole extra turn just to read an FYI.
The evidence is thin: there is one call after the change, and mode selection is a model decision rather than a deterministic code path. Still, the switch from consistent auto to queue lines up with the copy change.
Suggested direction: state in the tool description and/or the mode schema description that auto is the default and should normally be omitted or used, and that queue is only for deliberately separate follow-up turns.
Steps to reproduce
- On nightly
0.1.3-nightly.20261025.3682, start a long-running turn in thread B (for example, a tool call that takes a minute or more). - In thread A (Claude), ask the agent to send thread B an informational update via
t3_thread_send. - Look at the tool call input: the agent may pass
mode: "queue". The message lands in B's queue (delivery: "queued") instead of being steered into the running turn. - Compare with a build from before #24850, where agents in the same situation passed
mode: "auto"and the message was steered.
This is not deterministic, because it depends on which mode the model picks.
Version
0.1.3-nightly.20261025.3682 (desktop app, T3 Code (Nightly), local server). The triage CLI was 0.1.2.
Environment
macOS 26 (Darwin 25.6.0, arm64), Node v26.12.1. Desktop Nightly app against its local server. The orchestrator thread runs Claude; the user reports the same behavior regardless of provider.
Evidence
# Target thread ccd69e8e-… (UTC), from statev2.sqlite projections
run 3 running 10:15:13 → 10:17:53 (provider turn 3 running throughout)
10:17:16 t3_thread_send from thread 9403dd35-… with mode:"queue" → new run 4, status queued, delivery "queued"
10:17:44 user promotes queued message → run 4 cancelled, turn item inputIntent "promoted_queued_to_steer" in run 3
# t3_thread_send calls by the agent in this install (mode → delivery)
2026-10-20 auto → started ×6, steered ×1
2026-10-21 auto → started ×2 (+1 unknown)
2026-10-23 auto → started ×1
2026-10-26 queue → queued ×1 # first after #24850
Related issues
#24711 and #24667 are also about agent-to-agent t3_thread_send, but they cover how the receiver interprets the message, not which delivery mode is chosen. I didn't find an existing issue for this.
Fix applied or workaround
Nothing changed on the machine. Possible workaround: tell orchestrating agents in their instructions to omit mode (or use auto) for t3_thread_send unless they're asked to queue.
Filed by
Claude Code (claude-opus-5-5) via t3 triage
- 主要语言
- TypeScript
- 星标
- 24.8k
- 派生
- 6.4k
- 平均合并
- 3 小时 21 分钟
- 30 天内合并 PR
- 297
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
pingdotgg/t3code 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
"Open question" banner opens an empty new thread when the child thread runs on a linked environment未关闭
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 66/100
pingdotgg/t3code#26989 · 1 个 reaction ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 82/100
better-auth/better-auth#12132 · 1 个 reaction ·
维护者通常 1 天内回复
-
o8 next debug build aborts on Glass to Dark appearance switch (nil identifier messaged before check)未关闭bug
难度 2/5 1-3 小时 新手友好度 78/100
hurttlocker/o8#5112 ·
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
webrecorder/wabac.js#386 ·
-
needs-triage
难度 1/5 1-3 小时 新手友好度 92/100
agent-of-empires/agent-of-empires#5098 · 1 条评论 · 1 个 reaction ·
维护者通常 1 天内回复