claudeers.
// Claude Plugins

herdr-dispatch

Claude Code / Codex Plugin for dispatch task into other agent

// Claude Plugins[ cli ][ api ][ claude ]#claude#plugins◷ MIT$open-sourceupdated 21 days ago
Actively maintained
98/100
last commit 17 days ago
last release none
releases 0
open issues 0

Install with your AI

Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.

Install and set up herdr-dispatch (claude-plugin project) into my current project.
Found on https://claudeers.com/herdr-dispatch
Repo: https://github.com/bestony/herdr-dispatch
Homepage/docs: —
Detected install method: claude-plugin → /plugin install herdr-dispatch@bestony/herdr-dispatch
Category: plugins. Platforms: cli, api.
Read the repo's README for exact setup and env vars, then install it and wire it into my project.

Claudeers Health Verdict:
active; community-verified: false. Confirm the source before running anything.
// or install directly (claude-plugin)
/plugin marketplace add bestony/herdr-dispatch
/plugin install herdr-dispatch@bestony/herdr-dispatch
// or clone
git clone https://github.com/bestony/herdr-dispatch

// compatibility

Platformscli, api
Operating systems—
AI compatibilityclaude
LicenseMIT
Pricingopen-source
Language—

Get your FREE $2.50 API credits to access TickAtlas financial data ↗

herdr-dispatch

A Claude Code plugin that turns one Claude session into an orchestrator for a fleet of coding agents.

You describe the work. Claude splits it into lanes, gives each lane its own git worktree and its own agent — codex, grok or opencode — running inside a herdr workspace, then supervises every lane on a timer until its work is verified, its branch is pushed and its pull request is open.

The division of labour is deliberate:

  • Claude plans. It reads the repo, writes each lane's implementation plan and acceptance criteria, and asks you to confirm them before anything is created.
  • The agent executes. Each lane gets that plan verbatim as a brief and works through it.
  • Claude publishes. Lanes are briefed never to push, merge, or open a PR. That one operation which reaches a shared remote stays behind Claude's own verification of the acceptance criteria.

Requirements

WhatWhy
herdrCreates the worktrees, workspaces and panes each lane lives in. brew install herdr — developed against 0.9.0
A herdr paneThe skills refuse to run outside one — there would be nothing to dispatch into
A git repositoryEvery lane is a linked worktree branched off a base ref. Run from the main checkout, not a linked worktree
At least one agent CLIcodex, grok, or opencode — whichever dispatcher you invoke, resolvable from the pane's own login shell
python3, jqUsed to probe each lane's on-disk state
gh, authenticatedOptional. Without it lanes are pushed but the gh pr create command is printed for you to run
origin remoteOptional. Without it lanes stay local and are reported as such

Nothing is installed for you. If an agent CLI or gh is missing, the run says so up front and degrades — it never installs, authenticates, or creates a missing branch on your behalf.

Installation

As a plugin — the recommended path in Claude Code:

/plugin marketplace add bestony/herdr-dispatch
/plugin install herdr-dispatch@herdr-dispatch

If the install summary says Run /reload-plugins to activate., run that.

Via skills.sh

The same three skills are also published to the skills.sh registry, for installs that are not plugin-managed — or for handing them to another agent that reads SKILL.md:

npx skills add bestony/herdr-dispatch --list          # what is in the repo
npx skills add bestony/herdr-dispatch                 # install into ./.claude/skills/
npx skills add bestony/herdr-dispatch -g              # install into ~/.claude/skills/
npx skills add bestony/herdr-dispatch -s dispatch-codex -a claude-code -y

Each installed skill directory is self-contained, so /dispatch-<agent> works from .claude/skills/ with no plugin installed. Prefer the plugin when you are on Claude Code: npx skills update replaces the skill directories wholesale, and only the plugin carries a version and the marketplace entry.

Local development install
git clone https://github.com/bestony/herdr-dispatch.git
claude --plugin-dir ./herdr-dispatch

Run /reload-plugins to pick up edits without restarting.

Quick start

Start Claude Code inside a herdr pane, in the main checkout of the repo you want the work done in, then:

/dispatch-codex Add an owner filter to the repos list; fix the websocket reconnect timeout

