Herdr 0.8.2 is an open-source terminal multiplexer built around coding agents. It owns real PTYs, keeps sessions alive, tracks agent state, and lets people and agents act on the same server-owned panes through client and automation protocols. That shared session is enough to call Herdr an early agent runtime. Its current limit is also in that path: much of the lifecycle still comes from interpreting a terminal screen, and its waits track state rather than one turn.

Mitchell Hashimoto announced Superlogical on July 29. The company will start with a terminal multiplexer, then make its parts composable and safe for production. Herdr already ships a narrower version of that bet. Herdr uses libghostty; Superlogical says it will build on the same public components. Superlogical is a rival theory, not yet a code-level competitor.

v20
Herdr client/server wire protocol
300 ms
Delay between prompt text and Enter
5 sec
Activity-gate ceiling from a non-working start

The pane became an addressable agent

Mature multiplexers already keep sessions alive and expose automation surfaces. Herdr packages a more specific contract: every agent gets a stable name, state, terminal identity, and command surface. A person can watch the TUI while another agent runs herdr agent prompt reviewer "Check the diff" --wait. Both use the same server-owned session.

The server protocol is not a thin wrapper over keystrokes. Protocol version 20 frames requests over local sockets, caps normal payloads at 2 MB, and negotiates either semantic frames or terminal ANSI for rendering. The server owns the workspaces, tabs, panes, and PTYs. Clients come and go.

An agent multiplexer becomes a runtime when control and lifecycle share the same durable session.

That claim can be proven wrong. If state is too weak for automation, or recovery restores a layout without restoring the work, Herdr remains a good multiplexer with agent labels.

A prompt is one server operation

  1. Resolve Agent target
    Pin pane and terminal identity
    validate
  2. Submit PTY input
    Write text, then encoded Enter
    observe
  3. Track Lifecycle event
    Gate activity from a non-working start
    settle
  4. Return Agent state
    Idle, done, or blocked

The request handler first rejects an empty prompt. It resolves the named agent to a pane and checks that the pane still contains the expected foreground process. If the agent is already blocked, Herdr returns agent_blocked before it writes anything. Otherwise it encodes the prompt for the pane's live terminal mode, sends the text, waits 300 milliseconds, then sends Enter.

The wait path records the event sequence and terminal identity before submission, so a replacement process cannot satisfy the old wait. From a non-working start, Herdr caps its activity gate at five seconds or the caller's shorter timeout. Only a longer caller timeout can produce agent_prompt_stalled. It then waits for idle, done, or blocked by default.

A lifecycle wait is not a turn receipt

The wait code tracks the pane occupant and state sequence, not a unique prompt or agent turn. If the agent is already working, completion of that earlier turn may satisfy the new wait. Callers still need output checks or an agent-native result ID when the distinction matters.

State has two authorities

Herdr can learn agent state from a native integration or from the terminal itself. Integrations call pane.report_agent with a source, sequence, state, and optional native session reference. Session-only integrations report an ID without changing waits or status. When no hook owns the state, Herdr inspects the foreground process and visible terminal shape.

AuthorityWhat Herdr getsLimit
Native reportSemantic state and optional session identityEvery agent exposes a different lifecycle
Screen detectionBroad support from process and terminal outputPrompts, titles, and spinners change

Version 0.8.2 shows the cost. Its fixes teach Qwen Code's localized confirmation states and strip new Claude Code title-spinner frames. Herdr can support a terminal agent without owning its API, but it must follow that agent's UI changes.

The detector damps that noise. A transition from working to plain idle waits for repeated confirmation, and stable blocked signals refresh on a timer. The project docs still say an unfamiliar prompt can appear idle instead of blocked until Herdr learns its screen shape. That mistake changes the sidebar and waits. It does not make Herdr answer the prompt by itself.


Persistence has four meanings

“The session survives” is too vague for an agent runtime. A client can detach while the server and PTY keep running. A restarted server can restore workspace and pane state. Supported integrations can resume native agent conversations from stored IDs. Experimental handoff tries to transfer live panes to a new server during an update. Those are separate guarantees.

Herdr keeps the separation in code. persist.rs stores session state, optional screen history, and plugins in different files. The native-resume layer accepts session references only from recognized Herdr integration sources, limits their size, and builds an agent-specific resume command. A saved screen and a resumed Codex conversation are not the same artifact.

Recovery pathWhat can surviveWhat still needs proof
Detach / reattachLive server, PTY, process, terminal stateMulti-client behavior under long output
Server restartLayout, optional history, supported agent session IDConversation and child-process outcome
Experimental handoffLive pane process on supported Unix pathsFailure rollback and cross-platform behavior

I inspected these paths but did not run the recovery test for this issue. The adoption verdict stays inside that evidence boundary: detach is a core product path, while restart and handoff need a controlled trial before any of them carry unattended work that matters.

Superlogical is the rival theory

