Herdr runs terminal agents while Herdr GPUI embeds browser tabs

Herdr owns terminal agent sessions; unaffiliated Herdr GPUI connects to its daemon and adds macOS and Windows browser tabs with human-to-agent annotations.

Herdr is the background runtime: it owns terminal processes, workspaces, and agent status, and keeps terminals running when a client closes or an SSH connection drops. Herdr GPUI is a separate, unaffiliated Rust/GPUI desktop client that attaches to a Herdr daemon; on macOS and Windows it adds browser tabs beside the daemon's terminal tabs and routes preview feedback back to agents.

Key facts about Herdr and Herdr GPUI

  • The herdrdev/herdr repository is Apache-2.0 licensed and had 42,490 GitHub stars when checked on 2026-10-06.
  • Herdr v0.9.3 was published on 2026-09-29 at 19:29 UTC. It was a hotfix for terminal Escape-sequence shortcuts after v0.9.2.
  • Herdr v0.9.2 was published on 2026-09-29 at 13:19 UTC. It added agent-reported resume commands, workspace-grouped navigation, and other session controls.
  • The unaffiliated penso/herdr-gpui project is an Apache-2.0 Rust/GPUI client with 891 GitHub stars on 2026-10-06.
  • Herdr GPUI v20261005.1 was published on 2026-10-05 at 07:46 UTC. Its release notes list listening-port detection, SSH-tunnelled remote previews, turn checkpoints, and prompt fan-out.
  • Herdr panes are terminals. Herdr GPUI browser tabs are client-side: macOS uses WebKit, Windows uses WebView2, and Linux opens pages in the system browser instead of embedding them.

How Herdr manages terminal agent sessions

Herdr owns terminal processes, split layouts, workspaces, and the status shown for each agent pane. Closing the client or losing an SSH connection does not stop the terminals. A server or machine restart is different: Herdr restores saved layout, and agents that registered a resume command can reopen their session. The original terminal processes do not survive the restart.

Herdr classifies panes as working, blocked, or idle. Agents can use the CLI and socket API to create panes, prompt other agents, and wait for a pane that needs a human answer.

# Prompt an agent in a known Herdr pane
herdr agent prompt w46:p1 "Review the test results in artifacts/logs/"

Herdr v0.9.2 made resume state agent-reported rather than tied to a built-in integration. An agent must provide its resume command before Herdr can reopen that session after a restart. Herdr v0.9.3 then fixed terminal shortcuts that send Escape followed by another key, including word navigation on macOS and Escape-based Shift+Enter in Claude Code.

How Herdr GPUI embeds browser tabs

Herdr's daemon and terminal clients do not own browser tabs. Herdr GPUI keeps the browser state in the desktop client, alongside the workspace's Herdr tabs, and saves it in $XDG_STATE_HOME/herdr/gpui/browser-tabs.json. The client draws terminal cells from the daemon over its client socket, while browser pages stay in the GPUI window.

The browser implementation differs by platform. macOS uses WebKit web views and Windows uses WebView2. The project documentation says Linux has no embedded pages: a browser request opens the system browser, and local-file previews and annotations are unavailable there. The Windows build is described as experimental in the project README.

Herdr GPUI v20261005.1 also added a way to find listening ports owned by a workspace and open them in a browser tab. A remote port bound only to loopback can be reached through an SSH tunnel. The same release added turn checkpoints and a way to fan out one prompt to several agents.

How Herdr GPUI sends browser feedback to agents

An agent running in a Herdr pane gets HERDR_ENV=1, HERDR_WORKSPACE_ID, and HERDR_PANE_ID. The companion browser skill uses those values to place a page in the caller's workspace and remember which pane should receive notes.

herdr-gpui browser open ./mockup.html
herdr-gpui browser open --no-focus http://localhost:3000
herdr-gpui browser reload
herdr-gpui browser feedback --wait 600

The commands talk to $XDG_STATE_HOME/herdr/gpui/control.sock. A local HTML file is served through the private herdr-preview: scheme. Only the file's directory is available; parent directories, hidden files, and foreign origins are refused, and the file is read again when the agent reloads the tab.

In a browser tab, Annotate lets a reviewer pick an element, select text, or draw a region. On macOS, WebKit captures a screenshot of each pick and stores it under $XDG_STATE_HOME/herdr/gpui/annotations/; Windows notes do not include screenshots. Send to agent combines the page, selector or region, text, HTML snippet, screenshot when available, and reviewer note into one prompt. An agent waiting on browser feedback --wait receives it there. Otherwise Herdr submits the note when the agent's pane is idle, or after two minutes if the agent is still working.

This division matters when reviewing an agent's work. Herdr keeps the process and terminal session alive. Herdr GPUI supplies the visual page, local preview boundary, and the path from a human annotation back to the agent. On Linux, that visual loop stops at the system browser because embedded pages and annotations are not implemented.

Sources

Last verified: 2026-10-06.

Spotted an outdated or wrong claim? Agents can report it with evidence throughPOST /api/feedback; an editor checks every report. See llms.txt for the agent API.