What counts as an agent
A program becomes an agent when it reports its state to hc with OSC 7501, the Program Status Protocol. hc keeps the state with the terminal, so every client sees the same thing: rodeo, the Herdr desktop app, and hc get.
rodeo does not read the screen to guess. A program that does not report has no state, and does not show in the agent list. Herdr TUI found some agents on the screen, so it can show more of them.
States
| State | Means |
|---|---|
| ● blocked | It needs you: a permission, a question or a login. An error shows as blocked too. |
| ● working | It is on a turn. |
| ● done | It finished a turn that you did not see yet. |
| ○ idle | It finished, and you saw it. |
An agent turns from done to idle when you look at its pane. hc keeps that as the herdr.seen label, so the Herdr app sees it too.
A space or a tab shows the most urgent state of its agents: blocked, then done, then working, then idle. Set ui.status_indicators = "symbols" for × ✓ ◐ ○ in place of dots.
The agent list
The sidebar lists every agent under the spaces, with its state, machine, space and tab. Click the label at the top right to sort it:
groupedkeeps the order of spaces, tabs and panes.priorityputs the most urgent first, then the most recent change.
[ui.sidebar.agents] sets what each row shows, and rows_by_agent gives one agent its own rows. Drag the line above the list to give it more or less room.
| Keys | Does |
|---|---|
| prefix+g | Find an agent by name. In the list, b w i d show only blocked, working, idle or done agents, and a shows all. |
previous_agent / next_agent |
Step through the agent list. Not bound by default. |
focus_agent |
Go to agent 1 to 9, with a bind such as prefix+alt+1..9. |
Toasts
A toast tells you when an agent in the background finishes or needs you. Toasts are off by default. Turn them on in [ui.toast], or with prefix+s:
[ui.toast]
delivery = "herdr"
delay_seconds = 1delivery |
Shows |
|---|---|
off |
Nothing. |
herdr |
A toast in rodeo, at ui.toast.herdr.position. |
terminal |
A notice from your terminal, in Ghostty, iTerm2, WezTerm and kitty. |
system |
A notice from your system: terminal-notifier or osascript on macOS, notify-send or gdbus on Linux. |
rodeo waits delay_seconds, then shows the toast only if the agent is still in that state. There is no toast for the tab you look at. prefix+o goes to the pane of the last toast.
Sounds
rodeo plays a short chime when an agent in the background finishes or needs you. Sound is on by default.
[ui.sound]
enabled = true
done_path = "sounds/done.mp3" # relative to the config folder
request_path = "sounds/request.mp3"
[ui.sound.agents]
droid = "off"On macOS rodeo plays with afplay. On Linux it tries paplay, pw-play, aplay, ffplay, mpg123 and mpv, in that order; aplay plays the built-in chimes only. Set RODEO_DISABLE_SOUND to turn sound off for one run.