Startup Upgrade Check
Run this at most once per active agent session before the first Spec Kitty command workflow.
If you already ran spec-kitty upgrade --agent-check --json in this session, reuse that result and skip this block.
Do not run or announce an upgrade check again for later Spec Kitty commands in the same session.
Otherwise, before continuing, run:
spec-kitty upgrade --agent-check --json
If JSON action is none, continue.
If action is auto_upgrade, run upgrade_command before continuing. If it fails, tell the user and continue with the current Spec Kitty version.
If action is guidance, show upgrade_note briefly, then continue.
If action is prompt, ask the user with the host-native question UI when available:
Spec Kitty {latest_version} is available. You are on {installed_version}. Upgrade now?
Use these choices:
- Upgrade now (recommended) - record
upgrade_now, run upgrade_command, then continue.
- Always keep me up to date - record
always, run upgrade_command, then continue.
- Not now - record
not_now, then continue.
- Never ask again - record
never_ask, then continue.
Record the selected choice before continuing:
spec-kitty upgrade --agent-choice <upgrade_now|always|not_now|never_ask> --agent-latest <latest_version> --json
If no host-native question UI is available, present the same four choices in plain text and wait for the user.
In non-interactive hosts, choose not_now and continue.
/spec-kitty.specify - Create Mission Specification
Version: 0.11.0+
📍 WORKING DIRECTORY: Stay in the repository root checkout
IMPORTANT: Specify works in the repository root checkout. NO worktrees are created.
# Run from the repository root checkout:
cd /path/to/project/root # Your repository root checkout
# All planning artifacts are created in the project root and committed:
# - kitty-specs/<mission_slug>/spec.md → Created in project root
# (use the mission_slug returned by `mission create`; the numeric NNN- prefix
# is display-only and is assigned at merge time)
# - Committed to target branch (from create JSON: target_branch/base_branch)
# - NO worktrees created
Worktrees are created later during /spec-kitty.implement, after task finalization computes execution lanes.
Mission Handle Rule
Before mission create, there is no mission handle yet.
- Do not pass
--mission to spec-kitty agent mission branch-context.
- Do not pass
--mission to spec-kitty agent mission create.
- After
create succeeds, use --mission <handle> for commands that operate on
the created mission.
<handle> can be the mission's mission_id (ULID), mid8 (first 8 chars of
the ULID), or mission_slug.
- The resolver disambiguates by
mission_id and returns a structured
MISSION_AMBIGUOUS_SELECTOR error on ambiguity — there is no silent fallback.
User Input
The content of the user's message that invoked this skill (everything after the skill invocation token, e.g. after /spec-kitty.<command> or $spec-kitty.<command>) is the User Input referenced elsewhere in these instructions.
You MUST consider this user input before proceeding (if not empty).
Primary Invariant: What Are We Building?
This workflow answers "What are we building?" before it creates artifacts. The
raw invocation text is only a starting point for discovery, not the final truth.
Before mission create, before writing spec.md, and before committing
anything, you MUST have one of these:
- A completed discovery interview with an acknowledged Intent Summary.
- A brief-intake summary and extracted requirement set explicitly confirmed by
the user.
- An explicit user instruction to minimize or skip discovery; even then, record
the minimal confirmed scenario and assumptions in the Intent Summary.
For non-trivial work, the confirmed Intent Summary must cover the primary actor,
trigger, desired outcome, one rule or invariant, and any canonical domain term
or boundary that materially affects the work.
Branch Strategy Confirmation (MANDATORY)
Before discovery, resolve branch intent through the Python helper, not by probing git directly:
spec-kitty agent mission branch-context --json
If the user already told you the intended landing branch, pass it explicitly:
spec-kitty agent mission branch-context --json --target-branch <intended-branch>
Parse the JSON and, in your next reply, explicitly tell the user:
- Current branch at workflow start:
current_branch
- Default planning/base branch if you create the mission right now:
planning_base_branch
- Final merge target for completed changes:
merge_target_branch
- Whether
branch_matches_target is true or false
- If that is not the intended landing branch, stop and ask which branch should receive this feature before you run
create
Never talk generically about main or "the default branch". Name the actual branch values from the helper JSON. Do not shell out to git to resolve branch state for this prompt — the helper is the source of truth.
Primary-branch recommendation (issue #765)
The helper JSON also returns a primary-branch recommendation payload:
primary_branch — the repository's primary branch (e.g. main)
current_is_primary — true when you are standing on that primary branch
recommended_strategy — feature-branch (start a dedicated branch) or stay
reason — a human-readable explanation you should relay to the user
When current_is_primary is true, you must have an explicit branching-strategy conversation before calling create:
Relay the reason to the user and ask whether they expect to open a pull request for this work later (the default assumption for mission work is yes).
If they expect a PR (recommended path): recommend starting on a dedicated feature branch now, and propose a name derived from the confirmed slug — e.g. feat/<slug> (use fix/<slug> for a bug-fix mission). Pass that branch to create with --start-branch so the CLI creates/switches to it before writing any mission artifacts:
spec-kitty agent mission create "<slug>" \
--friendly-name "<title>" \
--purpose-tldr "<purpose_tldr>" \
--purpose-context "<purpose_context>" \
--json \
--pr-bound \
--branch-strategy already-confirmed \
--start-branch feat/<slug>
Use the full create command in the Outline section below; the example here only shows the required branch flags. Do not run a separate raw git switch for this flow.
If they explicitly choose to stay on primary_branch: honor it, but treat it as a deliberate choice. Run create with both --pr-bound --branch-strategy already-confirmed so the gate records the confirmed decision instead of refusing in non-interactive mode.
When current_is_primary is false, you are already on a feature branch — no branch switch is needed; proceed normally.
Commit Boundary (issue #846)
spec-kitty agent mission create no longer auto-commits spec.md. The empty
template is written to disk untracked at create time; you are responsible
for committing it after writing substantive content.
"Substantive content" for spec.md means at least one Functional
Requirements row (FR-###) whose description is real (not a template
placeholder like [NEEDS CLARIFICATION …], [e.g., …], or a bare user-story
scaffold). Section presence is the only signal — adding 300 bytes of arbitrary
prose without an FR row does not count as substantive.
Workflow:
- Run
spec-kitty agent mission create …. Note that spec.md is left
untracked.
- Populate
spec.md with real Functional / Non-Functional / Constraint rows.
- Commit
spec.md yourself using the mission-aware entrypoint:spec-kitty spec-commit --mission <slug> --message "Add spec for <slug>" <feature_dir>/spec.md
On a protected main/master primary this materializes the coordination worktree and lands the commit on the coordination branch (no deadlock); on an unprotected or flattened primary the commit is direct.
- Only then will
spec-kitty agent mission setup-plan accept the spec phase
as complete; otherwise it returns phase_complete=false with a
blocked_reason mentioning "committed AND substantive".
Reference: kitty-specs/charter-e2e-827-followups-01KQAJA0/contracts/specify-plan-commit-boundary.md.
DO NOT
- Do not mix functional, non-functional, and constraint requirements in one list.
- Do not emit requirements without stable IDs (
FR-###, NFR-###, C-###).
- Do not leave requirement status fields empty.
- Do not write non-functional requirements without measurable thresholds.
- Do not proceed to planning with unresolved requirement quality checklist failures.
Charter Context Bootstrap (required)
Before discovery questions, load charter context for this action:
spec-kitty charter context --action specify --json
- If JSON
mode is bootstrap, treat JSON text as the initial governance context and consult referenced docs as needed.
- If JSON
mode is compact, proceed with concise governance context.
- If no charter exists yet, note that and continue. Missing charter is not a
blocker for
/spec-kitty.specify.
Brief Context Detection (check before discovery)
Before starting discovery, check for a pre-existing mission brief:
ls .kittify/mission-brief.md 2>/dev/null && echo "MISSION_BRIEF_FOUND"
ls .kittify/ticket-context.md 2>/dev/null && echo "TICKET_CONTEXT_FOUND"
Check in priority order:
.kittify/mission-brief.md — general plan intake (written by spec-kitty intake)
.kittify/ticket-context.md — tracker ticket (written by mission create --from-ticket)
If a brief file is found → Enter Brief-Intake Mode
BRIEF DETECTED: .kittify/<filename> (source: <source_file>)
Read the full brief. Do not skim.
Summarise for the user. Present a single paragraph: what the brief says the goal is, who it is for, and what the key constraints are. Example: "I found a plan document from Claude Code plan mode. Here's what I understand the goal to be: [summary]. I'll extract the spec from this brief rather than running a full discovery interview."
Extract requirements directly. Map the brief's content to FR-###, NFR-###, and C-### IDs. Do not ask questions the brief already answers. Specifically extract:
- Objective → Functional Requirements
- Constraints and non-goals → Non-Functional Requirements and Constraints
- Acceptance criteria → FR status and Definition of Done markers
- Risks and open questions → Assumptions or
[NEEDS CLARIFICATION: <text>] <!-- decision_id: <id> --> markers (max 3; use decision defer before writing each marker)
Ask gap-filling questions only. Scale to brief quality:
| Brief quality |
Discovery questions |
| Comprehensive (objective + constraints + approach + ACs) |
0–1 gap-filling questions |
| Good (objective + constraints, no ACs) |
2–3 questions |
| Partial (goal statement only) |
4–5 questions |
| Empty / missing |
Proceed to normal Discovery Gate below |
Show the extracted requirement set. Present the full FR/NFR/C table to the user: "I extracted X functional requirements and Y non-functional requirements. Does this look right?" Wait for one round of confirmation. This confirmation is the discovery gate for brief-intake mode; do not write or commit spec.md before it happens unless the user explicitly asks to minimize or skip discovery. The user may correct or supplement before you write the spec.
Write spec.md normally. Apply the same quality checklist and readiness gate as standard specify. Brief-intake mode does NOT lower the quality bar — spec.md must still pass all validation items.
After spec.md is committed, delete all brief files (each only if present):
rm -f .kittify/mission-brief.md
rm -f .kittify/brief-source.yaml
rm -f .kittify/ticket-context.md
rm -f .kittify/pending-origin.yaml
What brief-intake mode does NOT do:
- Does not copy brief prose verbatim into spec.md — it extracts and structures requirements
- Does not skip the quality checklist
- Does not skip the readiness gate
- Does not require the brief to be in any particular format — Markdown prose is fine
If no brief file is found → Proceed with normal Discovery Gate
No change to current behaviour. Continue to the Discovery Gate section below.
Decision Moment Protocol
Before asking any interview question during this command, you MUST:
Run spec-kitty agent decision open to mint a decision_id:
spec-kitty agent decision open \
--mission <mission-slug> \
--flow specify \
--slot-key specify.<section>.<question-slug> \
--input-key <snake_case_key> \
--question "<question text>" \
[--options '["option1","option2","Other"]']
Capture the returned decision_id from the JSON output.
Ask the question to the user in chat.
After the user answers, run exactly one of:
- Resolved answer:
spec-kitty agent decision resolve <decision_id> --mission <slug> --final-answer "<answer>" [--other-answer]
- Deferred / skip:
spec-kitty agent decision defer <decision_id> --mission <slug> --rationale "<reason>"
- Not applicable / cancel:
spec-kitty agent decision cancel <decision_id> --mission <slug> --rationale "<reason>"
When deferring, write the inline marker into spec.md immediately after the
relevant section:
[NEEDS CLARIFICATION: <brief description of what needs answering>] <!-- decision_id: <decision_id> -->
Before declaring the interview phase complete, run:
spec-kitty agent decision verify --mission <slug>
Address any findings (DEFERRED_WITHOUT_MARKER, MARKER_WITHOUT_DECISION,
STALE_MARKER) before proceeding.
Important constraints:
--slot-key format: specify.<section>.<question-slug> (e.g.,
specify.auth.strategy).
--input-key is the snake_case programmatic key (e.g., auth_strategy).
- The
decision_id on the wire is a plain ULID (26 chars). The DM- prefix
appears only in artifact filenames, not in CLI arguments.
- Widening is represented by the CLI/SaaS widen flow; if that flow returns
canonical thread metadata, it must be recorded as
DecisionPointWidened.
- SaaS sync is not required; all operations are local-only.
Discovery Gate (mandatory)
Before running mission create, writing spec.md, committing, or otherwise creating planning artifacts, you must conduct or verify a structured discovery interview.
Scope proportionality (CRITICAL): FIRST, gauge the inherent complexity of the request:
- Trivial/Test Features (hello world, simple pages, proof-of-concept): Ask 1-2 questions maximum, then proceed. Examples: "a simple hello world page", "tic-tac-toe game", "basic contact form"
- Simple Features (small UI additions, minor enhancements): Ask 2-3 questions covering purpose and basic constraints
- Complex Features (new subsystems, integrations): Ask 3-5 questions covering goals, users, constraints, risks
- Platform/Critical Features (authentication, payments, infrastructure): Full discovery with 5+ questions
Scenario-first discovery: For any non-trivial feature, prefer concrete
workflow questions over abstract opinion prompts. Ask for the primary actor,
trigger, happy-path outcome, and the most common exception or branch.
Terminology discipline: If the request introduces business or domain
terms that may drift, ask which term is canonical and which synonyms should
be avoided. When relevant, carry those choices into the optional Domain
Language section of the spec instead of leaving them implicit.
Rule probing: For workflows with approvals, validations, state changes,
or compliance implications, ask what must always be true and which
transitions or checks cannot be skipped.
User signals to reduce questioning: If the user says "just testing", "quick prototype", "skip to next phase", "stop asking questions" - recognize this as a signal to minimize discovery and proceed with reasonable defaults.
First response rule:
- For TRIVIAL features (hello world, simple test): Ask ONE clarifying question, then if the answer confirms it's simple, proceed directly to spec generation
- For other features: Ask a single focused discovery question anchored in the primary user scenario and end with
WAITING_FOR_DISCOVERY_INPUT
If the user provides no initial description (empty command), stay in Interactive Interview Mode: keep probing with one question at a time.
Conversational cadence: After each user reply, decide if you have ENOUGH context for this feature's complexity level. For trivial features, 1-2 questions is sufficient. Only continue asking if truly necessary for the scope.
Discovery requirements (scale to feature complexity):
- Maintain a Discovery Questions table internally covering questions appropriate to the feature's complexity (1-2 for trivial, up to 5+ for complex). Track columns
#, Question, Why it matters, and Current insight. Do not render this table to the user.
- For trivial features, reasonable defaults are acceptable. Only probe if truly ambiguous.
- When you have sufficient context for the feature's scope, paraphrase into an Intent Summary and confirm. For trivial features, this can be very brief. For non-trivial features, include the primary actor, trigger/success outcome, key constraint, and any explicit assumptions or deferred decisions.
- Before leaving the interview loop, do a short playback of the primary scenario, the main exception or edge case, and any rule that must always hold.
- If user explicitly asks to skip questions or says "just testing", acknowledge and proceed with minimal discovery.
Bulk-Edit Detection (mandatory check)
Before finalizing the Intent Summary, ask yourself one question:
Does fulfilling this request require changing the same existing string
(identifier, path, key, label, or term) in more than one file?
Typical shapes: "rename X to Y", "the Blue feature is now the Red feature",
"change the terminology from X to Y", "move package A to package B", "replace
ACME with GlobalCorp everywhere in docs and UI".
If yes or uncertain: load the spec-kitty-bulk-edit-classification skill
and follow it. You will set change_mode: bulk_edit in meta.json after
mission create and produce an occurrence_map.yaml during plan. The user
does not need to know these field names — the skill teaches you the workflow.
If clearly no (a new feature with new identifiers, a bug fix that doesn't
rename anything, a refactor inside one file): proceed normally.
When in doubt, treat as bulk edit. The false-positive cost is drafting one map
the user approves in a pass; the false-negative cost is the silent cross-file
breakage that DIRECTIVE_035 exists to prevent.
Mission Selection
After completing discovery and confirming the Intent Summary, determine the appropriate mission type for this mission run.
Available Missions
software-dev: For building software features, APIs, CLI tools, applications
- Phases: research → design → implement → test → review
- Best for: code changes, new features, bug fixes, refactoring
research: For investigations, literature reviews, technical analysis
- Phases: question → methodology → gather → analyze → synthesize → publish
- Best for: feasibility studies, market research, technology evaluation
Mission Inference
Analyze the feature description to identify the primary goal:
- Building, coding, implementing, creating software → software-dev
- Researching, investigating, analyzing, evaluating → research
Check for explicit mission requests in the user's description:
- If user mentions "research project", "investigation", "analysis" → use research
- If user mentions "build", "implement", "create feature" → use software-dev
Confirm with user (unless explicit):
"Based on your description, this sounds like a [software-dev/research] project.
I'll use the [mission name] mission. Does that work for you?"
Handle user response:
- If confirmed: proceed with selected mission
- If user wants different mission: use their choice
Handle --mission flag: If the user provides --mission <key> in their command, skip inference and use the specified mission directly.
Store the final mission selection in your notes and include it in the spec output. Do not pass a --mission-type flag to mission creation unless the user explicitly overrides the default.
Workflow (0.11.0+)
Planning happens in the repository root checkout - NO worktree created!
- Creates
kitty-specs/<mission_slug>/spec.md directly in project root (the optional NNN- prefix is display-only metadata assigned at merge time)
- Automatically commits to target branch
- No worktree created during specify
Worktrees created later: After /spec-kitty.tasks finishes, run: spec-kitty next --agent <agent> --mission <handle>. The --mission handle can be the mission's mission_id (ULID), mid8 (first 8 chars), or mission_slug; the resolver disambiguates by mission_id and returns a structured error on ambiguity (no silent fallback). Your agent will call spec-kitty agent action implement WP## --agent <name> for each WP. Each lane gets exactly one worktree, for example .worktrees/<human-slug>-<mid8>-lane-a/ (e.g. .worktrees/my-feature-01J6XW9K-lane-a/).
Location
- Work in: Repository root checkout (not a worktree)
- Creates:
kitty-specs/<mission_slug>/spec.md (the NNN- prefix is display-only and assigned at merge time)
- Commits to: target branch (from
create --json → target_branch)
Outline
0. Generate a Friendly Feature Title
- Summarize the agreed intent into a short, descriptive title (aim for ≤7 words; avoid filler like "feature" or "thing").
- Read that title back during the Intent Summary and revise it if the user requests changes.
- Use the confirmed title to derive the kebab-case feature slug for the create command.
The text the user typed after /spec-kitty.specify in the triggering message is the initial feature description. Capture it verbatim, but treat it only as a starting point for discovery—not the final truth. Your job is to interrogate the request, surface gaps, and co-create a complete specification with the user.
Given that feature description, do this:
- Generation Mode (arguments provided): Use the provided text as a starting point, validate it through discovery, and fill gaps with explicit questions or clearly documented assumptions (limit
[NEEDS CLARIFICATION: …] <!-- decision_id: <id> --> to at most three critical decisions the user has postponed; call decision defer before writing each such marker).
- Interactive Interview Mode (no arguments): Use the discovery interview to elicit all necessary context, synthesize the working feature description, and confirm it with the user before you generate any specification artifacts.
Check discovery status:
- If this is your first message or discovery questions remain unanswered, stay in the one-question loop, capture the user's response, update your internal table, and end with
WAITING_FOR_DISCOVERY_INPUT. Do not surface the table; keep it internal. Do not call the creation command yet.
- Only proceed once every discovery question has an explicit answer and the user has acknowledged the Intent Summary.
- Empty invocation rule: stay in interview mode until you can restate the agreed-upon feature description. Do not call the creation command while the description is missing or provisional.
When discovery is complete and the intent summary, title, purpose TLDR, purpose context paragraph, and mission type are confirmed, run the mission creation command from repo root:
spec-kitty agent mission create "<slug>" \
--friendly-name "<title>" \
--purpose-tldr "<purpose_tldr>" \
--purpose-context "<purpose_context>" \
--json
Where <slug> is a kebab-case version of the friendly title (e.g., "Checkout Upsell Flow" → "checkout-upsell-flow").
If the user expects a pull request for this work, add --pr-bound --branch-strategy already-confirmed. When current_is_primary is true and they accept the recommended feature-branch path, also add --start-branch <branch> so no mission artifacts are written on the primary branch.
The command returns JSON with:
result: "success" or error message
mission_id: Canonical ULID machine identity (e.g., 01J6XW9KQT7M0YB3N4R5CQZ2EX). Immutable.
mission_slug: Human-readable mission slug (e.g., checkout-upsell-flow)
mission_number: Display-only numeric prefix, null pre-merge. Assigned at merge time. Never use this as a selector or identity.
mission_type: Mission type key (for example software-dev)
slug: Unnumbered mission slug (e.g., checkout-upsell-flow)
friendly_name: Confirmed mission title
purpose_tldr: One-line stakeholder-facing mission summary
purpose_context: Short stakeholder-facing context paragraph
feature_dir: Absolute path to the feature directory inside the repository root checkout
current_branch: the branch you started from
target_branch / base_branch: deterministic branch contract for downstream commands
planning_base_branch / merge_target_branch: explicit landing-branch aliases
branch_strategy_summary: human-readable summary of the branch contract
Parse these values for use in subsequent steps. All file paths are absolute.
IMPORTANT: You must only ever run this command once. The JSON is provided in the terminal output - always refer to it to get the actual paths you're looking for.
Immediately restate the branch contract to the user after parsing the JSON:
- Current branch at start
- Intended planning/base branch
- Final merge target for later changes
- Whether that matches the user's intended landing branch
Stay in the repository root checkout: No worktree is created during specify.
Read the files created by create:
<feature_dir>/spec.md (already created, may be empty/template-filled)
<feature_dir>/meta.json (already created with feature identity metadata)
Do NOT try to read a template file. The spec structure is defined in this prompt (see sections below). The create command scaffolds an initial spec.md — read it, then update it following the structure in this prompt.
Update <feature_dir>/meta.json only when needed:
- Never modify identity fields from
create (mission_id, slug, mission_slug, created_at, target_branch). mission_id is the canonical ULID and is immutable. mission_number is display-only and is null pre-merge — do not set it by hand.
- Keep
target_branch aligned to the value from create --json output. Never hardcode main.
- Ensure
friendly_name matches the confirmed title.
- Ensure
purpose_tldr matches the confirmed one-line stakeholder summary.
- Ensure
purpose_context matches the confirmed stakeholder context paragraph.
- Ensure
mission_type is correct.
- Optionally add/update
source_description.
- Ensure
vcs exists ("git" default).
Example meta.json schema (identity fields that must be present explicitly):
{
"mission_id": "01J6XW9KQT7M0YB3N4R5CQZ2EX",
"mission_number": null,
"slug": "my-feature",
"mission_slug": "my-feature",
"friendly_name": "My Mission",
"purpose_tldr": "Keep the mission understandable to product and executive stakeholders.",
"purpose_context": "This mission exists to make the purpose of the work immediately legible to stakeholders who should not need to parse technical specification text to understand the value or expected outcome.",
"mission_type": "software-dev",
"target_branch": "<target-branch>",
"vcs": "git",
"created_at": "2026-01-01T00:00:00+00:00"
}
mission_number becomes a concrete integer only at merge time, assigned as
max(existing_numbers)+1 inside the merge-state lock. Selectors disambiguate
by mission_id (or its 8-char prefix mid8), never by mission_number.
Do not regenerate timestamps or directory paths via shell commands.
Generate the specification content by following this flow:
- Use the discovery answers as your authoritative source of truth (do not rely on the raw invocation text)
- For empty invocations, treat the synthesized interview summary as the canonical feature description
- Identify: actors, actions, data, constraints, motivations, success metrics
- Prefer concrete scenario walkthrough facts (actor, trigger, success outcome, exception path) over abstract restatements
- For any remaining ambiguity:
- Ask the user a focused follow-up question immediately and halt work until they answer
- Only use
[NEEDS CLARIFICATION: …] when the user explicitly defers the decision
- Record any interim assumption in the Assumptions section
- Prioritize clarifications by impact: scope > outcomes > risks/security > user experience > technical details
- Fill User Scenarios & Testing section (ERROR if no clear user flow can be determined)
- If terminology precision matters, fill the optional Domain Language section with canonical terms and ambiguous synonyms to avoid
- Generate separated requirement tables: Functional (
FR-###), Non-Functional (NFR-###), and Constraints (C-###)
- Ensure each requirement entry has a status value and testable wording
- Capture rules or invariants that shape acceptance scenarios, edge cases, permissions, or lifecycle boundaries
- Define Success Criteria (measurable, technology-agnostic outcomes)
- Identify Key Entities (if data involved)
Update the existing <feature_dir>/spec.md using the template structure, replacing placeholders with concrete details derived from the feature description 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 feature_dir/checklists/requirements.md using the checklist template structure with these validation items:
# 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
- [ ] Requirement types are separated (Functional / Non-Functional / Constraints)
- [ ] IDs are unique across FR-###, NFR-###, and C-### entries
- [ ] All requirement rows include a non-empty Status value
- [ ] Non-functional requirements include measurable thresholds
- [ ] 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 `/spec-kitty.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 6
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
Re-confirm with the user whether each outstanding decision truly needs to stay unresolved. Do not assume away critical gaps.
For each clarification the user has explicitly deferred, present options using plain text—no tables:
Question [N]: [Topic]
Context: [Quote relevant spec section]
Need: [Specific question from NEEDS CLARIFICATION marker]
Options: (A) [First answer — implications] · (B) [Second answer — implications] · (C) [Third answer — implications] · (D) Custom (describe your own answer)
Reply with a letter or a custom answer.
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 with feature directory, spec file path, checklist results, and readiness for the next phase (/spec-kitty.plan).
NOTE: The script creates and checks out the new branch and initializes the spec file before writing.
General Guidelines
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: RESTful APIs unless specified otherwise
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)
1---2name: spec-kitty-specify3description: Create a mission specification4---5## Startup Upgrade Check67Run this at most once per active agent session before the first Spec Kitty command workflow.8If you already ran `spec-kitty upgrade --agent-check --json` in this session, reuse that result and skip this block.9Do not run or announce an upgrade check again for later Spec Kitty commands in the same session.10Otherwise, before continuing, run:1112```bash13spec-kitty upgrade --agent-check --json14```1516If JSON `action` is `none`, continue.17If `action` is `auto_upgrade`, run `upgrade_command` before continuing. If it fails, tell the user and continue with the current Spec Kitty version.18If `action` is `guidance`, show `upgrade_note` briefly, then continue.19If `action` is `prompt`, ask the user with the host-native question UI when available:2021`Spec Kitty {latest_version} is available. You are on {installed_version}. Upgrade now?`2223Use these choices:24251. Upgrade now (recommended) - record `upgrade_now`, run `upgrade_command`, then continue.262. Always keep me up to date - record `always`, run `upgrade_command`, then continue.273. Not now - record `not_now`, then continue.284. Never ask again - record `never_ask`, then continue.2930Record the selected choice before continuing:3132```bash33spec-kitty upgrade --agent-choice <upgrade_now|always|not_now|never_ask> --agent-latest <latest_version> --json34```3536If no host-native question UI is available, present the same four choices in plain text and wait for the user.37In non-interactive hosts, choose `not_now` and continue.383940# /spec-kitty.specify - Create Mission Specification4142**Version**: 0.11.0+4344## 📍 WORKING DIRECTORY: Stay in the repository root checkout4546**IMPORTANT**: Specify works in the repository root checkout. NO worktrees are created.4748```bash49# Run from the repository root checkout:50cd /path/to/project/root # Your repository root checkout5152# All planning artifacts are created in the project root and committed:53# - kitty-specs/<mission_slug>/spec.md → Created in project root54# (use the mission_slug returned by `mission create`; the numeric NNN- prefix55# is display-only and is assigned at merge time)56# - Committed to target branch (from create JSON: target_branch/base_branch)57# - NO worktrees created58```5960**Worktrees are created later** during `/spec-kitty.implement`, after task finalization computes execution lanes.6162## Mission Handle Rule6364Before `mission create`, there is no mission handle yet.6566- Do **not** pass `--mission` to `spec-kitty agent mission branch-context`.67- Do **not** pass `--mission` to `spec-kitty agent mission create`.68- After `create` succeeds, use `--mission <handle>` for commands that operate on69 the created mission.70- `<handle>` can be the mission's `mission_id` (ULID), `mid8` (first 8 chars of71 the ULID), or `mission_slug`.72- The resolver disambiguates by `mission_id` and returns a structured73 `MISSION_AMBIGUOUS_SELECTOR` error on ambiguity — there is no silent fallback.7475## User Input7677The content of the user's message that invoked this skill (everything after the skill invocation token, e.g. after `/spec-kitty.<command>` or `$spec-kitty.<command>`) is the User Input referenced elsewhere in these instructions.7879You **MUST** consider this user input before proceeding (if not empty).8081## Primary Invariant: What Are We Building?8283This workflow answers "What are we building?" before it creates artifacts. The84raw invocation text is only a starting point for discovery, not the final truth.8586Before `mission create`, before writing `spec.md`, and before committing87anything, you **MUST** have one of these:8889- A completed discovery interview with an acknowledged Intent Summary.90- A brief-intake summary and extracted requirement set explicitly confirmed by91 the user.92- An explicit user instruction to minimize or skip discovery; even then, record93 the minimal confirmed scenario and assumptions in the Intent Summary.9495For non-trivial work, the confirmed Intent Summary must cover the primary actor,96trigger, desired outcome, one rule or invariant, and any canonical domain term97or boundary that materially affects the work.9899## Branch Strategy Confirmation (MANDATORY)100101Before discovery, resolve branch intent through the Python helper, not by probing git directly:102103```bash104spec-kitty agent mission branch-context --json105```106107If the user already told you the intended landing branch, pass it explicitly:108109```bash110spec-kitty agent mission branch-context --json --target-branch <intended-branch>111```112113Parse the JSON and, in your next reply, explicitly tell the user:114115- Current branch at workflow start: `current_branch`116- Default planning/base branch if you create the mission right now: `planning_base_branch`117- Final merge target for completed changes: `merge_target_branch`118- Whether `branch_matches_target` is true or false119- If that is not the intended landing branch, stop and ask which branch should receive this feature before you run `create`120121Never talk generically about `main` or "the default branch". Name the actual branch values from the helper JSON. Do not shell out to git to *resolve* branch state for this prompt — the helper is the source of truth.122123### Primary-branch recommendation (issue #765)124125The helper JSON also returns a primary-branch recommendation payload:126127- `primary_branch` — the repository's primary branch (e.g. `main`)128- `current_is_primary` — `true` when you are standing on that primary branch129- `recommended_strategy` — `feature-branch` (start a dedicated branch) or `stay`130- `reason` — a human-readable explanation you should relay to the user131132When `current_is_primary` is `true`, you **must** have an explicit branching-strategy conversation **before** calling `create`:1331341. Relay the `reason` to the user and ask whether they expect to open a pull request for this work later (the default assumption for mission work is yes).1352. **If they expect a PR (recommended path):** recommend starting on a dedicated feature branch now, and propose a name derived from the confirmed slug — e.g. `feat/<slug>` (use `fix/<slug>` for a bug-fix mission). Pass that branch to `create` with `--start-branch` so the CLI creates/switches to it before writing any mission artifacts:136137 ```bash138 spec-kitty agent mission create "<slug>" \139 --friendly-name "<title>" \140 --purpose-tldr "<purpose_tldr>" \141 --purpose-context "<purpose_context>" \142 --json \143 --pr-bound \144 --branch-strategy already-confirmed \145 --start-branch feat/<slug>146 ```147148 Use the full `create` command in the Outline section below; the example here only shows the required branch flags. Do not run a separate raw `git switch` for this flow.1493. **If they explicitly choose to stay on `primary_branch`:** honor it, but treat it as a deliberate choice. Run `create` with both `--pr-bound --branch-strategy already-confirmed` so the gate records the confirmed decision instead of refusing in non-interactive mode.150151When `current_is_primary` is `false`, you are already on a feature branch — no branch switch is needed; proceed normally.152153## Commit Boundary (issue #846)154155`spec-kitty agent mission create` no longer auto-commits `spec.md`. The empty156template is written to disk untracked at create time; **you** are responsible157for committing it after writing substantive content.158159"Substantive content" for `spec.md` means **at least one Functional160Requirements row** (`FR-###`) whose description is real (not a template161placeholder like `[NEEDS CLARIFICATION …]`, `[e.g., …]`, or a bare user-story162scaffold). Section presence is the only signal — adding 300 bytes of arbitrary163prose without an FR row does **not** count as substantive.164165Workflow:1661671. Run `spec-kitty agent mission create …`. Note that `spec.md` is left168 untracked.1692. Populate `spec.md` with real Functional / Non-Functional / Constraint rows.1703. Commit `spec.md` yourself using the mission-aware entrypoint:171 ```bash172 spec-kitty spec-commit --mission <slug> --message "Add spec for <slug>" <feature_dir>/spec.md173 ```174 On a protected `main`/`master` primary this materializes the coordination worktree and lands the commit on the coordination branch (no deadlock); on an unprotected or flattened primary the commit is direct.1754. Only then will `spec-kitty agent mission setup-plan` accept the spec phase176 as complete; otherwise it returns `phase_complete=false` with a177 `blocked_reason` mentioning "committed AND substantive".178179Reference: `kitty-specs/charter-e2e-827-followups-01KQAJA0/contracts/specify-plan-commit-boundary.md`.180181## DO NOT182183- Do not mix functional, non-functional, and constraint requirements in one list.184- Do not emit requirements without stable IDs (`FR-###`, `NFR-###`, `C-###`).185- Do not leave requirement status fields empty.186- Do not write non-functional requirements without measurable thresholds.187- Do not proceed to planning with unresolved requirement quality checklist failures.188189## Charter Context Bootstrap (required)190191Before discovery questions, load charter context for this action:192193```bash194spec-kitty charter context --action specify --json195```196197- If JSON `mode` is `bootstrap`, treat JSON `text` as the initial governance context and consult referenced docs as needed.198- If JSON `mode` is `compact`, proceed with concise governance context.199- If no charter exists yet, note that and continue. Missing charter is not a200 blocker for `/spec-kitty.specify`.201202## Brief Context Detection (check before discovery)203204Before starting discovery, check for a pre-existing mission brief:205206```bash207ls .kittify/mission-brief.md 2>/dev/null && echo "MISSION_BRIEF_FOUND"208ls .kittify/ticket-context.md 2>/dev/null && echo "TICKET_CONTEXT_FOUND"209```210211Check in priority order:2121. `.kittify/mission-brief.md` — general plan intake (written by `spec-kitty intake`)2132. `.kittify/ticket-context.md` — tracker ticket (written by `mission create --from-ticket`)214215### If a brief file is found → Enter Brief-Intake Mode216217**BRIEF DETECTED: `.kittify/<filename>` (source: `<source_file>`)**2182191. **Read the full brief.** Do not skim.2202212. **Summarise for the user.** Present a single paragraph: what the brief says the goal is, who it is for, and what the key constraints are. Example: "I found a plan document from Claude Code plan mode. Here's what I understand the goal to be: [summary]. I'll extract the spec from this brief rather than running a full discovery interview."2222233. **Extract requirements directly.** Map the brief's content to `FR-###`, `NFR-###`, and `C-###` IDs. Do not ask questions the brief already answers. Specifically extract:224 - Objective → Functional Requirements225 - Constraints and non-goals → Non-Functional Requirements and Constraints226 - Acceptance criteria → FR status and Definition of Done markers227 - Risks and open questions → Assumptions or `[NEEDS CLARIFICATION: <text>] <!-- decision_id: <id> -->` markers (max 3; use `decision defer` before writing each marker)2282294. **Ask gap-filling questions only.** Scale to brief quality:230231 | Brief quality | Discovery questions |232 |---------------|---------------------|233 | Comprehensive (objective + constraints + approach + ACs) | 0–1 gap-filling questions |234 | Good (objective + constraints, no ACs) | 2–3 questions |235 | Partial (goal statement only) | 4–5 questions |236 | Empty / missing | Proceed to normal Discovery Gate below |2372385. **Show the extracted requirement set.** Present the full FR/NFR/C table to the user: "I extracted X functional requirements and Y non-functional requirements. Does this look right?" Wait for one round of confirmation. This confirmation is the discovery gate for brief-intake mode; do not write or commit `spec.md` before it happens unless the user explicitly asks to minimize or skip discovery. The user may correct or supplement before you write the spec.2392406. **Write spec.md normally.** Apply the same quality checklist and readiness gate as standard specify. Brief-intake mode does NOT lower the quality bar — spec.md must still pass all validation items.2412427. **After spec.md is committed, delete all brief files** (each only if present):243 ```bash244 rm -f .kittify/mission-brief.md245 rm -f .kittify/brief-source.yaml246 rm -f .kittify/ticket-context.md247 rm -f .kittify/pending-origin.yaml248 ```249250**What brief-intake mode does NOT do:**251- Does not copy brief prose verbatim into spec.md — it extracts and structures requirements252- Does not skip the quality checklist253- Does not skip the readiness gate254- Does not require the brief to be in any particular format — Markdown prose is fine255256### If no brief file is found → Proceed with normal Discovery Gate257258No change to current behaviour. Continue to the Discovery Gate section below.259260## Decision Moment Protocol261262Before asking **any** interview question during this command, you MUST:2632641. Run `spec-kitty agent decision open` to mint a decision_id:265 ```266 spec-kitty agent decision open \267 --mission <mission-slug> \268 --flow specify \269 --slot-key specify.<section>.<question-slug> \270 --input-key <snake_case_key> \271 --question "<question text>" \272 [--options '["option1","option2","Other"]']273 ```274 Capture the returned `decision_id` from the JSON output.2752762. Ask the question to the user in chat.2772783. After the user answers, run **exactly one** of:279 - Resolved answer:280 `spec-kitty agent decision resolve <decision_id> --mission <slug> --final-answer "<answer>" [--other-answer]`281 - Deferred / skip:282 `spec-kitty agent decision defer <decision_id> --mission <slug> --rationale "<reason>"`283 - Not applicable / cancel:284 `spec-kitty agent decision cancel <decision_id> --mission <slug> --rationale "<reason>"`2852864. When deferring, write the inline marker into `spec.md` immediately after the287 relevant section:288 ```289 [NEEDS CLARIFICATION: <brief description of what needs answering>] <!-- decision_id: <decision_id> -->290 ```2912925. Before declaring the interview phase complete, run:293 `spec-kitty agent decision verify --mission <slug>`294 Address any findings (`DEFERRED_WITHOUT_MARKER`, `MARKER_WITHOUT_DECISION`,295 `STALE_MARKER`) before proceeding.296297**Important constraints:**298- `--slot-key` format: `specify.<section>.<question-slug>` (e.g.,299 `specify.auth.strategy`).300- `--input-key` is the snake_case programmatic key (e.g., `auth_strategy`).301- The `decision_id` on the wire is a plain ULID (26 chars). The `DM-` prefix302 appears only in artifact filenames, not in CLI arguments.303- Widening is represented by the CLI/SaaS widen flow; if that flow returns304 canonical thread metadata, it must be recorded as `DecisionPointWidened`.305- SaaS sync is not required; all operations are local-only.306307## Discovery Gate (mandatory)308309Before running `mission create`, writing `spec.md`, committing, or otherwise creating planning artifacts, you **must** conduct or verify a structured discovery interview.310311- **Scope proportionality (CRITICAL)**: FIRST, gauge the inherent complexity of the request:312 - **Trivial/Test Features** (hello world, simple pages, proof-of-concept): Ask 1-2 questions maximum, then proceed. Examples: "a simple hello world page", "tic-tac-toe game", "basic contact form"313 - **Simple Features** (small UI additions, minor enhancements): Ask 2-3 questions covering purpose and basic constraints314 - **Complex Features** (new subsystems, integrations): Ask 3-5 questions covering goals, users, constraints, risks315 - **Platform/Critical Features** (authentication, payments, infrastructure): Full discovery with 5+ questions316317- **Scenario-first discovery**: For any non-trivial feature, prefer concrete318 workflow questions over abstract opinion prompts. Ask for the primary actor,319 trigger, happy-path outcome, and the most common exception or branch.320321- **Terminology discipline**: If the request introduces business or domain322 terms that may drift, ask which term is canonical and which synonyms should323 be avoided. When relevant, carry those choices into the optional Domain324 Language section of the spec instead of leaving them implicit.325326- **Rule probing**: For workflows with approvals, validations, state changes,327 or compliance implications, ask what must always be true and which328 transitions or checks cannot be skipped.329330- **User signals to reduce questioning**: If the user says "just testing", "quick prototype", "skip to next phase", "stop asking questions" - recognize this as a signal to minimize discovery and proceed with reasonable defaults.331332- **First response rule**:333 - For TRIVIAL features (hello world, simple test): Ask ONE clarifying question, then if the answer confirms it's simple, proceed directly to spec generation334 - For other features: Ask a single focused discovery question anchored in the primary user scenario and end with `WAITING_FOR_DISCOVERY_INPUT`335336- If the user provides no initial description (empty command), stay in **Interactive Interview Mode**: keep probing with one question at a time.337338- **Conversational cadence**: After each user reply, decide if you have ENOUGH context for this feature's complexity level. For trivial features, 1-2 questions is sufficient. Only continue asking if truly necessary for the scope.339340Discovery requirements (scale to feature complexity):3413421. Maintain a **Discovery Questions** table internally covering questions appropriate to the feature's complexity (1-2 for trivial, up to 5+ for complex). Track columns `#`, `Question`, `Why it matters`, and `Current insight`. Do **not** render this table to the user.3432. For trivial features, reasonable defaults are acceptable. Only probe if truly ambiguous.3443. When you have sufficient context for the feature's scope, paraphrase into an **Intent Summary** and confirm. For trivial features, this can be very brief. For non-trivial features, include the primary actor, trigger/success outcome, key constraint, and any explicit assumptions or deferred decisions.3454. Before leaving the interview loop, do a short playback of the primary scenario, the main exception or edge case, and any rule that must always hold.3465. If user explicitly asks to skip questions or says "just testing", acknowledge and proceed with minimal discovery.347348## Bulk-Edit Detection (mandatory check)349350Before finalizing the Intent Summary, ask yourself one question:351352> Does fulfilling this request require changing the **same existing string**353> (identifier, path, key, label, or term) in more than one file?354355Typical shapes: "rename X to Y", "the Blue feature is now the Red feature",356"change the terminology from X to Y", "move package A to package B", "replace357ACME with GlobalCorp everywhere in docs and UI".358359**If yes or uncertain**: load the `spec-kitty-bulk-edit-classification` skill360and follow it. You will set `change_mode: bulk_edit` in `meta.json` after361`mission create` and produce an `occurrence_map.yaml` during plan. The user362does not need to know these field names — the skill teaches you the workflow.363364**If clearly no** (a new feature with new identifiers, a bug fix that doesn't365rename anything, a refactor inside one file): proceed normally.366367When in doubt, treat as bulk edit. The false-positive cost is drafting one map368the user approves in a pass; the false-negative cost is the silent cross-file369breakage that DIRECTIVE_035 exists to prevent.370371## Mission Selection372373After completing discovery and confirming the Intent Summary, determine the appropriate mission type for this mission run.374375### Available Missions376377- **software-dev**: For building software features, APIs, CLI tools, applications378 - Phases: research → design → implement → test → review379 - Best for: code changes, new features, bug fixes, refactoring380381- **research**: For investigations, literature reviews, technical analysis382 - Phases: question → methodology → gather → analyze → synthesize → publish383 - Best for: feasibility studies, market research, technology evaluation384385### Mission Inference3863871. **Analyze the feature description** to identify the primary goal:388 - Building, coding, implementing, creating software → **software-dev**389 - Researching, investigating, analyzing, evaluating → **research**3903912. **Check for explicit mission requests** in the user's description:392 - If user mentions "research project", "investigation", "analysis" → use research393 - If user mentions "build", "implement", "create feature" → use software-dev3943953. **Confirm with user** (unless explicit):396 > "Based on your description, this sounds like a **[software-dev/research]** project.397 > I'll use the **[mission name]** mission. Does that work for you?"3983994. **Handle user response**:400 - If confirmed: proceed with selected mission401 - If user wants different mission: use their choice4024035. **Handle --mission flag**: If the user provides `--mission <key>` in their command, skip inference and use the specified mission directly.404405Store the final mission selection in your notes and include it in the spec output. Do not pass a `--mission-type` flag to mission creation unless the user explicitly overrides the default.406407## Workflow (0.11.0+)408409**Planning happens in the repository root checkout - NO worktree created!**4104111. Creates `kitty-specs/<mission_slug>/spec.md` directly in project root (the optional `NNN-` prefix is display-only metadata assigned at merge time)4122. Automatically commits to target branch4133. No worktree created during specify414415**Worktrees created later**: After `/spec-kitty.tasks` finishes, run: `spec-kitty next --agent <agent> --mission <handle>`. The `--mission` handle can be the mission's `mission_id` (ULID), `mid8` (first 8 chars), or `mission_slug`; the resolver disambiguates by `mission_id` and returns a structured error on ambiguity (no silent fallback). Your agent will call `spec-kitty agent action implement WP## --agent <name>` for each WP. Each lane gets exactly one worktree, for example `.worktrees/<human-slug>-<mid8>-lane-a/` (e.g. `.worktrees/my-feature-01J6XW9K-lane-a/`).416417## Location418419- Work in: **Repository root checkout** (not a worktree)420- Creates: `kitty-specs/<mission_slug>/spec.md` (the `NNN-` prefix is display-only and assigned at merge time)421- Commits to: target branch (from `create --json` → `target_branch`)422423## Outline424425### 0. Generate a Friendly Feature Title426427- Summarize the agreed intent into a short, descriptive title (aim for ≤7 words; avoid filler like "feature" or "thing").428- Read that title back during the Intent Summary and revise it if the user requests changes.429- Use the confirmed title to derive the kebab-case feature slug for the create command.430431The text the user typed after `/spec-kitty.specify` in the triggering message **is** the initial feature description. Capture it verbatim, but treat it only as a starting point for discovery—not the final truth. Your job is to interrogate the request, surface gaps, and co-create a complete specification with the user.432433Given that feature description, do this:434435- **Generation Mode (arguments provided)**: Use the provided text as a starting point, validate it through discovery, and fill gaps with explicit questions or clearly documented assumptions (limit `[NEEDS CLARIFICATION: …] <!-- decision_id: <id> -->` to at most three critical decisions the user has postponed; call `decision defer` before writing each such marker).436- **Interactive Interview Mode (no arguments)**: Use the discovery interview to elicit all necessary context, synthesize the working feature description, and confirm it with the user before you generate any specification artifacts.4374381. **Check discovery status**:439 - If this is your first message or discovery questions remain unanswered, stay in the one-question loop, capture the user's response, update your internal table, and end with `WAITING_FOR_DISCOVERY_INPUT`. Do **not** surface the table; keep it internal. Do **not** call the creation command yet.440 - Only proceed once every discovery question has an explicit answer and the user has acknowledged the Intent Summary.441 - Empty invocation rule: stay in interview mode until you can restate the agreed-upon feature description. Do **not** call the creation command while the description is missing or provisional.4424432. When discovery is complete and the intent summary, **title**, **purpose TLDR**, **purpose context paragraph**, and **mission type** are confirmed, run the mission creation command from repo root:444445 ```bash446 spec-kitty agent mission create "<slug>" \447 --friendly-name "<title>" \448 --purpose-tldr "<purpose_tldr>" \449 --purpose-context "<purpose_context>" \450 --json451 ```452453 Where `<slug>` is a kebab-case version of the friendly title (e.g., "Checkout Upsell Flow" → "checkout-upsell-flow").454455 If the user expects a pull request for this work, add `--pr-bound --branch-strategy already-confirmed`. When `current_is_primary` is true and they accept the recommended feature-branch path, also add `--start-branch <branch>` so no mission artifacts are written on the primary branch.456457 The command returns JSON with:458 - `result`: "success" or error message459 - `mission_id`: Canonical ULID machine identity (e.g., `01J6XW9KQT7M0YB3N4R5CQZ2EX`). Immutable.460 - `mission_slug`: Human-readable mission slug (e.g., `checkout-upsell-flow`)461 - `mission_number`: **Display-only** numeric prefix, `null` pre-merge. Assigned at merge time. **Never** use this as a selector or identity.462 - `mission_type`: Mission type key (for example `software-dev`)463 - `slug`: Unnumbered mission slug (e.g., `checkout-upsell-flow`)464 - `friendly_name`: Confirmed mission title465 - `purpose_tldr`: One-line stakeholder-facing mission summary466 - `purpose_context`: Short stakeholder-facing context paragraph467 - `feature_dir`: Absolute path to the feature directory inside the repository root checkout468 - `current_branch`: the branch you started from469 - `target_branch` / `base_branch`: deterministic branch contract for downstream commands470 - `planning_base_branch` / `merge_target_branch`: explicit landing-branch aliases471 - `branch_strategy_summary`: human-readable summary of the branch contract472473 Parse these values for use in subsequent steps. All file paths are absolute.474475 **IMPORTANT**: You must only ever run this command once. The JSON is provided in the terminal output - always refer to it to get the actual paths you're looking for.476 Immediately restate the branch contract to the user after parsing the JSON:477 - Current branch at start478 - Intended planning/base branch479 - Final merge target for later changes480 - Whether that matches the user's intended landing branch4813. **Stay in the repository root checkout**: No worktree is created during specify.4824834. Read the files created by `create`:484 - `<feature_dir>/spec.md` (already created, may be empty/template-filled)485 - `<feature_dir>/meta.json` (already created with feature identity metadata)486487 **Do NOT try to read a template file.** The spec structure is defined in this prompt (see sections below). The `create` command scaffolds an initial `spec.md` — read it, then update it following the structure in this prompt.4884895. Update `<feature_dir>/meta.json` only when needed:490 - **Never** modify identity fields from `create` (`mission_id`, `slug`, `mission_slug`, `created_at`, `target_branch`). `mission_id` is the canonical ULID and is immutable. `mission_number` is display-only and is `null` pre-merge — do not set it by hand.491 - Keep `target_branch` aligned to the value from `create --json` output. Never hardcode `main`.492 - Ensure `friendly_name` matches the confirmed title.493 - Ensure `purpose_tldr` matches the confirmed one-line stakeholder summary.494 - Ensure `purpose_context` matches the confirmed stakeholder context paragraph.495 - Ensure `mission_type` is correct.496 - Optionally add/update `source_description`.497 - Ensure `vcs` exists (`"git"` default).498499 Example `meta.json` schema (identity fields that must be present explicitly):500 ```json501 {502 "mission_id": "01J6XW9KQT7M0YB3N4R5CQZ2EX",503 "mission_number": null,504 "slug": "my-feature",505 "mission_slug": "my-feature",506 "friendly_name": "My Mission",507 "purpose_tldr": "Keep the mission understandable to product and executive stakeholders.",508 "purpose_context": "This mission exists to make the purpose of the work immediately legible to stakeholders who should not need to parse technical specification text to understand the value or expected outcome.",509 "mission_type": "software-dev",510 "target_branch": "<target-branch>",511 "vcs": "git",512 "created_at": "2026-01-01T00:00:00+00:00"513 }514 ```515516 `mission_number` becomes a concrete integer only at merge time, assigned as517 `max(existing_numbers)+1` inside the merge-state lock. Selectors disambiguate518 by `mission_id` (or its 8-char prefix `mid8`), never by `mission_number`.519520 **Do not regenerate timestamps or directory paths via shell commands.**5215226. Generate the specification content by following this flow:523 - Use the discovery answers as your authoritative source of truth (do **not** rely on the raw invocation text)524 - For empty invocations, treat the synthesized interview summary as the canonical feature description525 - Identify: actors, actions, data, constraints, motivations, success metrics526 - Prefer concrete scenario walkthrough facts (actor, trigger, success outcome, exception path) over abstract restatements527 - For any remaining ambiguity:528 - Ask the user a focused follow-up question immediately and halt work until they answer529 - Only use `[NEEDS CLARIFICATION: …]` when the user explicitly defers the decision530 - Record any interim assumption in the Assumptions section531 - Prioritize clarifications by impact: scope > outcomes > risks/security > user experience > technical details532 - Fill User Scenarios & Testing section (ERROR if no clear user flow can be determined)533 - If terminology precision matters, fill the optional Domain Language section with canonical terms and ambiguous synonyms to avoid534 - Generate separated requirement tables: Functional (`FR-###`), Non-Functional (`NFR-###`), and Constraints (`C-###`)535 - Ensure each requirement entry has a status value and testable wording536 - Capture rules or invariants that shape acceptance scenarios, edge cases, permissions, or lifecycle boundaries537 - Define Success Criteria (measurable, technology-agnostic outcomes)538 - Identify Key Entities (if data involved)5395407. Update the existing `<feature_dir>/spec.md` using the template structure, replacing placeholders with concrete details derived from the feature description while preserving section order and headings.5415428. **Specification Quality Validation**: After writing the initial spec, validate it against quality criteria:543544 a. **Create Spec Quality Checklist**: Generate a checklist file at `feature_dir/checklists/requirements.md` using the checklist template structure with these validation items:545546 ```markdown547 # Specification Quality Checklist: [FEATURE NAME]548549 **Purpose**: Validate specification completeness and quality before proceeding to planning550 **Created**: [DATE]551 **Feature**: [Link to spec.md]552553 ## Content Quality554555 - [ ] No implementation details (languages, frameworks, APIs)556 - [ ] Focused on user value and business needs557 - [ ] Written for non-technical stakeholders558 - [ ] All mandatory sections completed559560 ## Requirement Completeness561562 - [ ] No [NEEDS CLARIFICATION] markers remain563 - [ ] Requirements are testable and unambiguous564 - [ ] Requirement types are separated (Functional / Non-Functional / Constraints)565 - [ ] IDs are unique across FR-###, NFR-###, and C-### entries566 - [ ] All requirement rows include a non-empty Status value567 - [ ] Non-functional requirements include measurable thresholds568 - [ ] Success criteria are measurable569 - [ ] Success criteria are technology-agnostic (no implementation details)570 - [ ] All acceptance scenarios are defined571 - [ ] Edge cases are identified572 - [ ] Scope is clearly bounded573 - [ ] Dependencies and assumptions identified574575 ## Feature Readiness576577 - [ ] All functional requirements have clear acceptance criteria578 - [ ] User scenarios cover primary flows579 - [ ] Feature meets measurable outcomes defined in Success Criteria580 - [ ] No implementation details leak into specification581582 ## Notes583584 - Items marked incomplete require spec updates before `/spec-kitty.plan`585 ```586587 b. **Run Validation Check**: Review the spec against each checklist item:588 - For each item, determine if it passes or fails589 - Document specific issues found (quote relevant spec sections)590591 c. **Handle Validation Results**:592593 - **If all items pass**: Mark checklist complete and proceed to step 6594595 - **If items fail (excluding [NEEDS CLARIFICATION])**:596 1. List the failing items and specific issues597 2. Update the spec to address each issue598 3. Re-run validation until all items pass (max 3 iterations)599 4. If still failing after 3 iterations, document remaining issues in checklist notes and warn user600601 - **If [NEEDS CLARIFICATION] markers remain**:602 1. Extract all [NEEDS CLARIFICATION: ...] markers from the spec603 2. Re-confirm with the user whether each outstanding decision truly needs to stay unresolved. Do not assume away critical gaps.604 3. For each clarification the user has explicitly deferred, present options using plain text—no tables:605606 ```607 Question [N]: [Topic]608 Context: [Quote relevant spec section]609 Need: [Specific question from NEEDS CLARIFICATION marker]610 Options: (A) [First answer — implications] · (B) [Second answer — implications] · (C) [Third answer — implications] · (D) Custom (describe your own answer)611 Reply with a letter or a custom answer.612 ```613614 4. Number questions sequentially (Q1, Q2, Q3 - max 3 total)615 5. Present all questions together before waiting for responses616 6. Wait for user to respond with their choices for all questions (e.g., "Q1: A, Q2: Custom - [details], Q3: B")617 7. Update the spec by replacing each [NEEDS CLARIFICATION] marker with the user's selected or provided answer618 9. Re-run validation after all clarifications are resolved619620 d. **Update Checklist**: After each validation iteration, update the checklist file with current pass/fail status6216229. Report completion with feature directory, spec file path, checklist results, and readiness for the next phase (`/spec-kitty.plan`).623624**NOTE:** The script creates and checks out the new branch and initializes the spec file before writing.625626## General Guidelines627628## Quick Guidelines629630- Focus on **WHAT** users need and **WHY**.631- Avoid HOW to implement (no tech stack, APIs, code structure).632- Written for business stakeholders, not developers.633- DO NOT create any checklists that are embedded in the spec. That will be a separate command.634635### Section Requirements636637- **Mandatory sections**: Must be completed for every feature638- **Optional sections**: Include only when relevant to the feature639- When a section doesn't apply, remove it entirely (don't leave as "N/A")640641### For AI Generation642643When creating this spec from a user prompt:6446451. **Make informed guesses**: Use context, industry standards, and common patterns to fill gaps6462. **Document assumptions**: Record reasonable defaults in the Assumptions section6473. **Limit clarifications**: Maximum 3 [NEEDS CLARIFICATION] markers - use only for critical decisions that:648 - Significantly impact feature scope or user experience649 - Have multiple reasonable interpretations with different implications650 - Lack any reasonable default6514. **Prioritize clarifications**: scope > security/privacy > user experience > technical details6525. **Think like a tester**: Every vague requirement should fail the "testable and unambiguous" checklist item6536. **Common areas needing clarification** (only if no reasonable default exists):654 - Feature scope and boundaries (include/exclude specific use cases)655 - User types and permissions (if multiple conflicting interpretations possible)656 - Security/compliance requirements (when legally/financially significant)657658**Examples of reasonable defaults** (don't ask about these):659660- Data retention: Industry-standard practices for the domain661- Performance targets: Standard web/mobile app expectations unless specified662- Error handling: User-friendly messages with appropriate fallbacks663- Authentication method: Standard session-based or OAuth2 for web apps664- Integration patterns: RESTful APIs unless specified otherwise665666### Success Criteria Guidelines667668Success criteria must be:6696701. **Measurable**: Include specific metrics (time, percentage, count, rate)6712. **Technology-agnostic**: No mention of frameworks, languages, databases, or tools6723. **User-focused**: Describe outcomes from user/business perspective, not system internals6734. **Verifiable**: Can be tested/validated without knowing implementation details674675**Good examples**:676677- "Users can complete checkout in under 3 minutes"678- "System supports 10,000 concurrent users"679- "95% of searches return results in under 1 second"680- "Task completion rate improves by 40%"681682**Bad examples** (implementation-focused):683684- "API response time is under 200ms" (too technical, use "Users see results instantly")685- "Database can handle 1000 TPS" (implementation detail, use user-facing metric)686- "React components render efficiently" (framework-specific)687- "Redis cache hit rate above 80%" (technology-specific)