| name | specify |
| description | Create feature specification from natural language description. Use when starting a new feature or creating a spec. Triggers on: create spec, specify feature, new feature spec. |
Feature Specification Generator
Create structured feature specifications from natural language descriptions.
SpecKit Workflow
This skill is Step 1 of 6 in the Relentless workflow:
specify → plan → tasks → analyze → implement (task by task) or relentless run --feature [FEATURE NAME] --tui
What flows to next step:
- User requirements → plan will create technical approach
- Routing preference → carried through all artifacts
- Acceptance criteria → basis for TDD in implementation
TDD is MANDATORY
The specification MUST include testable acceptance criteria:
- Every user requirement should be verifiable with tests
- Test scenarios should be part of each story
- Edge cases should be documented for test coverage
All acceptance criteria must be written in Given/When/Then format to enable direct test implementation.
The Job
- Receive feature description from user
- Confirm routing preference (Step 0)
- Generate short name and feature number
- Create branch and feature directory in
relentless/features/NNN-feature-name/
- Generate specification using template
- Validate specification quality (including TDD readiness)
- Save to
spec.md
Step 0: Confirm Routing Preference (BEFORE generating spec)
Ask the user these specific questions:
- "Which routing mode?" (free/cheap/good/genius) - Default:
good
- "Allow free models in fallback?" - Default:
yes
- "Specific harness/model preference?" - Default:
auto
Record the answer in spec.md metadata:
**Routing Preference**: auto: good | allow free: yes
<!-- Options: auto: free|cheap|good|genius | allow free: yes|no | OR specific: harness/model -->
Step 1: Create Feature Structure
Run the create-new-feature script to set up the branch and directory:
.claude/skills/specify/scripts/bash/create-new-feature.sh --json "FEATURE_DESCRIPTION"
This will output JSON with:
BRANCH_NAME: e.g., "003-user-auth"
SPEC_FILE: Full path to spec.md
FEATURE_DIR: Full path to feature directory
FEATURE_NUM: e.g., "003"
Important: Parse this JSON and use these paths for all subsequent operations.
Step 2: Load Constitution & Context
- Read
relentless/constitution.md for project governance
- Note any MUST/SHOULD rules that apply to specifications
- Keep these principles in mind while generating the spec
- Pay special attention to TDD requirements - all features must be testable
Step 3: Generate Specification
Using the template at templates/spec.md, create a specification with:
Required Sections:
1. Feature Overview
- One-paragraph summary
- User value proposition
- Problem being solved
2. User Scenarios & Testing
- Concrete user stories with priorities (P1, P2, P3...)
- Step-by-step flows
- Expected outcomes
- Given/When/Then acceptance scenarios (MANDATORY)
- Independent testability explanation for each story
3. Functional Requirements
- What the system must do
- Testable requirements (no implementation details)
- Clear success criteria
4. Test Strategy (MANDATORY)
- Unit test approach
- Integration test scenarios
- Edge case tests
- Test data requirements
5. Success Criteria
- Measurable, technology-agnostic outcomes
- Quantitative metrics (time, performance, volume)
- Qualitative measures (user satisfaction, task completion)
6. Key Entities (if applicable)
- Data models and relationships
- Fields and types (logical, not implementation)
7. Dependencies & Assumptions
- External systems required
- Prerequisites
- Assumptions made
8. Out of Scope
- What this feature explicitly does NOT include
- Future considerations
Step 4: Handle Ambiguities
If aspects are unclear:
- Interview the user first with questions to clarify any doubts, concerns or about his opinion on eventual ideas to improve the feature.
- Only mark
[NEEDS CLARIFICATION: specific question] if:
- Choice significantly impacts scope or UX
- Multiple reasonable interpretations exist
- No reasonable default exists
- Question not already solved by interview
- LIMIT: Maximum 3 clarifications
If clarifications needed, present to user:
## Clarification Needed
**Q1: [Topic]**
Context: [Quote spec section]
Question: [Specific question]
Options:
A. [Option 1] - [Implications]
B. [Option 2] - [Implications]
C. Custom - [Your answer]
Your choice: _
Step 5: Validate Quality
Check the specification against:
General Quality
TDD Readiness (MANDATORY)
Routing Compliance
If validation fails, revise and re-check (max 3 iterations).
Step 6: Save & Validate
-
Write complete specification to SPEC_FILE from JSON output
-
Run the validator to ensure spec.md is correctly formatted:
.claude/skills/validators/scripts/validate-spec.sh "$SPEC_FILE"
- If validation fails, fix the errors and re-run
- Warnings are acceptable but should be reviewed
-
Create progress.txt if it doesn't exist (note that markdown frontmatter must be properly formatted YAML):
---
feature: FEATURE_NAME
started: DATE
last_updated: DATE
stories_completed: 0
routing_preference: "[auto: mode | allow free: yes/no]"
---
# Progress Log: FEATURE_NAME
-
Report to user:
- Branch created:
BRANCH_NAME
- Spec saved:
SPEC_FILE
- Quality validation: PASSED/FAILED
- TDD readiness: PASSED/FAILED
- Routing preference: [recorded value]
- Next step:
/relentless.plan or /relentless.clarify
Example Output
# Feature: User Authentication
**Routing Preference**: auto: good | allow free: yes
## Overview
Enable users to create accounts and log in securely using email/password.
## User Scenarios
### User Story 1: New User Registration (Priority: P1)
User visits signup page, enters email and password, and creates an account.
**Why this priority**: Core functionality, blocks all other auth features.
**Independent Test**: Can be fully tested by registering a new account and verifying the account exists.
**Acceptance Scenarios**:
1. **Given** a visitor on the signup page, **When** they submit valid email and password, **Then** the account is created and confirmation email sent
2. **Given** an email already in use, **When** visitor tries to register, **Then** error message shown without revealing account exists
## Functional Requirements
**REQ-1:** System must validate email format
**REQ-2:** System must require passwords ≥ 8 characters
**REQ-3:** System must send confirmation email within 1 minute
**REQ-4:** System must hash passwords before storage
## Test Strategy (MANDATORY)
### Unit Test Approach
- Email validation logic
- Password strength validation
- Password hashing utility
### Integration Test Scenarios
- Full registration flow (submit form → create account → send email)
- Duplicate email rejection
### Edge Case Tests
- Invalid email formats (missing @, invalid domain)
- Password too short
- Unicode in email/password
### Test Data Requirements
- Valid test email addresses
- Various invalid email formats
- Password examples at boundary conditions
## Success Criteria
1. 95% of signups complete within 60 seconds
2. Zero plaintext passwords in database
3. Email confirmation rate > 80%
## Key Entities
**User**
- email: string (unique)
- password_hash: string
- confirmed: boolean
- created_at: timestamp
## Dependencies
- Email service provider (e.g., SendGrid, Mailgun)
- Session management system
## Out of Scope
- Social login (OAuth)
- Two-factor authentication
- Password reset (separate feature)
Notes
- Always run the script first to get proper paths
- Use absolute paths from JSON output
- Validate before marking complete
- Keep specification technology-agnostic
- Focus on WHAT, not HOW
- TDD readiness is non-negotiable - all acceptance criteria must be testable