skills/writing-plans/SKILL.md
Write structured implementation plans from specs or requirements before touching code. Use when given a spec, requirements doc, or feature description, when user says "plan this out", "write a plan for", "how should we implement", or before starting any multi-step coding task.
npx skillsauth add ckorhonen/claude-skills writing-plansInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
Announce at start: "I'm using the writing-plans skill to create the implementation plan."
Context: This should be run in a dedicated worktree (created by brainstorming skill).
Save plans to: docs/plans/YYYY-MM-DD-<feature-name>.md
Each step is one action (2-5 minutes):
Every plan MUST start with this header:
# [Feature Name] Implementation Plan
> **For Claude:** REQUIRED SUB-SKILL: Use the executing-plans skill to implement this plan task-by-task.
**Goal:** [One sentence describing what this builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries]
---
### Task N: [Component Name]
**Files:**
- Create: `exact/path/to/file.py`
- Modify: `exact/path/to/existing.py:123-145`
- Test: `tests/exact/path/to/test.py`
**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"
```
Symptom: Plan reads smoothly but lacks actionable details. Steps like "Add validation" or "Update the API handler" leave the engineer guessing which file, which function, or what commands to run.
Why it fails:
How to fix:
src/handlers/user.ts not update the handlerpytest tests/handlers/test_user.py -v not run testsModify: src/handlers/user.ts:45-62Example (bad vs good):
❌ BAD: "Update the validation logic to handle email addresses"
✅ GOOD: "Modify: src/validators/email.py:12-18. Replace the regex pattern with: re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')"
Symptom: Steps are either vague epics ("Build the authentication system") or so granular they create friction ("Import the module", "Define the function signature", "Write the function body").
Why it fails:
How to fix:
Example (bad vs good):
❌ BAD:
Step 1: Import json
Step 2: Define function
Step 3: Write body
Step 4: Run test
✅ GOOD:
Step 1: Write failing test for json parsing
Step 2: Implement minimal function that passes test
Step 3: Run test and verify PASS
Step 4: Commit
Symptom: Plan describes what to do but never says how to verify it's done correctly. Engineer finishes a step and isn't sure if it actually worked.
Why it fails:
How to fix:
Expected: PASS. For commands: Expected output: [actual output]pytest tests/... -v. Expected: Should fail with 'ValidationError'"Example (bad vs good):
❌ BAD:
Step 3: Implement the validation function
✅ GOOD:
Step 3: Implement the validation function
```python
def validate_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return bool(re.match(pattern, email))
```
Step 4: Run test to verify it passes
Run: `pytest tests/validators/test_email.py::test_valid_email -v`
Expected: `PASSED test_valid_email`
Symptom: Plan repeats the same instruction in multiple tasks ("Run the full test suite", "Import X module", "Follow the naming convention"). Same boilerplate appears in steps across different tasks.
Why it fails:
How to fix:
pytest ..."Example (bad vs good):
❌ BAD:
Task 1: Write test, run `pytest tests/handlers/test_a.py -v`, commit
Task 2: Write test, run `pytest tests/handlers/test_b.py -v`, commit
Task 3: Write test, run `pytest tests/handlers/test_c.py -v`, commit
✅ GOOD:
# Testing Pattern
After each implementation, verify with: `pytest tests/handlers/test_<name>.py -v`
Expected: All tests PASS
Task 1: [test_a implementation]
Task 2: [test_b implementation]
Task 3: [test_c implementation]
Symptom: Plan references "the standard pattern", "as we do it", or "use the company convention" without explaining what that actually means. Assumes engineer knows framework shortcuts, naming conventions, or project structure.
Why it fails:
How to fix:
class MyModel(models.Model)"Example (bad vs good):
❌ BAD:
Step 1: Create a handler using the standard pattern
Step 2: Follow our naming convention for tests
✅ GOOD:
Context: This project uses Flask. All handlers live in src/handlers/ and follow the pattern:
```python
@app.route('/endpoint', methods=['POST'])
def handle_endpoint():
# Handler logic
return jsonify({...})
```
Step 1: Create handler in src/handlers/my_handler.py following the pattern above
Step 2: Create test in tests/handlers/test_my_handler.py. Naming: test_<function_name>_<scenario>
After saving the plan, offer execution choice:
"Plan complete and saved to docs/plans/<filename>.md. Two execution options:
1. Subagent-Driven (this session) - I dispatch fresh subagent per task, review between tasks, fast iteration
2. Parallel Session (separate) - Open new session with executing-plans, batch execution with checkpoints
Which approach?"
If Subagent-Driven chosen:
If Parallel Session chosen:
documentation
Create or expand an Idea.md / IDEA.md file from a rough description, existing repo, conversation history, notes, or other early-stage product inputs. Use when the user asks to "write an Idea.md", "turn this into an idea file", "capture this product idea", "expand this concept", or wants a repo-grounded concept brief before validation, PRD, or implementation work.
testing
Expert guidance for video editing with ffmpeg, encoding best practices, and quality optimization. Use when working with video files, transcoding, remuxing, encoding settings, color spaces, or troubleshooting video quality issues.
development
Opinionated constraints for building better interfaces with agents. Use when building UI components, implementing animations, designing layouts, reviewing frontend accessibility, or working with Tailwind CSS, motion/react, or accessible primitives like Radix/Base UI.
development
Design and implement retro/cyberpunk/hacker-style terminal UIs. Covers React (Tuimorphic), SwiftUI (Metal shaders), and CSS approaches. Use when creating terminal aesthetics, CRT effects, neon glow, scanlines, phosphor green displays, or retro-futuristic interfaces.