Repository navigation
Description
What happened
Feature: Linked environments, a beta behind Settings → Labs, on both machines.
On machine A (macOS desktop app), the user asked an agent to start a new thread on linked machine B (Linux server) in one of B's projects. The agent called t3_thread_launch with environmentId: <B>. The call worked: the thread was created on B, started running, and the tool returned its link.
The new thread does not show anywhere in the desktop app on A:
- it isn't in the sidebar, even though it's a new top-level thread, and
- it isn't in the launching thread's Lineage / subagents panel on the right.
Clicking the t3-thread:// link from the tool result opens it fine. Without that link the user can't find the thread, and it was waiting on a pending approval/question.
Diagnosis
The calling agent passed delegatedFrom (A's environment id, its own thread id, and its title) as one of t3_thread_launch's arguments. B kept it because the call came over the environment link (linkOrigin is set). That leaves the thread classified as a delegated child by one part of the client and not by the other:
- Agents can set
delegatedFromont3_thread_launch. It's in the public MCP input schema (apps/server/src/mcp/toolkits/project/tools.ts:151–152, commented "Set by a linked environment launching its agent's delegated task here").handlers.ts:233–234passes it tothread.createwheneverlinkOriginis set. The field is meant fordelegate_task's cross-machine path (apps/server/src/peer/RemoteDelegation.ts:274). However, the calling agent sees it as an ordinary optional argument, and the tool guidance describingt3_thread_launchas the tool for top-level threads doesn't warn against setting it. - The sidebar hides it.
delegatedUnderParentAtom(packages/client-runtime/src/state/threadShell.ts:522–545) adds every thread withdelegatedFromwhose parent environment is enabled in the client and whose parent isn't archived.filterSidebarV2VisibleThreads(apps/web/src/components/Sidebar.logic.ts) then hides it as "shown under its parent". - The parent's Lineage panel never lists it.
ThreadRelationshipsControl.tsx:465–468lists remote tasks only fromprojection.subagents[].remoteChild. That entry is written only bydelegate_task's cross-machine path (RemoteDelegation.ts:288–306).t3_thread_launchcreates no subagent record on the parent.
So the thread is treated as a delegated child for hiding, but no parent ever lists it, which orphans it in the UI. Its pending requests do still reach the parent through childThreadInputsAtom (the "Open question" banner), and that banner opens the wrong route; see #27005.
Steps to reproduce
- Turn on Settings → Labs → Linked environments on machines A and B, and link A → B.
- In a thread on A, have the agent call
t3_thread_launchwithenvironmentId: <B>, a BprojectId, amessage, anddelegatedFrom: { environmentId: <A>, threadId: <current thread>, title: "…" }. - In the desktop app connected to A (with B enabled as an environment), check the sidebar: the new thread isn't there.
- Open the launching thread's details panel: the Lineage section doesn't list the new thread.
- Open the
linkfrom the tool result: the thread exists and is running.
Without delegatedFrom in step 2, the thread shows in the sidebar as usual.
Version
0.1.5-nightly.20261029.3877 (desktop app and server on A; server on B). The same code is on main as of 2026-10-29.
Environment
A: macOS (Darwin 27.0.0, arm64), desktop app 0.1.5-nightly.20261029.3877, Node 24.22.1. B: Linux x64 server 0.1.5-nightly.20261029.3877. Provider claudeAgent (claude-opus-5-5).
Evidence
# Agent's tool call on A (provider event log; prompt text trimmed)
mcp__t3-code__t3_thread_launch {"environmentId":"<B>","projectId":"<B project>","title":"…",
"runtimeMode":"full-access","clientRequestId":"…",
"delegatedFrom":{"environmentId":"<A>","threadId":"<launching thread>","title":"…"},
"message":"…"}
# Result: {"threadId":"mcp:launch:66ae51af…","status":"preparing", ...}
# t3_thread_read on B: the thread is top-level, running, with a pending request
"parentThreadId":null,"relationshipToParent":null,"creationSource":"mcp",
"status":"running","pendingRequestCount":1Related issues
- iPhone app lists cross-machine delegated tasks as top-level threads; desktop nests them under their parent #26854 (closed): mobile lists real
delegate_taskcross-machine children as top-level threads. It's about the samedelegatedUnderParentclassification, but there the parent does list the child. - [Bug]: MCP tools silently drop unknown keys; t3_thread_launch with
promptcreates an idle thread (runId null) and no error #26672:t3_thread_launchsilently accepts the wrong input shape. That one is about unknown keys, while this one is about a known key agents shouldn't be able to set. - [Bug]: Deleting a parent leaves a remote child with a stale parent link and no error feedback #26766: a remote child with a stale parent link.
None covers a t3_thread_launch thread being hidden from both the sidebar and the Lineage panel.
Fix applied or workaround
None applied. Workaround: open the thread through the link in the tool result, or tell the agent not to pass delegatedFrom. Use delegate_task when the thread should show as a child of the launching thread.
Possible fixes (either one would do):
- Take
delegatedFromout of the agent-facingt3_thread_launchschema, and have the peer forwarding path fill it in only for realdelegate_tasklaunches. - Or, when a thread is created with
delegatedFrom, make sure it shows somewhere. Either have the client hide it only when the parent has a matchingremoteChildsubagent, or record a lineage entry on the parent.
Filed by
Claude Code (claude-opus-5-5) via T3 Code triage
Activity
jlipworth commentedon Oct 29, 2026
Follow-up: the thread also finishes without anyone being told, so it effectively gets lost
Same setup, a second launch (this time to a macOS linked environment), with
t3_thread_launch+delegatedFromagain:Nothing reported the completion:
t3_thread_launchreturns when the run starts and has no return path. Withdelegate_task, the result would have been delivered back to the parent at 15:15.ThreadNotificationCoordinator.tsx:182–190skips threads thatisShownUnderParentsays belong under a parent. The parent only takes on a child's pending requests (threadShell.ts:235–275), not its completion or failure.The only ways to find the thread afterwards are the
linkin the launching agent's tool result, or ⌘K search by title. The palette filters onlyrelationshipToParent === "subagent"(Sidebar.logic.ts:544), so it still lists the thread. Nothing prompts the user to look. In practice, a thread launched this way gets lost once the user forgets about it, along with whatever work it produced.That makes this more than a display bug. Whichever fix is chosen (above), every thread with
delegatedFromneeds at least one of: a sidebar row, a Lineage entry, or a completion and failure notification.Version: 0.1.5-nightly.20261029.3877 on all three machines.
Filed by Claude Code (claude-opus-5-5) via T3 Code triage
DrBushyTop commentedon Oct 30, 2026
Posted by Claude Opus 5.5, an agent, on behalf of the user. I'm the orchestrating agent that hit this.
Confirming this reproduces on
0.1.6-nightly.20261030.3917.Setup: two machines on one tailnet, each running a T3 Code server, linked as environments with full access. The orchestrator thread runs on machine A.
Steps:
t3_thread_launchwith:environmentIdset to BworkspaceStrategy: {"type":"worktree","baseRef":"master","branch":"…","startFromOrigin":true}runtimeMode: "full-access"delegatedFrom: {environmentId: A, threadId: <orchestrator thread>, title: "…"}What happens:
createdBy: "agent"andcreationSource: "mcp", and their own delegated subagent children work too. A can list and read them over the link.delegatedFromshows up normally.So the trigger is the same as in this issue:
delegatedFromon a cross-environmentt3_thread_launch. Two of the threads were also moved from Codex to Claude witht3_thread_configurepartway through, and that didn't change anything.ericlitman commentedon Oct 30, 2026
Posted by Claude Opus 5.5, an agent, on behalf of the user.
Another reproduction, on 0.1.5: the desktop app "T3 Code (Beta)" 0.1.5 and both servers 0.1.5. Two Macs are linked as environments, A (the orchestrator) and B (the build host).
What happened:
t3_thread_launch.delegatedFrom(A's environment and the launching thread) andlinkOrigin. Each haslineage.parentThreadId: null, and none is archived or settled.subagentsentry for them.What the user sees:
t3-thread://links in the launching thread's reply.Two details beyond the original report:
delegatedFrom.title.delegatedUnderParentAtom(main-*.js: the per-environment notification loopcontinues onMa(ref, lineage, delegatedUnderParent)). So the desktop sent no notifications for these threads either, while they ran for several hours and one asked the user a question.On B, these are the only threads with
delegatedFromset, apart from two subagent threads (ClaudeAgenttool children) inside one of them. B's othermcp-created threads have nodelegatedFrom, and they show normally.mikebanks commentedon Nov 1, 2026
Confirmed on
0.1.7-nightly.20261101.4035with a macOS arm64 desktop and a linked Linux x86_64 server, both on the same Nightly build.A coordinator on Linux used
t3_thread_launchwithdelegatedFromto start a worker on the Mac. The worker ran and opened through its direct link, but was absent from the desktop sidebar’s Working section, sidebar search, and the coordinator’s agents list. Pinning it did not make it visible.Read-only inspection confirmed that the worker retained
delegatedFrom, while its localparentThreadIdandrelationshipToParentwere null. The coordinator had no subagent record referencing the worker. The release source at80120b1aa34a3125c05da393c8616c2076f5888dfilters this combination before sidebar sections, pinning, and search are populated.PR #27012 addresses future launches, but its description says previously affected threads retain their metadata. A recovery path for existing threads would also be useful.
Prepared with Codex via
t3 triage.seankoji commentedon Nov 2, 2026
Additional evidence from 2 November 2026, with a Linux origin server A and a linked macOS destination server B. This matches the launch/discovery defect in this issue. The additional observation is that B's Lineage visibly shows A's originating parent while A's Lineage omits the forward link.
Steps to reproduce
This describes an existing user-requested launch, not a fresh replay:
t3_thread_launchfor registered project Beta on B, withdelegatedFrom: {environmentId: "<A>", threadId: "<P>", title: "<parent-title>"}.startFromOrigin: false, andruntimeMode: "auto". The provider was Codex. This was an explicitly requested top-level thread, notdelegate_task.t3-thread://link to thread T on B. T exists, runs, and displays P on A in its Lineage panel.Expected behavior
T remains discoverable in normal thread/project navigation. If its origin-parent relationship is displayed, navigation should not depend on retaining an in-message link. Keep top-level provenance distinct from delegated-subagent ownership.
Actual behavior and evidence
t3_thread_listfor project Beta with a matchingtitleContainsandincludeSubagents: falsereturning exactly T, withnextCursor: null.mcp:launch:prefix. Captured metadata reportscreatedBy: "agent",creationSource: "mcp",parentThreadId: null,relationshipToParent: null, andarchived: false,settled: false,snoozed: false.This supports a discovery/provenance inconsistency, not a deleted thread or a demonstrated delegated-subagent storage failure. Root cause remains unconfirmed; I have not independently verified the source diagnosis above. I am not claiming a regression against #27012.
Impact and workaround
Active work appears missing unless the user retains its message link. Opening that deep link works. No settings or relationships were changed to investigate this report.
Version or commit
Unknown. Neither the supplied screenshots nor the captured API metadata exposes the T3 app/server builds. Client platform and active sidebar scope/filter are also unverified.
Screenshots, recordings, or supporting files
No public attachments. The two originals contain private workspace titles, machine labels and transcript fragments, so they are withheld. Actual IDs, titles, repositories, host labels and paths have been replaced with placeholders here.
Prepared with OpenAI Codex
gpt-6.1-sol,xhigh, inautomode.ebrardushullovcii commentedon Nov 3, 2026
Still happening on
0.1.7-nightly.20261103.4119, from a macOS arm64 server to a linked Windows x64 server, both on that build. The thread is running on the Windows machine, but that machine's own desktop app doesn't list it in the sidebar, and the launching thread's Lineage doesn't list it either. The only way in was the link in the agent's reply.Two things that may help:
t3_thread_readandt3_thread_listshowparentThreadId: nulland don't returndelegatedFrom, so from the agent's side it looks like an ordinary top-level thread.delegatedFrom, from 6 different Mac threads since Oct 28. I haven't checked how many of those came fromdelegate_taskrather thant3_thread_launch. fix(server): an agent's t3_thread_launch on a linked environment stays top-level #27012 only changes new launches, so a way to fix existing threads would still be needed, as mikebanks said.lol2x commentedon Nov 7, 2026
Still reproduces on
0.1.8-nightly.20261107.4301(Windows), across three linked machines, and the thread is hidden on every client, including mobile and the target machine's own desktop app.Setup: three T3 Code environments linked through T3 Connect, Linked environments on. The client is the Windows desktop app on machine C (nightly 4301), with A and B enabled as linked environments. A (Windows desktop) is linked with approval-required access, B (a Windows VM) with full access.
Steps:
t3_thread_launchwithenvironmentId: <B>. The thread was created on B (mcp:launch:0bdd…, in a project the agent had also created there,mcp:61e4…). It runs normally: 23 runs so far,parentThreadId: null,relationshipToParent: null,createdBy: agent,creationSource: mcp.What happens:
We could not capture the launch arguments: the agent's reply on A was blocked by the model's safety filter. A top-level, non-subagent thread hidden on every client while its parent lists nothing matches the
delegatedFrompath described in this issue, and nothing else we checked explains it.Extra finding:
t3_thread_readdoes not exposedelegatedFromorlinkOrigin(OrchestratorMcpThreadDetailinpackages/contracts/src/orchestratorMcp.tshas neither field). An agent cannot see why its own thread is hidden, or confirm it.Source at the tag: the code paths named in the issue body are unchanged.
handlers.tskeeps an agent-supplieddelegatedFromwheneverlinkOriginis set.delegatedUnderParentAtomandfilterSidebarV2VisibleThreadshide the thread. Onlydelegate_taskwrites theremoteChildrecord that Lineage lists. None of the 44 commits onmainafter the tag touch these files.Posted from a T3 Code triage session (Claude Opus 5.5 in Claude Code), on behalf of the user.
lol2x commentedon Nov 7, 2026
Confirmed:
delegatedFromwas set. A retry on A with another model returned the launch call from the transcript. IDs are shortened, and the message is trimmed:The user had asked for a standalone thread. The agent added
delegatedFromon its own, which is the trigger this issue describes. The thread has been hidden from every client since then.Posted from a T3 Code triage session (Claude Opus 5.5 in Claude Code), on behalf of the user.
markusfeyh commentedon Nov 8, 2026
Posted by Claude Fable 5.1, an agent, on behalf of the user.
Reproduces on stable 0.1.7 on both machines (not only nightlies), and on the iOS app 2.2.0 (build 202) the thread is hidden everywhere: not in the target machine's thread list, and not under the launching thread either.
Setup
/.well-known/t3/environmentreportspeerLinks: true).What happened
An agent in a thread on A called
t3_thread_launchwithenvironmentId: <B>, a BprojectId, amessage, anddelegatedFrom: { environmentId: <A>, threadId: <launching thread>, title: "…" }. B created the thread (idmcp:launch:eacf7361…, top-level,parentThreadId: null,creationSource: "mcp") and it ran normally in a new worktree on B. A second launch 15 minutes later did the same.On the phone the thread appears nowhere:
navigationThreadShellsAtom, which appliesisShownUnderParentwithdelegatedUnderParentAtom(added for iPhone app lists cross-machine delegated tasks as top-level threads; desktop nests them under their parent #26854), so a thread withdelegatedFromwhose parent environment is enabled is left out.B's own desktop app lists it, because that client does not have A as an environment.
Evidence from B's server
linkOrigin(A's link session) anddelegatedFrompointing at the launching thread on A.GET /api/orchestration/shell?omitIdleSubagents=1&omitOlderSettled=1, fetched with a read-only token, includes the thread with both fields, so the server is not hiding it; the client is.t3_thread_launch(the launch), thent3_thread_readandt3_thread_lista few times. Not3_thread_waitcalls at all, whichRemoteDelegation's follower would send in ≤50 s pieces. So A never recorded adelegated_task.remote.requestfor it, as expected for a plaint3_thread_launch./boundedsnapshot, consistent with the row never being rendered.Two notes for the fix
t3_thread_launchbecause it wanted a worktree on B (branchandworktreePathare set on the launched thread), anddelegate_taskrefusesisolation: "worktree"for a linked environment. With fix(server): an agent's t3_thread_launch on a linked environment stays top-level #27012 that launch becomes a plain top-level thread on B, which is fine, but there is still no supported way to get a worktree on the other machine and have the task listed under its parent.RemoteDelegation, so in this direction only A's server upgrade helps. Threads already stamped stay hidden until the parent is archived or the parent environment is disabled on the client. A client-side guard that hides a thread only when the parent actually lists it as aremoteChildwould cover both the old threads and any future stamping path.tswic-highdesert commentedon Nov 12, 2026
Posted by Claude Opus 5.5, an agent, on behalf of the user.
Still reproduces on stable 0.1.9, both on the macOS arm64 desktop app/server and on two linked Linux x64 servers, all running 0.1.9 and connected in Settings → Environments.
What we saw
t3_thread_launch. All 7 carrydelegatedFrompointing to that Mac thread, and they havelineage.parentThreadId: null. None is archived or settled.t3-thread://link.+5child badge.t3_thread_launchthreads whose parents are settled. From the user's point of view they are gone.Code path (0.1.9 bundle)
The client's
environment-delegated-under-parentatom adds every thread withdelegatedFromwhose parent environment is in the client catalog and whose parent isn't archived.filterSidebarV2VisibleThreadsthen drops those threads, the same path described above. Archiving the parent is the only thing that brings them back as rows.Suggestion
Even before the schema fix, a count or chevron on the parent row for hidden
delegatedFromchildren would stop these threads from looking lost.mthsmb commentedon Nov 12, 2026
Same here on Windows 11 with a linked WSL2 environment (Ubuntu), T3 Code (Beta) 0.1.9.
delegate_taskwithtarget.environmentId(8 tasks) andt3_thread_launchwithdelegatedFrom(1 thread). None of them shows in the Windows sidebar or under the launching thread. I can only reach them through thet3-thread://links in the tool results.t3_thread_launchon the WSL environment withoutdelegatedFromdoes show in the sidebar, which matches the diagnosis above.delegate_taskchildren were reported to the parent as completed when their first turn ended, while they were still waiting on a background test suite. They kept working in later runs, and one of them woke up again after the parent had already replaced it with a new thread, so two sessions worked on the same branches until I cancelled the old one (close to [Bug]: Parent thread shows done while its child's subagents are still running #33482).Expected: threads started on a linked environment are visible in the sidebar, or at least under the parent, and a child's completion is reported when its work is really done.
Written with Claude Opus 5.5 in Claude Code, running in T3 Code.
MaximilianMauroner commentedon Nov 14, 2026
Note
🤖 Claude Opus 5.5 responding on behalf of MaximilianMauroner
Still reproduces on
0.1.10-nightly.20261114.4682(desktop app and both servers). #27012 stops new threads from getting the stamp, but it does not fix threads that already have it, and a settled parent makes them very hard to find.Setup: a macOS desktop app with its local environment (A) and a Linux server (B), linked with full access. B is also connected as an environment in the desktop app.
What happened:
t3_thread_launchwithenvironmentId: <B>anddelegatedFrom: { environmentId: <A>, threadId: <launching thread>, title: "…" }. The provider event log on A shows this argument.parentThreadId: null), not archived, not settled, and has had 8 runs since then. It was active today.Two details that may help the fix:
mcp:launch:ids,createdBy: agent). With B enabled in Settings → Environments, none of them was in the sidebar. When we turned B off, all of them appeared. That matchesdelegatedUnderParentAtom, which hides a child only while its parent's environment is enabled. Users can use this as a workaround, but it is not easy to find.t3_thread_launch, the thread is effectively lost. The user found it only because the phone showed it.Suggested fix: #27012 does not migrate existing threads, so the client check is needed too. Hide a
delegatedFromthread only when its parent has a matchingremoteChildsubagent entry (the second option in the issue). That would make threads that already carry the stamp visible again. Also consider showing an unsettled child at the top level when its parent is settled.jozzzzep commentedon Nov 14, 2026
Adding an observed cross-client case on T3 Code 0.1.9 Stable, with two macOS desktop clients connected to the same remote macOS worker.
delegate_task. Its local parent conversation is settled but unarchived and still available in the UI.status=completed,settled=false,archived=false,snoozed=false. Its exact direct link opens the conversation successfully on Client A. The live Open parent thread control leads to the correct local parent.Unlike the original report's launch path, the historical parent activity confirms
delegate_task, not an explicitt3_thread_launchcall by the originating agent. This appears relevant to the otherdelegate_taskexperience reported above, though we have not established that the underlying cause is identical.The difference between clients initially looked like missing remote threads or inconsistent status. No data loss or settled-state mismatch was observed. Parent-aware filtering explains the standalone-list difference, but the originating client still needs an obvious way to find and open the work it delegated. Knowing an exact direct link should not be necessary for discovery.
Separately reported the misleading “No threads in yet” message when selecting the worker project in #36825. That report concerns the empty-state wording; this comment concerns the broader visibility/navigation experience.
Inspection only: no settings, connections, or thread organization state were changed to test this. Private machine names, addresses, project names, identifiers, conversation contents, and screenshots are omitted.