Repository navigation
feat(home): add Home, an agent that manages threads across your machines - #16
Merged
Merged
Conversation
amartya18
marked this pull request as ready for review
November 5, 2026 17:20
Owner
Author
|
Closed by the owner: superseded by #17 and the new fork release setup. |
Port pingdotgg#15975 onto the fork's main. Built from the v0.1.6 port (fork PR #15), replayed onto main with four conflicts resolved. Restores what the v0.1.6 port dropped: - mod+shift+0 opens Home (handler in shortcuts/commandPaletteCommands). - Watch reports render as "Sent by T3 Code", not as the user's own message. - Messages Home sent are labeled "Home" even when its thread lives on another environment, and "Open thread" opens it on the hub. Fixes Home settings offering no model when the first enabled provider is not ready (for example Codex enabled but not installed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… links Main forwards every tool that takes a linked environment through PeerForwarding and strips environmentId first, so Home's routing never saw the target. When Home names another environment, the tools that route Home now reach its own routing, and its other linked-environment tools refuse instead of using a peer link. That also keeps a full-access peer link from bypassing Home's no-delete rule. delegate_task keeps its own environment field and is unchanged. Also from review: a watch report needs createdBy "system" to show as T3 Code, and "Open thread" for a Home sender opens it in whichever environment has it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HomeRelay built a new consumer atom whenever its registration changed. A new consumer started with an empty handled set and an immediate read, and consumers could stay live after a reconnect, so one Home call ran on the other environment two or three times. Launches then failed with "failed during create-thread" even though the thread was created. The relay now keeps one consumer. A new registration rebuilds it through an atom, and the handled set lives with the relay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From review of the relay fix: - The same window re-registering no longer fails the calls it still owes. They move to its new queue, along with anything not yet delivered. - A retried Home launch keeps its command id, so it replays instead of failing because the thread already exists. - The relay stream publishes every request. Stream atoms keep only the last value of a chunk, which could drop one of two parallel calls. - A long Home thread title is cut by code point, so it cannot split an emoji. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
amartya18
force-pushed
the
t3code/home-agent-main
branch
from
November 5, 2026 20:36
d9365e6 to
5e27c54
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
You want Theo's Home agent (pingdotgg#15975) running on this fork's
main, which is now upstream v0.1.7 plus the fork's own commits. That PR is based on Oct 5. The earlier port (#15) targets v0.1.6, dropped three features, and has bugs that keep Home from reaching other machines reliably.Home is one agent thread on the desktop app. It can list, read, launch, message, and organize threads across every project and every connected machine, and it hears back when the threads it launched finish or need you.
docs/internals/home.mdanddocs/user/home.mddescribe it.What changed
Port. The Home commits from #15 are replayed onto
main, with upstream winning wherever it conflicts. Home also moved to v0.1.7'sSecureRandomand per-project provider checks.Restored from #15's dropped list:
mainmoved global shortcuts toshortcuts/commandPaletteCommands.ts, and feat(home): port Home agent onto stable v0.1.6 #15 never wired the handler there.Bugs fixed:
McpToolAccess.routed). Since feat(server): agents use linked environments through any T3 tool pingdotgg/t3code#16684,mainsends every tool that takes a linked environment throughPeerForwardingand stripsenvironmentIdbefore the handler runs, so Home's relay was unreachable. A full-access peer link could also bypass Home's no-delete rule. Now, when Home names another environment:HOME_ROUTED_TOOLSinhomeRouting.ts) reach Home's routing.delegate_taskhas its own environment field and is unchanged.McpToolAccess.test.tslinked-environment table fail on the previous commit.HomeRelaybuilt a new consumer on every registration change, each with its ownhandledset, and consumers could outlive a reconnect. The second run failed with "failed during create-thread" even though the thread existed. The relay now keeps one consumer. Test inHomeFleetHost.browser.test.tsx.FleetBroker.test.ts). A retried launch keeps its command id, so it replays (FleetService.test.ts). The relay stream publishes every request, where stream atoms used to keep only the last of a chunk, which could drop one of two parallel calls.threadLinks.test.ts).createdBy: "system", which the shared resolver left unattributed. They now show "Sent by T3 Code". Test inuserMessage.test.ts.isProviderInstancePickerReady, as the model pickers do. Upstream has the same bug.Agent context. Home adds
t3_environment_listandt3_thread_watch.mcpToolListJsonBytesgoes from 47,538 to 49,060, hence theagent-context-increaselabel. I didn't run the paid evals for the new tool text.Verification
vp run check:changed: format, lint, knip, typecheck (40 packages), and the React Compiler check pass, and all 843 tests in 53 files pass, browser tests included.environment_unavailableand created nothing.isElectrongates on the settings page and the relay host, and allowed desktop mode indev-runner. None of that is in this PR.Home after a watch report, with the report labeled "Sent by T3 Code":
Three parallel remote calls and a launch, with no errors:
Image links are presigned and expire on 2026-11-12 or 2026-11-13.
Not covered
5e27c54ca7) has tests and a live run but no review of its own. Left as is:delegate_taskcan still use a peer link, and Home's RPCs aren't inCLIENT_GUARDED_RPC_SCOPES(the server still enforces them, and the screen only renders on the desktop's own hub). No reviewer from another model family ran: GPT-5.6 Sol, Grok 4.7, and Gemini 4 Argon were unavailable on the Cursor plan.Built with Claude Opus 5.5 in Claude Code, running in T3 Code.
🤖 Generated with Claude Code