Terminal Opener
affaan-m/ECC
Open an executable and its argument array in a visible terminal window through a reusable, shell-free launch plan with dry-run, JSON, capability detection, detached fallback, and standalone recovery…
Drive herdr — the terminal-native agent multiplexer (herdr.dev) — from natural language.
$ npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install disler/inkwell-agent-sandboxes-and-software-factory herdr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/herdr .claude/skills/herdr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "herdr" agent skill from https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdr into .claude/skills/herdr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herdr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdrType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install disler/inkwell-agent-sandboxes-and-software-factory herdr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/herdr .agents/skills/herdr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "herdr" agent skill from https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdr into .agents/skills/herdr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herdr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install disler/inkwell-agent-sandboxes-and-software-factory herdr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/herdr .cursor/skills/herdr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "herdr" agent skill from https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdr into .cursor/skills/herdr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herdr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git --path .claude/skills/herdr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install disler/inkwell-agent-sandboxes-and-software-factory herdr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/herdr .gemini/skills/herdr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "herdr" agent skill from https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdr into .gemini/skills/herdr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herdr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install disler/inkwell-agent-sandboxes-and-software-factory herdrInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/herdr .github/skills/herdr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "herdr" agent skill from https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdr into .github/skills/herdr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herdr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install disler/inkwell-agent-sandboxes-and-software-factory herdr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/inkwell-agent-sandboxes-and-software-factory.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/herdr .opencode/skills/herdr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "herdr" agent skill from https://github.com/disler/inkwell-agent-sandboxes-and-software-factory/tree/main/.claude/skills/herdr into .opencode/skills/herdr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "herdr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
herdrDrive herdr — the terminal-native agent multiplexer (herdr.dev) — from natural language.
Herdr is an agent skill from disler/inkwell-agent-sandboxes-and-software-factory. Drive herdr — the terminal-native agent multiplexer (herdr.dev) — from natural language. Use whenever a prompt asks you to open, inspect, prompt, read, wait on, or tear down herdr sessions, workspaces, tabs, panes, or the agents running inside them, or to launch/orchestrate coding agents (claude, codex, pi, opencode, cursor) inside herdr. Prefix orchestration prompts with /herdr. Fully self-contained — all references and cookbooks are bundled in this skill directory.
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `cookbooks/live-config-reload.md`, `cookbooks/setup-disable-network-checks.md` and `references/command-reference.md`).
The repository describes itself as: Inkwell: a small app, the Super Simple Software Factory that builds it, and the rebootable sandbox system that runs both on a throwaway VM. The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 92f1701. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
claudejqshFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DONE_TOKENOPENROUTER_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Herdr loads about 4.5k tokens when it runs, and up to ~7k if it reads all its reference files. Until then it costs about 119 tokens; SKILL.md has 1,854 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from disler/inkwell-agent-sandboxes-and-software-factory at commit 92f1701, republished under its MIT licence (© disler). 1,854 words, ~4,531 tokens.
.claude/skills/herdr/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.You are driving herdr, a CLI + NDJSON socket for controlling a persistent
fleet of terminal panes (and the agents running inside them). Every workspace,
tab, and pane is a real, addressable object you can spawn, prompt, read, wait
on, and close from the command line — locally, in named sessions, or over SSH.
Unlike a plain multiplexer, herdr also tracks semantic agent state
(idle · working · blocked · done), so you can block on "the agent finished"
instead of scraping screens.
--help)Before doing anything, run:
herdr --help
herdr <command> --help # e.g. herdr pane --help, herdr wait --helpherdr evolves fast (validated here against 0.7.1); trust --help over
memory. Never guess flags — confirm them.
When you need the full surface at once — every command's flags, the socket
API's method families, event types, environment variables, or config keys —
read references/command-reference.md
instead of running many --help calls. It's the validated lookup table
(including all reproduced gotchas); still confirm against --help if the
installed version differs from 0.7.1.
The CLI talks to a server over ~/.config/herdr/herdr.sock. Check and start:
herdr status server # "status: running" or "not running"
herdr server & # headless server — no TUI needed to orchestrateAnyone on the box can drive the socket — you do not need to run inside a
herdr pane to orchestrate (no permission mode to raise). Inside a pane,
HERDR_ENV=1 plus HERDR_PANE_ID / HERDR_TAB_ID / HERDR_WORKSPACE_ID
tell you where you are; use them to avoid touching your own pane.
Everything nests in one tree. Learn the boxes and the verbs fall out:
--session <name>).w1.w1:t1.w1:p1.Every command returns JSON on stdout — parse IDs from the result, never
guess them. IDs compact as things close; refresh with list before acting.
herdr workspace list # all workspaces
herdr tab list --workspace w1 # tabs in a workspace
herdr pane list # every pane + its agent_status
herdr agent list # only panes with a detected/reported agent# Workspace: capture workspace_id AND the root pane_id from one call.
herdr workspace create --cwd "$PWD" --label fleet --no-focus
# → .result.workspace.workspace_id (w1)
# → .result.root_pane.pane_id (w1:p1)
# Splits: each returns the new pane's id.
P2=$(herdr pane split w1:p1 --direction right --no-focus | jq -r .result.pane.pane_id)
P3=$(herdr pane split w1:p1 --direction down --no-focus | jq -r .result.pane.pane_id)
# Tabs and env injection:
herdr tab create --workspace w1 --label logs --no-focus
herdr pane split w1:p1 --direction right --env OPENROUTER_API_KEY="$OPENROUTER_API_KEY" --no-focus--no-focus when scripting so you don't steal the human's focus.--env KEY=VALUE, repeatable) on workspace create,
tab create, pane split, and agent start — there is no --env-file; expand
from your own shell (--env KEY="$KEY") and never echo the values.pane close
the sole/root pane of a workspace you want to keep — the workspace goes with
it, and a pending agent start --workspace <id> against it fails silently. To
swap what's in a workspace, split the NEW pane in FIRST, then close the old
one; to reuse the root pane, pane run/agent start --split off it rather
than closing it.workspace create —
.result.workspace.workspace_id AND .result.root_pane.pane_id — and thread
them through; never rely on focus to place a pane.You operate panes the way a person would, but over the CLI:
herdr pane run w1:p2 "just test" # type a command AND press Enter
herdr pane send-text w1:p2 "some text" # type only — does NOT submit
herdr pane send-keys w1:p2 enter # press a key (esc, tab, ctrl+c, up…)
herdr pane read w1:p2 --source visible --lines 40 # your eyes
herdr pane close w1:p2 # end a pane cleanlypane run = text + Enter. send-text types only. For shell commands use
run; for driving an interactive TUI agent use send-text then
send-keys enter as two steps.send-keys accepts real chords (ctrl+c, alt+x, shift+tab) — you can
interrupt a running process without killing the pane.visible (current screen — the reliable default),
recent / recent-unwrapped (scrollback; -unwrapped undoes pane-width
line wrapping). Scrollback reads can come back empty until output has
actually scrolled — if recent returns nothing, fall back to visible.wait output --match '\$|%' --regex) before judging silence.herdr's killer verbs are blocking waits — prefer them over sleep+read loops:
# Block until a pane prints something (returns the matched line + a read payload):
herdr wait output w1:p3 --match "Server running" --timeout 60000
herdr wait output w1:p3 --match "PASS|FAIL" --regex --timeout 120000
# Block until an agent's semantic state changes (the agent-finished signal):
herdr wait agent-status w1:p2 --status idle --timeout 300000wait output also matches the echoed
command line. If you run echo DONE_TOKEN, the wait fires on the typed
command, not the output. Split the sentinel in the command —
sh -c 'make test && echo DONE_"TOKEN"' — so only real output matches.wait output can also fire on
matching text ALREADY in the pane from earlier runs — it is not
"new output only." For TUI agents that print the same marker format every
turn (e.g. a per-run artifacts: line), a repeated-marker wait false-fires
instantly on the previous turn's output. For driving multi-turn TUI sessions,
poll the app's state line instead (e.g. read the last footer rows every
10-15s until no working appears for several consecutive polls), or match
text unique to the NEW turn.wait agent-status needs the pane to have an agent state: launch through an
installed integration (herdr integration install claude codex … — one per
call) or via herdr agent start, or self-report (below). A bare shell pane
stays unknown forever and the wait just times out.waits in parallel shell jobs and
wait on them, or subscribe to events on the socket (see Socket API).Every pane carries agent_status: idle · working · blocked · done · unknown.
Integrated agents report it automatically; your own scripts can too:
herdr pane report-agent w1:p4 --source custom:build --agent worker-1 \
--state working --message "compiling" # …later: --state idle
herdr agent list # fleet dashboard in one call
herdr agent read worker-1 --source visible --lines 30 # target agents BY NAME
herdr agent send worker-1 "continue" # literal text (no Enter — send-keys after)agent <verb> targets accept agent names, terminal ids, or pane ids —
name your agents and stop threading pane ids everywhere.
# Named, tracked, declarative — prefer agent start over run "claude":
herdr agent start reviewer --workspace w1 --split right --no-focus -- \
claude --dangerously-skip-permissions "review this repo"
# Codex unattended: codex -m gpt-5.5 --dangerously-bypass-approvals-and-sandbox "<task>"
# pi: pi --model <model> "<task>"
# Claude Code + the user's real Chrome (browser-driving agent):
herdr agent start creds-runner --tab w1:t1 --split down --cwd <repo> --no-focus -- \
claude --dangerously-skip-permissions --chrome "<task that browses>"agent start --split / pane split with no explicit target splits the
FOCUSED pane — which may be in another workspace entirely, landing your
agent in the wrong place. ALWAYS target explicitly: --tab <ws>:t1 (or
--workspace <ws>), or split the captured root_pane.pane_id.
Always pass --cwd "$PWD" on agent start — it otherwise defaults to
~/Desktop, so a repo-relative brief pointer ("Read prompts/x.md") fails.
Safe pattern — launch an agent into a FRESH workspace (capture both ids, target explicitly, never close the root pane):
read WS ROOT < <(herdr workspace create --cwd "$PWD" --label <topic> --no-focus \
| jq -r '.result | "\(.workspace.workspace_id) \(.root_pane.pane_id)"')
herdr agent start <name> --tab "${WS}:t1" --split right --cwd "$PWD" --no-focus -- \
claude --dangerously-skip-permissions --model <model> "Read prompts/<brief>.md and execute end-to-end."
# do NOT close $ROOT — closing the last pane deletes $WSclaude --chrome attaches the agent to the user's actual Chrome (logged-in
sessions and all) — the right tool for signups, dashboards, key retrieval, and
any flow where the human must take over mid-stream (logins, payments, captchas).
Prompt the agent to print a clear WAITING ON <human>: <what to do> line in its
pane and poll the page rather than failing, so the human can complete the step
in the browser and the agent resumes on its own.
agent start records the argv in the layout (so layout.export can
rebuild the fleet) and registers the name for agent read/send/wait.
Claude Code panes: also name the agent inside the session. After the
task prompt has been sent, follow up with the /name slash command so the
Claude Code session itself carries the same name as its herdr registration
(shows in the CC UI/session, not just the herdr fleet):
herdr agent send reviewer "/name reviewer" # literal text, no Enter
herdr pane send-keys <pane_id> enter # submit (send-keys is pane-level only;
# get the pane_id from `herdr agent get reviewer`)Safe to send while the agent is mid-turn — Claude Code queues the message.
Launch Claude Code with --dangerously-skip-permissions and Codex with
--dangerously-bypass-approvals-and-sandbox for hands-off fleet runs —
per-launch flags only; never edit the user's global agent config.
An agent turning idle does not mean it succeeded — a declined turn also
goes idle. Always read the pane (or check artifacts) after the wait fires.
# Git worktree per agent — parallel agents without file collisions:
herdr worktree create --workspace w1 --branch feat-auth --label auth --json
# Named sessions — one fleet per project, each with its own socket:
herdr --session api # create/attach
herdr session list --json # HERDR_SESSION=api herdr pane list → script it
herdr session stop api
# Remote: the same verbs against a server on another box:
herdr --remote workbox # SSH attach; panes survive your disconnectDetach (prefix+q) or close the terminal — agents keep running; herdr
reattaches. That persistence is the core difference from an app-bound fleet.
The CLI is sugar over newline-delimited JSON on a Unix socket
(~/.config/herdr/herdr.sock; named sessions under
~/.config/herdr/sessions/<name>/). Anything the CLI does, one JSON line does:
printf '{"id":"1","method":"ping","params":{}}\n' | nc -U ~/.config/herdr/herdr.sock -w 2
printf '{"id":"2","method":"layout.export","params":{"tab_id":"w1:t1"}}\n' | nc -U ~/.config/herdr/herdr.sock -w 2 > fleet.layout.json
# layout.apply rebuilds the BSP tree — including each agent pane's argv.Subscribe to push events (pane.agent_status_changed, pane.created,
pane.output_matched, workspace.*, worktree.*) with events.subscribe;
note it replays a snapshot of existing state first, then streams. Stream to
a file and grep the file — piping through jq in a one-liner can stall on
buffering.
herdr notification show "fleet done" --body "3/3 green" --sound doneToast delivery is off by default — the call returns
"shown": false, "reason": "disabled" until the user sets
[ui.toast] delivery = "herdr" (or terminal/system) in
~/.config/herdr/config.toml, then herdr server reload-config. Check the
response; don't assume the human saw it.
Load cookbook files only when their workflow matches the request:
cookbooks/live-config-reload.md when the
user wants Herdr to reload config.toml continuously, asks for a live theme
development loop, names a pane for config watching, or wants to stop that
loop. The cookbook resolves human ordinals to fresh IDs, checks that the pane
is an idle shell, runs server reload-config every two seconds, verifies the
first applied response, and documents safe shutdown.cookbooks/setup-disable-network-checks.md
when the user wants Herdr fully local-only, air-gapped, or to stop it
contacting herdr.dev — i.e. disabling the two background checks
(update.version_check, update.manifest_check) that are on by default.
Run this as a setup step when provisioning Herdr into sandboxes, VMs, or new
devices. The cookbook locates the active config.toml, sets both keys to
false idempotently (preserving other keys), applies via
server reload-config, and verifies.--help before every unfamiliar verb; confirm flags exist on this version.pane list / agent list before sending or closing.--no-focus everywhere when scripting; you are a guest in the user's terminal.wait over polling — wait output for text, wait agent-status for turn-done.pane list.--env KEY="$KEY"; don't read a pane right after it echoed a key.HERDR_PANE_ID and act on siblings.The default loop for any orchestration task:
herdr status server (start herdr server & if needed) → herdr --help to confirm verbs.workspace list / pane list / agent list.workspace create → pane split / agent start, capturing every ID from JSON.pane run (or send-text + send-keys enter for TUIs).wait output / wait agent-status with a timeout.pane read --source visible, then act on what it says.pane close → workspace close."Stand up two agents on the same question and compare" → workspace create;
split right; agent start claude + codex with the prompt in argv; two parallel
wait agent-status --status idle; agent read both; synthesize; teardown.
"Run the tests and tell me when they're done" → pane split --no-focus;
pane run with a split sentinel (&& echo TESTS_"OK" || echo TESTS_"FAIL");
wait output --match 'TESTS_(OK|FAIL)' --regex; read; report; close the pane.
"Save this fleet so I can boot it tomorrow" → layout.export per tab to
JSON files; later layout.apply — agent panes relaunch from recorded argv.
"Live-reload config every two seconds in space 1, tab 1, pane 2" → read
cookbooks/live-config-reload.md; resolve each ordinal from current list JSON;
verify the target is an idle shell; start the loop; wait for config_reload;
report the resolved pane ID and Ctrl+C shutdown path.
"Make sure Herdr never phones home before we ship it to the sandboxes" →
read cookbooks/setup-disable-network-checks.md; locate the active
config.toml; set [update] version_check = false and manifest_check = false
idempotently; herdr server reload-config; grep the file to confirm; report the
two keys and the remaining by-design egress paths (herdr update, remote SSH,
plugins).
Report concisely in plain English: what you did, the workspaces/panes/agents
involved (cite ids like w1:p3 or agent names), what the wait returned, and
what pane read confirmed. Never echo secret values or full env dumps.
© disler, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in .claude/skills/herdr of disler/inkwell-agent-sandboxes-and-software-factory.
Open the folder on GitHubat commit 92f1701
Herdr next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Herdr this skilldisler/inkwell-agent-sandboxes-and-software-factory | 161 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Terminal Openeraffaan-m/ECC | 275k | — | ~635 | Automated safety check: Pass | MIT | |
| Natural Writingflutter/flutter | 179k | — | ~1.9k | Automated safety check: Pass | BSD-3-Clause | |
| Herdrdavidondrej/skills | 4.1k | — | ~2.1k | Automated safety check: Pass | MIT | |
| Herdr Throwaway Reproductionherdrdev/herdr | 43k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Feishu Driveopenclaw/openclaw | 392k | — | ~375 | Automated safety check: Pass | MIT |
affaan-m/ECC
Open an executable and its argument array in a visible terminal window through a reusable, shell-free launch plan with dry-run, JSON, capability detection, detached fallback, and standalone recovery…
flutter/flutter
Contains well-defined rules for creating natural, accurate, and readable writing.
davidondrej/skills
Operate and coordinate AI agents in Herdr workspaces in Ghostty.
herdrdev/herdr
Runs a disposable, uniquely named Herdr session inside an existing one so runtime, pane, terminal or API bugs can be reproduced without touching the main session.
openclaw/openclaw
Feishu cloud-storage and comment workflows. An agent skill from openclaw/openclaw.
QwenLM/qwen-code
Drives a CLI through a TypeScript scenario and saves terminal screenshots at each step, so pull requests that change command output can be checked visually.
disler/inkwell-agent-sandboxes-and-software-factory
Drive the six-phase sandbox mount system from the host — mount throwaway exe.dev VMs, run the Super Simple Software Factory inside them, watch from outside, harvest the commits, tear down.
disler/inkwell-agent-sandboxes-and-software-factory
Operate exe.dev persistent VMs via SSH/HTTPS for safe code execution and file operations.
Drive herdr — the terminal-native agent multiplexer (herdr.dev) — from natural language. Herdr is an agent skill from disler/inkwell-agent-sandboxes-and-software-factory.dev) — from natural language.
Herdr fits situations like: A prompt asks you to open; tear down herdr sessions; the agents running inside them; launch/orchestrate coding agents (claude.
Run `npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a claude-code`. Or copy the skill folder (.claude/skills/herdr in disler/inkwell-agent-sandboxes-and-software-factory) into .claude/skills/herdr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a codex`. Or copy the skill folder (.claude/skills/herdr in disler/inkwell-agent-sandboxes-and-software-factory) into .agents/skills/herdr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add disler/inkwell-agent-sandboxes-and-software-factory --skill herdr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/herdr, .gemini/skills/herdr, .github/skills/herdr and .opencode/skills/herdr in your project.
Going by SKILL.md and its folder, Herdr needs the command-line tools its instructions call (claude, jq and sh) and credentials named DONE_TOKEN and OPENROUTER_API_KEY. Our summary lists: A credential in OPENROUTER_API_KEY; A credential in DONE_TOKEN.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Herdr is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Herdr: Terminal Opener (affaan-m/ECC, 275k stars), Natural Writing (flutter/flutter, 179k stars), Herdr (davidondrej/skills, 4.1k stars) and Herdr Throwaway Reproduction (herdrdev/herdr, 43k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
disler (a GitHub user) maintains it in disler/inkwell-agent-sandboxes-and-software-factory, which has 161 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on August 9, 2026.
Source: disler/inkwell-agent-sandboxes-and-software-factory on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.