# durable agents

Experimental. Durable agents run on a zot continuoushost instead of inside the pane. The pane is a real PTY running zot's attached TUI as a view of one conversation. The host owns execution, queues, approvals, and recovery, so work continues when the view closes, when hrdx quits, or when the session holder restarts. Ordinary agents and shells are unchanged, and durable and ordinary panes can share a workspace, tab, and split layout.

## create one

Pick zot (durable) at the end of any agent picker (ctrl+b c, ctrl+b t, the tab bar +, or a split menu). It is never preselected, and no existing default turns durable on its own. The first durable agent in a project starts a managed host for that project in the background, with a private store next to the state file. Each further durable agent gets its own conversation. "Open another view" in the pane menu shows the same conversation again.

## the panel

ctrl+b D opens the durable agents panel for the current workspace: every associated conversation with its state and open views, even with no pane open. From there you can open a view, queue or steer a prompt (attach files with @path), rename, review approvals, review recovery holds, inspect usage, tasks, forks, and subagents, set a cost budget, change the model, explicitly abort work, and start or stop managed hosts. Destructive actions ask first.

The sidebar shows the host's real state: the spinner while work runs, then queued, approve, recover, failed, or offline. A disconnected host never reads as idle or finished. The settings window gains a durable section to mute individual notification categories and pick the host for new durable agents.

## lifetime

actioneffect on durable work
close pane, tab, workspaceends only the view, never aborts host work
quit hrdxviews detach, managed hosts keep running
relauncheach pane reattaches to its exact conversation, or shows the error
abortexplicit panel or socket API action only
stop a managed hostexplicit; interrupted work stays recoverable in its store

A restored pane whose conversation is gone, or whose host resolves to a different store, stays visible with the error instead of starting a fresh agent. Prompts sent from hrdx carry a stable request id, so a lost response is never resubmitted as new work.

## hosts

# profiles and whether they answer
$ hrdx continuous hosts
 
# register an external host
$ hrdx continuous add --id team --address /path/to/host.sock
 
# remote hosts need TLS and a token
$ hrdx continuous add --id remote --address host.example:7000 --tls-ca ca.pem --token-file token
 
# managed hosts only; stopping keeps interrupted work recoverable
$ hrdx continuous start --id local-1a2b3c4d5e6f
$ hrdx continuous stop --id local-1a2b3c4d5e6f
 
# forget a profile, the host and its history are untouched
$ hrdx continuous remove --id team

Profiles live in continuous-hosts.json next to the state file. Tokens are referenced by file and never copied into state, status output, or logs. Plaintext TCP is accepted only on loopback. hrdx stop still manages only the session holder.

## requirements

zot with zot continuous and a state location (not --state ""). Opening forks and subagents as views needs a zot whose help lists --continuous-conversation; older zot builds show "update zot" for those views. Back up the state file before downgrading hrdx, since older releases relaunch durable panes as ordinary zot. Scripting is covered in the socket api docs.