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
Tell agents that T3 thread ids can start with mcp: and that harness peer tools cannot reach T3 threads
#18483
Agents have trouble finding and addressing other T3 threads, because the tool text never says what a thread id looks like or which tools can reach them.
Observed while one agent tried to reply to a peer thread that had already messaged it:
Threads created through t3_thread_launch get ids that start with mcp: (newCommandId() in apps/server/src/mcp/threadAccess.ts mints mcp:<uuid>, and t3_thread_launch in toolkits/project/handlers.ts uses it as the thread id). The prefix is part of the id.
t3_thread_read with the bare uuid fails with thread_not_found ("no longer available"). That reads as "the thread was deleted", not "wrong id form". Passing the id with its mcp: prefix works.
The harness builtins for peer messaging (for example Claude Code's ListAgents and SendMessage) are a separate address space. They never list T3 threads, so SendMessage answered "not reachable" for a thread that existed and was idle. Nothing in the T3 tool descriptions or injected guidance says to use t3_thread_* instead.
t3_thread_list does return the thread (title filter, same project). My trace did not show why earlier title/content searches missed it, so I am not claiming a search bug. t3_thread_search takes the global top matches and then filters to one project (toolkits/thread/handlers.ts), so it is bounded and can miss; the description says so, but a peer-discovery flow should prefer t3_thread_list.
Idea
Say in the t3_thread_list, t3_thread_read, t3_thread_send and t3_thread_search descriptions that thread ids can have prefixes such as mcp:, to be copied exactly as returned, never stripped or guessed.
Say in the orchestrator guidance that other T3 threads are reached with t3_thread_*, not harness builtins like ListAgents/SendMessage, and that t3_thread_list with titleContains is the way to discover a peer.
Optionally, when a thread lookup misses and mcp:<input> (or another known prefix) exists, make the thread_not_found message say so instead of "no longer available".
Items 1 and 2 are wording only. Item 3 is a small behavior change, so I am asking before sending a PR.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Note
Responses generated with Claude
Problem
Agents have trouble finding and addressing other T3 threads, because the tool text never says what a thread id looks like or which tools can reach them.
Observed while one agent tried to reply to a peer thread that had already messaged it:
t3_thread_launchget ids that start withmcp:(newCommandId()inapps/server/src/mcp/threadAccess.tsmintsmcp:<uuid>, andt3_thread_launchintoolkits/project/handlers.tsuses it as the thread id). The prefix is part of the id.t3_thread_readwith the bare uuid fails withthread_not_found("no longer available"). That reads as "the thread was deleted", not "wrong id form". Passing the id with itsmcp:prefix works.ListAgentsandSendMessage) are a separate address space. They never list T3 threads, soSendMessageanswered "not reachable" for a thread that existed and was idle. Nothing in the T3 tool descriptions or injected guidance says to uset3_thread_*instead.t3_thread_listdoes return the thread (title filter, same project). My trace did not show why earlier title/content searches missed it, so I am not claiming a search bug.t3_thread_searchtakes the global top matches and then filters to one project (toolkits/thread/handlers.ts), so it is bounded and can miss; the description says so, but a peer-discovery flow should prefert3_thread_list.Idea
t3_thread_list,t3_thread_read,t3_thread_sendandt3_thread_searchdescriptions that thread ids can have prefixes such asmcp:, to be copied exactly as returned, never stripped or guessed.t3_thread_*, not harness builtins likeListAgents/SendMessage, and thatt3_thread_listwithtitleContainsis the way to discover a peer.mcp:<input>(or another known prefix) exists, make thethread_not_foundmessage say so instead of "no longer available".Items 1 and 2 are wording only. Item 3 is a small behavior change, so I am asking before sending a PR.
Related
thread_<uuid>context reference form. A shared answer on id normalization or error hints could cover both.t3_thread_send, and the same prefix guidance applies.Not verified
Claude Sonnet 5.5 (
claude-sonnet-5-5) via Claude Code in T3 CodeAll reactions