Superlogical calls the missing layer a durable session around the work itself. Its three-step plan starts with a terminal multiplexer, makes its parts composable, then makes the system safe for production. The first product promises web, macOS, and iOS clients, live sharing, and native scrollback and selection.

As of August 20, no public Superlogical multiplexer repository or beta was linked from its announcement or site. Its architecture is not available for a code comparison. The public claim I can test is narrower: it will use the same MIT-licensed libghostty components that Herdr already vendors.

libghostty-vt's public terminal API accepts terminal output, maintains screen state, and exposes it to an embedder. It does not create or manage the PTY. The public C API is also marked incomplete and subject to breaking changes, which explains why Herdr pins a source commit. Superlogical must still build process supervision, durable sessions, transport, auth, sharing, storage, and client policy.

libghostty lowers the cost of terminal correctness. It does not ship the multiplexer.

Herdr and Superlogical may fit together. Herdr is opinionated about coding agents and works inside an existing terminal over SSH. Superlogical says agents are one kind of work inside a wider session, with native and web clients from the start. They still compete for the durable terminal session. Partnership remains a theory until either project publishes an integration.

Use the narrowest owner that solves the job

signal State must identify the work that finished

Start two overlapping turns in one agent pane. Submit the second through agent prompt --wait while the first is working. The wait passes only if the caller can bind the returned state and output to the second request. Herdr does not provide that turn identity today; an agent-native receipt or output assertion must close it.

signal Recovery must preserve four different things

Run the same Codex and Claude tasks through detach, server restart, and experimental handoff. Record the child process, terminal screen, native conversation, and accepted task result separately. A green layout alone does not pass.

Try Herdr now when several CLI agents run on a local or remote machine and both a person and another agent need to inspect them. Keep the multiplexer you already trust when general terminal persistence matters more than native agent state. Watch Superlogical when live sharing, native clients, or production policy is the job, but wait for a beta before treating it as an alternative. Herdr has crossed the line from multiplexer to early runtime, but reliable turn identity and recovery will decide whether it stays there.

Sources & Evidence
Herdr v0.8.2 shipped on August 19 with Qwen support, Windows stable releases, and agent-state fixes The fixes expose both the product velocity and the cost of terminal-derived state.
Herdr v0.8.2 release
Herdr protocol v20 supports semantic frames and terminal ANSI with bounded frame sizes The server/client boundary carries structured session state, not only keystrokes.
Herdr wire protocol
agent.prompt validates the target, rejects blocked agents, and writes text plus delayed Enter to the pane runtime Prompt submission shares the same server-owned pane and PTY as the human client.
Agent prompt handler
Prompt waits bind terminal identity, require a state change, then wait for a settled lifecycle state A replacement process cannot satisfy the old wait, but the wait still does not identify one turn.
Agent wait path
Herdr accepts semantic agent reports and separate native-session reports State authority and resume identity are related but distinct.
Agent report handlers
Herdr pane constructors thread commands, launch environment, agent detection, and render signals into the runtime The pane is a server-owned runtime object, not only a visual region in the client.
Pane runtime construction
Herdr pins a specific libghostty-vt source commit in its vendor manifest The shared terminal engine is a code-level fact, not an inferred similarity between products.
Herdr libghostty-vt manifest
Session state, optional screen history, and plugin state use separate persistence paths A restored layout, screen, process, and agent conversation are different guarantees.
Session persistence
Normal restore starts fresh shells in saved directories, while Unix handoff imports live pane runtimes through a separate path Restart restoration and live-process handoff are different mechanisms with different guarantees.
Restore and handoff entry points
Native resume accepts bounded references from recognized official source and agent pairs Herdr stores agent identity as a typed recovery input instead of replaying screen text.
Native agent resume
Herdr documents that unfamiliar terminal prompts can be misclassified until a screen rule is added Broad agent support comes with a state-accuracy limit that affects waits.
Herdr agent-state docs
The screen detector confirms working-to-idle transitions and periodically refreshes stable blocker signals Herdr adds temporal damping around screen-derived state instead of publishing every observation.
Agent detection transitions
Superlogical announced a terminal multiplexer built on public libghostty components The launch validates the session layer as a product bet but does not prove an implementation.
Mitchell Hashimoto announcement
Superlogical plans durable terminal blocks, web and Apple clients, sharing, composability, and production operation Its stated product boundary is wider than Herdr's current agent-runtime focus.
Superlogical product plan
libghostty-vt parses terminal streams and maintains state while PTY ownership remains outside it A reusable terminal engine removes one hard part but leaves the session product to its consumer.
libghostty direction
The pinned libghostty-vt C API exposes terminal lifecycle, byte input, resize, properties, and state references This is the inspectable terminal-engine surface available to multiplexer builders.
Ghostty terminal C API
Ghostty marks the libghostty-vt C API incomplete and unstable A shared engine can reduce terminal work while still imposing version and integration risk.
Ghostty libghostty-vt header
Mitchell Hashimoto states that libghostty-vt does not create or manage a PTY The product around the library must still own child-process lifetime and session semantics.
Ghostty discussion #11348