Define feature requirements (problem, users, scope, acceptance criteria) through guided Q&A and write FEATURE_SPEC.md. Use when starting a new feature.
Generate a feature specification document for the feature $1.
Copy this checklist and track progress:
Feature Spec Progress:
- [ ] Directory guard
- [ ] Handle arguments (feature name)
- [ ] Plan status guard
- [ ] Create feature directory
- [ ] Existing file guard (prevent overwrite)
- [ ] Run guided Q&A process (from PROMPT.md)
- [ ] Write FEATURE_SPEC.md
- [ ] Update plans/PLAN_STATUS.md
- [ ] Capture deferred requirements
- [ ] Cross-model review (if Codex available)
If .toolkit-marker exists in the current working directory → STOP:
"You're in the toolkit repo. Feature skills run from your project directory.
Run: cd ~/Projects/your-project && /feature-spec $1"
Check .claude/toolkit-version.json exists in the current working directory (confirms /setup was run).
If missing → STOP: "Toolkit not installed. Run /setup from the toolkit first."
Check AGENTS.md exists in the current working directory (confirms project root).
If missing → STOP: "Run this from your project root (where AGENTS.md lives)."
$1 = feature name (e.g., analytics, dark-mode)$1 is empty, ask the user for the feature namePROJECT_ROOT = current working directoryFEATURE_DIR = PROJECT_ROOT/features/$1Read ~/.claude/skills/shared/PLAN_STATUS.md before writing files.
PROJECT_ROOT/plans/ exists.PROJECT_ROOT/plans/PLAN_STATUS.md if it exists.Current plan with Current status: active,
ask whether this feature supersedes it, should be recorded as non-current
planned work, or should abort.superseded in the history table.plans/PLAN_STATUS.md is missing, create it after writing the feature spec.Create features/$1/ if it doesn't exist:
mkdir -p "features/$1"
Before asking any questions, check whether FEATURE_DIR/FEATURE_SPEC.md already exists.
features/archive/YYYYMMDD-HHMMSS-$1/, mark the archived snapshot as superseded when practical, then write the new document to FEATURE_DIR/FEATURE_SPEC.mdFEATURE_DIR/FEATURE_SPEC.md with the new documentRead .claude/skills/feature-spec/PROMPT.md and follow its instructions exactly:
Write the completed specification to FEATURE_DIR/FEATURE_SPEC.md.
Update PROJECT_ROOT/plans/PLAN_STATUS.md so:
Current plan is features/$1/ unless the user explicitly chose non-current planned workCurrent type is featureCurrent stage is feature-specCurrent status is active for current work, or planned for non-current workIMPORTANT: Capture deferred requirements interactively during the Q&A process, not after.
Write deferred items to PROJECT_ROOT/DEFERRED.md (not the feature directory).
During the Q&A, watch for signals that the user is deferring something:
When you detect a deferral signal, immediately use AskUserQuestion:
Question: "Would you like to save this to your deferred requirements?"
Header: "Defer?"
Options:
- "Yes, capture it" — I'll ask a few quick questions to document it
- "No, skip" — Don't record this
If user selects "Yes, capture it":
Ask these clarifying questions:
What's being deferred? "In one sentence, what's the requirement or feature?" (Pre-fill with your understanding from context)
Why defer it? Options: "Out of scope for this feature" / "Separate feature" / "V2" / "Needs more research" / "Other"
Notes for later? "Any context that will help when revisiting this?" (Optional — user can skip)
After collecting answers, append to PROJECT_ROOT/DEFERRED.md right away.
If file doesn't exist, create it:
# Deferred Requirements
> Captured during specification Q&A. Review when planning future versions.
## From FEATURE_SPEC.md: {FEATURE_NAME} ({date})
| Requirement | Reason | Notes |
|-------------|--------|-------|
| {user's answer} | {selected reason} | {notes or "—"} |
If file exists, add new feature section or append to existing:
## From FEATURE_SPEC.md: {FEATURE_NAME} ({date})
| Requirement | Reason | Notes |
|-------------|--------|-------|
| {user's answer} | {selected reason} | {notes or "—"} |
After capturing (or skipping), continue the spec Q&A where you left off.
--lean)When --lean is passed:
/verify-spec, /codex-consult, or /criteria-audit. Report each as LEAN_SKIP in the output.--lean)These gates MUST execute before you produce the "Next Step" output. The output template requires results from each gate. Reporting SKIPPED without --lean is a skill violation — go back and run the gate.
After writing FEATURE_SPEC.md, run quality verification:
/verify-spec feature-spec on the generated documentAfter verification, run cross-model review if Codex CLI is available:
codex --version/codex-consult on the generated documentConsultation invocation:
/codex-consult --research "feature requirements, user stories" features/$1/FEATURE_SPEC.md
If Codex finds issues:
If Codex CLI is not installed or not authenticated: Report UNAVAILABLE (not SKIPPED — the distinction matters).
| Situation | Action |
|-----------|--------|
| Feature name argument is empty and user does not provide one | Prompt again with AskUserQuestion; do not proceed without a feature name |
| FEATURE_SPEC.md already exists and user selects "Abort" | Stop immediately, do not write any files, suggest renaming or moving the existing file |
| PROMPT.md not found at .claude/skills/feature-spec/PROMPT.md | Stop and report "Skill asset missing — reinstall toolkit or run /setup" |
| DEFERRED.md write fails (permissions or disk) | Output deferred items to terminal, warn user, continue with spec generation |
| Codex CLI invocation fails or times out | Log the error, skip cross-model review, proceed to Next Step |
Pre-condition: All gates above have completed, or --lean was explicitly passed. If you have not run them, STOP and run them now. Reporting SKIPPED without --lean is a skill violation.
When complete, inform the user:
FEATURE_SPEC.md created at features/$1/FEATURE_SPEC.md
Deferred Requirements: {count} items captured to DEFERRED.md
Verification: PASSED | PASSED WITH NOTES | NEEDS REVIEW | LEAN_SKIP
Cross-Model Review: PASSED | PASSED WITH NOTES | UNAVAILABLE | LEAN_SKIP
Next: Run /feature-technical-spec $1
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer