Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Understand how Spec Kitty missions work: the 4 built-in mission types, how they define workflows via step contracts and action indices, how missions and work packages relate, how templates are resolved through the 5-tier chain, and how doctrine artifacts (procedures, tactics, directives) compose mission behavior. Triggers: "what missions are available", "how do missions work", "which mission should I use", "explain the mission system", "what is a mission", "change the mission", "mission template
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 142% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 166% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 225% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 119% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 287% | 0% |
Understand how missions structure work in Spec Kitty. A mission is a domain-specific workflow blueprint that defines what steps you go through, the template each step provides, what artifacts you produce, and how to validate success.
A mission answers: "What process should we follow to achieve this goal?"
Different goals need different processes. Building a software component is different from conducting research or writing documentation. Each mission provides domain-appropriate:
Mission Type (e.g., software-dev)
└── Mission (kitty-specs/042-auth-system/)
├── meta.json ← links mission to mission type + target branch
├── spec.md ← what we're building
├── plan.md ← how we'll build it
├── tasks.md ← WP breakdown
└── tasks/
├── WP01.md ← work package prompt
├── WP02.md
└── WP03.md
└── Workspace (.worktrees/042-auth-system-lane-b/)meta.jsonEvery mission has a meta.json that records which mission type it uses:
json{ "feature_number": "042", "slug": "042-auth-system", "mission": "software-dev", "target_branch": "<target-branch>", "created_at": "2026-03-22T10:00:00Z", "vcs": "git" }
The mission field determines which templates, guards, and validation rules apply. Default is software-dev if omitted.
Full software development lifecycle with work packages and code review.
Steps:
discovery → specify → plan → tasks → implement → review → acceptRequired artifacts: spec.md, plan.md, tasks.md
Guards:
specify → plan: spec.md must existplan → implement: plan.md and tasks.md must existimplement → review: all WPs must be approved or donereview → accept: review must be approvedAgent context: TDD practices, library-first architecture, tests before code.
Use when: Building components, fixing bugs, refactoring code — any work that produces code changes.
Systematic research with evidence-gated transitions.
Steps (state machine):
scoping → methodology → gathering → synthesis → output → done
↑ │
└── gather_more (loop back)Required artifacts: spec.md, plan.md, tasks.md, findings.md
Guards:
scoping → methodology: scope document must existmethodology → gathering: methodology plan must existgathering → synthesis: at least 3 sources documentedsynthesis → output: findings document must existoutput → done: publication approvedSpecial: The gathering → synthesis → gathering loop allows iterative evidence collection. Source tracking in source-register.csv, evidence in evidence-log.csv.
Use when: Investigating technologies, conducting literature reviews, evaluating options, any work requiring structured evidence gathering.
Goal-oriented planning with iterative refinement.
Steps:
specify → research → plan → reviewUse when: Planning a project, designing architecture, creating roadmaps — any work that produces planning artifacts but not code.
Documentation creation following the Divio 4-type system.
Workflow phases:
discover → audit → design → generate → validate → publishRequired artifacts: spec.md, plan.md, tasks.md, gap-analysis.md
Divio types: Tutorial (learning-oriented), How-To (task-oriented), Reference (information-oriented), Explanation (understanding-oriented).
Special: Supports auto-generation via JSDoc, Sphinx, or rustdoc. Gap analysis identifies missing documentation by classifying existing docs and finding coverage gaps.
Use when: Creating docs for a project, filling documentation gaps, documenting a specific component or API.
Each mission type lives in src/doctrine/missions/{mission-key}/ with:
Defines steps as a directed acyclic graph with dependencies:
yamlmission: key: software-dev name: Software Dev Kitty version: "2.1.0" steps: - id: specify title: Specification depends_on: [discovery] prompt_template: specify.md description: Define user scenarios and acceptance criteria - id: plan depends_on: [specify] prompt_template: plan.md - id: implement depends_on: [tasks] prompt_template: implement.md
This is what spec-kitty next uses to determine step ordering.
Contains both v0 configuration (artifacts, validation, agent context) and v1 state machine definitions (states, transitions, guards):
v0 fields (configuration):
yamlname: "Software Dev Kitty" domain: "software" artifacts: required: [spec.md, plan.md, tasks.md] optional: [data-model.md, quickstart.md] workflow: phases: - name: "research" - name: "implement" - name: "review" agent_context: | You are a software development agent following TDD practices. mcp_tools: required: [filesystem, git] recommended: [code-search, test-runner] validation: checks: [git_clean, all_tests_pass, kanban_complete]
v1 fields (state machine):
yamlinitial: discovery states: - name: discovery - name: specify - name: plan - name: implement - name: review - name: done transitions: - trigger: advance source: specify dest: plan conditions: - 'artifact_exists("spec.md")' guards: has_spec: description: "Specification document must exist" check: 'artifact_exists("spec.md")'
Markdown files shown to agents at each step:
mission-steps/software-dev/specify/prompt.md — Instructions for writing the specificationmission-steps/software-dev/plan/prompt.md — Instructions for creating the implementation planmission-steps/software-dev/tasks/prompt.md — Instructions for creating tasks and work packagesmission-steps/software-dev/implement/prompt.md — Instructions for implementing a work packagemission-steps/software-dev/review/prompt.md — Instructions for reviewing a work packagemission-steps/software-dev/accept/prompt.md — Instructions for final acceptance validationScaffolding files for artifacts:
spec-template.md — Starting structure for spec.mdplan-template.md — Starting structure for plan.mdtask-prompt-template.md — Starting structure for WP prompt filestasks-template.md — Starting structure for tasks.mdMissions are backed by structured doctrine artifacts that define action behavior and link to reusable knowledge.
Each public action (specify, plan, implement, review) has a step contract that defines its internal structure:
yaml# implement.step-contract.yaml id: implement action: implement mission: software-dev schema_version: "1.0" steps: - id: setup-workspace description: "Create or enter the WP workspace" - id: implement-code description: "Write code following governance constraints" delegates_to: kind: tactic candidates: [tdd-red-green-refactor, zombies-tdd] - id: validate description: "Run tests and lint checks"
The delegates_to field links a step to doctrine artifacts. This is how mission behavior connects to the knowledge layer: the contract says what to do, the referenced tactic/directive/procedure says how.
Procedures are multi-step doctrine artifacts with prerequisites and ordered steps. They are the reusable building blocks that step contracts delegate to. Each procedure describes a complete mini-workflow (e.g., a refactoring sequence, a test-first bug fix, a situational assessment).
Procedures live in packs/built-in/procedures/ (shipped) or .kittify/procedures/ (project-local). Access via DoctrineService:
pythonprocedure = service.procedures.get("refactoring") # procedure.steps → ordered list of actions # procedure.prerequisites → what must be true before starting # All procedures: read packs/built-in/procedures/ or .kittify/procedures/
To validate project-layer doctrine artifacts:
bashspec-kitty doctrine validate .kittify/
Agent profiles define roles, specializations, and boundaries for work package assignment. Each profile has 6 sections: context_sources, purpose, specialization (languages, frameworks, boundaries), collaboration (handoffs, outputs), mode_defaults, and initialization_declaration.
Profiles do not use relationship fields such as specializes_from. Lineage and specialization relationships belong in the doctrine DRG; profile matching uses weighted signals (language, framework, file path, keyword, exact-id).
The mission.yaml task_types section maps WP actions to agent roles:
yamltask_types: implement: agent_role: implementer review: agent_role: reviewer plan: agent_role: planner
bash# Discover activated profiles (--all for the full on-disk catalog) spec-kitty agent profile list # Inspect a profile's boundaries and initialization context (resolved # through DRG lineage and context sources) spec-kitty agent profile show <profile-id>
There is no separate hierarchy command: specialization lineage is declared in the doctrine DRG (see the org-pack DRG YAML / generated graph.yaml); profile show displays the resolved result.
Each mission action has an index that declares which doctrine artifacts are relevant to that step:
yaml# src/doctrine/missions/software-dev/actions/implement/index.yaml action: implement directives: [TEST_FIRST] tactics: [tdd-red-green-refactor, zombies-tdd, acceptance-test-first] styleguides: [python-implementation] toolguides: [] procedures: [implementation-handoff]
The charter context builder uses these indices to scope what gets injected into the agent prompt at each step. This prevents agents from seeing review-scoped doctrine during implementation and vice versa.
Guards block step transitions until conditions are met:
| Guard | Syntax | What it checks | |---|---|---| | artifact_exists | artifact_exists("spec.md") | File exists in mission dir | | gate_passed | gate_passed("review_approved") | Event exists in mission event log | | all_wp_status | all_wp_status("approved_or_done") | Every WP is in the specified lane, or in any lane in a named accepted-ready set | | any_wp_status | any_wp_status("for_review") | At least one WP is in the lane | | input_provided | input_provided("architecture") | Input was provided to runtime | | event_count | event_count("source_documented", 3) | Minimum event count in log |
Guards are composed as conditions lists on transitions. All conditions in the list must pass for the transition to fire.
When a command prompt is needed, spec-kitty resolves the current doctrine mission-step prompt:
| Scope | Path | Purpose | |---|---|---| | Package | src/doctrine/missions/mission-steps/<mission>/<step>/prompt.md | Built-in default | | Project doctrine | .kittify/doctrine/... | Project-local doctrine overrides where supported | | Org doctrine | org doctrine pack | Shared organization doctrine where installed |
The package default is always the fallback. Legacy command-templates paths are pre-migration artifacts, not the current package layout.
The mission type is set when you create a mission with /spec-kitty.specify. It's recorded in meta.json and cannot be changed after creation.
Commands:
bash# List available mission types spec-kitty mission-type list spec-kitty doctrine mission-type list # Specify a mission with a specific mission type spec-kitty specify --mission-type research "What are the best auth patterns?" # Check which mission type a mission uses cat kitty-specs/<mission-slug>/meta.json | jq .mission
Decision guide:
| If you're... | Use mission type | |---|---| | Building a component, fixing a bug, refactoring | software-dev | | Investigating, evaluating options, literature review | research | | Planning architecture, roadmaps, design docs | plan | | Writing tutorials, API docs, how-to guides | documentation |
Missions involve two orthogonal state machines:
Mission-type state — which phase of the workflow are we in?
discovery → specify → plan → tasks → implement → review → accept → mergeManaged by mission-runtime.yaml DAG and spec-kitty next.
WP status — where is each work package in its lifecycle?
planned → claimed → in_progress → for_review → in_review → approved → done
↕
blocked / canceledManaged by the status model (append-only event log).
Together they determine what spec-kitty next returns: "we're in the implement phase, WP01 is done, WP02 is in_progress, WP03 is planned — your next action is implement WP03."
On every CLI invocation, ensure_runtime() runs:
~/.kittify/cache/version.lock — if version matches, fast path (< 100ms)~/.kittify/missions/This ensures ~/.kittify/ always matches the installed spec-kitty version.
agent action implement / agent action review — text-only outputThe canonical agent surfaces spec-kitty agent action implement <wp_id> and spec-kitty agent action review <wp_id> return plain text only. They do not accept a --json flag. Passing --json to either command produces a Typer exit-2 error.
The top-level command spec-kitty implement does accept --json, but it is the internal allocator used by the harness — not the surface intended for agent prompt steps. Do not invoke spec-kitty implement --json from prompt steps; that is an internal-only surface. Use spec-kitty agent action implement <wp_id> for work-package execution.
Summary:
| Command | --json? | Intended for | |---|---|---| | spec-kitty agent action implement <wp_id> | no | Agent prompt steps | | spec-kitty agent action review <wp_id> | no | Agent prompt steps | | spec-kitty implement <wp_id> | yes | Internal harness allocator only |
If you need structured output from the implement action, use spec-kitty agent tasks status --json to query the resulting WP state after the action completes.
If a worktree is missing or corrupted, use the real recovery command (post-#2135, the former worktree repair subcommand no longer exists):
bashspec-kitty doctor workspaces --fix
This removes husk directories (entries in .worktrees/ that lack a .git entry) without touching registered live worktrees.
references/mission-comparison-matrix.md -- Side-by-side comparison of all 4 mission typesOther measured skills in the registry, with their headline benchmark lift.