launchpad-plan
Scannednpx machina-cli add skill Geono/claude-launchpad/launchpad-plan --openclawLaunchpad Plan
Analyze a task breakdown and produce a parallelization-aware implementation plan.
Purpose
Bridge between the spec's task list and the runner's parallel execution. The planner determines what can run concurrently and what must be sequential by analyzing dependency declarations and file mutation overlaps.
Workflow
1. Locate the Spec
Resolve the spec name from the user's request. Read specs/<spec-name>.tasks.md (or equivalent task breakdown file).
If missing or ambiguous, list specs/ and ask.
2. Parse Task Sections
Extract all task sections. For each task, collect:
- Task ID: Identifier (e.g.,
task-001,T-0, etc.) - Files: Each file path and its operation (create vs modify)
- Steps: The implementation steps
- Tests: The test/validation scenarios
- Dependencies: Explicit from the spec, plus implicit from section ordering
3. Build the Dependency Graph
For each task, determine what it depends on:
- Explicit dependencies: From the spec's task definitions (e.g.,
depends_onfields). - File mutation conflicts: Two tasks that both modify the same file cannot safely run in parallel. If task A appears before task B and both modify
src/index.ts, B depends on A. - Shared types/foundation dependency: If a foundational task exists (e.g., types, schema, config), all dependent tasks must wait for it.
- Create-then-modify: If task A creates a file and task B modifies or imports from it, B depends on A.
4. Determine Task Granularity
Each task section becomes one task by default. Adjust when:
- Split a task if it contains clearly independent substeps touching different files with no data flow between them, AND splitting would enable more parallelism. Don't split just for granularity's sake.
- Merge tasks that are trivially small into a parent task or mark as no-op.
5. Assign Parallel Waves
Group tasks into execution waves — sets of tasks that can run concurrently:
- Wave 0: Tasks with no dependencies (foundational setup, independent features)
- Wave 1: Tasks whose dependencies are all in wave 0
- Wave N: Tasks whose dependencies are all in waves < N
Tasks in the same wave run in parallel. Waves execute sequentially.
6. Output Format
For launchpad-run integration (default)
When the output is intended for /lp:run, produce harness-tasks.json compatible format:
{
"version": 3,
"created": "<ISO timestamp>",
"session_config": {
"max_tasks_per_session": 20,
"max_sessions": 50,
"max_parallel_agents": 3
},
"tasks": [
{
"id": "task-001",
"title": "Short task name",
"status": "pending",
"priority": "P0",
"depends_on": [],
"attempts": 0,
"max_attempts": 3,
"context": "Detailed description with enough context for a sub-agent to execute without reading the spec. Include: files to touch, implementation steps, constraints, expected behavior.",
"files_hint": ["src/auth/", "src/middleware/auth.ts"],
"validation": {
"command": "npm test -- --testPathPattern=auth",
"timeout_seconds": 300
},
"on_failure": {
"cleanup": null
},
"error_log": [],
"agent_id": null,
"worktree_branch": null,
"completed_at": null
}
],
"session_count": 0,
"last_session": null
}
Field mapping from spec to runner:
- Task title →
title - Task description + steps + test scenarios →
context(must be self-contained for sub-agent) - File list →
files_hint(used for batch conflict detection) - Test command →
validation.command - Dependencies →
depends_on(task IDs) - Wave 0 tasks →
priority: "P0", Wave 1 →priority: "P1", Wave 2+ →priority: "P2"
For generic use
When not targeting launchpad-run, produce implementation.json:
[
{
"id": "T-0",
"name": "Short task name",
"depends": [],
"wave": 0,
"kind": "code",
"files": {
"create": ["src/auth/service.ts"],
"modify": ["src/index.ts"]
},
"description": "Detailed description with enough context for an agent to execute."
}
]
7. Confirm with User
After writing the output, present:
- Total task count and wave count
- Which tasks run in parallel vs sequentially and why
- Any granularity decisions made (splits, merges)
- Offer to adjust groupings or wave assignments
Guidelines
- Each task's
context/descriptionmust contain enough detail that an agent can execute it without reading the original spec. The orchestrator feeds these as agent prompts. - Preserve the spec's step details and test scenarios — don't summarize away actionable information.
- Flag potential conflict risks in task descriptions (e.g., "Modifies
index.ts— coordinate with task-003 if running in same wave"). - When
files_hintis empty for a task, the runner will run it solo (not batched) to avoid unknown conflicts.
Integration with Launchpad
The typical workflow:
/lp:spec → /lp:refine → /lp:clarify → /lp:tasks
↓
/lp:plan (reads specs/*.tasks.md → writes harness-tasks.json)
↓
/lp:run (reads harness-tasks.json → dispatches sub-agents)
The planner's job is to transform human-readable task breakdowns into machine-executable task plans with parallelization awareness.
Source
git clone https://github.com/Geono/claude-launchpad/blob/main/skills/launchpad-plan/SKILL.mdView on GitHub Overview
Launchpad Plan analyzes a spec’s task breakdown to determine parallelizable work and safe sequencing. It reads each task section, detects explicit dependencies and file mutation conflicts, then assigns wave groups to guide execution so tasks can run in parallel where possible while preserving required order.
How This Skill Works
The planner locates the spec via specs/<spec-name>.tasks.md, extracts all task sections (ID, files, steps, tests, dependencies), and builds a dependency graph. It accounts for explicit depends_on, file mutation conflicts, create-then-modify relationships, and foundational dependencies to decide task granularity and wave assignment, then outputs a harness-tasks.json for /lp:run that encodes the plan.
When to Use It
- You have a spec with multiple tasks that touch or modify overlapping files and you need to avoid parallel conflicts.
- You want to maximize parallel execution to speed up builds while respecting explicit task dependencies.
- The spec includes explicit depends_on fields and you need to ensure correct sequencing.
- The spec is ambiguous or missing, and you need an automated, dependency-aware plan.
- You need a /lp:run friendly output (harness-tasks.json) that the runner can consume.
Quick Start
- Step 1: Trigger the plan with /lp:plan and point to specs/<name>.tasks.md.
- Step 2: Review the generated wave-based plan and harness-tasks.json for correctness.
- Step 3: Feed harness-tasks.json into /lp:run to execute the plan.
Best Practices
- Declare explicit dependencies where possible to unlock safe parallelism.
- Group tasks by distinct file touch points to maximize concurrent execution.
- Account for create-then-modify relationships to prevent late-bound failures.
- Review wave assignments to balance workload and avoid idle runners.
- Validate the generated harness-tasks.json with a dry-run before production.
Example Use Cases
- Spec A has task-001 creating a config file, followed by task-002 modifying that config. The plan places task-001 in Wave 0 and task-002 in Wave 1.
- Two UI tasks modify different components (src/ui/button.ts and src/ui/input.ts). They appear in the same wave since they are independent, accelerating the plan.
- A foundational task generates a shared schema used by several tasks. The planner forces all dependent tasks into subsequent waves until the foundation completes.
- Task-010 imports a file created by task-003; the plan enforces task-003 to run before task-010 via a Create-Then-Modify dependency.
- A spec with parallelizable data-massaging steps and a separate integration test task is partitioned so data tasks run in Wave 0 while the integration tests run in Wave 2.