Skip to content

Move a channel to another host so work can continue on that machine #49

Open

Description

@iamnbutler

During a meeting, or while using the machine for other work, an agent can become distracting: applications open, computer use takes over the screen, and audio plays. The work should continue, but on another machine.

Add a way to move a channel's work to another host on the team's tailnet. The user should be able to choose a destination, hand off the channel, and keep following the same channel from the original machine while the agent uses the destination's screen, applications, and audio.

Desired workflow

  1. A channel is doing useful work on the machine the user now needs for a meeting.
  2. The user chooses Move to another host and an available destination.
  3. Ace checks the destination, pauses the channel's execution, transfers the necessary state and files, and resumes there.
  4. The original machine is free of that channel's execution activity. Its client can remain open for chat and progress; viewing the channel does not move execution back.

Acceptance

  • Preserve the channel's identity, name, summary, chats and subagents, history and tool results, usage, owner, and collaborator-agent setting. Participants continue in the same channel.
  • Preserve the lanes and work needed to continue, including branches, unpushed commits, dirty files, and untracked files. Handle different project and lane paths on the destination without requiring the user to commit or push first.
  • Resume unfinished work where safe. Clearly surface tools, terminals, servers, or native app/browser state that must restart or be re-established; avoid blindly replaying actions with side effects.
  • Complete one recoverable handoff: source execution ceases before destination execution resumes. A reconnect, crash, or restart must not leave two machines executing the same channel. Failed transfers preserve the source work and provide a clear recovery path.
  • After the handoff, native UI activity, browser automation, audio playback, and channel-owned subprocesses run on the destination. Make the current execution host visible in the channel.
  • Check destination readiness, including project files, tools and model access, and any needed desktop session, applications, devices, and macOS permissions. Explain missing requirements before claiming the channel has moved. Use the destination's configured credentials and OS grants.
  • Keep the existing tailnet trust model and single collaborator-agent switch.

Design notes

A local channel needs its durable pi state and execution moved. For a hosted channel, its team-deployed cell can remain in place while its workspace changes. Resolve these paths under the same user-facing intent without making hosted infrastructure a prerequisite.

Existing channel backups are not a complete migration mechanism: they exclude project/lane worktrees and retain original paths. Preserve pi's durable state and resumability; Kill durably prevents continuation and is not the handoff operation. Define what can transfer, what must restart, and what requires user intervention, especially for already-open applications and devices.

Validate with real work across two machines, including an active run, uncommitted/untracked lane files, an interrupted transfer, and desktop/audio activity continuing on the destination while the original client remains attached.

Tracked by #58. Related: githubnext/desktop-tools#11 (native UI), #10 (two-machine validation), #13 (hosted channels), #15 (project identity across hosts), #166 (single worker ownership of a channel, which a handoff relies on).

Activity

  1. iamnbutler commented on Oct 15, 2026

    @iamnbutler
    ContributorAuthor

    Current state, from code (nothing here is runtime-verified for a host-to-host move). No host-to-host move exists yet. These pieces now exist:

    Gaps specific to this issue: moving a workspace between Macs when lane paths differ, checking the destination's readiness (desktop session, apps, macOS permissions), and a cutover that never leaves two hosts running.

    Possible first slice (design, not decided): keep the hosted-cell path from the design notes. That means moving an idle channel's workspace link from one host to another while pi stays in its cell, reusing the transfer fence and checkpoint format. A local channel would first ace move to its cell.

  2. iamnbutler commented on Oct 15, 2026

    @iamnbutler
    ContributorAuthor

    Decision (October 15): move the whole channel directly from one Mac to another: pi state, workspace files, and lanes, rewriting paths where the layouts differ. This replaces the hosted-only slice suggested above. It is not a pre-launch item; it stays in #58 for after Universe.

    The decision means the design needs:

    • State and files together: reuse the transfer snapshot and its cutover fence for pi state, and the compute checkpoint format for the workspace, including uncommitted and untracked work.
    • Path mapping: rewrite lane and checkout paths on the destination (.lane/trees/..., chat cwd), or check out the same repository at the destination's project path.
    • Readiness check: before cutover, confirm the destination is logged in, has the needed apps and macOS permissions, and has the project.
    • One owner at a time: the source stays frozen until the destination confirms, with recovery shared with Recover channel moves from interruption and retries #429.
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