Skip to content
Back to skills

Orchestrate

ASecurity

Use when the user asks to sequence, plan or dispatch SEVERAL tasks at once — from backlog ids, from an epic/keyword, or from a free-form description of work. Decides what runs in parallel in the kitchen (tmux sessions), what stays in the inline queue with the human, what becomes a single PR, and writes a durable manifest so the batch survives the session. Also for backlog triage ("what order", "can these run together", "split this feature into parallel tasks") and for resuming an interrupted ...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 26, 2026
ai-agentspythonrustgogit

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 26, 2026

npx -y skills add FabianoArthur/claude-code-kitchen --skill orchestrate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Orchestrate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Orchestrate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fabianoarthur-orchestrate/badge)](https://www.skillsdirectory.com/skills/fabianoarthur-orchestrate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: orchestrate
description: Use when the user asks to sequence, plan or dispatch SEVERAL tasks at once — from backlog ids, from an epic/keyword, or from a free-form description of work. Decides what runs in parallel in the kitchen (tmux sessions), what stays in the inline queue with the human, what becomes a single PR, and writes a durable manifest so the batch survives the session. Also for backlog triage ("what order", "can these run together", "split this feature into parallel tasks") and for resuming an interrupted batch (--resume).
---

# /orchestrate — backlog → manifest → dispatched batch

```
/orchestrate <id> [id2 …]        sequence existing orders
/orchestrate <epic | keyword>    sequence the open orders of the epic
/orchestrate "<description>"     propose orders → CONFIRM → sequence
/orchestrate --resume            reconcile and continue the last batch
```

**Read `CORE.md` (same folder) before any step.** Companion of `execute` (runs one unit)
and `harvest` (sweeps what was merged).

Use it when there are **3+ candidates**, or when a feature must be split. For a single
unit, go straight to `execute` (or `dotask`).

---

## Step 0 — Adapter and pre-flight

1. Load the adapter (CORE §1). No adapter → bootstrap (CORE §9) and **stop for
   confirmation**.
2. Pre-flight — `python3 <this folder>/scripts/doctor.py <repo>` covers the machine
   (claude/tmux on PATH, adapter, `origin/<base>`, worktrees dir, `gh auth`, `.kitchen/`
   excluded, live sessions, disk). **Exit 1 = do not dispatch.** Then, and **stop at the
   first failure**:
   - `git status --porcelain` on the main checkout → **dirty = stop.** List what is there
     and ask: commit, stash, or continue knowing the inline queue works in that same
     checkout. Do not decide alone: it may be days of offline work.
   - local `base` == `origin/base`? Diverged → show the difference and ask.
3. `--resume`: read the last manifest, **reconcile against real git** (CORE §7) and
   continue where it stopped. Do not reprocess a unit already at `✅ PR`.

## Step 1 — Gather candidates

**Ids or epic/keyword** → read the orders from the backlog. Drop what is not open and
**report what was dropped, with its status**; never omit silently.

**Free-form description** → the work is not in the backlog yet:

1. Split it into the smallest sensible deliverables. For each: short title, probable
   layer, estimated size, one-line scope.
2. Show the whole table and **STOP — the human confirms, edits or cuts.** This is the only
   mandatory human gate of this skill.
3. Only after confirmation, create the orders in the project's format (use `plan`) and
   continue.

## Step 2 — Read each candidate

Extract: size, epic, priority, declared dependencies, files cited in technical notes, **and
whether it touches a visual surface or the `scarce_resource`**.

**Treat a file cited in an order as a hint, not a fact.** Confirm it against the disk
before using it in a decision — an order describes the intent of the day it was written.

## Step 3 — Preliminary blast radius

For each candidate, sketch the blast radius (CORE §4) — enough to detect collisions. A
code-graph query if you have one, plus reading the entry point.

It is not the final blast radius (that is born in the plan, inside `execute`); it is the
input of Step 5.

## Step 4 — Route each unit

Apply CORE §2. Tag each unit:

- `[kitchen]` — no visual surface
- `[kitchen: stop before commit]` — visual, without needing the scarce resource
- `[inline]` — needs the scarce resource

## Step 5 — Group and order

- **bundle**: same epic + one deliverable → one worktree/branch/PR, carrier = first id.
- **collision**: blast radii that intersect → **not in the same batch**. Order them: the
  one that unblocks goes first.
- **stack**: real dependency → a note in the manifest, no branch machinery (CORE §8).

A unit is in at most one bundle.

## Step 6 — Estimate

From order size to time-to-open-PR (agent working, not counting human review). Default
t-shirt scale (override in the adapter if your project uses another):

| size | ≈ |
|---|---|
| XS | ~15 min |
| S | 15–30 min |
| M | 30–60 min |
| L | 1–2 h |
| XL | 2–4 h |

A bundle ≈ its largest member, not the sum. Report two numbers:

- **parallel** = max(kitchen batch) **+** sum of the inline queue (it is serial);
- **sequential** = sum of everything.

And say what limits the parallelism. Do not refine further — the estimate's only job is to
tell which unit to sit with.

## Step 7 — Write the manifest BEFORE dispatching

Write the manifest (CORE §7) with everything at `⏸ queued`. **Before** firing any kitchen
session — a manifest written after dispatch protects nothing.

## Step 8 — Present the batch

One line per unit: `id · size · route · ~time · why`. Bundles grouped under the carrier.
Then: the two totals, what limits them, and the two-tempo plan in one sentence ("I fire the
N kitchen units and start the inline queue with you on <id>").

If the batch has >1 inline unit, say the order and why.

## Step 9 — Ask, then actually dispatch

**Ask: "fire these N now, or hold?"** Do not stop at the manifest — stopping there is the
friction this system exists to remove.

On yes:

1. **Kitchen batch** — one tmux session per unit (CORE §2): create worktree and branch
   **with the canonical command of `execute` Step 2** (`git worktree add
   <worktrees>/<ID> -b <branch> <base>` + the adapter's `prepare_worktree`), write
   `<worktree>/.kitchen/prompt.md` (id, route, exact branch, paths of the adapter, of CORE
   and **of the manifest**, preliminary blast radius, and the instruction to follow
   `execute` through the kitchen entry point) and `.kitchen/launch.sh` with the canonical
   dispatch command.
   **No `max_parallel` in the adapter:** run every `launch.sh` before the inline queue.
   **With `max_parallel`:** write the queue `<worktrees>/.kitchen-queue.tsv` and start only
   the dispatcher (CORE §2) — it doses, reaps hibernated sessions and exits by itself.
2. Update the manifest: `🔄 running`, and `dispatched: YYYY-MM-DD HH:MM` in its front matter.
3. **Check the boot** ~30 s later: `tmux capture-pane -p -t '=kitchen-<ID>:'`. Accept the
   bypass/trust dialogs if they are showing (CORE §2).
4. **Immediately**, without waiting for the batch: start the **first unit of the inline
   queue** with the human, in the main checkout, following `execute`. That is the second
   tempo.
5. A dispatched session **does not report back here** — the fine state signal is the
   **manifest** (each kitchen writes its own row at every transition:
   `🔄`→`⏳`/`✅`/`🚫`), crossed with `<gh> pr list`. `tmux ls` only tells **alive/dead**: a
   live session does not mean working. To watch without spending tokens, run
   `scripts/watch.py` in the background (see `dotask`). Tell the human how to follow:
   `tmux attach -t '=kitchen-<ID>'` (detach: `Ctrl-b d`). A unit in
   `[stop before commit]` pauses in its own tmux session with the diff ready — the human
   attaches, reviews and approves (or asks for changes) in that kitchen's conversation.

On "hold": leave the manifest and the line to resume (`/orchestrate --resume`).

## Step 10 — Close the batch

When no unit is left at `🔄` or `⏸` — by the **reconciled manifest** (rows written by the
kitchens themselves, crossed with `<gh> pr list`; CORE §7). `tmux ls` here only flags
anomalies: a dead process with a row still at `🔄` and no `.kitchen/done` = investigate
before closing.

1. If the adapter has `status_push`: run it **once per epic touched** (not once per order).
2. Report: what opened a PR, what waits on a human, what aborted and why.
3. End with the reminder: **run `/harvest` after merging** — it is not automatic, by
   design (polling costs an agent round per trigger; merges happen a few times a day).

## This skill does NOT

- Merge, close orders, or remove worktrees — that is `harvest`, and a human call.
- Create anything in the backlog without explicit confirmation (Step 1).
- Dispatch silently: Step 9 waits for a yes.
- Brainstorm or write plans — that is per unit, inside `execute`. This is backlog
  sequencing, one level above.

Files in this skill

  • CORE.md25.9 KB
  • SKILL.md8.1 KB
  • scripts/dispatcher.py8 KB
  • scripts/doctor.py24.2 KB
  • scripts/gate_diff.py12.5 KB
  • scripts/watch.py7.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.