User Input
$ARGUMENTS
You MUST consider the user input before proceeding (if not empty).
Pre-Execution Checks
Check for extension hooks (before specification):
- •Check if
.specify/extensions.ymlexists in the project root. - •If it exists, read it and look for entries under the
hooks.before_specifykey - •If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
- •Filter out hooks where
enabledis explicitlyfalse. Treat hooks without anenabledfield as enabled by default. - •For each remaining hook, do not attempt to interpret or evaluate hook
conditionexpressions:- •If the hook has no
conditionfield, 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
- •If the hook has no
- •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
optionalflag:- •Optional hook (
optional: true):code## Extension Hooks **Optional Pre-Hook**: {extension} Command: `/{command}` Description: {description} Prompt: {prompt} To execute: `/{command}` - •Mandatory hook (
optional: false):code## Extension Hooks **Automatic Pre-Hook**: {extension} Executing: `/{command}` EXECUTE_COMMAND: {command} Wait for the result of the hook command before proceeding to the Outline.
- •Optional hook (
- •If no hooks are registered or
.specify/extensions.ymldoes not exist, skip silently
Outline
The text the user typed after /speckit.specify in the triggering message is the feature description. Assume you always have it available in this conversation even if $ARGUMENTS appears literally below. Do not ask the user to repeat it unless they provided an empty command.
Given that feature description, do this:
- •
Generate a concise short name (2-4 words) for the feature:
- •Analyze the feature description and extract the most meaningful keywords
- •Create a 2-4 word short name that captures the essence of the feature
- •Use action-noun format when possible (e.g., "add-user-auth", "fix-payment-bug")
- •Preserve technical terms and acronyms (OAuth2, API, JWT, etc.)
- •Keep it concise but descriptive enough to understand the feature at a glance
- •Examples:
- •"I want to add user authentication" → "user-auth"
- •"Implement OAuth2 integration for the API" → "oauth2-api-integration"
- •"Create a dashboard for analytics" → "analytics-dashboard"
- •"Fix payment processing timeout bug" → "fix-payment-timeout"
- •
Branch creation (optional, via hook):
If a
before_specifyhook ran successfully in the Pre-Execution Checks above, it will have created/switched to a git branch and output JSON containingBRANCH_NAMEandFEATURE_NUM. Note these values for reference, but the branch name does not dictate the spec directory name.If the user explicitly provided
GIT_BRANCH_NAME, pass it through to the hook so the branch script uses the exact value as the branch name (bypassing all prefix/suffix generation). - •
Create the spec feature directory:
Specs live under the default
specs/directory unless the user explicitly providesSPECIFY_FEATURE_DIRECTORY.Resolution order for
SPECIFY_FEATURE_DIRECTORY:- •If the user explicitly provided
SPECIFY_FEATURE_DIRECTORY(e.g., via environment variable, argument, or configuration), use it as-is - •Otherwise, auto-generate it under
specs/:- •Check
.specify/init-options.jsonforbranch_numbering - •If
"timestamp": prefix isYYYYMMDD-HHMMSS(current timestamp) - •If
"sequential"or absent: prefix isNNN(next available 3-digit number after scanning existing directories inspecs/) - •Construct the directory name:
<prefix>-<short-name>(e.g.,003-user-author20260319-143022-user-auth) - •Set
SPECIFY_FEATURE_DIRECTORYtospecs/<directory-name>
- •Check
Create the directory and spec file:
- •
mkdir -p SPECIFY_FEATURE_DIRECTORY - •Copy
.specify/templates/spec-template.mdtoSPECIFY_FEATURE_DIRECTORY/spec.mdas the starting point - •Set
SPEC_FILEtoSPECIFY_FEATURE_DIRECTORY/spec.md - •Persist the resolved path to
.specify/feature.json:Write the actual resolved directory path value (for example,json{ "feature_directory": "<resolved feature dir>" }specs/003-user-auth), not the literal stringSPECIFY_FEATURE_DIRECTORY. This allows downstream commands (/speckit.plan,/speckit.tasks, etc.) to locate the feature directory without relying on git branch name conventions.
IMPORTANT:
- •You must only create one feature per
/speckit.specifyinvocation - •The spec directory name and the git branch name are independent — they may be the same but that is the user's choice
- •The spec directory and file are always created by this command, never by the hook
- •If the user explicitly provided
- •
Load
.specify/templates/spec-template.mdto understand required sections. - •
Follow this execution flow:
- •Parse user description from arguments If empty: ERROR "No feature description provided"
- •Extract key concepts from description Identify: actors, actions, data, constraints
- •For unclear aspects:
- •Make informed guesses based on context and industry standards
- •Only mark with [NEEDS CLARIFICATION: specific question] if:
- •The choice significantly impacts feature scope or user experience
- •Multiple reasonable interpretations exist with different implications
- •No reasonable default exists
- •LIMIT: Maximum 3 [NEEDS CLARIFICATION] markers total
- •Prioritize clarifications by impact: scope > security/privacy > user experience > technical details
- •Fill User Scenarios & Testing section If no clear user flow: ERROR "Cannot determine user scenarios"
- •Generate Functional Requirements Each requirement must be testable Use reasonable defaults for unspecified details (document assumptions in Assumptions section)
- •Define Success Criteria Create measurable, technology-agnostic outcomes Include both quantitative metrics (time, performance, volume) and qualitative measures (user satisfaction, task completion) Each criterion must be verifiable without implementation details
- •Identify Key Entities (if data involved)
- •Return: SUCCESS (spec ready for planning)
- •
Write the specification to SPEC_FILE using the template structure, replacing placeholders with concrete details derived from the feature description (arguments) while preserving section order and headings.
- •
Specification Quality Validation: After writing the initial spec, validate it against quality criteria:
a. Create Spec Quality Checklist: Generate a checklist file at
SPECIFY_FEATURE_DIRECTORY/checklists/requirements.mdusing the checklist template structure with these validation items:markdown# Specification Quality Checklist: [FEATURE NAME] **Purpose**: Validate specification completeness and quality before proceeding to planning **Created**: [DATE] **Feature**: [Link to spec.md] ## Content Quality - [ ] No implementation details (languages, frameworks, APIs) - [ ] Focused on user value and business needs - [ ] Written for non-technical stakeholders - [ ] All mandatory sections completed ## Requirement Completeness - [ ] No [NEEDS CLARIFICATION] markers remain - [ ] Requirements are testable and unambiguous - [ ] Success criteria are measurable - [ ] Success criteria are technology-agnostic (no implementation details) - [ ] All acceptance scenarios are defined - [ ] Edge cases are identified - [ ] Scope is clearly bounded - [ ] Dependencies and assumptions identified ## Feature Readiness - [ ] All functional requirements have clear acceptance criteria - [ ] User scenarios cover primary flows - [ ] Feature meets measurable outcomes defined in Success Criteria - [ ] No implementation details leak into specification ## Notes - Items marked incomplete require spec updates before `/speckit.clarify` or `/speckit.plan`
b. Run Validation Check: Review the spec against each checklist item:
- •For each item, determine if it passes or fails
- •Document specific issues found (quote relevant spec sections)
c. Handle Validation Results:
- •
If all items pass: Mark checklist complete and proceed to step 7
- •
If items fail (excluding [NEEDS CLARIFICATION]):
- •List the failing items and specific issues
- •Update the spec to address each issue
- •Re-run validation until all items pass (max 3 iterations)
- •If still failing after 3 iterations, document remaining issues in checklist notes and warn user
- •
If [NEEDS CLARIFICATION] markers remain:
- •
Extract all [NEEDS CLARIFICATION: ...] markers from the spec
- •
LIMIT CHECK: If more than 3 markers exist, keep only the 3 most critical (by scope/security/UX impact) and make informed guesses for the rest
- •
For each clarification needed (max 3), present options to user in this format:
markdown## Question [N]: [Topic] **Context**: [Quote relevant spec section] **What we need to know**: [Specific question from NEEDS CLARIFICATION marker] **Suggested Answers**: | Option | Answer | Implications | |--------|--------|--------------| | A | [First suggested answer] | [What this means for the feature] | | B | [Second suggested answer] | [What this means for the feature] | | C | [Third suggested answer] | [What this means for the feature] | | Custom | Provide your own answer | [Explain how to provide custom input] | **Your choice**: _[Wait for user response]_
- •
CRITICAL - Table Formatting: Ensure markdown tables are properly formatted:
- •Use consistent spacing with pipes aligned
- •Each cell should have spaces around content:
| Content |not|Content| - •Header separator must have at least 3 dashes:
|--------| - •Test that the table renders correctly in markdown preview
- •
Number questions sequentially (Q1, Q2, Q3 - max 3 total)
- •
Present all questions together before waiting for responses
- •
Wait for user to respond with their choices for all questions (e.g., "Q1: A, Q2: Custom - [details], Q3: B")
- •
Update the spec by replacing each [NEEDS CLARIFICATION] marker with the user's selected or provided answer
- •
Re-run validation after all clarifications are resolved
- •
d. Update Checklist: After each validation iteration, update the checklist file with current pass/fail status
- •
Report completion to the user with:
- •
SPECIFY_FEATURE_DIRECTORY— the feature directory path - •
SPEC_FILE— the spec file path - •Checklist results summary
- •Readiness for the next phase (
/speckit.clarifyor/speckit.plan)
- •
- •
Check for extension hooks: After reporting completion, check if
.specify/extensions.ymlexists in the project root.- •If it exists, read it and look for entries under the
hooks.after_specifykey - •If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
- •Filter out hooks where
enabledis explicitlyfalse. Treat hooks without anenabledfield as enabled by default. - •For each remaining hook, do not attempt to interpret or evaluate hook
conditionexpressions:- •If the hook has no
conditionfield, 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
- •If the hook has no
- •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
optionalflag:- •Optional hook (
optional: true):code## Extension Hooks **Optional Hook**: {extension} Command: `/{command}` Description: {description} Prompt: {prompt} To execute: `/{command}` - •Mandatory hook (
optional: false):code## Extension Hooks **Automatic Hook**: {extension} Executing: `/{command}` EXECUTE_COMMAND: {command}
- •Optional hook (
- •If no hooks are registered or
.specify/extensions.ymldoes not exist, skip silently
- •If it exists, read it and look for entries under the
NOTE: Branch creation is handled by the before_specify hook (git extension). Spec directory and file creation are always handled by this core command.
Quick Guidelines
- •Focus on WHAT users need and WHY.
- •Avoid HOW to implement (no tech stack, APIs, code structure).
- •Written for business stakeholders, not developers.
- •DO NOT create any checklists that are embedded in the spec. That will be a separate command.
Section Requirements
- •Mandatory sections: Must be completed for every feature
- •Optional sections: Include only when relevant to the feature
- •When a section doesn't apply, remove it entirely (don't leave as "N/A")
For AI Generation
When creating this spec from a user prompt:
- •Make informed guesses: Use context, industry standards, and common patterns to fill gaps
- •Document assumptions: Record reasonable defaults in the Assumptions section
- •Limit clarifications: Maximum 3 [NEEDS CLARIFICATION] markers - use only for critical decisions that:
- •Significantly impact feature scope or user experience
- •Have multiple reasonable interpretations with different implications
- •Lack any reasonable default
- •Prioritize clarifications: scope > security/privacy > user experience > technical details
- •Think like a tester: Every vague requirement should fail the "testable and unambiguous" checklist item
- •Common areas needing clarification (only if no reasonable default exists):
- •Feature scope and boundaries (include/exclude specific use cases)
- •User types and permissions (if multiple conflicting interpretations possible)
- •Security/compliance requirements (when legally/financially significant)
Examples of reasonable defaults (don't ask about these):
- •Data retention: Industry-standard practices for the domain
- •Performance targets: Standard web/mobile app expectations unless specified
- •Error handling: User-friendly messages with appropriate fallbacks
- •Authentication method: Standard session-based or OAuth2 for web apps
- •Integration patterns: Use project-appropriate patterns (REST/GraphQL for web services, function calls for libraries, CLI args for tools, etc.)
Success Criteria Guidelines
Success criteria must be:
- •Measurable: Include specific metrics (time, percentage, count, rate)
- •Technology-agnostic: No mention of frameworks, languages, databases, or tools
- •User-focused: Describe outcomes from user/business perspective, not system internals
- •Verifiable: Can be tested/validated without knowing implementation details
Good examples:
- •"Users can complete checkout in under 3 minutes"
- •"System supports 10,000 concurrent users"
- •"95% of searches return results in under 1 second"
- •"Task completion rate improves by 40%"
Bad examples (implementation-focused):
- •"API response time is under 200ms" (too technical, use "Users see results instantly")
- •"Database can handle 1000 TPS" (implementation detail, use user-facing metric)
- •"React components render efficiently" (framework-specific)
- •"Redis cache hit rate above 80%" (technology-specific)