Skip to content
Agentmart
Submit a tool

dispatch

Supervise the implementation of beads tasks.

Skill by Igosuki

IndexedMIT
Write a review

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/igosuki-dispatch

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.

We use your email only for this newsletter. Privacy

About

Supervise the implementation of beads tasks. Confirms what's about to happen, then starts a supervisor script that dispatches ready tasks in work order, within the parallel limit, to worker sessions that each implement, merge and close one task in its own worktree; this session is woken only when a person is needed or new work appears. Takes any mix of task, parent task and epic ids, or all dispatchable work when given none. Use when tasks from sdlc:split are ready to implement, or after a restart to pick up dispatched work.

Use cases: productivity

No 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/dispatch

Tools it pre-approves 7

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Bash(${CLAUDE_PLUGIN_ROOT}/scripts/settings.sh
  • *),
  • Bash(${CLAUDE_PLUGIN_ROOT}/scripts/workers.py
  • Bash(${CLAUDE_PLUGIN_ROOT}/scripts/next-tasks.py
  • Bash(${CLAUDE_PLUGIN_ROOT}/scripts/supervise.py
  • Bash(bd
  • *)

What's inside

Skill name
dispatch
Description
Supervise the implementation of beads tasks. Confirms what's about to happen, then starts a supervisor script that dispatches ready tasks in work order, within the parallel limit, to worker sessions that each implement, merge and close one task in its own worktree; this session is woken only when a person is needed or new work appears. Takes any mix of task, parent task and epic ids, or all dispatchable work when given none. Use when tasks from sdlc:split are ready to implement, or after a restart to pick up dispatched work.
License
MIT
Allowed tools
Bash(${CLAUDE_PLUGIN_ROOT}/scripts/settings.sh, *),, Bash(${CLAUDE_PLUGIN_ROOT}/scripts/workers.py, *),, Bash(${CLAUDE_PLUGIN_ROOT}/scripts/next-tasks.py, *),, Bash(${CLAUDE_PLUGIN_ROOT}/scripts/supervise.py, *),, Bash(bd, *)
Instructions
49 lines in SKILL.md · view on GitHub

Before installing

  • Pre-approves some shell commands

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Dispatch

Arguments: $ARGUMENTS

Settings:
!`${CLAUDE_PLUGIN_ROOT}/scripts/settings.sh`

Supervisor:
!`${CLAUDE_PLUGIN_ROOT}/scripts/supervise.py --running 2>&1 || true`

Workers:
!`${CLAUDE_PLUGIN_ROOT}/scripts/workers.py 2>&1 || true`

Dispatch queue:
!`${CLAUDE_PLUGIN_ROOT}/scripts/next-tasks.py 2>&1 || true`

Each task is carried by a worker: a Claude session in the task's own worktree that implements the task, merges it and closes it. The supervisor is the script `${CLAUDE_PLUGIN_ROOT}/scripts/supervise.py`, run by this session in the background; you don't implement, merge or follow workers yourself.

The arguments are any mix of task, parent task and epic ids, in any order, or none for all dispatchable work. Each named id becomes a `--under <id>` for the supervisor: its scope is those beads and their descendants. When the arguments give a parallel limit, it's the one this session passes to `supervise.py` as `--parallel`.

## 1. Check what's named

For each named id, `bd show <id> --json` and look at its `dependencies` where `dependency_type` is `blocks` and `status` isn't `closed`. If there are any, the bead isn't ready: tell the user what it's waiting for (their ids and titles). Whether to add those blockers to the dispatch is a question for the one AskUserQuestion call in step 2, not a call of its own — asking twice in a row parks the second question. If they agree, add the blockers' ids to the set of ids being dispatched.

## 2. Confirm

The workers and dispatch queue above are what's about to happen. Confirm with one AskUserQuestion call, carrying step 1's blocker question too if there was one: the tasks that will start, the parallel limit, the integration mode and the target branch (from the settings above). In epic-merge and epic-pr modes, say that the first task dispatched creates the epic branch and an integration task that waits for the rest of the epic. If the Supervisor line above shows one running, say that dispatching replaces it — it may belong to another session. Skip this if `sdlc:build` invoked this command after its own plan already covered dispatching — it doesn't need a second approval. If AskUserQuestion isn't available (headless session), go ahead without asking. Never ask in plain text and stop.

## 3. Start the supervisor

Run `${CLAUDE_PLUGIN_ROOT}/scripts/supervise.py`, with `--under <id>` for each id from the arguments and step 1, `--parallel N` if the arguments gave one, and `--generation <unix timestamp of now>`, using the Bash tool with `run_in_background: true`, so this session stays free while it runs. Remember this full argument list and this generation for the rest of the session. Say nothing more than that it's running.

## 4. Act on what it exits with

`supervise.py` runs until a person is needed, new work appears, or a supervisor with a higher generation already holds the lock, then prints lines and exits. When that background command finishes, read its output.

**`supervisor <generation> already running`, and nothing else:** another session's supervisor already covers this work. Say so in one sentence and stop — don't start it again.

**Anything else:** start `supervise.py` again first, with the same arguments and the same generation remembered in step 3, so dispatching goes on while you deal with what follows. Then go through each line:
- `blocked <task> awaiting-review: <gate>` — suggest `/sdlc:review <task>`.
- `blocked <task> stopped: <comment>` or `blocked <task> failed: <comment>` — give the comment, suggest `/sdlc:recover <task>`.
- `blocked <task> pr-opened: <url>` — give the URL, for a person to review and merge.
- `blocked <task> not started: <reason>` — relay the reason.
- `new-work <id> <id>...` — ask with AskUserQuestion whether to dispatch those too. If they agree, start `supervise.py` again with those ids added as `--under` and a fresh, higher generation, and remember that argument list and generation in place of the old ones for the rest of the session. If AskUserQuestion isn't available (headless session), just relay the ids. Work labelled `auto` is started without asking and never appears here.
- `taken over` — needs no reply; the restart above already covers it.

**A non-zero exit with no lines:** relay stderr. Don't start it again.

From Igosuki/agentic-sdlc, MIT.

More from Igosuki/agentic-sdlc

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 6, 2026 (23 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Igosuki

Cite this page

dispatch skill. Agent Mart. https://agentmart.dev/skills/igosuki-dispatch (last updated 2026-10-24)