Skip to main content

Detachable & Remote Sessions

An agnt run session normally lives and dies with your terminal. Detachable sessions invert that: the daemon owns the PTY, so the shell (and the AI agent running in it) survives the client going away — you close the laptop, the SSH link drops, the terminal crashes, and the session keeps running.

Detach and reattach locally​

agnt session hosts          # list detachable sessions
agnt attach my-session # attach to one
agnt session kill my-session

Inside agnt attach, press Ctrl-\ twice (the default session.detach-key) to detach without killing the session. Reattaching replays the retained scrollback, then resumes live output.

A detachable session is only reaped by an explicit session kill, by the shell exiting on its own, or by daemon shutdown. A dropped attach stream never kills it — that is the entire point.

Remote development over SSH​

agnt ssh opens a local terminal on a daemon-owned session on a remote host, using your existing OpenSSH configuration.

agnt ssh my-host:/path/to/project

The argument is host[:remote-project-path] — the first colon separates host from path, it is not a port. Set Port, User, IdentityFile, and ProxyJump in ~/.ssh/config as usual. Host keys are verified against ~/.ssh/known_hosts; there is no insecure bypass flag. Authentication tries ssh-agent, then configured identity files, then interactive password / keyboard-interactive.

The session name defaults to your local working-directory basename; override it with --attach NAME.

Reconnect​

The remote daemon owns the PTY, so transport loss does not kill your shell. The client reconnects with bounded exponential backoff and reattaches to the same session.

FlagEffect
--reconnect-max NCap reconnect attempts (0 = unlimited)
--create-if-missingAllow creating a replacement if the session vanished
--newForce a fresh session

If the session disappeared and you passed neither flag, reconnect fails loudly rather than silently replacing your work. Ctrl-C stops reconnecting.

Bootstrap​

The client checks the remote agnt version before attaching. An interactive terminal prompts before installing or upgrading. For scripted use, pass --bootstrap=yes to consent explicitly, or --no-bootstrap to skip provisioning entirely — automation never installs silently.

Forwarded daemon socket and proxy ports​

On connect, agnt ssh prints a local endpoint plus an AGNT_DAEMON_SOCKET value, so local commands talk to the remote daemon:

export AGNT_DAEMON_SOCKET=…      # POSIX shells
$env:AGNT_DAEMON_SOCKET='\\.\pipe\…' # PowerShell
agnt monitor

Remote reverse-proxy ports are forwarded to loopback automatically — the same port number is preferred, and a replacement is chosen and reported if it is occupied. --status prints the active mappings. Forwards are rebuilt from remote state after a reconnect. The overlay is a per-session Unix-domain socket on the remote host and is not forwarded.

Push files to a live session​

agnt push ./logo.png
agnt push ./a.js ./b.css assets
agnt push --host my-host ./artifact.zip

Files land in <remote-project>/.agnt-inbox/<basename> by default; a trailing non-file argument selects a project-relative destination directory. Uploads reject absolute, traversing, and symlink-escaping destinations, verify the uploaded bytes, and activate the final file atomically — an interrupted upload leaves no partial file. Keep agnt ssh running for agnt push to find the session, and use --host when several are active.

Platform notes​

Platformagnt sshagnt attach
Linux / macOSUnix sockets, SIGWINCH resizeRaw-terminal relay
WSLSame as Linux (the supported path for Windows hosts)Same as Linux
Native WindowsOwner-only \\.\pipe\agnt-ssh-* named pipes, polled console resizeConPTY relay; restores console modes on exit

On native Windows, agnt push --host works, but enumerating sessions without --host is intentionally unsupported (named pipes cannot be safely listed) and fails with an actionable error rather than guessing.

Troubleshooting​

  • Fix host, user, port, identities, and jump hosts in ~/.ssh/config. host:path does not accept a port number.
  • Update known_hosts through normal OpenSSH procedures.
  • For CI or other non-interactive use, pass --bootstrap=yes or preinstall a matching remote version.
  • Use --create-if-missing only when replacing a lost session is acceptable.
  • Forwarding failures are loud but may leave the PTY usable — check stderr and verify the remote daemon and the local socket or port.

Remote SSH has no .agnt.kdl keys today; use the flags above. SSH config examples in archived design specs are aspirational, not shipped.