Remote Hosts (SSH)

Remote Hosts (SSH)

Operator can launch an agent’s CLI process on a remote machine while the dashboard, queue, and tracking stay local. Declare a [[hosts]] entry and reference it from a delegator’s launch_config:

[[hosts]]
name = "gpu-vm"
ssh_alias = "gpu-vm"          # resolved via your ~/.ssh/config
workdir = "/srv/agents/my-project"
display_name = "GPU VM"

[[delegators]]
name = "claude-remote"
llm_tool = "claude"
model = "opus"
[delegators.launch_config]
host = "gpu-vm"

A host is deliberately distinct from a model server: a [[model_servers]] entry says where model inference lives; a [[hosts]] entry says where the agent CLI process runs. A remote delegator can combine both.

How it works

The local tmux (or cmux) pane Operator creates runs a generated wrapper script that:

  1. Ships the prompt file and run script to {workdir}/.tickets/operator/ on the host over ssh
  2. Execs ssh -t into a remote tmux session (named like the local one, op-…) that runs the agent
  3. Opens an SSH reverse tunnel for the REST port, so opr8r step-completion callbacks from the remote side reach your local Operator at http://localhost:{port} — the API stays loopback-only on both machines

Because the tracked pane is local, screen scraping, attach, idle detection, and send-keys all behave exactly as for local agents. The agent row shows an @{host} annotation in the dashboard.

Remote host requirements

Operator preflights all of this (reachability, tmux, tool, workdir) before creating any session and fails the launch with a specific message if a check fails.

Disconnects and reconnecting

If the SSH link drops (laptop sleep, network change), the local pane dies and the agent shows as dead — but the remote tmux session and agent survive. Relaunch the ticket from the TUI: the wrapper regenerates and tmux new-session -A reattaches the surviving remote session with scrollback intact.

limitations