Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Read a tasks.json file, resolve the dependency graph, generate self-contained prompt files per task, and delegate every task to isolated tmux subagents. This skill NEVER implements code — it is a pure orchestrator. All work is done by pi subagents running in background tmux sessions.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 515% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 180% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 186% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 228% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 285% | 0% |
This skill never writes code itself. It resolves the dependency graph, generates prompt files in tasks/, and spawns isolated tmux subagents that do the actual implementation. The orchestrator only validates, coordinates, and monitors — all code changes come from subagents.
The orchestrator agent MUST NOT directly edit, create, or delete any project source files. This is a non-negotiable constraint. The orchestrator is a coordinator, not an implementer.
If implementation work is needed, spawn a subagent. That's the whole point.
tasks.json file exists (created by prd-to-tasks or manually)tasks.json exists — run prd-to-tasks first (or create-prd → prd-to-tasks)project-files TODO-driven workflowexplore skill first> Note: There is no "just do it directly" exception. Even single tasks > are delegated to a tmux subagent. The orchestrator stays clean.
tasks.json file in the current working directorytmux installed and available on PATHpi CLI available on PATH (the subagent runner)spawn-subagents skill — Required for spawning isolated pi subagents in tmuxmixture-of-experts skill — Required for expert definitions and MoE delegation patternsterminal-multiplexer skill — For tmux session management.agents/scripts/:validate-dag.ts — validates tasks.json structure and DAGgenerate-prompts.ts — writes tasks/TASK-XXXX-prompt from tasks.json (auto-validates)spawn-wave.sh — launches tmux sessions respecting the DAGstatus-tasks.ts — shows task status (done/running/pending/blocked)All task artifacts live under tasks/:
tasks/
├── tasks.json ← input plan (generated by prd-to-tasks)
├── T001-prompt ← self-contained prompt for the subagent
├── T002-prompt
├── T003-prompt
├── ...
├── T001.out ← captured subagent stdout/stderr
├── T002.out
├── T003.out
├── ...
├── T001.done ← marker file (written by subagent on completion)
├── T002.done
└── ...> Rule: The orchestrator reads from /tmp/ for DONE detection, but writes > prompt files and output logs to the project's tasks/ directory so they are > versionable and reviewable.
tasks.json
│
▼
┌─────────────────┐
│ 1. Parse & │
│ Validate DAG │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. Generate │
│ prompt files │ → tasks/T001-prompt, T002-prompt, ...
└────────┬────────┘
│
▼
┌─────────────────┐
│ 3. Spawn tmux │
│ subagents │ → one per task, respecting DAG waves
└────────┬────────┘
│
▼
┌─────────────────┐
│ 4. Monitor & │
│ report │ → poll DONE markers, aggregate results
└─────────────────┘Read the file and extract the task graph:
bash# Read the file cat tasks.json
Parse mentally or with a script:
Before implementing, check for common issues:
prd-to-tasks step 6)Run validation with the shared DAG validator:
bashbun .agents/scripts/validate-dag.ts tasks.json --summary
This checks: valid JSON, missing dependencies, circular dependencies, phase keys, unique IDs, agent/moeExperts fields, and agent summary consistency. With --summary it also prints the topological order, waves, and hour estimates.
If validation fails, the script exits with code 1 and prints a specific error. Stop and report the issues. Do NOT proceed until fixed.
Use topological sort (Kahn's algorithm) to produce a valid execution order. Group tasks into waves — same-wave tasks have no mutual deps, run in parallel:
| Wave | Tasks | Deps | |------|-------|------| | 1 | T001, T003 | (none) | | 2 | T002, T004 | T001 | | 3 | T005 | T002, T003 | | ... | ... | ... |
Wait for all tasks in a wave to complete before launching the next wave.
Use the shared prompt generator — it auto-validates, includes PRD context, and orders tasks topologically:
bashbun .agents/scripts/generate-prompts.ts
For manual generation or custom logic, write one self-contained prompt file per task to tasks/TASK-XXXX-prompt. These files are the only input subagents receive — they must contain everything needed to implement the task autonomously.
> Output convention: Prompts go to tasks/TASK-XXXX-prompt. > Subagent output goes to tasks/TASK-XXXX.out. DONE markers go to > tasks/TASK-XXXX.done. Everything is versionable.
This skill is a pure orchestrator — it never writes code itself. Every task is delegated to an isolated tmux session running pi. Use the shared spawn script which handles base64 encoding, prompt files, and wave ordering:
bash# Spawn next ready wave (auto-detects pending tasks with met dependencies) # Returns IMMEDIATELY — sessions run detached in background bash .agents/scripts/spawn-wave.sh # Spawn specific tasks bash .agents/scripts/spawn-wave.sh T001 T003 # Preview what would spawn bash .agents/scripts/spawn-wave.sh --dry-run
The script auto-generates prompts if missing, validates tasks.json, and skips already-completed tasks (.done markers). Each call spawns one wave and returns immediately — the tmux sessions run detached in the background.
> ⚠️ NEVER use spawn-wave.sh --all from within an agent session. > The --all flag blocks with sleep loops waiting for each wave, which > will hit the tool timeout (300s). It is intended for humans running from > a terminal. Agents must use the async wave-by-wave pattern below.
bash# 1. Spawn first wave (returns immediately) bash .agents/scripts/spawn-wave.sh # 2. Check status — poll until wave completes bun .agents/scripts/status-tasks.ts --compact # 3. When current wave is done, spawn the next wave bash .agents/scripts/spawn-wave.sh # 4. Repeat steps 2-3 until all tasks are done
bashbun .agents/scripts/status-tasks.ts # full status table bun .agents/scripts/status-tasks.ts --compact # one-line summary bun .agents/scripts/status-tasks.ts --pending # only pending/blocked # Peek at a specific task's live output tmux capture-pane -t task-T005 -p | tail -20
bashtmux ls # list all sessions tmux ls | grep "task-" # list task sessions only tmux kill-session -t task-T005 # kill a specific task session tmux kill-session -t task- # kill all task sessions
After each task, verify against acceptance criteria:
✅ T001: Set up project structure
- ✓ Directory structure matches conventions
- ✓ Type definitions compile
- ✓ Configuration loads correctly
✅ T002: JWT token generation
- ✓ Tokens generated with correct claims
- ✓ Expired tokens rejected
- ✓ Tampered tokens rejected
- ✓ Validation under 5msIf any criterion fails, fix before marking the task complete.
If a task cannot be completed:
grill-me to ask the userbash# Example: Task fails because dependency T002 has a bug echo "Task T003 blocked: Middleware test fails because T002's token validation doesn't handle edge case X. Going back to fix T002 first." # Re-run T002 with the specific issue pi -p "Fix T002 (JWT token validation): handle edge case X where [details]. Acceptance criteria: [original + new]"
Report progress after each phase completion:
Phase 1: Foundation — ✅ Complete (3/3 tasks, 8h estimated, 7.5h actual)
✅ T001 - Project setup (2h)
✅ T002 - JWT utils (4h)
✅ T003 - Auth middleware (1.5h — simpler than expected)
Phase 2: Core — 🔄 In Progress (1/3 tasks)
✅ T004 - Login endpoint (3h)
🔄 T005 - Registration endpoint (in progress...)
⏳ T006 - Password reset (waiting on T005)
Next: T005 → T006 → Phase 3 (Polish)When all tasks are complete, produce a synthesis report:
markdown# Implementation Complete: [Project Name] **Completed:** YYYY-MM-DD **Tasks:** 8/8 complete **Estimated:** 32h | **Actual:** 30h ## Summary [2-3 sentences about what was built] ## Phase Breakdown ### Phase 1: Foundation - T001, T002, T003 completed ### Phase 2: Core - T004, T005, T006 completed ### Phase 3: Polish - T007, T008 completed ## Files Changed - `src/auth/types.ts` — JWT type definitions - `src/auth/utils.ts` — Token generation and validation - `src/auth/middleware.ts` — Auth middleware - `src/routes/auth/login.ts` — Login endpoint - `src/routes/auth/register.ts` — Registration endpoint - `src/routes/auth/reset.ts` — Password reset endpoint - `tests/auth/` — Test suite (12 tests) - `PRD-auth.md` — Updated with implementation notes ## Acceptance Criteria Status All 24 criteria across 8 tasks verified. ## Known Issues / Follow-ups - None ## Next Steps - Deploy to staging for QA - Run integration tests against staging
bash#!/bin/bash # Pure orchestrator — validates, generates prompts, spawns one wave, exits. # The agent polls status and spawns subsequent waves independently. # NEVER implements code directly. set -e TASKS_FILE="tasks.json" SCRIPTS=".agents/scripts" echo "🚀 Orchestrating: $(bun -e "import { loadTasks } from './$SCRIPTS/lib/tasks-lib.ts'; const d = await loadTasks('$TASKS_FILE'); console.log(d.metadata.project)")" # Step 1: Validate DAG bun $SCRIPTS/validate-dag.ts "$TASKS_FILE" --summary # Step 2: Generate prompt files (auto-validates, includes PRD context) bun $SCRIPTS/generate-prompts.ts "$TASKS_FILE" # Step 3: Spawn the first wave (returns immediately — sessions run detached) bash $SCRIPTS/spawn-wave.sh # The agent now reports wave status to the user, polls for completion, # and spawns subsequent waves as they become available. # Each wave is spawned with: bash $SCRIPTS/spawn-wave.sh # Status is checked with: bun $SCRIPTS/status-tasks.ts --compact echo "📡 First wave spawned. Poll with: bun $SCRIPTS/status-tasks.ts --compact"
prd-to-tasks step 6 for a reason.tmux send-keys for prompts — Quoting breaks on multi-line content. Use prompt files + --append-system-prompt insteadspawn-wave.sh --all — It blocks with sleep loops and hits tool timeouts. Always spawn one wave at a time and poll for completionIMPLEMENTATION_STATUS.md updatedFor large projects:
IMPLEMENTATION_STATUS.md to persist progress:markdown# Implementation Status: User Auth System Last Updated: 2026-04-27 14:30 ## Phase 1: Foundation - [x] T001: Project setup - [x] T002: JWT utils - [x] T003: Auth middleware ## Phase 2: Core - [x] T004: Login endpoint - [ ] T005: Registration (in progress) - [ ] T006: Password reset
create-prd → Produces PRD
prd-to-tasks → Produces tasks.json
implement-tasks → Executes tasks.json
├── Uses: spawn-subagents (delegate work to isolated pi instances)
├── Uses: mixture-of-experts (expert definitions, spawn/aggregate patterns)
├── Uses: terminal-multiplexer (for tmux session management)
├── Uses: grill-me (when blocked by ambiguity)
└── Uses: project-files (for status tracking)If tasks.json has zero tasks:
tasks.json has 0 tasks. Nothing to implement.
Was the PRD created? Run create-prd first.For a single task, skip the full orchestration and just implement it with a lighter-weight review:
Only 1 task (T001). No dependencies. Implementing directly with architect + maintainer review.Set up a focused MoE call with just 2 experts.
Task T003 depends on T000 (EXTERNAL: API credentials).
T000 is marked external/blocker. Cannot proceed past T000.
Options:
1. Wait for credentials (pause implementation)
2. Mock the external service for development (create a mock task)
3. Skip T003 and implement other independent tasksIf the tasks.json has issues, report them clearly:
❌ tasks.json validation failed:
1. T007 depends on T999 (does not exist)
2. Circular dependency: T004 → T006 → T004
Fix these before implementing. Suggested fixes:
- T007: Did you mean T009?
- T004/T006: Remove one dependency directionSave progress and create a handoff:
bash# Write current state cat > IMPLEMENTATION_STATUS.md << 'EOF' # Implementation Status: Interrupted Last Updated: 2026-04-27 15:00 Interrupted during: Phase 2, Task T005 (Registration endpoint) ## Completed - [x] T001-T004 ## In Progress - [ ] T005 (partially done — auth utils written, endpoint stubbed) ## Not Started - [ ] T006-T012 EOF echo "Progress saved to IMPLEMENTATION_STATUS.md" echo "Resume with: 'continue implementing tasks'"
Other measured skills in the registry, with their headline benchmark lift.