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.
.claude/skills/marco-souza-implement-tasks/SKILL.md| 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'"
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | fail→fail | 3,935 | 4,241 | +8% | 1 | 1 | 0% | 264 | 4,909 | +1759% | 0 | 0 | — |
case-01 | fail→fail | 3,190 | 2,447 | -23% | 1 | 1 | 0% | 210 | 5,020 | +2290% | 0 | 0 | — |
case-02 | fail→fail | 3,918 | 5,457 | +39% | 1 | 1 | 0% | 254 | 5,145 | +1926% | 0 | 0 | — |
case-03 | fail→fail | 3,982 | 5,032 | +26% | 1 | 1 | 0% | 342 | 4,996 | +1361% | 0 | 0 | — |
case-04 | fail→fail | 5,460 | 5,497 | +1% | 1 | 1 | 0% | 1,068 | 5,117 | +379% | 0 | 0 | — |
case-05 | pass→pass | 8,936 | 4,657 | -48% | 1 | 1 | 0% | 1,347 | 5,585 | +315% | 0 | 0 | — |
case-06 | pass→fail | 3,405 | 4,979 | +46% | 1 | 1 | 0% | 259 | 4,912 | +1797% | 0 | 0 | — |
case-07 | fail→pass | 4,884 | 4,546 | -7% | 1 | 1 | 0% | 908 | 5,580 | +515% | 0 | 0 | — |
case-09 | fail→fail | 6,358 | 7,856 | +24% | 1 | 1 | 0% | 1,091 | 5,638 | +417% | 0 | 0 | — |
case-10 | fail→fail | 10,031 | 6,691 | -33% | 1 | 1 | 0% | 701 | 5,149 | +635% | 0 | 0 | — |
case-11 | fail→fail | 5,952 | 5,414 | -9% | 1 | 1 | 0% | 190 | 4,807 | +2430% | 0 | 0 | — |
case-12 | fail→pass | 9,462 | 3,133 | -67% | 1 | 1 | 0% | 1,902 | 5,321 | +180% | 0 | 0 | — |
case-13 | fail→pass | 9,958 | 3,771 | -62% | 1 | 1 | 0% | 1,879 | 5,375 | +186% | 0 | 0 | — |
case-14 | pass→pass | 8,110 | 5,988 | -26% | 1 | 1 | 0% | 1,779 | 5,877 | +230% | 0 | 0 | — |
case-15 | pass→pass | 8,664 | 5,572 | -36% | 1 | 1 | 0% | 1,748 | 5,732 | +228% | 0 | 0 | — |
case-16 | fail→fail | 4,678 | 4,742 | +1% | 1 | 1 | 0% | 1,008 | 4,951 | +391% | 0 | 0 | — |
case-17 | pass→pass | 4,648 | 3,714 | -20% | 1 | 1 | 0% | 875 | 5,403 | +517% | 0 | 0 | — |
case-18 | fail→pass | 8,271 | 2,081 | -75% | 1 | 1 | 0% | 1,549 | 5,088 | +228% | 0 | 0 | — |
case-19 | pass→pass | 4,387 | 1,547 | -65% | 1 | 1 | 0% | 890 | 4,850 | +445% | 0 | 0 | — |
case-20 | fail→pass | 21,333 | 2,419 | -89% | 1 | 1 | 0% | 1,327 | 5,103 | +285% | 0 | 0 | — |
case-21 | pass→pass | 8,578 | 6,846 | -20% | 1 | 1 | 0% | 1,727 | 6,110 | +254% | 0 | 0 | — |
case-22 | fail→pass | 8,989 | 4,653 | -48% | 1 | 1 | 0% | 1,762 | 5,635 | +220% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 12 counted toward the lift figure. The other 10 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 12 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.