bundles/dev-loop/skills/writing-plans/SKILL.md
Turn a spec or requirements doc into a comprehensive, bite-sized implementation plan: map every file, define 2-5 minute TDD tasks with complete code, and enforce DRY/YAGNI/frequent-commits discipline. Use when you have requirements ready and need a concrete execution plan before touching code, when a feature spans multiple files and needs decomposition, or when you want agentic workers to execute tasks reliably without guessing.
npx skillsauth add shipshitdev/library 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 a comprehensive implementation plan assuming the implementer has zero context about the codebase and questionable test instincts. Document everything: which files to touch, complete code, exact commands, expected output, and how to verify. Deliver the whole plan as bite-sized checkboxed tasks. DRY. YAGNI. TDD. Frequent commits.
If the spec covers multiple independent subsystems, consider breaking it into separate plans — one per subsystem. Each plan should produce working, testable software on its own. Deeply coupled work can share a plan; independently deployable subsystems should not.
Map out which files will be created or modified and what each one is responsible for before defining tasks.
Each task should produce self-contained changes that make sense independently.
Each step is one action, completable in 2-5 minutes:
Never combine steps. Never skip the failure confirmation.
Every plan MUST start with this header:
# [Feature Name] Implementation Plan
**Goal:** [One sentence describing what this builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries used]
---
### Task N: [Component Name]
**Files:**
- Create: `exact/path/to/file.ts`
- Modify: `exact/path/to/existing.ts`
- Test: `tests/exact/path/to/file.test.ts`
- [ ] **Step 1: Write the failing test**
```typescript
it('describes specific behavior', () => {
const result = functionUnderTest(input)
expect(result).toBe(expectedValue)
})
```
- [ ] **Step 2: Run test to verify it fails**
```bash
bun run test tests/path/to/file.test.ts
```
Expected: FAIL — `functionUnderTest is not defined` (or similar)
- [ ] **Step 3: Write minimal implementation**
```typescript
export function functionUnderTest(input: InputType): OutputType {
return expectedValue
}
```
- [ ] **Step 4: Run test to verify it passes**
```bash
bun run test tests/path/to/file.test.ts
```
Expected: PASS
- [ ] **Step 5: Commit**
```bash
git add tests/path/to/file.test.ts src/path/to/file.ts
git commit -m "feat: add specific behavior"
```
Never write:
After writing the complete plan, review it against the spec before handing it off. Run this yourself — do not delegate it.
1. Spec coverage. Skim each requirement in the spec. Can you point to a task that implements it? List any gaps and add tasks for them.
2. Placeholder scan. Search the plan for any pattern from the "No Placeholders" section above. Fix every hit before proceeding.
3. Type and name consistency. Do the types, method signatures, and property names used in later tasks match what is defined in earlier tasks? A function named clearItems() in Task 3 and clearAllItems() in Task 7 is a bug in the plan. Fix it.
If you find issues, fix them inline. Then hand off.
Post the plan as a comment on the work/PRD issue — the same GitHub issue the
PRD lives on (or the work item the loop will pick up). The issue is the single
source of truth: the executor and all execution lanes read the issue body, the
linked PRD, and all comments, so a plan posted as a comment crosses to CI for
either engine. Do not save the plan to a local docs/plans/*.md file — that
file desyncs from the project the moment work starts and never reaches the loop.
The comment must start with the heading ## Implementation Plan so the
executor can find it among the issue's comments.
Post it with the plan markdown piped on stdin:
gh issue comment <N> --body-file - # plan markdown on stdin
Show the drafted plan first. Post only on approval — never post speculatively.
The plan is the how; the PRD body is the what. Keep the plan out of the PRD body — a comment co-locates the two on one issue without polluting the body.
No connected tracker? Agree on the single canonical location with the user
before writing — never default to a throwaway docs/plans/ file.
Long plans: if the plan exceeds one comment's limit (~65k chars), post it as
sequential ## Implementation Plan (n/m) comments rather than truncating.
The plan lives on the issue, so hand off via the dispatch gate, not a file.
Plan posted to issue #N. To dispatch it, move the issue to Backlog on the board (set
Status= Backlog) and apply one gate:dispatch:claude(Claude lane) ordispatch:codex(Codex lane). The loop claims it, reads the## Implementation Plancomment, and works it task by task.
For execution outside the loop (working the plan directly in this session), offer the two standalone paths — both read the plan from the issue comment, not a file:
1. Subagent-per-task (recommended) — dispatch a fresh subagent for each task with a review checkpoint between tasks. Faster iteration, isolated context per task, catches drift early.
2. Inline execution — work through tasks sequentially in the current session, checking off each step before moving to the next.
Which approach?
Whichever path runs, enforce strict task-by-task execution: complete every checkbox in a task before starting the next task. No skipping steps. No batching tasks.
development
TypeScript refactoring and modernization guidelines from a principal specialist perspective. This skill should be used when refactoring, reviewing, or modernizing TypeScript code to ensure type safety, compiler performance, and idiomatic patterns. Triggers on tasks involving TypeScript type architecture, narrowing, generics, error handling, or migration to modern TypeScript features.
tools
Resolves TypeScript and JavaScript problems across type-level programming, performance, monorepo management, migration, and modern tooling. Invoke when diagnosing "type instantiation excessively deep" errors, migrating JS to TS, configuring strict tsconfig, debugging module resolution, or choosing between Biome/ESLint/Turborepo/Nx.
tools
Turborepo monorepo build system guidance. Triggers on: `turbo.json`, task pipelines, `dependsOn`, caching, remote cache, the `turbo` CLI, `--filter`, `--affected`, CI optimization, environment variables, internal packages, monorepo structure, and package boundaries. Use when the user configures tasks or workflows, creates packages, sets up a monorepo, shares code between apps, runs changed packages, debugs cache behavior, or works in an `apps/` plus `packages/` workspace.
tools
Provides Tailwind CSS v4 performance optimization and best practices guidelines. Triggers when writing, reviewing, or refactoring Tailwind CSS v4 code; when working with Tailwind configuration, @theme directive, utility classes, responsive design, dark mode, container queries, or CSS generation optimization.