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
.claude/skills/priivacy-ai-spec-kitty-mission-system/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 131% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 218% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 130% | 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 packs/built-in/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 these sections: purpose, specialization (languages, frameworks, boundaries), collaboration (handoffs, outputs), mode_defaults, and initialization_declaration. Doctrine references are authored on the top-level *-references fields (directive-references, tactic-references, toolguide-references, styleguide-references); the retired context-sources block was removed (mission doctrine-drg-silent-drop-boundary; #3629).
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# packs/built-in/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 | packs/built-in/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 types| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 25,807 | 14,475 | -44% | 1 | 1 | 0% | 3,442 | 5,993 | +74% | 0 | 0 | — |
case-02 | fail→pass | 22,727 | 18,231 | -20% | 1 | 1 | 0% | 3,069 | 6,442 | +110% | 0 | 0 | — |
case-03 | fail→pass | 19,094 | 14,021 | -27% | 1 | 1 | 0% | 2,573 | 5,942 | +131% | 0 | 0 | — |
case-04 | fail→pass | 14,335 | 11,521 | -20% | 1 | 1 | 0% | 1,719 | 5,467 | +218% | 0 | 0 | — |
case-05 | fail→pass | 23,599 | 22,600 | -4% | 1 | 1 | 0% | 3,235 | 7,449 | +130% | 0 | 0 | — |
case-06 | fail→pass | 20,266 | 15,695 | -23% | 1 | 1 | 0% | 2,518 | 6,417 | +155% | 0 | 0 | — |
case-07 | fail→pass | 22,156 | 17,100 | -23% | 1 | 1 | 0% | 2,839 | 6,596 | +132% | 0 | 0 | — |
case-08 | fail→pass | 14,463 | 12,550 | -13% | 1 | 1 | 0% | 1,652 | 5,641 | +241% | 0 | 0 | — |
case-09 | fail→pass | 13,961 | 8,916 | -36% | 1 | 1 | 0% | 1,538 | 4,972 | +223% | 0 | 0 | — |
case-10 | fail→pass | 17,849 | 12,777 | -28% | 1 | 1 | 0% | 2,330 | 5,717 | +145% | 0 | 0 | — |
case-11 | fail→pass | 18,807 | 23,850 | +27% | 1 | 1 | 0% | 3,718 | 8,376 | +125% | 0 | 0 | — |
case-12 | fail→pass | 8,351 | 9,898 | +19% | 1 | 1 | 0% | 1,231 | 5,119 | +316% | 0 | 0 | — |
case-13 | fail→pass | 6,356 | 9,508 | +50% | 1 | 1 | 0% | 1,108 | 5,106 | +361% | 0 | 0 | — |
case-14 | pass→pass | 18,202 | 15,655 | -14% | 1 | 1 | 0% | 2,611 | 7,069 | +171% | 0 | 0 | — |
case-15 | fail→pass | 19,718 | 10,572 | -46% | 1 | 1 | 0% | 2,418 | 5,257 | +117% | 0 | 0 | — |
case-16 | fail→pass | 15,689 | 9,481 | -40% | 1 | 1 | 0% | 1,698 | 5,868 | +246% | 0 | 0 | — |
case-17 | fail→pass | 15,233 | 8,012 | -47% | 1 | 1 | 0% | 1,907 | 5,417 | +184% | 0 | 0 | — |
case-18 | pass→pass | 17,262 | 8,987 | -48% | 1 | 1 | 0% | 2,198 | 5,548 | +152% | 0 | 0 | — |
case-19 | fail→pass | 12,442 | 12,245 | -2% | 1 | 1 | 0% | 2,205 | 5,488 | +149% | 0 | 0 | — |
case-20 | fail→pass | 18,684 | 15,744 | -16% | 1 | 1 | 0% | 2,299 | 6,160 | +168% | 0 | 0 | — |
case-21 | pass→pass | 2,595 | 3,000 | +16% | 1 | 1 | 0% | 470 | 4,780 | +917% | 0 | 0 | — |
case-22 | pass→pass | 10,879 | 16,336 | +50% | 1 | 1 | 0% | 2,010 | 5,732 | +185% | 0 | 0 | — |
case-23 | pass→pass | 11,071 | 23,240 | +110% | 1 | 1 | 0% | 2,261 | 6,573 | +191% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +78 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/27/2026 | +73% |
| gemini-3.6-flash | verified | 8/17/2026 | +86% |
| gemini-3.6-flash | verified | 8/13/2026 | +74% |
Other measured skills in the registry, with their headline benchmark lift.