herdr/SKILL.md
Control herdr (a terminal-native agent multiplexer) from inside it. Manage workspaces and tabs, split panes, spawn sibling agents, read pane output, and wait for state changes — all via CLI commands that talk to the running herdr instance over a local unix socket. Use when running inside herdr (HERDR_ENV=1). Do not use outside herdr.
npx skillsauth add sanurb/skills herdrInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are running inside herdr — a terminal-native agent multiplexer that gives you workspaces, tabs, and panes. Each pane is a real terminal with its own shell, agent, server, or log stream, and the herdr binary on your PATH lets you control all of it from the CLI. Use this skill to inspect what other panes and agents are doing, split panes for parallel work (servers, tests, log streams, sibling agents), block until specific output or an agent state, and spawn additional agent instances.
ids in herdr (1 for workspaces, 1:1 for tabs, 1-1 for panes) are compact public ids that compact silently when things close. Always re-read them — never trust an id from earlier in the session.
herdr pane list # all panes; the focused one is yours
herdr workspace list # all workspaces
herdr tab list --workspace <ws-id> # tabs inside a workspace
If you need the workspace / tab / pane / agent_status model spelled out (including the meaning of done vs idle and the id-compaction warning in detail), read: references/concepts.md.
The full command catalog (workspace / tab / pane create-focus-rename-close, send-text / send-keys / run, split, read, wait, plus the JSON shape each command prints) lives in references/commands.md. Read it before composing a command — flag names, --source modes, and JSON paths for new ids are easy to get wrong from memory.
Two rules that prevent the most common mistakes:
pane read for output that ALREADY EXISTS; use wait output for output you EXPECT NEXT. Do not poll pane read in a loop.workspace create returns result.workspace, result.tab, result.root_pane. tab create returns result.tab, result.root_pane. pane split returns result.pane.pane_id. Capture these into shell variables before downstream calls.Read: references/recipes.md for tested multi-step patterns — running a server and waiting until ready, running tests in a sibling pane and inspecting the result, watching another pane robustly under soft-wrapping, spawning a new agent and giving it a task, and blocking until another agent finishes (wait agent-status <pane> --status done). Each recipe handles the sharp edges (capturing the new pane id, picking the right --source, picking realistic timeouts). Adapt rather than rebuild from primitives.
The skill delivers nothing if any of these fails:
HERDR_ENV=1 was confirmed before any herdr command was issued. If the variable is unset, do not invoke this skill.pane list / tab list / workspace list — or by parsing it from a fresh create / split JSON response. ids compact silently.NEW_PANE=$(... | python3 -c '...')). Never hard-coded, never guessed.wait output was used for FUTURE output the agent expects next; pane read was used only for output that already exists. No pane read in a polling loop.--no-focus was passed on pane split, tab create, and workspace create whenever the user's current focus should not be hijacked (default for headless agent runs).--source recent-unwrapped was used for inspection. (wait output --source recent already matches against unwrapped text by default.)--regex was passed on wait output only when the match string is actually a regex; literal matches do not set it.wait output and wait agent-status reflect the operation's real duration (servers ≈ 30s, tests ≈ 60s, full agent runs ≥ 120s). On exit code 1 (timeout), the agent diagnoses the cause — never blindly retries.pane read), the agent does not pipe it into a JSON parser.This skill emits a stream of CLI invocations and their captured artifacts:
workspace list, workspace create, tab list, tab create, tab get, tab focus, tab rename, tab close, pane list, pane get, pane split, wait output, wait agent-status.pane read (the pane transcript itself).pane send-text, pane send-keys, pane run.When a step creates a new pane / tab / workspace, capture the parsed id into a shell variable (NEW_PANE, NEW_TAB, NEW_WS) and reuse it for downstream calls in the same recipe. When you read a pane, surface the relevant lines to the user — do not dump the full transcript.
development
Sets up an `## Agent skills` block in AGENTS.md/CLAUDE.md and `docs/agents/` so the engineering skills know this repo's issue tracker (GitHub, GitLab, fp, or local markdown), triage label vocabulary, and domain doc layout. Run before first use of `fp-plan`, `fp-implement`, `fp-review`, `to-issues`, `to-prd`, `triage`, `diagnose`, `tdd`, `improve-codebase-architecture`, or `zoom-out` — or if those skills appear to be missing context about the issue tracker, triage labels, or domain docs.
development
Build a throwaway prototype to flush out a design before committing to it. Routes between two branches — a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route. Use when the user wants to prototype, sanity-check a data model or state machine, mock up a UI, explore design options, or says "prototype this", "let me play with it", "try a few designs".
documentation
Compact the current conversation into a handoff document for another agent to pick up.
testing
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.