plugins/sdlc-utils/skills/plan/SKILL.md
Planning and requirements for software development. Use when the user asks to "define requirements", "draft requirements", "iterate on a spec", "refine a spec", "break down a task", "plan implementation", or mentions task breakdown and iterative requirements development. Guides iterative specification development through research, review, and refinement cycles rather than one-shot generation. For spec lifecycle management (draft -> reviewed -> live), use sdlc-utils:spec-writing instead.
npx skillsauth add nsheaps/ai-mktpl planInstall 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.
See also:
sdlc-utils:spec-writingcovers spec lifecycle management (moving specs through draft -> reviewed -> live -> archive states, updating specs during implementation, and verifying implementation against specs). Useplanwhen starting from scratch or iterating on requirements; usespec-writingwhen managing an existing spec through its lifecycle.
Write technical specifications through iterative refinement. Each spec is a combined document covering both Problem & Requirements (what and why) and Technical Design (how). Never attempt to produce a complete specification in one pass. Instead, start with the smallest meaningful definition and expand through repeated cycles of research, drafting, review, and refinement.
Specifications written in one pass suffer from blind spots, unstated assumptions, and missing edge cases. The iterative approach treats a spec as a living document that grows in fidelity through deliberate cycles.
The cycle:
Seed -> Draft -> Research -> Review -> Refine -> (repeat until sufficient)
Each pass through the cycle adds detail, resolves ambiguity, and surfaces new questions. Stop iterating when the spec is actionable enough for the next phase (design, implementation, or review).
Start with a one-paragraph problem statement. Capture only:
Do NOT attempt to define solutions, features, or acceptance criteria yet. The seed exists to anchor all future iteration.
Expand the seed into a skeleton spec using the template structure in
../spec-writing/references/spec-template.md. Fill in only what is known with confidence.
Mark unknowns explicitly with [TBD] or [NEEDS RESEARCH].
Key sections to draft first:
Sections to leave sparse:
Before adding detail, investigate:
AskUserQuestion for focused queries.Document findings inline in the spec or in a companion research file.
After each research pass, review the draft against these criteria:
| Criterion | Question to ask | | ---------------- | --------------------------------------------------- | | Clarity | Could someone unfamiliar implement from this? | | Completeness | Are there gaps marked [TBD] that can now be filled? | | Consistency | Do requirements contradict each other? | | Testability | Can each requirement be verified? | | Scope discipline | Is anything included that shouldn't be? |
Refine the document, then decide:
Once the spec has enough fidelity, decompose requirements into implementable tasks. Each task should be:
Organize tasks by priority (must-have, should-have, nice-to-have) or by component grouping.
After the spec and tasks are drafted, define explicit next steps:
Store specs according to the project's spec conventions:
docs/specs/draft/<spec-name>.md # Initial drafts
docs/specs/reviewed/<spec-name>.md # After review/approval
docs/specs/in-progress/<spec-name>.md # During implementation
docs/specs/live/<spec-name>.md # Actively used
docs/specs/deprecated/<spec-name>.md # Outdated but referenced
docs/specs/archive/<spec-name>.md # No longer in use
If the target location uses a different convention, adapt to that structure while maintaining the iterative process.
| Anti-Pattern | Instead | | -------------------------- | --------------------------------------------- | | Writing everything at once | Start with seed, iterate to add detail | | Vague requirements | Use specific, testable acceptance criteria | | Solution-first thinking | Define the problem before proposing solutions | | Skipping research | Always investigate before adding detail | | Gold-plating | Stop when actionable for the next phase | | Orphaned specs | Always define next steps and ownership |
../spec-writing/references/spec-template.md - Complete spec template
with all sections and guidance for filling each one. Copy this as a starting
point for new specs.../../schemas/spec-frontmatter.yaml - Formal schema defining required
and optional frontmatter fields for spec files. Consult this when creating or
validating spec frontmatter.tools
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su