herdr
Operate and coordinate AI agents running inside Herdr in Ghostty.
Skill by tattooinmtl
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/tattooinmtl-herdr
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/herdr
What's inside
- Skill name
herdr- Description
- Operate and coordinate AI agents running inside Herdr in Ghostty. Use when the user says "Use the Herdr skill," mentions Herdr, or asks to inspect, message, wait for, or coordinate agents in a Herdr workspace. Herdr-specific; do not use for cmux or ordinary terminal sessions.
- License
- MIT
- Instructions
- 145 lines in SKILL.md · view on GitHub
Before installing
- Instructions read files in your home folder (~/.ssh, ~/.aws…)
Files (1)
- SKILL.md
SKILL.md (first lines)
# Herdr
Herdr is terminal orchestration, not native agent-to-agent communication or shared memory. Agents call the `herdr` CLI, which controls panes through Herdr's local socket. This works across Pi, Codex, Claude Code, Cursor CLI, and other terminal agents. Native integrations only improve detection, status accuracy, and session restoration.
## Preconditions
The controlling agent must run inside Herdr in Ghostty. Verify access and workspace scope:
```bash
test "${HERDR_ENV:-}" = "1"
test -n "${HERDR_WORKSPACE_ID:-}"
```
If either fails, do not pretend to access other agents; tell the user the agent must be launched inside Herdr.
One-time installation:
```bash
npx skills add ogulcancelik/herdr --skill herdr -g
```
## CLI workflow
```bash
# Discover pane IDs in this workspace; never guess them
herdr pane list --workspace "$HERDR_WORKSPACE_ID"
# Read the target's recent context
herdr pane read <pane-id> --source recent-unwrapped --lines 120
# Send a prompt and press Enter
herdr pane run <pane-id> "Check the failing tests and report back."
# Wait for completion; use idle instead if that integration reports idle
herdr wait agent-status <pane-id> --status done --timeout 120000
# Read the result
herdr pane read <pane-id> --source recent-unwrapped --lines 120
```
Stay inside the current workspace. Read before messaging; for inspection-only requests, send nothing. After messaging, wait for `done`, `idle`, or `blocked`, then read the output again. Never assume the prompt was acted on.
Do not close, rename, move, resize, or reconfigure panes you did not create. Do not create or close panes unless the user explicitly asks. “Use the Herdr skill” means execute these CLI operations, not merely explain them.
## Sharp edges (empirically verified)
Hard-won facts from driving herdr in production. Trust these over intuition.
### Sessions & targeting
- Always append `--session <name>` to every command. The `HERDR_SESSION` env var alone silently falls back to whatever server is already running.
- Destructive ops only via `herdr session stop <name>` / `herdr session delete <name>` (explicit positional name). Never `herdr server stop` — it acts on whatever server is ambient.
- Target shape is `<session>:<pane-id>`; the pane id itself contains a colon (`w1:p2`). Split on the FIRST colon only.
- A bare CLI call does not auto-start a server. Start headless with `herdr server --session <name>`.
- Every herdr-managed process gets `HERDR_ENV=1` and `HERDR_PANE_ID`. Inside nested tmux, `$TMUX` wins — treat that pane as tmux.
### Sending input
- `pane send-text` types but does NOT submit — follow with `pane send-keys <pane> enter`. `pane run` = text + Enter in one call.
- `pane run` is reliable into a shell prompt, but TUI agent composers (Claude Code, Cursor CLI) treat its text+Enter burst as a paste and swallow the Enter — text sits typed but unsubmitted. To message a TUI agent: `send-text`, sleep ~1s, then a separate `send-keys <pane> enter`.
- C0 control bytes (e.g. ASCII 0x1f) are consumed as terminal control actions and can erase already-typed text. For invisible markers use U+2063 INVISIBLE SEPARATOR — it travels as text.
- Slash commands open an autocomplete popup; the first Enter may only close the popup or fill an argument placeholder, not submit. `escape` dismisses the popup and keeps the text.
- Never verify a submit by "pane content changed". Confirm via native agent status flipping to `working`/`blocked` after Enter.
### Reading panes
- `pane read --lines N` returns COMPLETELY EMPTY output when N is smaller than the pane's viewport height. Always request >=200 lines and trim locally (`tail -n N`).
- `pane get` `.cwd` is frozen at pane creation. Use `.foreground_cwd` for the live working directory.
- `pane read --format ansi` preserves styling. Ghost/placeholder composer text (rotating suggestions, hints) renders dim (SGR-2) or dark truecolor; real typed input renders normal. This is the only reliable way to tell an empty composer from a human draft.
### Agent state
- `herdr agent get <pane>` reports `working`/`idle`/`done`/`blocked`/`unknown` — native detection, better than regex-guessing.
- Known gap: status reads `idle` during a long-running foreground tool call (the model finished its turn; the tool is still grinding). Corroborate an `idle` verdict with pane text (busy banners like "esc to interrupt") before treating a pane as free or stale.
- Blocking waits exist: `herdr agent wait <pane> --status <s> --timeout MS` and `herdr wait output <pane> --match <text>`.
- Push events over the socket (protocol >=16): `pane.agent_status_changed`, `pane.output_matched`. Use as the fast path; keep polling as the backstop.
- Any script can register itself as an agent via `pane report-agent` and report idle/working/blocked.
### Workspace / tab lifecycle
- NO label uniqueness anywhere: workspaces and tabs can share labels. Do your own duplicate checks; find-by-label adopts the first match. An unlabeled workspace displays its cwd basename as its label — a real collision hazard (once caused an adapter to kill a live agent pane it wrongly adopted).
- `workspace create` seeds one default tab labeled `1`. Closing a workspace's LAST tab deletes the workspace. Closing a tab's only pane closes the tab.
- `--no-focus` is respected on workspace/tab create, except the very first workspace in an empty session (always focuses). `pane split --no-focus` still shrinks the host tab's viewport — the flag governs focus, not geometry.
- Workspace/tab/pane IDs and labels survive a server restart within a named session. The processes and agent registrations do NOT — panes return as husks (fresh shell, `agent get` reports `agent_not_found`). Close-and-replace husks; don't treat them as live duplicates.
### Misc
- `tput cols` inside a script launched via `pane run` reports a stale default (80). Never trust it for layout math.
- For risky experiments use an isolated named session (never `default`), and re-check `herdr session list --json` immediately before any stop/delete.
- `herdr integration install <harness>` (claude, codex, cursor, pi, ...) enables native status detection per agent. `herdr notification show <title>` fires a desktop-style alert.
## Launching agents in new panes (when the user asks)
ALWAYS launch agents with auto-approval — a worker in an unattended pane stalls forever on a y/n prompt nobody answers:
- Cursor CLI: `cursor-agent --yolo "task"` (alias for `--force`)
- Codex CLI: `codex --yolo "task"`
- Claude Code: `claude --dangerously-skip-permissions "task"`
This is safe only because the user's `global-agent-guardrails` deny-list hook is installed across all agents. First-run trust dialogs may still appear despite these flags — peek the pane after launch. `herdr integration install <cursor|codex|claude>` (once each) enables native agent-status detection.
NEVER verify a launch with `sleep N && pane read` — that is a non-herdr antipattern. Use the native waits: `herdr agent wait <pane> --status working --timeout MS` (agent picked up the task) or `herdr wait output <pane> --match <text>`, then read the pane.
### Cursor CLI specifics
The real binary is `cursor-agent` (`agent` is an alias/new docs name — don't rely on it in scripts). The user's shorthand `cur` = `cursor-agent --yolo`: fine to type into an interactive pane, but use the full binary in scripts — aliases don't expand there. Launch into an existing pane:
```bash
herdr pane run <pane-id> "cd <worktree> && cursor-agent --model gpt-5.3-codex-high --yolo 'fix the failing tests'"
```
- **Interactive:** `cursor-agent "task"` (or no arg for empty session). **Headless:** `cursor-agent -p "task" --output-format text|json|stream-json`.
- **Permissions:** `--force` runs commands without per-command approval (alias `--yolo`); `--sandbox enabled|disabled`. Auth for scripts: `CURSOR_API_KEY` env var.
- **Model:** `--model <slug>` at launch, `/model` in-session. Enumerate with `cursor-agent --list-models` — slugs are version/account-dependent, never hardcode from memory.
- **Reasoning effort:** there is NO `--effort` flag — effort is baked into the slug suffix: `-low` / `-medium` / `-high` / `-xhigh` (e.g. `gpt-5.3-codex-xhigh`, `claude-opus-4-8-thinking-high`). `-fast` is speed, not effort. Bracket syntax `model[effort=high]` shown in `--help` is NOT actually supported — always use full slugs.
- **Known bug (mid-2026):** some CLI builds silently drop the reasoning suffix passed via `--model` and fall back to default effort. Verify with `/model` after launch; `--disable-auto-update` keeps a working build stable.
- **Resume:** `cursor-agent resume` (latest), `--resume <chatId>`, `cursor-agent ls` to list.
## Prompt patternsFrom tattooinmtl/omni, MIT.
More from tattooinmtl/omni
- 0.552score
corral-launch-agents
tattooinmtl
Launch new CLI coding agents through Corral Design 1, or correctly reopen existing agent sessions inside a Corral-active Herdr repository.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
launch-subagent
tattooinmtl
Read this BEFORE launching any subagent (Task tool, background agents, parallel agents, best-of-N, delegating work to another agent).
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
design-taste-frontend-v1
tattooinmtl
ARCHIVED, superseded by `design-taste-frontend` (v2), which is the active default for landing pages, portfolios and redesigns.
SkillBFreshness: B★ 1Claude Code +9 - 0.543score
git-worktree
tattooinmtl
Use git worktrees to run multiple coding agents in parallel on one repo without collisions.
SkillBFreshness: B★ 1Claude Code +9 - 0.543score
cmux
tattooinmtl
Control the cmux macOS terminal app (CLI + socket API) — cmux workspaces, panes, surfaces, browser automation, notifications, settings, hooks.
SkillBFreshness: B★ 1Claude Code +9 - 0.542score
gpt-review
tattooinmtl
Launch a GPT 5.6 Sol Max subagent to do a deep, neutral senior-developer review of the current work and report its findings back verbatim.
SkillBFreshness: B★ 1Claude Code +9 - 0.542score
fable-review
tattooinmtl
Launch a Fable 5 Max 1M subagent to do a deep, neutral senior-developer review of the current work and report its findings back verbatim.
SkillBFreshness: B★ 1Claude Code +9 - 0.538score
changelog
tattooinmtl
Generate or update CHANGELOG.md from recent git history.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 19, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/tattooinmtl/omni
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from tattooinmtl
- 0.552score
corral-launch-agents
tattooinmtl
Launch new CLI coding agents through Corral Design 1, or correctly reopen existing agent sessions inside a Corral-active Herdr repository.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
design-taste-frontend-v1
tattooinmtl
ARCHIVED, superseded by `design-taste-frontend` (v2), which is the active default for landing pages, portfolios and redesigns.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
launch-subagent
tattooinmtl
Read this BEFORE launching any subagent (Task tool, background agents, parallel agents, best-of-N, delegating work to another agent).
SkillBFreshness: B★ 1Claude Code +9 - 0.543score
cmux
tattooinmtl
Control the cmux macOS terminal app (CLI + socket API) — cmux workspaces, panes, surfaces, browser automation, notifications, settings, hooks.
SkillBFreshness: B★ 1Claude Code +9 - 0.543score
git-worktree
tattooinmtl
Use git worktrees to run multiple coding agents in parallel on one repo without collisions.
SkillBFreshness: B★ 1Claude Code +9 - 0.542score
fable-review
tattooinmtl
Launch a Fable 5 Max 1M subagent to do a deep, neutral senior-developer review of the current work and report its findings back verbatim.
SkillBFreshness: B★ 1Claude Code +9
Cite this page
herdr skill. Agent Mart. https://agentmart.dev/skills/tattooinmtl-herdr (last updated 2026-10-24)