Plan
A governance layer for AI-assisted software delivery. Plan, scope, approve, build, test, release — with human sign-off at every gate.
npx -y skills add lantisprime/claude-sdlc --skill planAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use this skill at the START of every coding task — new builds, bug fixes, and change requests. Classifies the work item, validates it against project scope, produces a high-level estimate, proposes a technology stack, and checks stack compatibility. Writes a plan artifact to .claude/sdlc/plans/ that every downstream phase and hook depends on. Must run before any Edit, Write, or code-generation tool call. Trigger this skill whenever the user says "implement", "fix", "add", "change", "build", "refactor", or references a ticket/requirement ID — even if the request seems small.
SKILL.md
11.4 KB, as published. Nobody here has run it
Plan (Phase 1)
Produce a plan artifact before any code is touched. The plan-gate hook blocks Edit/Write until this file exists.
Step 1 — Classify the work item
Ask (or infer from context) which of these the request is:
- New build — a new feature or capability not previously delivered
- Fix — a correction to existing behavior
- Change request (CR) — a modification to previously agreed scope
The classification drives different validation downstream (Phase 4 Build).
Step 2 — Resolve scope
If .claude/sdlc/scope.md exists and is signed: read it and proceed. Run a quick re-validation check — if the plan task looks materially different from what scope.md describes, invoke scope-ingest in re-validate mode and surface the drift report before continuing.
If .claude/sdlc/scope.md does not exist: ask the human to point at source material (file path or paste text). Then invoke the scope-ingest agent, which produces a draft at .claude/sdlc/scope-drafts/<timestamp>.md. Show the draft to the human and wait for review. The human copies/renames it to .claude/sdlc/scope.md and signs it before the plan proceeds.
Fallback — no source material: if the human has no source to point at, ask for a one-paragraph scope statement and write .claude/sdlc/scope.md directly (existing behavior, preserved for minimal-friction cases).
Then validate the resolved scope against the work item:
- New build: confirm the request is within documented scope. If not, surface a scope-delta and ask the human whether to (a) treat as a CR, (b) expand scope, or (c) defer.
- Fix: confirm the fix addresses in-scope behavior. An out-of-scope fix is a CR in disguise.
- CR: require a change-request ID. If missing, create one under
.claude/sdlc/change-requests/CR-<n>.mdusingtemplates/change-request.mdand ask the human for sign-off before continuing.
See agents/scope-ingest.md for accepted source formats and draft output spec.
Step 2.5 — Domain expert check
After scope validation and before writing the plan, invoke the domain-expert skill. It runs the two-source domain lookup (project domains/ then plugin domains/), matches the task against the domain index, and — when a match is found — prepares a ## Domain context block to be appended to the plan artifact in Step 3.
If no domain matches, the skill exits silently. Do not wait for the human or prompt them unless the skill itself surfaces a medium/low-confidence match that requires confirmation.
See skills/domain-expert/SKILL.md for the full matching and output specification.
Step 3 — Write the plan
Version check (before writing). If .claude/sdlc/plans/<task-slug>.md already exists and a signed plan gate (gates/plan-<task-slug>.md) exists for it, compare the intended new content against the current plan's material fields:
Classification(new-build / fix / change-request)In-scope fileslistIn-scope functionslistOut-of-scopelistRisks & rollbacksection
If any material field changed, do not write yet. Prompt the human with a narrative message that names the specific change and its consequence:
Changing Classification from
fixtonew-buildwill archive the current plan as v<N> (superseded). Your existing sign-off will not carry over to v<N+1>. Continue? [Y/n]
On yes: read the current plan's Version: field (treat absent as 1 for legacy plans). Rename <task-slug>.md to <task-slug>.v<N>.md and set Status: superseded in the renamed file. Then write the new plan at <task-slug>.md with Version: <N+1> and Status: draft. Print: Saved as v<N+1>. v<N> archived at plans/<task-slug>.v<N>.md (superseded).
On no: discard the changes to material fields and resume with the current plan unchanged.
Non-material edits (prose, typos, formatting) pass silently — do not trigger this check.
Write to .claude/sdlc/plans/<task-slug>.md using templates/plan.md. Required fields:
- Task ID & classification (new-build / fix / CR + reference ID)
- Problem (1–2 sentences)
- In-scope files (explicit list — hooks enforce this)
- In-scope functions (explicit list — hooks enforce this)
- Out-of-scope (explicit "do not touch" list)
- Approach (3–5 bullets)
- Tests to add/update (function-level — only modified code gets new tests)
- Risks & rollback
- Estimate (t-shirt size or story points; see
config/tools.jsonfor convention) - Version (start at 1; increment on each material edit of a signed plan)
- Status (
draftuntil plan gate is signed;signedafter;supersededwhen replaced by a newer version)
Keep it short. The plan is a contract, not a design doc — Phase 3 handles design.
Step 4 — Technology stack
For new builds, propose the stack (language, framework, major libraries, platform, data store). For fixes and CRs on existing code, record the existing stack the change lives in.
Validate compatibility:
- Language/runtime versions against existing platform
- Library licenses against project policy (if recorded)
- Data schema compatibility if the change touches data
- Auth/identity compatibility
- Deployment target compatibility
Produce a compatibility matrix as a markdown table in the plan file. Any FAIL row halts planning and requires human decision.
Step 4.5 — Scope gate (first task per project only)
If .claude/sdlc/gates/scope-<project-slug>.md does not exist, draft and sign the scope gate before proceeding to the plan gate. If the file already exists, skip this step entirely.
Derive the project slug from the project_name field in scope.md (slugify: lowercase, hyphens, no spaces). If scope.md has no project name, use the repository directory name.
Draft the scope gate at .claude/sdlc/gates/scope-<project-slug>.md using templates/scope-gate.md:
- Fill
## Scope summary— one paragraph summarising what the scope covers and what source material was used. - Fill
## Source material— source path (or "pasted text"), extraction confidence per field, provenance pointer to the scope draft. - Pre-tick
## Scope fields confirmedfor every field that was present and reviewed in the scope draft. Leave unchecked fields that were absent or low-confidence. - Fill
## Open items carried forwardwith any low-confidence or absent fields from the draft that the plan must still resolve. - Compute
gate_hash: sha256 of the file content above the## Required sign-offsheading at this point in the draft. Write it into thegate_hash:line before presenting the gate to the human.
Ask the human to sign the scope gate (same chat sign-off prompt as a phase gate). Acceptable inputs: a URL, or no ticket REQ-SCOPE-<project-slug> for degraded mode. Write the signed gate file.
After sign-off, plan-gate.sh will stop warning about the missing scope gate on all future /plan invocations for this project.
Step 5 — Second opinion review (hard rule — cannot be skipped)
Before presenting the plan to the human, run a self-contained second-opinion review. Re-read the complete plan artifact as if encountering it for the first time and check:
- Classification — is it unambiguously one of: new-build / fix / change-request? Any ambiguity must be resolved before proceeding.
- In-scope files — explicit, non-empty list. "TBD" is not acceptable at gate time.
- In-scope functions — explicit or documented as deferred (allowed before Build only).
- Out-of-scope — not the template placeholder; must name specific things excluded.
- Tests to add/update — non-empty; function-level.
- Risks & rollback — non-empty; names specific failure modes and the rollback path.
- Compatibility matrix — no unresolved
FAILrows;UNKNOWNis treated as an open item, not a pass.
If any item fails the checklist, surface the gap explicitly and ask the human to resolve it before requesting sign-off. Do not present the gate summary until all checklist items pass.
Present the second-opinion findings to the human in this format:
Second opinion — plan review
✓ / ✗ Classification: [result]
✓ / ✗ In-scope files: [result]
✓ / ✗ In-scope functions: [result]
✓ / ✗ Out-of-scope: [result]
✓ / ✗ Tests: [result]
✓ / ✗ Risks & rollback: [result]
✓ / ✗ Compatibility matrix: [result]
[If any ✗: list gaps and ask human to resolve before sign-off.]
[If all ✓: "Plan passes second-opinion review. Proceeding to sign-off."]
Step 6 — Human gate
Produce a one-screen summary of the plan and ask the human to confirm before Analyze/Design/Build proceeds. Write the confirmation to .claude/sdlc/gates/plan-<task-slug>.md using templates/gate.md — later commands check for this file.
The gate summary must show what the human is approving (scope, classification, risks) and what they are not approving (architecture, implementation approach — those belong in later phases).
What this skill must NOT do
- Do not write code.
- Do not modify files outside
.claude/sdlc/. - Do not skip the scope check, even if the task feels obvious.
- Do not approve the plan on the user's behalf — the gate file requires the human to confirm.
- Do not present the gate summary (Step 6) before completing the second-opinion review (Step 5). This is a hard rule. A plan that skips Step 5 is not ready for sign-off.
References
templates/plan.md— plan artifact templatetemplates/change-request.md— CR templatetemplates/gate.md— phase-gate templatetemplates/scope-gate.md— scope gate template (Step 4.5)agents/scope-ingest.md— scope draft producer (Step 2)skills/domain-expert/SKILL.md— domain context injector (Step 2.5)docs/SDLC.md— full phase reference
Next step hint
After writing the gate file, pipe the next_suggestions conditions to skills/_shared/next-hint.sh and print any output:
printf '%s\n' \
'all_signoffs_present|run /analyze to produce requirements with REQ IDs' \
'pending_signoff_for_current_user|write your sign-off at sign-offs/<REQ-ID>-<role>.md, then /analyze when all roles are covered' \
'plan_gate_signed|run /analyze to produce requirements with REQ IDs' \
| bash skills/_shared/next-hint.sh
Print any output verbatim. If the script outputs nothing (suppressed, faded, or no match), add nothing.