Skip to content
Back to skills

Org Dispatch

ASecurity

Run an org-team workflow — a flat pod of up to four peer Claude Code sessions claims lane-tagged slices of an approved spec over the baseline MCP channel and implements them concurrently, each in its own git worktree. Each peer DECIDES its own in-lane implementation choices in its own main context (Article X); only un-decidable or cross-lane forks escalate peer→lead→human (yield_fork for task-bound forks, ask_lead for free-form queries). Opt-in and OFF by default (velocity.org_mode.enabled). ...

  • 14 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 4, 2026
ai-agentsgonodegit

Works with

  • claude code
  • cli
  • mcp

Security analysis

A100/100

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

Scanned October 4, 2026

npx -y skills add friedbotstudio/baseline --skill org-dispatch --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Org Dispatch?

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

Security grade badge for Org Dispatch
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/friedbotstudio-org-dispatch/badge)](https://www.skillsdirectory.com/skills/friedbotstudio-org-dispatch)

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: org-dispatch
owner: baseline
description: Run an org-team workflow — a flat pod of up to four peer Claude Code sessions claims lane-tagged slices of an approved spec over the baseline MCP channel and implements them concurrently, each in its own git worktree. Each peer DECIDES its own in-lane implementation choices in its own main context (Article X); only un-decidable or cross-lane forks escalate peer→lead→human (yield_fork for task-bound forks, ask_lead for free-form queries). Opt-in and OFF by default (velocity.org_mode.enabled). Graduates the retired sprint-dispatch prototype into the constitutionally-sanctioned org-team model (Article X — Multi-session coordinated workflows). Requires git.
---

# org-dispatch — run an org-team over the coordination channel

`org-dispatch` is the execution engine of the **org-team model**: a flat pod of up to four peer Claude Code sessions claims lane-tagged slices of an approved spec and implements them concurrently over the baseline MCP channel, each peer in its own git worktree, so per-feature wall-clock approaches the slowest lane instead of the sum. It is the multi-session counterpart to `swarm-dispatch` (which parallelizes components of one spec inside one session via bounded subagents).

It is governed by **Article X — Multi-session coordinated workflows** (a different axis from Article II, which governs intra-session delegation and is untouched). The load-bearing difference from the retired `sprint-dispatch` sandbox: **a peer decides its own in-lane implementation choices in its own main context** — it does not bounce every fork to the lead. Only un-decidable or cross-lane forks escalate.

## Gate: opt-in, off by default, git required

```
node .claude/skills/org-dispatch/org-mode.mjs gate   # wraps org-mode.mjs -> orgDispatchGate
```

If the gate refuses, **stop** — org mode is the opt-in fence (and worktree isolation requires git).

## The run loop (lead, in main context)

1. **Decompose into lanes.** Read the approved spec and its dependency DAG. Each lane is one channel task `{id, lane, write_set, depends_on, assignee?}` (`org-mode.toLaneTasks`). Write the tasks into the channel state and a durable plan (`harness/plan-store.createPlan`). A lane carries a domain tag the claiming peer inherits — its in-lane decision latitude. **No sprint manifest is required**: a lane is just a fully-specified task. The lead may also `enqueue_task` ad-hoc lanes at any time — peers can be handed tasks with no sprint in place; the pool is enabled by `velocity.org_mode.enabled` alone.
2. **Allocate: claim-any or directed.** Leave a lane's `assignee` unset for **claim-any** (the first free peer wins) — simplest, but one fast peer can monopolize the queue while others idle. Set `assignee` to a `peer_id` for a **directed** lane that only that peer may claim — this is the lead's control to spread load across the pod or hand a specific lane to a named peer. `claim_task` enforces it server-side (a non-assignee claim is rejected); the `task-available` push carries the assignee so a well-behaved peer skips a lane that is not its own.
3. **Select the pod** (`peer-select.selectPeerClass`): if human-launched peer sessions are registered on the channel, the flat pod (up to four) works the lanes; otherwise the lead spawns bounded `swarm-worker` subagents as the fallback execution surface. The lead is one of the four — flat for claiming, plus the arbitration + human-escalation hat.
3.5. **Isolate every peer before any lane is claimed.** For each peer, run `worktree.createPeerWorktree({rootDir, peer_id})`. It returns the peer's own working directory and branch (`org/<peer_id>`), or `{ok: false, reason}`. **A refusal stops the dispatch** — never fall back to running peers in the primary tree, because two peers in one checkout each see the other's half-finished edits as their own working tree, and the first commit carries both. Re-running for a peer that already has a tree returns the same path, so a resumed dispatch does not tear down live work.

4. **Coordinate mid-flight.** Peers `claim_task` (race-safe, single-winner), implement within their lane's `write_set`, `signal_done` to unblock dependents (pipeline, not a wave barrier).
   - **A peer is always a peer, and knows which peer it is.** A session connected as a peer never adopts the lead role and never declines a claimable lane on the belief that it is the lead, even if the same human also runs the workflow-lead session. The server bakes the session's `peer_id` and role into its instructions so it never guesses its identity.
   - **Completion is reliable, not push-only.** A pointer may reach a peer when a lane becomes claimable or done, and it may never arrive. The lead reconciles via `sprint_status` — its `all_done` flag is the authoritative, never-dropped completion check.
5. **In-lane decisions stay local.** A peer that meets an in-lane implementation choice (`classifyFork` → `decide`) decides it in its own main context and proceeds. It does NOT escalate routine implementation latitude.
6. **Escalation spine (peer→lead→human).** A peer that meets an un-decidable or cross-lane fork (`classifyFork` → `escalate`) escalates rather than guessing:
   - a **task-bound** un-decidable fork → `yield_fork(task_id, fork_desc)` (the lead records it via `yield-arbiter.recordYield`, arbitrates in main context, records the resolution, and re-dispatches);
   - a **free-form** question → `ask_lead(body)`, which the lead reads off `sprint_status`. The lead arbitrates in main context, and if the fork needs human judgment it escalates to the **human**, then routes the decision back with `answer_peer(message_id, answer)`.
7. **Audit, then land.** On each `signal_done`, diff the peer's worktree against the wave baseline and pass the changed paths through `swarm-dispatch/swarm_merge.mjs → auditChangedPaths({changed, writeSet})` — the same rule the swarm merge applies, so the two never drift. A violation **lands nothing and preserves the worktree** for inspection; report the offending paths and the lane's declared `write_set`. A clean audit applies the diff to the primary tree, then `worktree.removePeerWorktree({rootDir, peer_id})`. An empty `write_set` is a refusal, not a free pass.

8. **Round boundary.** When a wave of independent lanes completes, the lead commits between rounds so a dependent round forks from fresh HEAD.

## Constraints (what makes this constitutional — Article X)

- **Peers decide in-lane; they escalate out-of-lane.** A peer is a full Claude Code session = its own main context, so its in-lane implementation decisions are Article-II-internal to that session. A cross-lane or un-decidable fork escalates — never a guess across lanes.
- **The human is the final authority.** The escalation chain is peer→lead→human; consent gates (approve-spec / approve-swarm / grant-commit) stay structural and un-forgeable. No peer or lead path bypasses or self-satisfies a gate.
- **No new subagent.** Peers are sessions, not subagents; `swarm-worker` remains the only declared subagent. Each peer session may itself run its own subagents — a per-session property, orthogonal to this charter.
- **Live hooks govern every peer write.** The PreToolUse guards fire on peer writes exactly as for any session.
- **Off by default, git required.** `velocity.org_mode.enabled` is the fence; worktree isolation requires git.

## The live channel

The pod runs over the `baseline` MCP server registered in `.mcp.json` — a file-locked directory under `.claude/state/sprint/<channel_id>/`, so every session is on one machine and in one checkout. Peer tools: `claim_task`, `signal_done`, `yield_fork`, `ask_lead`; lead tools: `enqueue_task`, `release_task`, `answer_peer`, `sprint_status`, plus `acquire_lead` / `release_lead`, which hold one lead per channel (a second session that tries is refused, and the refusal names the holder). The free-form `ask_lead`/`answer_peer` pair is the peer→lead→human escalation channel; `sprint_status` is the lossless source of truth. A pointer naming a claimable lane may arrive from the host and shorten the wait, but it is an accelerator: it can be dropped, and nothing waits for one.

## Relationship to other tracks

- **swarm-dispatch** parallelizes components of one spec inside one session (bounded subagents, worktrees).
- **org-dispatch** parallelizes lanes of one spec across multiple peer sessions (the flat pod).
- The default 11-phase solo/swarm pipeline is unchanged; `org` is an added selectable track.

Files in this skill

  • SKILL.md8.4 KB
  • org-mode.mjs4 KB
  • peer-select.mjs425 B
  • worktree.mjs4.1 KB
  • yield-arbiter.mjs1.2 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.