What happens next:

  1. Claude fetches origin, picks a base ref, and checks whether it will be able to push and open PRs at the end — so you learn about a missing gh login now, not after ten lanes have run.
  2. It groups your tasks into lanes, and for each lane writes an implementation plan grounded in the actual code plus acceptance criteria built from the repo's real check commands.
  3. It shows you the lane table plus each lane's plan and acceptance criteria, and asks once whether to dispatch. Nothing is created before you answer.
  4. On confirmation: one worktree + workspace + agent per lane, each primed with its own brief.
  5. A supervision loop runs every 5 minutes. It probes each lane from disk, nudges the stopped ones, compacts the hot ones, resolves parked dialogs, and re-runs the acceptance criteria itself on any lane claiming to be done.
  6. Each lane that passes gets pushed on its own branch and opened as a pull request.

The plan, the questions and the final report are in Chinese; the briefs, commits and PR bodies are in English.

The three dispatchers

Same procedure, same flags, different agent underneath. Pick by which CLI you have and how autonomous you want the lanes to be.

SkillAgentHow a lane is driven
/dispatch-codexcodexGoal mode (/goal). Codex auto-continues toward the objective across turns; the supervision loop is a repair path
/dispatch-grokgrok (Grok Build)Goal mode when [goal] enabled = true in ~/.grok/config.toml, otherwise one-shot + nudges. The dispatcher reads your config and tells you which regime is in force
/dispatch-opencodeopencodeNudge-driven. Opencode has no goal mode — it stops after every turn, so the loop's continuation prompt is the engine. Expect roughly one turn per sweep interval

Plugin-qualified forms work too: /herdr-dispatch:dispatch-codex.

Flags

/dispatch-<agent> <task-1>; <task-2>; … [flags]

Everything that is not a flag is task text. Tasks split on numbered items, newlines, or ;.

FlagMeaningDefault
--lanes NCap on concurrent lanes, 1–1616
--base <ref>Base ref for lane branchesorigin/<current> if it exists, else the current branch
--no-yoloRun lanes under normal approval prompting instead of bypassing itoff — yolo is the default
--yoloAccepted, but redundant — already the defaulton
--draftOpen pull requests as draftsoff — ready for review
--no-prPush each verified lane, then print the gh pr create command instead of running itoff
--resumeSkip planning; run one supervision sweep over an existing runoff
--no-loopDo not arm the recurring supervision loop after dispatchoff
--compact-at N(opencode only) Send /compact once a lane's last turn reports ≥ N context tokensunset — no automatic compaction

--compact-at takes absolute tokens rather than a percentage because opencode publishes no context window on disk, and the dispatcher refuses to invent a denominator. The codex and grok dispatchers compact on a percentage they can actually read.

Two things that are not flags

Worktree isolation has no opt-out. With approvals bypassed by default, the worktree boundary is the only thing keeping one lane's mistakes out of the other lanes and out of your own checkout. Passing --no-worktree stops the run before anything is created.

Yolo is the default, and it is a real trade. An approval overlay stalls an unattended lane until the next sweep notices it, so lanes launch with approvals bypassed:

AgentLaunch flagWhat it gives up
codex--dangerously-bypass-approvals-and-sandboxApprovals and the sandbox
grok--permission-mode bypassPermissionsApprovals only — your --sandbox profile is left untouched, so if you have it set to off, the worktree is the only boundary
opencode--autoApprovals only, and opencode's own help calls it dangerous. There is no sandbox either way

Pass --no-yolo to keep prompting; the loop then resolves each overlay itself, at the cost of a lane pausing between sweeps. Under --no-yolo the flag is passed through explicitly rather than merely omitted, because a global yolo = true in the agent's own config would otherwise leave the lane auto-approving while the plan summary claimed the opposite.

Resuming and stopping

The supervision loop lives in your Claude session. If the session ends, the timer dies with it — lanes keep working, but nobody is watching. Bring supervision back with:

/dispatch-codex --resume

A --resume sweep finds the run by scanning state files for one matching your cwd, runs one full sweep, re-arms the timer, and re-records the pane to notify. Conversation memory is never trusted: the state file is the only truth, and every sweep starts by re-reading it.

The loop stops on its own once every lane is terminal — published, failed, paused by you, or verified-but-unpublishable with a recorded reason — and tells you which lanes are waiting on what.

What a run leaves on disk

~/.claude/dispatch-<agent>/
├── bin/lane_state.py       # the on-disk probe helper — written once, shared by every run
└── <run-id>/
    ├── state.json          # the run's only source of truth, rewritten atomically each sweep
    └── <lane>-pr.md        # PR body, written to a file so multi-line quoting can't break

<lane-checkout>/.dispatch/    # git-excluded via .git/info/exclude
├── TASK.md             # objective, confirmed plan, checklist, acceptance criteria, boundaries
├── progress.md         # rewritten by the lane after every checklist item
└── DONE                # written only when the lane believes every criterion holds

