User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Pre-Execution Checks
Check for extension hooks (before planning):
- Check if
.specify/extensions.yml exists in the project root.
- If it exists, read it and look for entries under the
hooks.before_plan key
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
- Filter out hooks where
enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
- For each remaining hook, do not attempt to interpret or evaluate hook
condition expressions:
- If the hook has no
condition field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty
condition, skip the hook and leave condition evaluation to the HookExecutor implementation
- When constructing slash commands from hook command names, replace dots (
.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
- For each executable hook, output the following based on its
optional flag:
- Optional hook (
optional: true):## Extension Hooks
**Optional Pre-Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
- Mandatory hook (
optional: false):## Extension Hooks
**Automatic Pre-Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
Wait for the result of the hook command before proceeding to the Outline.
- If no hooks are registered or
.specify/extensions.yml does not exist, skip silently
Outline
Setup: Run .specify/scripts/bash/setup-plan.sh --json from repo root and parse JSON for FEATURE_SPEC, IMPL_PLAN, SPECS_DIR, BRANCH. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").
Load context: Read FEATURE_SPEC and .specify/memory/constitution.md. Load IMPL_PLAN template (already copied).
Execute plan workflow: Follow the structure in IMPL_PLAN template to:
- Fill Technical Context (mark unknowns as "NEEDS CLARIFICATION")
- Fill Constitution Check section from constitution
- Evaluate gates (ERROR if violations unjustified)
- Phase 0: Generate research.md (resolve all NEEDS CLARIFICATION)
- Phase 1: Generate data-model.md, contracts/, quickstart.md
- Phase 1: Update agent context by running the agent script
- Re-evaluate Constitution Check post-design
Mandatory Post-Execution Hooks
You MUST complete this section before reporting completion to the user.
Check if .specify/extensions.yml exists in the project root.
- If it does not exist, or no hooks are registered under
hooks.after_plan, skip to the Completion Report.
- If it exists, read it and look for entries under the
hooks.after_plan key.
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue to the Completion Report.
- Filter out hooks where
enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
- For each remaining hook, do not attempt to interpret or evaluate hook
condition expressions:
- If the hook has no
condition field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty
condition, skip the hook and leave condition evaluation to the HookExecutor implementation
- When constructing slash commands from hook command names, replace dots (
.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
- For each executable hook, output the following based on its
optional flag:
- Mandatory hook (
optional: false) — You MUST emit EXECUTE_COMMAND: for each mandatory hook:## Extension Hooks
**Automatic Hook**: {extension}
Executing: `/{command}`
EXECUTE_COMMAND: {command}
- Optional hook (
optional: true):## Extension Hooks
**Optional Hook**: {extension}
Command: `/{command}`
Description: {description}
Prompt: {prompt}
To execute: `/{command}`
Completion Report
Command ends after Phase 2 planning. Report branch, IMPL_PLAN path, and generated artifacts.
Phases
Phase 0: Outline & Research
Extract unknowns from Technical Context above:
- For each NEEDS CLARIFICATION → research task
- For each dependency → best practices task
- For each integration → patterns task
Generate and dispatch research agents:
For each unknown in Technical Context:
Task: "Research {unknown} for {feature context}"
For each technology choice:
Task: "Find best practices for {tech} in {domain}"
Consolidate findings in research.md using format:
- Decision: [what was chosen]
- Rationale: [why chosen]
- Alternatives considered: [what else evaluated]
Output: research.md with all NEEDS CLARIFICATION resolved
Phase 1: Design & Contracts
Prerequisites: research.md complete
Extract entities from feature spec → data-model.md:
- Entity name, fields, relationships
- Validation rules from requirements
- State transitions if applicable
Define interface contracts (if project has external interfaces) → /contracts/:
- Identify what interfaces the project exposes to users or other systems
- Document the contract format appropriate for the project type
- Examples: public APIs for libraries, command schemas for CLI tools, endpoints for web services, grammars for parsers, UI contracts for applications
- Skip if project is purely internal (build scripts, one-off tools, etc.)
Create quickstart validation guide → quickstart.md:
- Document runnable validation scenarios that prove the feature works end-to-end
- Include prerequisites, setup commands, test/run commands, and expected outcomes
- Use links or references to contracts and data model details instead of duplicating them
- Do not include full implementation code, model/service/controller bodies, migrations, or complete test suites
- Keep this artifact as a validation/run guide; implementation details belong in
tasks.md and the implementation phase
Agent context update:
- Update the plan reference between the
<!-- SPECKIT START --> and <!-- SPECKIT END --> markers in .cursor/rules/specify-rules.mdc to point to the plan file created in step 1 (the IMPL_PLAN path)
Output: data-model.md, /contracts/*, quickstart.md, updated agent context file
Key rules
- Use absolute paths for filesystem operations; use project-relative paths for references in documentation and agent context files
- ERROR on gate failures or unresolved clarifications
Done When
1---2name: speckit-plan3description: Execute the implementation planning workflow using the plan template to generate design artifacts.4---567## User Input89```text10$ARGUMENTS11```1213You **MUST** consider the user input before proceeding (if not empty).1415## Pre-Execution Checks1617**Check for extension hooks (before planning)**:18- Check if `.specify/extensions.yml` exists in the project root.19- If it exists, read it and look for entries under the `hooks.before_plan` key20- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally21- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.22- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:23 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable24 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation25- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.26- For each executable hook, output the following based on its `optional` flag:27 - **Optional hook** (`optional: true`):28 ```29 ## Extension Hooks3031 **Optional Pre-Hook**: {extension}32 Command: `/{command}`33 Description: {description}3435 Prompt: {prompt}36 To execute: `/{command}`37 ```38 - **Mandatory hook** (`optional: false`):39 ```40 ## Extension Hooks4142 **Automatic Pre-Hook**: {extension}43 Executing: `/{command}`44 EXECUTE_COMMAND: {command}4546 Wait for the result of the hook command before proceeding to the Outline.47 ```48- If no hooks are registered or `.specify/extensions.yml` does not exist, skip silently4950## Outline51521. **Setup**: Run `.specify/scripts/bash/setup-plan.sh --json` from repo root and parse JSON for FEATURE_SPEC, IMPL_PLAN, SPECS_DIR, BRANCH. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'''m Groot' (or double-quote if possible: "I'm Groot").53542. **Load context**: Read FEATURE_SPEC and `.specify/memory/constitution.md`. Load IMPL_PLAN template (already copied).55563. **Execute plan workflow**: Follow the structure in IMPL_PLAN template to:57 - Fill Technical Context (mark unknowns as "NEEDS CLARIFICATION")58 - Fill Constitution Check section from constitution59 - Evaluate gates (ERROR if violations unjustified)60 - Phase 0: Generate research.md (resolve all NEEDS CLARIFICATION)61 - Phase 1: Generate data-model.md, contracts/, quickstart.md62 - Phase 1: Update agent context by running the agent script63 - Re-evaluate Constitution Check post-design6465## Mandatory Post-Execution Hooks6667**You MUST complete this section before reporting completion to the user.**6869Check if `.specify/extensions.yml` exists in the project root.70- If it does not exist, or no hooks are registered under `hooks.after_plan`, skip to the Completion Report.71- If it exists, read it and look for entries under the `hooks.after_plan` key.72- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue to the Completion Report.73- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.74- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:75 - If the hook has no `condition` field, or it is null/empty, treat the hook as executable76 - If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation77- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `speckit.git.commit` → `/speckit-git-commit`.78- For each executable hook, output the following based on its `optional` flag:79 - **Mandatory hook** (`optional: false`) — **You MUST emit `EXECUTE_COMMAND:` for each mandatory hook**:80 ```81 ## Extension Hooks8283 **Automatic Hook**: {extension}84 Executing: `/{command}`85 EXECUTE_COMMAND: {command}86 ```87 - **Optional hook** (`optional: true`):88 ```89 ## Extension Hooks9091 **Optional Hook**: {extension}92 Command: `/{command}`93 Description: {description}9495 Prompt: {prompt}96 To execute: `/{command}`97 ```9899## Completion Report100101Command ends after Phase 2 planning. Report branch, IMPL_PLAN path, and generated artifacts.102103## Phases104105### Phase 0: Outline & Research1061071. **Extract unknowns from Technical Context** above:108 - For each NEEDS CLARIFICATION → research task109 - For each dependency → best practices task110 - For each integration → patterns task1111122. **Generate and dispatch research agents**:113114 ```text115 For each unknown in Technical Context:116 Task: "Research {unknown} for {feature context}"117 For each technology choice:118 Task: "Find best practices for {tech} in {domain}"119 ```1201213. **Consolidate findings** in `research.md` using format:122 - Decision: [what was chosen]123 - Rationale: [why chosen]124 - Alternatives considered: [what else evaluated]125126**Output**: research.md with all NEEDS CLARIFICATION resolved127128### Phase 1: Design & Contracts129130**Prerequisites:** `research.md` complete1311321. **Extract entities from feature spec** → `data-model.md`:133 - Entity name, fields, relationships134 - Validation rules from requirements135 - State transitions if applicable1361372. **Define interface contracts** (if project has external interfaces) → `/contracts/`:138 - Identify what interfaces the project exposes to users or other systems139 - Document the contract format appropriate for the project type140 - Examples: public APIs for libraries, command schemas for CLI tools, endpoints for web services, grammars for parsers, UI contracts for applications141 - Skip if project is purely internal (build scripts, one-off tools, etc.)1421433. **Create quickstart validation guide** → `quickstart.md`:144 - Document runnable validation scenarios that prove the feature works end-to-end145 - Include prerequisites, setup commands, test/run commands, and expected outcomes146 - Use links or references to contracts and data model details instead of duplicating them147 - Do not include full implementation code, model/service/controller bodies, migrations, or complete test suites148 - Keep this artifact as a validation/run guide; implementation details belong in `tasks.md` and the implementation phase1491504. **Agent context update**:151 - Update the plan reference between the `<!-- SPECKIT START -->` and `<!-- SPECKIT END -->` markers in `.cursor/rules/specify-rules.mdc` to point to the plan file created in step 1 (the IMPL_PLAN path)152153**Output**: data-model.md, /contracts/*, quickstart.md, updated agent context file154155## Key rules156157- Use absolute paths for filesystem operations; use project-relative paths for references in documentation and agent context files158- ERROR on gate failures or unresolved clarifications159160## Done When161162- [ ] Plan workflow executed and design artifacts generated163- [ ] Extension hooks dispatched or skipped according to the rules in Mandatory Post-Execution Hooks above164- [ ] Completion reported to user with branch, plan path, and generated artifacts