herdr
Skill86 starsChanged 5 months agoMITView on GitHub
Control herdr from inside it. Manage workspaces and tabs, split panes, run commands, read 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).
51 other projects use a version of this, 5 of them edited.
Adopted by
Most recently taken up by
- juraj-blahunka/skillstheir own version, first seen Nov 8, 2026
- bepaldes/heimdall-agenttheir own version, first seen Nov 8, 2026
- compozy/compozytheir own version, first seen Nov 7, 2026
- cormacc/dotagentstheir own version, first seen Nov 4, 2026
- rhasselle-oddball/claude-skillstheir own version, first seen Nov 1, 2026
- vidluther/skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use better-accessibility, show-me and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AnasX7Skillbetter-accessibility
Helps your project comply with accessibility standards and best practices.
Also in 3 projects that use this
AnasX7Skillshow-me
Help the user understand the current topic visually with concise diagrams, code-shape sketches, and focused HTML artifacts.
Also in 5 projects that use this
kannaka-labsSkillskill-doctor
Environment diagnostics — check providers, auth, config, hooks, scheduler, and more. Use when: AUTOMATICALLY ACTIVATE when user asks about:. \"doctor\" or \"run doctor\" or \"diagnostics\". \"check my setup\" or \"is everything working\"
Also in 3 projects that use this
GoogleSkillwayfinder
Plan a huge chunk of work — more than one agent session can hold — as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.
Also in 6 projects that use this
AWSSkillwizard
Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.
Also in 5 projects that use this
MicrosoftSkillwriting-for-agents
Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.
Also in 7 projects that use this
Other versions51 projects use a version of this.
Word for word · 1
- ninehills/skills★ 280100% same
Edited · 5
- bmaltais/skills★ 235% same
- jbaham2/herdr-plugin★ 138% same
- MoonTory/skills★ 114% same
- tanuuuuuuu/dotfiles★ 038% same
- yuanhaorannnnnn/agent-skills★ 029% same
Wrote their own version · 45
- ogulcancelik/herdr★ 47ksame name
- herdrdev/herdr★ 47ksame name
- davidondrej/skills★ 4.3ksame name
- compozy/compozy★ 2.9ksame name
- dmmulroy/skills★ 428same name
- sammcj/agentic-coding★ 169same name
- romiluz13/mifal★ 44same name
- hcchengithub/peforth★ 37same name
- ulises-jeremias/agent-toolkit★ 19same name
- Mineru98/skills-store★ 13same name
35 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- better-goalSkill
- brainstorming-cnSkill
- deslop-enSkill
- deslop-zhSkill
- gpt-image-genSkill
- jupytextSkill
- officecliSkill
- review-codeSkill
- 微信读书Skill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 4 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 48 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
create tabs for separate subcontexts inside one workspace
- Distinctive: line 15
start servers, watch logs, and run tests in sibling panes
- Distinctive: line 16
wait for specific output before continuing
- Distinctive: line 17
wait for another agent to finish
- Very specific: line 362
use herdr pane read for current output that already exists.
- Very specific: line 363
if you are running inside herdr, the HERDR_ENV environment variable is set to 1.
“Common” is measured: kept by at least 6 in 10 of the 48 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
herdr — agent skill
you are running inside herdr, a terminal-native agent multiplexer. herdr gives you workspaces, tabs, and panes — each pane is a real terminal with its own shell, agent, server, or log stream — and you can control all of it from the cli.
this means you can:
- see what other panes and agents are doing
- create tabs for separate subcontexts inside one workspace
- split panes and run commands in them
- start servers, watch logs, and run tests in sibling panes
- wait for specific output before continuing
- wait for another agent to finish
- spawn more agent instances
the herdr binary is available in your PATH. its workspace, tab, pane, and wait commands talk to the running herdr instance over a local unix socket.
if you need the raw protocol or full api reference, read the socket api docs.
verified version
this skill documents herdr v0.5.8. commands were verified against the actual binary. do not assume newer features (like herdr agent subcommands) exist unless confirmed.
concepts
workspaces are project contexts. each workspace has one or more tabs. unless manually renamed, a workspace's label follows the first tab's root pane — usually the repo name, otherwise the root pane's current folder name.
tabs are subcontexts inside a workspace. each tab has one or more panes.
panes are terminal splits inside a tab. each pane runs its own process — a shell, an agent, a server, anything.
agent status is detected automatically by herdr. the api exposes one public field for it:
agent_status—idle,working,blocked,done,unknown
done means the agent finished, but you have not looked at that finished pane yet.
plain shells still exist as panes, but herdr's sidebar agent section intentionally focuses on detected agents rather than listing every shell.
ids — herdr v0.5.8 uses opaque workspace-scoped pane ids like w651d456f8444f3-2. tab ids look like w651d456f8444f3:2. workspace ids look like w651d456f8444f3. always re-read ids from herdr pane list before using them — do not hardcode or guess.
discover yourself
see what panes exist and which one is focused:
herdr pane listthe focused pane is yours (look for "focused": true). other panes are your neighbors.
list workspaces:
herdr workspace listdo not redirect pane output to files
do not use shell redirection like > /tmp/output.txt or 2>&1 | tee /tmp/log when running commands in a herdr pane via herdr pane run. herdr's value is seeing the live terminal stream — the agent's own output, colours, formatting, and progress indicators. redirecting hides all of that and makes the pane appear frozen.
instead, observe output with:
herdr pane read <id> --source recent --lines N— read what is already in the scrollbackherdr wait output <id> --match "pattern" --timeout N— block until expected output appearsherdr pane read <id> --source visible --ansi— get an ANSI snapshot for TUI feedback loops
pane commands (the only way to interact with panes)
herdr v0.5.8 does not have herdr agent commands. all interaction goes through herdr pane:
herdr pane list— list all panes, find your pane id and neighborsherdr pane read <id> --source recent --lines N— read what is on the screenherdr pane send-text <id> "text"— send text without pressing enterherdr pane send-keys <id> Enter— press a key (Enter, CtrlC, Escape, etc.)herdr pane run <id> "command"— send text + enter atomicallyherdr pane split <id> --direction right|down [--no-focus] [--cwd PATH]— split and create a new paneherdr pane close <id>— close a paneherdr pane rename <id> "label"|--clear— assign or clear a pane labelherdr pane get <id>— get detailed info about a pane
sending messages to a pane
herdr pane run <id> "text" sends text + Enter atomically and returns immediately. it does not wait for the receiving side to process the message.
# send a complete message — runs "npm test" in the pane's shell
herdr pane run w651d456f8444f3-3 "npm test"
# send text to an agent in the pane
herdr pane run w651d456f8444f3-3 "review the test coverage in src/api/"herdr pane send-text <id> "text" sends raw text without pressing enter. use herdr pane send-keys <id> Enter to press enter separately:
# send text without enter
herdr pane send-text w651d456f8444f3-3 "hello"
# press enter
herdr pane send-keys w651d456f8444f3-3 Enterimportant: pane run appends \r (carriage return) to the text, equivalent to pressing enter. the command runs in the pane's existing shell process — it does not start a new shell. if the pane is at an agent prompt (e.g. > or the pi input line), the command text will be sent to the agent, not executed as a shell command.
there is no built-in delay or --wait flag on pane run or pane send-text. both return immediately. to pace messages to an agent, use herdr wait agent-status --status idle between sends:
# send a message
herdr pane run w651d456f8444f3-3 "review the test coverage"
# wait until the agent is idle again
herdr wait agent-status w651d456f8444f3-3 --status idle --timeout 120000
# now send the next message
herdr pane run w651d456f8444f3-3 "also check src/utils/"spawn a new agent
split a new pane, then run the agent in it:
# split to the right without stealing focus
herdr pane split w651d456f8444f3-2 --direction right --no-focus
# parse the new pane id from the JSON response
# the response is: {"result":{"pane":{"pane_id":"w651d456f8444f3-6", ...}}, ...}
# run the agent in the new pane
herdr pane run w651d456f8444f3-6 "pi"
# wait for the agent prompt to appear (adjust match pattern for your agent)
herdr wait output w651d456f8444f3-6 --match "thinking" --timeout 30000
# give it a task
herdr pane run w651d456f8444f3-6 "review the test coverage in src/api/"do not pipe the agent's output (e.g. pi | tee /tmp/log) when starting — the command text is sent to the pane's shell, not as a pipe target. let the agent's output flow naturally to the pane.
wait patterns
herdr wait output watches for text in a pane's terminal output. useful for servers, builds, logs:
herdr wait output w651d456f8444f3-3 --match "ready on port 3000" --timeout 30000
herdr wait output w651d456f8444f3-3 --match "test result" --timeout 60000
herdr wait output w651d456f8444f3-3 --match "server.*ready" --regex --timeout 30000herdr wait agent-status watches for the agent status field on a pane. useful for coding agents:
herdr wait agent-status w651d456f8444f3-3 --status done --timeout 60000
herdr wait agent-status w651d456f8444f3-3 --status idle --timeout 60000
herdr wait agent-status w651d456f8444f3-3 --status blocked --timeout 300000tip: wait output matches against unwrapped recent terminal text. pane width and soft wrapping do not break matches. if you want to inspect the same transcript that the waiter matched, use pane read --source recent-unwrapped.
both commands exit code 1 on timeout.
reading output
# current viewport (what is visible right now)
herdr pane read w651d456f8444f3-3 --source visible --lines 80
# recent scrollback (what was printed recently)
herdr pane read w651d456f8444f3-3 --source recent --lines 50
# without soft wrapping (best for logs)
herdr pane read w651d456f8444f3-3 --source recent-unwrapped --lines 120
# with ANSI colours preserved
herdr pane read w651d456f8444f3-3 --source visible --ansiworkspace management
herdr workspace list
herdr workspace create --cwd /path/to/project
herdr workspace create --cwd /path/to/project --label "api server"
herdr workspace create --no-focus
herdr workspace focus w651d456f8444f3
herdr workspace rename w651d456f8444f3 "api server"
herdr workspace close w651d456f8444f3tab management
herdr tab list --workspace w651d456f8444f3
herdr tab create --workspace w651d456f8444f3
herdr tab create --workspace w651d456f8444f3 --label "logs"
herdr tab rename w651d456f8444f3:2 "logs"
herdr tab focus w651d456f8444f3:2
herdr tab close w651d456f8444f3:2close a pane
herdr pane close w651d456f8444f3-3integrations
install built-in agent integrations for more precise state detection:
herdr integration install pi
herdr integration install claude
herdr integration install codex
herdr integration install opencode
herdr integration statusuninstall:
herdr integration uninstall pinamed sessions
herdr session list
herdr session attach work
herdr session stop workselect a session for CLI commands:
HERDR_SESSION=side-project herdr workspace listrecipes
run a server and wait until it is ready
# split a new pane
RESPONSE=$(herdr pane split w651d456f8444f3-2 --direction right --no-focus)
NEW_PANE=$(echo "$RESPONSE" | python3 -c 'import sys,json; print(json.load(sys.stdin)["result"]["pane"]["pane_id"])')
# start the server
herdr pane run "$NEW_PANE" "npm run dev"
# wait for it to be ready
herdr wait output "$NEW_PANE" --match "ready" --timeout 30000
# read the output
herdr pane read "$NEW_PANE" --source recent --lines 20run tests in a separate pane and inspect the result
herdr pane split w651d456f8444f3-2 --direction down --no-focus
herdr pane run w651d456f8444f3-3 "cargo test"
herdr wait output w651d456f8444f3-3 --match "test result" --timeout 60000
herdr pane read w651d456f8444f3-3 --source recent --lines 30check what another agent is working on
herdr pane list
herdr pane read w651d456f8444f3-3 --source recent --lines 80watch another pane robustly
# inspect what is already there
herdr pane read w651d456f8444f3-3 --source recent --lines 40
# wait for specific output
herdr wait output w651d456f8444f3-3 --match "ready" --timeout 30000
# read unwrapped transcript that the waiter matched
herdr pane read w651d456f8444f3-3 --source recent-unwrapped --lines 40spawn a new agent and give it a task
# split pane and start the agent
herdr pane split w651d456f8444f3-2 --direction right --no-focus
herdr pane run w651d456f8444f3-3 "pi"
# wait for the agent prompt
herdr wait output w651d456f8444f3-3 --match "thinking" --timeout 30000
# give it a task
herdr pane run w651d456f8444f3-3 "review the test coverage in src/api/"
# wait for it to finish
herdr wait agent-status w651d456f8444f3-3 --status idle --timeout 120000
# read the result
herdr pane read w651d456f8444f3-3 --source recent --lines 100
# close when done
herdr pane close w651d456f8444f3-3coordinate with another agent
# wait for the agent to finish
herdr wait agent-status w651d456f8444f3-3 --status done --timeout 120000
# read its output
herdr pane read w651d456f8444f3-3 --source recent --lines 100multi-turn conversation with an agent
# send first message
herdr pane run w651d456f8444f3-3 "review the test coverage"
# wait until idle
herdr wait agent-status w651d456f8444f3-3 --status idle --timeout 120000
# read response
herdr pane read w651d456f8444f3-3 --source recent --lines 80
# send follow-up
herdr pane run w651d456f8444f3-3 "also check src/utils/"
# wait again
herdr wait agent-status w651d456f8444f3-3 --status idle --timeout 120000
# read again
herdr pane read w651d456f8444f3-3 --source recent --lines 80notes
herdr pane listprints json. parseresult.panes[].pane_idfor pane ids andresult.panes[].focusedto find your pane.herdr pane splitprints json. the new pane id is atresult.pane.pane_id.herdr workspace createprints json withresult.workspace,result.tab, andresult.root_pane.herdr tab createprints json withresult.tabandresult.root_pane.herdr pane readprints text, not json.herdr pane send-text,herdr pane send-keys, andherdr pane runprint nothing on success.herdr pane read --ansiorherdr pane read --format ansireturns a rendered ANSI snapshot.herdr pane read --source recent-unwrappedjoins soft wraps — use it to inspect the same transcript thatwait outputmatches against.herdr pane run <id> "cmd"sends text +\r(enter). the command runs in the pane's existing shell process — it does not start a new shell.herdr pane send-text <id> "text"sends text without enter. useherdr pane send-keys <id> Enterto press enter.herdr pane send-keysaccepts special keys: Enter, Up, Down, Left, Right, Backspace, Tab, etc.--no-focusonpane split,tab create, andworkspace createkeeps your current terminal context focused.- use
herdr pane readfor current output that already exists. useherdr wait outputfor future output you expect next. - if you are running inside herdr, the
HERDR_ENVenvironment variable is set to1. HERDR_SESSION=<name>selects a named session for CLI commands.HERDR_SOCKET_PATHis a low-level override.- there is no built-in delay or
--waitflag onpane runorpane send-text. to pace messages to an agent, useherdr wait agent-status --status idlebetween sends. - pane ids in herdr v0.5.8 are opaque workspace-scoped strings like
w651d456f8444f3-2. always re-read ids fromherdr pane list— do not hardcode or guess. - do not redirect pane output with
> fileor| tee. useherdr pane readandherdr wait outputinstead. herdr wait outputexit code is1on timeout.herdr agentsubcommands do not exist in v0.5.8. useherdr panecommands for all pane interaction.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

