Herdr
Herdr: Agent-Native Terminal Workspaces
Herdr (pronounced like “herder”) is a terminal workspace manager built for AI coding agents and long-lived terminal work. It owns real PTY panes, keeps them running in a background server, and tracks whether each agent is working, blocked, or idle—so you jump to the pane that needs you instead of hunting through tabs.
It is not a replacement for Neovim or Helix. It is the session layer those editors (and agent CLIs) live inside—similar in spirit to tmux, but agent-aware.
Official site: https://herdr.dev/ · Docs: https://herdr.dev/docs/
Why Herdr exists
Classic multiplexers (tmux, screen, Zellij) are process-agnostic: a pane is a pane. In 2026 many developers run Claude Code, Codex, opencode, Cursor agent CLIs, Grok, and similar tools that:
- Run for a long time
- Block waiting for approval or input
- Multiply (one agent per task or worktree)
Herdr adds:
| Capability | What you get |
|---|---|
| Background server | Agents keep running when you detach or close the laptop lid (machine still on) |
| Agent detection | Sidebar/state for working / blocked / idle |
| Mouse-first UX | Click panes, drag splits, right-click menus—no prefix required to start |
| tmux-like prefix | Ctrl-b family bindings if you already know tmux |
| CLI + socket API | Agents and scripts split panes, wait on status, read output |
| Remote attach | Work on a box over SSH-style remote modes |
Herdr does not wrap or replace your agents. You run the same CLIs; Herdr owns their terminals.
Install
Quick install (Linux / macOS)
curl -fsSL https://herdr.dev/install.sh | shEnsure the install location is on your PATH, then:
herdr
herdr update # later, for installer-managed binariesPackage managers
# Homebrew
brew install herdr
# mise
mise use -g herdr
# fallback if registry is old:
# mise use -g github:herdrdev/herdr
# Nix (pin a release tag in real use)
nix profile install github:herdrdev/herdr/v0.x.y
# or: nix run github:herdrdev/herdr/v0.x.yManual binary
Download from GitHub releases:
| System | Asset |
|---|---|
| Linux x86_64 | herdr-linux-x86_64 |
| Linux aarch64 | herdr-linux-aarch64 |
chmod +x herdr-linux-x86_64
mv herdr-linux-x86_64 ~/.local/bin/herdrChannels
Direct installs default to stable on Linux/macOS. Preview builds:
herdr channel set preview
herdr channel set stableHomebrew / mise / Nix updates go through those tools, not always herdr update.
Concepts
herdr-server (background)
└── session (default or named)
├── workspace "api"
│ ├── tab "agents"
│ │ ├── pane: claude (blocked)
│ │ └── pane: codex (working)
│ └── tab "runtime"
│ ├── pane: dev server
│ └── pane: nvim / hx
└── workspace "docs"
| Term | Meaning |
|---|---|
| Server | Owns PTYs; survives client disconnect |
| Client | Renders UI; attach/detach |
| Workspace | Project-scale unit (often one repo or concern) |
| Tab | Layout group inside a workspace |
| Pane | Real terminal (shell, editor, agent) |
| Agent state | Rolled up from pane → tab → workspace |
Quick start
# Start (spawns/connects to server, opens client)
herdr
# Inside: open your usual tools in panes
claude # or codex, opencode, etc.
nvim
just test
# Detach — leave the herd running (see keyboard docs for exact bind)
# Default family: Ctrl-b then q (detach; leave everything running)Reattach later with herdr again. Named sessions:
herdr session list
herdr session attach work
herdr session attach side-project
herdr session stop work
herdr session delete side-projectRemote-oriented usage (patterns from docs):
# SSH to the machine, then run herdr like tmux
ssh you@server
herdr
# Or remote client mode when supported
herdr --remote workbox
herdr --remote workbox --session agentsDirect attach by agent label when configured:
herdr agent attach reviewerKeyboard and mouse
Herdr is mouse-native: click panes, drag borders, use context menus.
If you know tmux, the prefix model will feel familiar (Ctrl-b by default for many actions). Common ideas from the keyboard guide:
| Action | Typical binding |
|---|---|
| Workspace navigation | prefix+w |
| Detach (leave running) | prefix+q |
| New workspace | prefix+Shift+n |
| Rename workspace | prefix+Shift+w |
| Close workspace | prefix+Shift+d |
| Goto picker | prefix+g |
| Toggle sidebar | prefix+b |
| Close tab | prefix+Shift+x |
Bindings are configurable—see Configuration for the live reference. Prefer the docs over memorizing a fork’s defaults.
CLI automation
Herdr exposes a CLI (and socket API) so you or an agent can drive structure:
# Shape a workspace
herdr workspace create --cwd ~/project --label api
herdr tab create --label logs
# Panes
herdr pane split 1-1 --direction right
herdr pane run 1-2 "just test"
# Wait for agent status, then inspect output
herdr wait agent-status 1-1 --status done
herdr pane read 1-2 --source recent-unwrappedReport custom metadata for the UI:
herdr pane report-metadata <pane_id> \
--source my-agent-hook \
--token model=opus \
--token summary="reviewing authentication"Exact subcommands evolve—run herdr --help and the CLI / socket API docs for your installed version.
Working with editors
Herdr is the outer frame; pick any editor from this book:
| Editor | Pattern |
|---|---|
| Neovim / LazyVim | Pane for nvim, pane(s) for agents, pane for tests |
| Helix | Same; Helix picker for files, Herdr for agents |
| Zed | GUI editor on the host; Herdr for remote/agent PTYs (or local agent panes) |
| Micro / nano | Fine for quick edits in a pane beside an agent |
Example layout intent:
Workspace: payments-service
┌──────────────────┬────────────────────┐
│ nvim │ claude (agent) │
│ ├────────────────────┤
│ │ cargo test -q │
└──────────────────┴────────────────────┘
$EDITOR still matters
Agents and git often spawn editors:
export EDITOR=nvim
export VISUAL=nvim
# or: export EDITOR="zed --wait"Herdr vs tmux vs Zellij
| tmux | Zellij | Herdr | |
|---|---|---|---|
| Primary job | General sessions | Friendly multiplexer | Agent herds + sessions |
| Agent state | Manual | Manual | First-class |
| Scripting | Excellent | Good | CLI + socket API |
| Availability on bare VPS | Highest | Medium | Install binary |
| Mouse UX | Optional | Good | Core |
| Nested with tmux | Common | Common | Supported carefully |
Practical combo:
- tmux on every server as baseline skill
- Herdr on machines where you run multiple coding agents
- Avoid deep nesting: do not put tmux inside Herdr inside tmux without a reason
Herdr can run inside an outer tmux. Conversely, if a shell auto-starts tmux inside a Herdr pane, Herdr may see tmux as the process instead of the agent—disable auto-tmux in those panes.
Agents and detection
Herdr detects many agent CLIs out of the box (Claude Code, Codex, opencode, Cursor-related tools, Grok, Copilot-style CLIs, and others—see current agents docs).
States roll up:
- Blocked — needs you (approval, question)
- Working — busy
- Idle / done — quiet
Your job becomes: open the sidebar, jump to blocked, answer, move on.
Configuration sketch
Configuration covers keybindings, themes, sidebar, notifications, scrollback, and advanced options. Paths and schema are versioned—start from:
# After first run, check docs for config file location and examples
# https://herdr.dev/docs/configuration/When customizing:
- Change one key family at a time
- Keep a “panic” path: mouse + command palette / goto picker
- Store config in git with your dotfiles
Plugins
Herdr supports plugins (manifest + executable actions/hooks) and a marketplace direction. Plugins can restore layouts, add overlays, or react to events such as worktree creation.
Sketch (illustrative—verify against current plugin docs):
[[actions]]
id = "list-workspaces"
title = "List workspaces"
contexts = ["workspace"]
command = ["node", "index.js"]See Plugins and Marketplace.
Session state and persistence
Important mental model (aligned with Herdr docs):
- Detach ≠ kill: panes keep running in the server
- Restart/restore behavior depends on session state features and agent resume support
- Protocol-breaking upgrades may require stopping the old server (
herdr server stop/herdr session stop <name>) afterherdr update
For production data jobs, still use proper supervisors (systemd, containers). Herdr is for interactive and agent workspaces, not a substitute for process monitoring of daemons—though many people run dev servers inside panes safely.
Security notes
- Treat a machine running agent CLIs with repo and cloud credentials as sensitive
- Remote attach expands the attack surface—use SSH hardening, keys, and least privilege
- Do not paste secrets into agent panes you will share or record
- Review plugin source before installing community plugins
Troubleshooting
| Issue | What to try |
|---|---|
herdr: command not found |
Restart shell; check PATH / installer location |
| Cannot reattach | herdr session list; confirm server not stopped |
| Agent shows as idle/wrong | Pane may be nested tmux/shell wrapper; run agent as direct pane command |
| After update, client/server mismatch | Stop old server, start fresh client |
| Keys stolen by outer tmux | Use mouse, or send prefix twice, or simplify nesting |
herdr update
herdr server stop # default session server
herdr # start cleanPractice lab
- Install Herdr and run
herdr - Create two panes: shell + a long
pingorhtop - Detach, close the terminal emulator, reattach—confirm processes lived
- Run two agent CLIs (or two shells pretending to be agents) in one workspace
- Use the sidebar / goto picker to jump between them
- Script a workspace with
herdr workspace createandherdr pane splitif your version supports those verbs
When to use what
SSH to random prod bastion, edit nginx.conf
→ tmux + vi/nano
Local multi-repo app work with one shell
→ tmux or Zellij + nvim/hx/zed
Three coding agents + dev server + editor
→ Herdr (+ your editor of choice)
Further reading
- Herdr docs home
- Install
- Agents
- How to work
- Persistence and remote
- Keyboard
- Agent onboarding prompt from docs: point your agent at
https://herdr.dev/agent-guide.md
Next: Zed for a modern native GUI editor, or Workflows to combine Herdr with Neovim/Helix/tmux deliberately.