
Team Dispatch
- 1 installs
- 13 repo stars
- Updated April 25, 2026
- othmanadi/mddesign
Dispatch a plan phase to a specialist subagent using a PhaseSpec v1 contract with testable exit criteria and structured returns.
About
Turns a plan phase into a PhaseSpec v1 contract and dispatches it to a specialist subagent via the Agent tool, logging structured results to progress.md. A developer uses it to hand well-scoped phases to planner, executor, or reviewer subagents.
- Turns a plan phase into a PhaseSpec v1 contract for a subagent
- Subagents read files themselves and return structured markdown results
Team Dispatch by the numbers
- 1 all-time installs (skills.sh)
- Ranked #14,102 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/othmanadi/mddesign --skill team-dispatchAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 13 |
| Last updated | April 25, 2026 |
| Repository | othmanadi/mddesign ↗ |
What it does
Dispatch a plan phase to a specialist subagent using a PhaseSpec v1 contract with testable exit criteria and structured returns.
Files
Team Dispatch
Subagent dispatch arm. The PhaseSpec v1 contract is the only handoff format used between parent and child agents.
PhaseSpec v1 (the contract)
phase_id: <stable id, used as filename prefix and progress.md anchor>
parent_plan_ref: <pointer to task_plan.md#phase-N>
goal: <one sentence>
done_when: # testable exit criteria, no goalpost moving
- <criterion 1>
- <criterion 2>
inputs:
files: [<read-only file refs>]
memory_keys: [<keys for memory-layer recall>]
tools_allowed: [<list>]
tools_denied: [<list>]
budget:
max_tool_calls: <int>
max_wall_seconds: <int>
hitl_checkpoints: [<named checkpoint strings the child surfaces>]
return_contract:
format: markdown+frontmatter
fields: [summary, artifacts, open_questions, next_phase_hint]Six load-bearing properties:
1. parent_plan_ref is a pointer (file path with anchor), not a copy of the phase text. The child reads the file itself. 2. done_when is testable. Without it, completion is hallucinatable. 3. tools_allowed and tools_denied map onto the Claude Code permission model and any other framework's permission story. 4. hitl_checkpoints are named strings the child surfaces by printing HITL_CHECKPOINT: <name> to stdout. 5. return_contract forces structured output. The child returns markdown with frontmatter; the parent parses it deterministically. 6. phase_id doubles as the filename prefix for any artifacts the child writes.
Available subagents
Each is defined as agents/<name>.md in this plugin.
| Subagent | When to pick |
|---|---|
planner | A phase exists in task_plan.md but has no PhaseSpec yet. The planner drafts one. |
executor | Default. A PhaseSpec exists; the work is straightforward; one specialist runs it end to end. |
reviewer | Auto-approve mode is on; we need a surrogate human to check the executor's return against done_when. |
memory-keeper | Stop hook fired; we need to classify session output into scratch/WHERE/WHY. |
design-archeologist | /mddesign:harvest invoked; long-running codebase scan needed. |
Operation: /mddesign:team dispatch <phase_id> [--agent <name>]
Step 1: Resolve the phase
- Read
task_plan.md. - Find the section header matching
phase_id(case-insensitive). - If not found, refuse.
Step 2: Pick the subagent
- If
--agent <name>was passed, use it. - Else infer from the phase: phases with "design", "ui", "tokens" in the title default to
design-archeologistif/mddesign:harvest-shaped, elseexecutor. All others default toexecutor.
Step 3: Build the PhaseSpec
- Pull
goalfrom the phase title or first bullet. - Pull
done_whenfrom the phase's "Status / Done When / Acceptance" section if it exists, else infer from the bullets and ask the user to confirm. - Set
inputs.filesto[task_plan.md, findings.md]plus any files the phase mentions. - Set
tools_allowedto a sensible subset based on the phase (default:Read Write Edit Bash Glob Grep). - Set
budgetdefaults:max_tool_calls: 80,max_wall_seconds: 600. - Set
hitl_checkpointsto[before_commit, before_destructive_edit]plus phase-specific ones.
Step 4: HITL gate before dispatch
- Print the full PhaseSpec to the user.
- The PreToolUse hook intercepts the next
Agenttool invocation (named checkpoint:before_subagent_dispatch) and requires approval.
Step 5: Dispatch
- Call the
Agenttool withsubagent_type: <chosen subagent>and a prompt that contains: - The full PhaseSpec YAML
- Plain-English instruction: "You are running PhaseSpec phase-<id>. Read every file in inputs.files. Do the work. Return a markdown document with the four fields in return_contract. If you hit any hitl_checkpoint, print
HITL_CHECKPOINT: <name>and stop."
Step 6: Receive the return, validate
- Parse the subagent's final message.
- Verify it has the four required fields (
summary,artifacts,open_questions,next_phase_hint). - If invalid, log the failure and surface to user.
Step 7: Write to progress.md
Append under ### Phase <phase_id> Result:
### Phase <phase_id> Result
**Subagent:** <name>
**Status:** complete | partial | blocked
**Wall time:** <seconds>
**Tool calls used:** <int>
#### Summary
<from return.summary>
#### Artifacts
<from return.artifacts>
#### Open questions
<from return.open_questions>
#### Next phase hint
<from return.next_phase_hint>Step 8: Optional review
- If auto-approve mode is on, dispatch
reviewerwith the executor's return + the PhaseSpec. - If reviewer says
approve, mark phase as complete in progress.md. - If
reject, append the reason to progress.md and surface to user. - If
escalate, halt and ask user.
Core rules
- Subagents never edit
task_plan.mddirectly. Only this skill writes toprogress.md, and only under### Phase <id> Result. - The PhaseSpec is the entire handoff. Subagents do not see the parent conversation.
- Markdown on disk is the shared state. No in-memory shared store across agents.
- Every dispatch goes through the
before_subagent_dispatchHITL gate.