Skip to content

The herdr plugin

herdr runs coding agents in panes. sluice’s herdr plugin shows each repository’s queue beside them: what is being tested, what is waiting, and what landed or was blamed. Each submission is tied to the pane of the agent that made it. The plugin only reads; it never submits, withdraws or lands anything.

Terminal window
herdr plugin install agentplot/sluice/plugins/herdr

It needs herdr 0.9.3 or later, sluice 0.12 or later and jq on PATH, on Linux or macOS. It reads what it shows from sluice overview --json --watch, the same document the Claude Code plugin reads, in each repository with sluice’s records that one of your panes is in.

The plugin changes none of herdr’s config. Run its setup action:

Terminal window
herdr plugin action invoke agentplot.sluice.setup

It shows the snippets to add to herdr’s config.toml, with your paths filled in. They bind prefix+s to the status popup and a key to the jump. They add a row under each agent in the sidebar, the queue on each workspace’s row and the queue in the tab bar, and turn [ui.toast] on for toasts. Then run herdr server reload-config.

prefix+s opens the queue of the focused pane’s repository. Under TESTING are each branch’s combinations under test with their tests and elapsed time; under QUEUED, the submissions with their states; under RECENT, the latest landings, blames and conflicts. The words are those of the Claude Code plugin’s /sluice pane, and the popup redraws as the queue moves.

When the task runner says how a combination’s tasks are going, as moon does, the combination shows how many have ended and a bar, and its tasks are listed beneath its tests:

▶ testing main+#12+#13 3/5 ▓▓▓▓▓▓░░░░ 2m10s / 15m
#check-fast #check-tools · sandbox
✓ sluice:test 1m48s
✓ site:prose replayed
✓ sluice:tools 2m30s
… sluice:e2e running
· core:test waiting

The tab bar and the sidebar show the count and the bar alone.

When the popup is too short for all of it, each combination keeps its running and failed tasks and counts the rest, as in … 18 passed, 10 waiting. If that is not enough, the oldest of RECENT go. Only then is the bottom cut, and the popup says how much is not shown. Opened from a pane outside any git repository, the popup says so and shows every repository the plugin holds.

KeyDoes
q, Escapeclose the popup
jjump to the pane of the submission blamed most recently
aswitch between this repository and every one the plugin holds
1 to 9do what a Ctrl-click on the row numbered so does

The dashboard action opens the same view, every repository at once, in a tab of its own.

In both, a submission and a failed test’s log of row are links. Ctrl-click a submission to go to the pane of the agent that made it. Ctrl-click a failed test to open its log in a split beside the pane. A link acts only on a worktree or a log the queue names, so a link that some other output prints does nothing.

A blame or a conflict always raises a toast naming the submission, the branch and the tests blamed. A landing raises one only when the submitting agent’s pane is open and is not the one you are looking at. herdr’s toasts take no click: the jump action, or j in the popup, focuses the pane whose worktree made the submission most recently blamed or in conflict.

Each agent’s entry gains one row when its worktree has something to say. herdr’s Agents list shows only panes running an agent, so a plain shell shows no row:

The worktreeThe row
has a submission queued or under test#95 testing 3m/15m, #95 testing 1/2 ▓▓▓▓▓░░░░░ 3m/15m
had its latest submission blamed, or in conflict#87 BLAMED · tests:t-cards
is ahead of its branch3 ahead · clean, 3 ahead · conflicts #95
landed in the last 30 minutes#94 landed 12m

The ahead row asks sluice submit <branch> --check --json whether the worktree would merge with no conflict behind everything queued, again only when its head or the branch moves. Each workspace’s row shows how many submissions its repositories hold. Every row expires two minutes after the plugin last set it, so nothing stale stays if the plugin stops.

By default the plugin runs sluice overview --watch --json in each repository a pane is in. Any other command that prints the same documents, one per line, can be added in sources.toml in the plugin’s config directory (herdr plugin config-dir agentplot.sluice); the plugin’s README gives its form. ahead_check = false there shows the ahead count without asking sluice, for a branch whose remote is slow to fetch from.