Terminal backend
Every agent Overdeck runs lives in a terminal-backend pane. The default backend is Herdr, a terminal workspace manager with a headless server per session. tmux is still supported, but only when you ask for it. Herdr is strict: if it is selected and its binary or this home’s session server is missing, agent launches fail with an error that namespan install.
Overdeck never falls back to tmux silently.
Selection
Overdeck picks the backend from these sources, in order:-
The
OVERDECK_TERMINAL_BACKENDenvironment variable (herdrortmux). -
terminal.backendin~/.overdeck/config.yaml: -
Otherwise
herdr.
herdr binary does not change
it. Availability is checked separately, every time an agent launches — the
herdr binary on PATH or in ~/.local/bin, and the session socket for this
Overdeck home (~/.config/herdr/sessions/<session>/herdr.sock, where
<session> is overdeck for the default ~/.overdeck home).
The dashboard logs the result once at boot:
UNAVAILABLE: and says what is missing.
What pan install and pan sync do
Both commands run the same Herdr setup:
-
Binary. If
herdris missing, it is installed with the vendor installer (curl -fsSL https://herdr.dev/install.sh | sh) into~/.local/bin. An installer-managed binary is kept on thestablechannel; a binary installed by Homebrew, mise or Nix is verified but never changed. -
Config.
~/.config/herdr/config.tomlgets:Herdr’s default istrue, which relaunches every agent pane with its native resume after a Herdr server restart. That would bypass Overdeck’s own resume gates, so agents you paused, stopped, or that a pipeline gate is holding would come back on their own. The file is edited line by line: your comments and other settings stay exactly as they were. The result is checked withherdr config check, and a running server reloads it withherdr server reload-config. -
Session server. One headless
herdr --session <session> serverper Overdeck home. On a systemd host it runs as the user unit<session>-herdr.service—overdeck-herdr.servicefor the default home. Elsewhere it is started detached, logging to~/.overdeck/logs/herdr-<session>.log.pan upalso makes sure this server is running. -
Integrations. Herdr integrations report an agent’s lifecycle to Herdr
directly instead of Herdr reading the screen. Overdeck installs the pilot set
—
pi,omp,kimi(Kimi Code 0.14.0 or later) andopencode— for each harness whose binary is installed.claude,codexandhermesonly report session identity, which Overdeck does not use yet, so Overdeck neither installs nor removes them.
CI, under Vitest, when the backend is
explicitly tmux, and with pan install --skip-herdr. Re-running either command
is safe: with everything in place it installs nothing and writes nothing.
Updates
Overdeck compares the installed version withhttps://herdr.dev/latest.json
(an unreachable manifest skips the check; it is never an error).
pan installrunsherdr updatewhen a newer stable release exists.pan syncrunsherdr updateonly when no session server is running for this home. When one is running, it prints the manual steps instead.pan upnever updates.
systemctl --user restart overdeck-herdr.service at a quiet moment.
pan doctor warns when the running server is older than the installed binary.
pan doctor rows
Under an explicit tmux backend, only the
Terminal backend row is shown.
Opting into tmux
Set the backend in~/.overdeck/config.yaml:
OVERDECK_TERMINAL_BACKEND=tmux. With terminal.backend: tmux,
Overdeck skips all Herdr setup and runs agents on the tmux -L overdeck
socket.
Claude Code hooks
If you install Herdr’sclaude integration yourself, it adds a
SessionStart hook to ~/.claude/settings.json. Overdeck registers its own
SessionStart hook in the same list. Claude Code runs all matching hooks for
an event in parallel, and the two are independent: Herdr’s reports the
session to Herdr; Overdeck’s injects context and starts the heartbeat. pan sync
never removes Herdr’s entry, and Herdr’s installer does not remove Overdeck’s.
pan doctor warns if Herdr’s claude integration is installed while
Overdeck’s SessionStart hook is missing.