Team dispatch
Turns a plan phase into a PhaseSpec v1 and dispatches it to a specialist subagent via the Agent tool. Subagent reads files itself, returns a structured result, the result is logged into progress.md. Markdown is the shared state; no in-memory shared store across agents.From its SKILL.md
npx -y skills add OthmanAdi/MDDesign --skill team-dispatchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 13 stars13 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.4 KB, as published. Nobody here has run it
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:
parent_plan_refis a pointer (file path with anchor), not a copy of the phase text. The child reads the file itself.done_whenis testable. Without it, completion is hallucinatable.tools_allowedandtools_deniedmap onto the Claude Code permission model and any other framework's permission story.hitl_checkpointsare named strings the child surfaces by printingHITL_CHECKPOINT: <name>to stdout.return_contractforces structured output. The child returns markdown with frontmatter; the parent parses it deterministically.phase_iddoubles 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.