| name | writing-plans |
| description | Use when you have a spec or requirements for a multi-step task, before touching code |
Writing Plans
Overview
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
Research Before Writing (CRITICAL for per-site fix plans)
Plans that enumerate specific call sites or other concrete code targets must READ the code before constructing the per-site mapping. Reasoning from names and line proximity is reliably wrong.
Before listing per-site fixes, grep the codebase for:
- Existing helpers serving the same purpose. A "new helper" that duplicates an existing one will be caught by the eng critic as DRY violation / reinvention. One
grep -r <obvious-name> first — resolveTenantId, requireAuth, withDb, etc. — saves a plan-stage retry.
- The actual call chain into each function being edited. Don't assume from the surface command name.
cmdX may call api.x(ctx, id) which calls the primitive; the per-site mapping must target the primitive's actual direct caller, not the surface command the user types.
- Don't label a call site from line proximity to a previously-known function ("around line 2700, must be cmdResolve") — grep for and bound the ranges. Mislabels make execute rediscover the enclosing function instead of following the plan.