plan-crafting
Plan Crafting
Writes an executable plan document from a clearly defined work scope. Designed so tasks can be spawned as "worker-validator" pairs in parallel.
Core Principle
A plan document must be executable by a worker with zero codebase context, without any additional questions. All ambiguity must be resolved at the planning stage.
Hard Gates
- Every step must be executable. Placeholders (TBD, TODO, "implement later") are never allowed.
- Task conflicts must be prevented. Tasks modifying the same file must not run in parallel. Tasks with dependencies must wait for predecessor completion.
- Self-Review is mandatory. After writing the plan, verify its completeness yourself.
- Tasks decompose to minimal feature units. One task produces one clear deliverable.
When To Use
- After the clarification skill completes and a Context Brief file has been generated
- When the user explicitly requests plan creation with a clear prompt
- When multi-step implementation is needed and task ordering with dependencies must be defined
Input
This skill takes a Context Brief file as input. The Context Brief generated by the clarification skill is used to populate the plan header:
| Context Brief Field | Plan Header Mapping |
|---|---|
| Goal | Goal |
| Scope (In/Out) | Work Scope (included/excluded) |
| Technical Context | Architecture + Tech Stack + basis for file structure mapping |
| Constraints | Reflected as constraints during task decomposition |
| Success Criteria | Used as Self-Review criteria |
| Open Questions | Reflected as assumptions in the plan, then confirmed with the user |
If no Context Brief file exists (user directly requests a plan): confirm essential information (goal, work scope, tech stack) with the user before writing the plan.
When NOT To Use
- When work scope is still ambiguous (return to the clarification skill)
- Single-file edits, simple bug fixes, or other single-step tasks
- When the user explicitly says "skip the plan, just do it"
Plan Document Structure
Save Location
docs/engineering-discipline/plans/YYYY-MM-DD-<feature-name>.md
(User preferences for plan location override this default.)
Header
# [Feature Name] Implementation Plan
> **Worker note:** Execute this plan task-by-task using the run-plan skill or subagents. Each step uses checkbox (`- [ ]`) syntax for progress tracking.
**Goal:** [One sentence describing what this plan builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries]
**Work Scope:**
- **In scope:** [What will be implemented]
- **Out of scope:** [What is explicitly excluded]
---
File Structure Mapping
Before defining tasks, map out which files will be created or modified. Decomposition decisions are locked in at this stage.
- Each file should have one clear responsibility.
- Files that change together should live together. Split by responsibility, not by technical layer.
- Follow existing codebase patterns. If the codebase uses large files, don't unilaterally restructure — but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.
- File structure informs task decomposition. Each task should produce a self-contained change that makes sense independently.
Verification Discovery
Before decomposing tasks, discover the project's highest-level verification capability. This determines the Final Verification Task that closes every plan.
Discovery order (use the first match):
- Existing e2e tests — search for
e2e/,tests/e2e/,cypress/,playwright/,test:e2ein package.json,e2etargets in Makefile/Taskfile - Integration tests — search for
tests/integration/,integration_test,test:integrationscripts - Verification skill or agent — check
.claude/skills/,.claude/agents/, and installed plugins for anything namedverify,validate,e2e, ortest - Project test suite — any test runner (
pytest,jest,go test,cargo test, etc.) with broad coverage - Build + lint — if no tests exist, the highest available verification is a successful build + lint pass
If no meaningful verification exists (level 5 only): Add a Task 0: Create Verification Infrastructure that sets up the minimal verification needed for this plan:
- Identify the project's tech stack and appropriate test framework
- Create an e2e or integration test that exercises the plan's core success criteria
- This test should fail before implementation and pass after all tasks complete
Record the discovery result in the plan header:
**Verification Strategy:**
- **Level:** [e2e | integration | skill/agent | test-suite | build-only]
- **Command:** [exact command to run the verification]
- **What it validates:** [what passing this verification proves]
Project Capability Discovery
Before decomposing tasks, also discover project-level agents and skills that workers can leverage:
- Project agents — check
.claude/agents/for agents relevant to the task domain (e.g., atest-runneragent, adb-migrationagent) - Plugin agents — check installed plugins for specialized agents (e.g.,
build-validator,lint-fixer) - Project skills — check
.claude/skills/for skills that match task operations
If useful agents/skills are found, reference them in task steps where applicable:
- [ ] **Step N: Run migration**
Use the project's `db-migration` agent for this step if available.
Run: `<migration command>`
Workers are not required to use discovered agents — they are hints for efficiency. The worker may execute steps directly if the agent is unavailable or unsuitable.
Task Decomposition
When decomposing tasks, consider the following:
1. Parallelism and Dependencies
Tasks should be designed for maximum parallel execution. However, the following cases require waiting for a predecessor task to complete:
- Tasks modifying the same file (prevents file conflicts)
- Tasks where one task's output is referenced by another (interface dependency)
- Tasks that modify shared state (database schema, config files, etc.)
Dependencies are stated in the task header:
### Task N: [Task Name]
**Dependencies:** Runs after Task K completes
**Files:**
- Create: `path/to/file`
- Modify: `path/to/existing-file:line-range`
- Test: `path/to/test-file`
Tasks with no dependencies are marked as parallelizable:
### Task N: [Task Name]
**Dependencies:** None (can run in parallel)
**Files:**
- Create: `path/to/file`
- Test: `path/to/test-file`
2. Worker-Validator Structure
Each task is designed so an independent worker (subagent) can execute it and a separate validator can verify it:
- Worker: Executes the task's steps exactly as written. Makes no judgments beyond what the plan specifies.
- Validator: Reviews the worker's output after completion. Checks test pass/fail, code quality, and spec compliance.
This structure enables spawning multiple tasks simultaneously, each independently verifiable.
3. Task Granularity
Each step is one action (2-5 minutes):
- "Write the failing test" — one step
- "Run it to make sure it fails" — one step
- "Write the minimal code to make the test pass" — one step
- "Run the tests and make sure they pass" — one step
- "Commit" — one step
Task Format
### Task N: [Component Name]
**Dependencies:** [Predecessor task or "None (can run in parallel)"]
**Files:**
- Create: `exact/path/to/file`
- Modify: `exact/path/to/existing-file:123-145`
- Test: `tests/exact/path/to/test-file`
- [ ] **Step 1: Write the failing test**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **Step 2: Run test to verify it fails**
Run: `pytest tests/path/test.py::test_name -v`
Expected: FAIL with "function not defined"
- [ ] **Step 3: Write minimal implementation**
```python
def function(input):
return expected
```
- [ ] **Step 4: Run test to verify it passes**
Run: `pytest tests/path/test.py::test_name -v`
Expected: PASS
- [ ] **Step 5: Commit**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```
Final Verification Task
Every plan must end with a Final Verification Task that runs the discovered highest-level verification. This is always the last task, depends on all other tasks, and cannot be parallelized.
### Task N (Final): End-to-End Verification
**Dependencies:** All preceding tasks
**Files:** None (read-only verification)
- [ ] **Step 1: Run highest-level verification**
Run: `[verification command from Verification Strategy]`
Expected: ALL PASS
- [ ] **Step 2: Verify plan success criteria**
Manually check each success criterion from the plan header:
- [ ] [criterion 1]
- [ ] [criterion 2]
- ...
- [ ] **Step 3: Run full test suite for regressions**
Run: `[full test suite command]`
Expected: No regressions — all pre-existing tests still pass
If the final verification fails, the plan is not complete. The worker-validator loop in run-plan will handle failure response (see run-plan's E2E Failure Response Protocol).
No Placeholders
Every step must contain the actual content a worker needs. These are plan failures — never write them:
- "TBD", "TODO", "implement later", "fill in details"
- "Add appropriate error handling" / "add validation" / "handle edge cases"
- "Write tests for the above" (without actual test code)
- "Similar to Task N" (repeat the code — the worker may be reading tasks out of order)
- Steps that describe what to do without showing how (code blocks required for code steps)
- References to types, functions, or methods not defined in any task
Remember
- Exact file paths always
- Complete code in every step — if a step changes code, show the code
- Exact commands with expected output
- DRY, YAGNI, TDD, frequent commits
Self-Review
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
1. Spec coverage: Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
2. Placeholder scan: Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.
3. Type consistency: Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called clearLayers() in Task 3 but clearFullLayers() in Task 7 is a bug.
4. Dependency verification: Verify that parallel tasks don't modify the same file. Verify that no dependency chain is missing.
5. Verification coverage: Does the plan include a Final Verification Task? Does it reference the discovered verification command? If no verification was discovered, is there a Task 0 creating verification infrastructure?
If you find issues, fix them inline. No need to re-review — just fix and move on. If a spec requirement has no corresponding task, add the task.
Execution Handoff
After saving the plan, offer execution choice:
"Plan complete and saved to docs/engineering-discipline/plans/<filename>.md."
"How would you like to proceed?"
1. Subagent execution (recommended) — dispatch a fresh subagent per task, review between tasks, fast iteration
2. Inline execution — execute tasks in this session using the run-plan skill, batch execution with checkpoints
Anti-Patterns
| Anti-Pattern | Why It Fails |
|---|---|
| Marking tasks that modify the same file as parallel | File conflicts, unmergeable changes |
| Listing tasks without dependencies | Execution order tangles, interface mismatches |
| Steps that assume "the worker will figure it out" | Worker's arbitrary interpretation → spec drift |
| Approving a plan with placeholders | Blocked at execution stage, must return to planning |
| Completing a plan without Self-Review | Missing spec coverage, type mismatches, dependency errors go undetected |
Minimal Checklist
Self-check when plan writing is complete:
- Do all tasks have exact file paths?
- Do all steps contain executable code/commands?
- Are there no file conflicts between parallel tasks?
- Are dependency chains accurately stated?
- Does the plan cover all spec requirements?
- Are there no placeholders?
- Is there a Verification Strategy in the plan header?
- Is the Final Verification Task the last task in the plan?
Transition
After plan approval:
- When the plan is ready to execute →
run-planskill - If ambiguity is discovered in the work scope → return to the
clarificationskill to resolve
This skill itself does not invoke the next skill. It ends by presenting the plan document and letting the user choose the next step.
More from tmdgusya/engineering-discipline
clarification
Use when a user's request is vague, ambiguous, or underspecified. Launches an iterative Q&A loop to resolve ambiguity while a subagent explores the codebase in parallel. Outputs a clear, well-scoped context brief so the user can plan sharply. Triggers on "I want to...", "I need...", "let's build...", "can you help me...", "we should...", or any request where the full scope isn't immediately clear.
35run-plan
Use when you have a written implementation plan to execute. Loads the plan, reviews critically, executes tasks in dependency order, and reports completion. Triggers when the user says "run the plan", "execute the plan", or "let's start implementing".
34rob-pike
Rob Pike's 5 Rules of Programming — a decision framework that prevents premature optimization and enforces measurement-driven development. Use when the user says "optimize", "slow", "performance", "bottleneck", "speed up", "make faster", "too slow", or any request to improve code speed/efficiency. Also use when you notice yourself about to suggest a performance optimization without measurement data. This is a thinking discipline, not a tooling workflow.
33systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior. Enforces a strict reproduce-first, root-cause-first, failing-test-first debugging workflow before fixing.
32long-run
Orchestrates multi-day execution of complex tasks through milestones. Each milestone goes through plan-crafting, run-plan (worker-validator), and review-work phases with checkpoint/recovery. Triggers when the user says "long run", "start long run", "execute milestones", or "run all milestones".
29simplify
Review changed code for reuse opportunities, quality issues, and inefficiencies using three parallel review agents, then fix any issues found. Triggers when the user says "simplify", "clean up the code", "review the changes", or after run-plan execution when code quality verification is needed.
29