.dispatch/progress.md is the lane's memory across compaction, and it is what the next continuation prompt is built from. DONE is a claim, not a verdict — Claude re-runs the acceptance criteria itself before believing it.

What it will not do

These are invariants, not defaults:

  • Never force-push, never push the base branch, never push a branch absent from the state file.
  • Never merge, never worktree remove, never delete a session or a worktree. Those commands are printed at the end for you to run.
  • Never touch what it did not create. Lane names carry no run id and are reusable, so identity is re-confirmed from the recorded session id before any lane is steered.
  • Never approve a lane's request to push or open a PR. A lane asking for that misread its brief; it gets surfaced to you, not approved.
  • Never report a half-finished lane as complete. A lane is done when its tree is clean, its commits are real, and every acceptance criterion has been re-verified by the orchestrator.

Cleanup after a run

The final report prints these — it does not run them. Order matters: worktree remove comes first, because git refuses to delete a local branch still checked out in a worktree.

herdr worktree remove --workspace <ws>            # destroys the checkout AND kills its agent
gh pr merge <pr-number> --squash --delete-branch  # per lane, after you have reviewed it
git -C <repo> branch -d <branch>                  # only if the branch outlived the merge

herdr worktree create produces two workspaces per lane — the linked worktree and one for the base repo — so expect two ids to clean up. And worktree remove discards uncommitted work in that checkout even without --force.

Repository layout

.claude-plugin/
├── plugin.json               # plugin manifest
└── marketplace.json          # lets this repo host itself as a marketplace
skills/
├── _shared/
│   ├── plan.md               # §2–§4, §5b — bookkeeping, lane plan, workspaces, brief
│   └── supervise.md          # §6b, §6e–§6f, §6i, §7, §8 — poll, verify, publish, loop, report
├── dispatch-codex/
│   ├── SKILL.md              # §0 invariants, §1 gate and parse
│   └── references/
│       ├── driver.md         # §5a, §5c, §6a, §6c, §6d, §6g, §6h — everything codex-specific
│       ├── plan.md           # symlink → ../../_shared/plan.md
│       └── supervise.md      # symlink → ../../_shared/supervise.md
├── dispatch-grok/            # same shape
└── dispatch-opencode/        # same shape

Each dispatcher is four files with continuous section numbers §0–§8, so a cross-reference means the same thing wherever you are. Adding a fourth agent means writing one SKILL.md and one driver.md, plus the two references/ symlinks; _shared/ itself is reused untouched.

The symlinks exist because the skills.sh installer copies a skill directory on its own — its --copy mode and its canonical staging both dereference symlinks, so ../_shared/ would otherwise arrive as a dangling path and every §2–§4 and §6b–§8 reference in the installed skill would point at nothing. They keep the shared halves single-sourced in the repo while resolving after install. ponytail: this depends on the installer dereferencing symlinks rather than preserving them; if a future CLI version changes that, the fix is to copy the two files into each references/.

License

MIT — see LICENSE.

// faq

What is herdr-dispatch?

Claude Code / Codex Plugin for dispatch task into other agent. It is open-source on GitHub.

Is herdr-dispatch free to use?

herdr-dispatch is open-source under the MIT license, so it is free to use.

What category does herdr-dispatch belong to?

herdr-dispatch is listed under plugins in the Claudeers registry of Claude-compatible tools.

3 views
★ 22 stars
unclaimed
updated 21 days ago

// embed badge

herdr-dispatch on Claudeers
[![Claudeers](https://claudeers.com/api/badge/herdr-dispatch.svg)](https://claudeers.com/herdr-dispatch)

// retro hit counter

herdr-dispatch hit counter
[![Hits](https://claudeers.com/api/counter/herdr-dispatch.svg)](https://claudeers.com/herdr-dispatch)

// reviews

// guestbook

0/500

// related in Claude Plugins

🔓

A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.

// pluginsmultica-ai/★ 215,548[ claude ]
🔓

Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explainin…

// pluginsanthropics/⟨Python⟩★ 147,969[ claude ]
🔓

"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/

// pluginsHKUDS/⟨Python⟩★ 50,756◷ Apache-2.0[ claude ]
🔓

financial-services — a Claude ecosystem project on GitHub.

// pluginsanthropics/⟨Python⟩★ 38,867◷ Apache-2.0[ claude ]
→ see how herdr-dispatch connects across the ecosystem