Vercel Composition Patterns
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
Drive the canonical spec-kitty next --mission <handle control loop for mission advancement.
$ npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install spec-kitty/spec-kitty spec-kitty-runtime-next --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/spec-kitty/spec-kitty.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/charter/offering/skills/spec-kitty-runtime-next .claude/skills/spec-kitty-runtime-next && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "spec-kitty-runtime-next" agent skill from https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-next into .claude/skills/spec-kitty-runtime-next/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-kitty-runtime-next", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-nextType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install spec-kitty/spec-kitty spec-kitty-runtime-next --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/spec-kitty/spec-kitty.git skills-src && mkdir -p .agents/skills && cp -r skills-src/src/charter/offering/skills/spec-kitty-runtime-next .agents/skills/spec-kitty-runtime-next && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "spec-kitty-runtime-next" agent skill from https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-next into .agents/skills/spec-kitty-runtime-next/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-kitty-runtime-next", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install spec-kitty/spec-kitty spec-kitty-runtime-next --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/spec-kitty/spec-kitty.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/src/charter/offering/skills/spec-kitty-runtime-next .cursor/skills/spec-kitty-runtime-next && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "spec-kitty-runtime-next" agent skill from https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-next into .cursor/skills/spec-kitty-runtime-next/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-kitty-runtime-next", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/spec-kitty/spec-kitty.git --path src/charter/offering/skills/spec-kitty-runtime-next--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install spec-kitty/spec-kitty spec-kitty-runtime-next --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/spec-kitty/spec-kitty.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/src/charter/offering/skills/spec-kitty-runtime-next .gemini/skills/spec-kitty-runtime-next && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "spec-kitty-runtime-next" agent skill from https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-next into .gemini/skills/spec-kitty-runtime-next/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-kitty-runtime-next", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install spec-kitty/spec-kitty spec-kitty-runtime-nextInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/spec-kitty/spec-kitty.git skills-src && mkdir -p .github/skills && cp -r skills-src/src/charter/offering/skills/spec-kitty-runtime-next .github/skills/spec-kitty-runtime-next && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "spec-kitty-runtime-next" agent skill from https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-next into .github/skills/spec-kitty-runtime-next/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-kitty-runtime-next", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install spec-kitty/spec-kitty spec-kitty-runtime-next --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/spec-kitty/spec-kitty.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/src/charter/offering/skills/spec-kitty-runtime-next .opencode/skills/spec-kitty-runtime-next && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "spec-kitty-runtime-next" agent skill from https://github.com/spec-kitty/spec-kitty/tree/main/src/charter/offering/skills/spec-kitty-runtime-next into .opencode/skills/spec-kitty-runtime-next/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-kitty-runtime-next", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
spec-kitty-runtime-nextDrive the canonical spec-kitty next --mission <handle control loop for mission advancement.
Spec Kitty Runtime Next is an agent skill from spec-kitty/spec-kitty. Drive the canonical spec-kitty next --mission <handle control loop for mission advancement. Load agent profiles at init, apply action-scoped doctrine context at each step boundary, and pull specific tactics/directives on demand. Triggers: "run the next step", "what should runtime do next", "advance the mission", "what is the next task", "continue the workflow", "what step comes next". Does NOT handle: setup or repair requests, purely editorial glossary or doctrine maintenance, or direct code review.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/blocked-state-recovery.md` and `references/runtime-result-taxonomy.md`).
It sits in Development. The repository describes itself as: Spec-Driven Development with organizational governance. Specs tell AI agents what to build; Charter governs how they build it. Git-native missions, enforceable workflows, and… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4cabb90. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
jqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Spec Kitty Runtime Next loads about 5.2k tokens when it runs, and up to ~6.9k if it reads all its reference files. Until then it costs about 132 tokens; SKILL.md has 1,731 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from spec-kitty/spec-kitty at commit 4cabb90, republished under its MIT licence (© spec-kitty). 1,731 words, ~5,177 tokens.
.claude/skills/spec-kitty-runtime-next/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.This skill teaches agents how to advance a Spec Kitty mission through the canonical runtime control loop, including doctrine-aware context loading at each step boundary.
Use this skill when the user wants to:
The spec-kitty next command is the single entry point for agent-driven mission
execution. Each call returns a deterministic decision about what action the
agent should take next.
The runtime evaluates state in this order:
mission-runtime.yaml DAG)implement and review steps, the CLI bridge
manages WP-level iteration WITHOUT advancing the runtime. The runtime only
advances when ALL WPs reach terminal/handoff lanes.The CLI bridge (not the runtime) manages WP-level iteration:
implement or reviewplanned or in_progress lanesdone, approved, or for_review)This means multiple calls to spec-kitty next during implementation will
return different WP IDs but the same step_id (e.g., "implement") until all
WPs are done.
Missions define steps as a DAG (directed acyclic graph) with dependencies:
mission:
key: software-dev
name: Software Dev Kitty
version: "2.1.0"
steps:
- id: discovery
title: Discovery & Research
depends_on: []
prompt_template: research.md
- id: specify
depends_on: [discovery]
prompt_template: specify.md
- id: plan
depends_on: [specify]
prompt_template: plan.md
- id: tasks
depends_on: [plan]
- id: implement
depends_on: [tasks]
prompt_template: implement.md
- id: review
depends_on: [implement]
prompt_template: review.md
- id: accept
depends_on: [review]
prompt_template: accept.mdEvery call to spec-kitty next returns exactly one decision kind:
| Kind | Meaning | Agent Action |
|---|---|---|
step | Normal action available | Read prompt_file and execute |
query | Read-only current-state preview | Inspect state; do not execute a prompt or mark a result |
decision_required | Runtime needs input | Answer with --answer and --decision-id |
blocked | Guards failing, cannot proceed | Read reason + guard_failures, resolve blockers |
terminal | Mission complete | Run /spec-kitty.accept; if it passes, merge, then: mission review → author or verify retrospective (retrospect create) → surface findings (summary aggregates; synthesize reviews proposals) |
{
"kind": "step",
"agent": "claude",
"mission_slug": "042-test-mission",
"mission": "software-dev",
"mission_state": "implementing",
"action": "implement",
"wp_id": "WP02",
"workspace_path": ".worktrees/042-test-mission-lane-b",
"prompt_file": "/tmp/spec-kitty-next-claude-042-test-mission-implement-WP02.md",
"reason": null,
"guard_failures": [],
"progress": {
"total_wps": 5,
"done_wps": 1,
"approved_wps": 0,
"in_progress_wps": 1,
"planned_wps": 3,
"for_review_wps": 0
},
"run_id": "abc123",
"step_id": "implement",
"decision_id": null,
"question": null,
"options": null
}Guards block step transitions by returning failure descriptions:
| Guard | Syntax | Checks |
|---|---|---|
artifact_exists | artifact_exists("spec.md") | File exists relative to mission dir |
gate_passed | gate_passed("review_gate") | Gate event in mission-events.jsonl |
all_wp_status | all_wp_status("approved_or_done") | All WPs in a specific lane or named accepted-ready set |
any_wp_status | any_wp_status("for_review") | At least one WP in lane |
input_provided | input_provided("architecture") | Input exists in runtime model |
event_count | event_count("review", 1) | Minimum event count threshold |
Guards never raise exceptions — they return false on missing context.
The runtime generates a temp file at:
/tmp/spec-kitty-next-{agent}-{mission_slug}-{action}[-{wp_id}].md
Template actions (specify, plan, tasks): Mission context header + governance context + action-specific template content.
WP actions (implement, review): Full isolation-aware prompt containing:
tasks/WP##.md)Decision prompts: Question text, options, and the --answer command to run.
Runtime state is persisted between calls:
.kittify/runtime/
├── feature-runs.json # Index: {"mission-slug": {"run_id": "...", "run_dir": "..."}}
└── runs/
└── <run_id>/
└── state.json # Runtime snapshot (current step, inputs, etc.)When --mission is omitted, the runtime detects the mission via (in order):
SPECIFY_MISSION environment variable###-mission-name)NOTE: Always use --mission <slug> in multi-mission repositories.
The runtime-next loop should load doctrine context iteratively — not all at once. Each step boundary is a context loading opportunity.
At the start of a session, resolve the active agent profile. This scopes your role, boundaries, and initialization context.
Load the profile using the Python API — do NOT read YAML files directly:
from charter.activation.doctrine_service_builder import build_activation_aware_doctrine_service
service = build_activation_aware_doctrine_service(project_root)
# resolve_profile()'s specializes_from lineage traversal is a repository
# operation, not available on the filtered `agent_profiles` dict — reach it
# through the pinned lineage/mutation accessor:
repo = service.agent_profile_repository
profile = repo.resolve_profile("<profile-id>") # e.g. "implementer"
# Internalize identity — acknowledge this at session start
print(profile.initialization_declaration)
# Respect scope boundaries
profile.specialization.primary_focus # What you actively do
profile.specialization.avoidance_boundary # What you must NOT do
profile.collaboration.handoff_to # Roles to defer to when out of scope
# Load only the directives this profile references (same `service`, gated dict)
for ref in profile.directive_references:
directive = service.directives.get(f"DIRECTIVE_{ref.code}")Discovery (if you don't know your profile-id):
spec-kitty agent profile list
spec-kitty agent profile show <profile-id>At each step boundary (when spec-kitty next returns a step decision),
load governance context scoped to the current action — not the full doctrine:
# Load only what's relevant to this action (compact after first load)
spec-kitty charter context --action implement --jsonThe context system uses two depth levels:
| Depth | When | Content |
|---|---|---|
bootstrap (depth-2) | First load for this action | Full policy summary + reference list |
compact (depth-1) | Subsequent loads | Resolved paradigms, directives, tools only |
First-load state is tracked per action in
.kittify/charter/context-state.json. This means implement and
review each get their own first-load bootstrap independently.
When you need governance guidance mid-step (e.g., how to structure tests, which review criteria apply), pull the specific tactic or directive by ID rather than re-loading the full context:
from charter.activation.doctrine_service_builder import build_activation_aware_doctrine_service
service = build_activation_aware_doctrine_service(project_root)
# Pull a specific tactic when it becomes relevant
tactic = service.tactics.get("tdd-red-green-refactor")
# Pull a specific directive
directive = service.directives.get("TEST_FIRST")The action index (actions/<action>/index.yaml) tells you which doctrine
artifacts are relevant to the current step. Load the index to discover what
to pull:
from charter.offering.missions.action_index import load_action_index
index = load_action_index(missions_root, "software-dev", "implement")
# index.directives → ["TEST_FIRST", ...]
# index.tactics → ["tdd-red-green-refactor", ...]
# index.procedures → [...]Do NOT load all doctrine into context at session start. This wastes tokens and dilutes relevance. Instead:
charter context --action <action>.Before invoking the runtime, gather the current state.
Commands:
# Check WP status for a mission
spec-kitty agent tasks status --mission <mission-slug>
# Check current context for an action
spec-kitty agent context resolve --action implement --mission <mission-slug> --jsonWhat to look for:
# Run the next step
spec-kitty next --agent <agent> --mission <mission-slug> --json
# After completing a step successfully
spec-kitty next --agent <agent> --mission <mission-slug> --result success --json
# After a step failed
spec-kitty next --agent <agent> --mission <mission-slug> --result failed --json
# After a step was blocked
spec-kitty next --agent <agent> --mission <mission-slug> --result blocked --jsonNote:
--missionis the sole selector. The legacy--featurealias has been removed (#1060); passing--featurenow exits withNo such option.
The --result flag tells the runtime the outcome of the previous step.
If omitted, spec-kitty next returns current state without advancing (query mode).
It does not report success for the previous step.
See references/runtime-result-taxonomy.md for the complete taxonomy.
| Kind | Next Action |
|---|---|
step | Read and execute prompt_file (always non-empty and resolvable on disk) |
decision_required | Answer with --answer and --decision-id |
blocked | Read reason + guard_failures, resolve blockers |
terminal | Run /spec-kitty.accept for final validation, then merge if acceptance passes |
Always check guard_failures — this field may appear on any decision kind,
not just blocked.
The kind="step" prompt-file contract is a hard runtime invariant (C1/C2).
A kind="step" envelope MUST carry a prompt_file (or its consumer-side
prompt_path alias) that is non-null, non-empty, and resolves on disk. If
the runtime cannot produce an actionable step (no composed action, guard
failure, blocked dependency, prompt build error, etc.), it returns
kind="blocked" with a non-empty reason (and optional machine-readable
code such as no_prompt_template). There is no third state: an agent loop
should never observe a kind="step" decision with prompt_file == null.
Always check progress for completion. If progress.done_wps equals
progress.total_wps but kind is not terminal, the mission is actually
complete (known issue #335). The runtime may not detect completion when no
prior run state exists. Treat this as terminal and run /spec-kitty.accept;
if acceptance passes, run /spec-kitty.merge, then run mission review and the
retrospective workflow.
When the runtime needs input:
# The decision includes question, options, and decision_id
# Answer using:
spec-kitty next --agent <agent> --mission <mission-slug> \
--result success --answer "<choice>" --decision-id "<decision_id>" --jsonIf the agent cannot determine the answer, escalate to the user with the question and options.
See references/blocked-state-recovery.md for detailed recovery patterns.
Quick diagnostic:
# Check WP status and dependency graph
spec-kitty agent tasks status --mission <mission-slug>
# Check specific WP dependencies
spec-kitty agent tasks list-dependents WP## --mission <mission-slug>Common blockers:
| Blocker | Recovery |
|---|---|
| Missing artifacts (spec.md, plan.md) | Run the planning workflow first |
| Upstream WP not done | Implement or review the upstream WP |
| Review feedback not addressed | Re-implement, address feedback, move to for_review |
| Stale agent (WP in doing, no activity) | Move WP to planned with --force |
| Circular dependencies | Break cycle in WP frontmatter, re-run finalize-tasks |
The complete agent loop pattern:
# 1. Start the loop
DECISION=$(spec-kitty next --agent claude --mission 042-mission --json)
KIND=$(echo "$DECISION" | jq -r '.kind')
# 2. Loop until terminal or unresolvable block
while [ "$KIND" = "step" ] || [ "$KIND" = "decision_required" ]; do
# Workaround #335: check progress for completion even if kind != terminal
DONE=$(echo "$DECISION" | jq -r '.progress.done_wps // 0')
TOTAL=$(echo "$DECISION" | jq -r '.progress.total_wps // 0')
if [ "$TOTAL" -gt 0 ] && [ "$DONE" -eq "$TOTAL" ]; then
break # Mission is actually complete
fi
if [ "$KIND" = "step" ]; then
PROMPT=$(echo "$DECISION" | jq -r '.prompt_file')
# Contract (C1/C2, post-#336 fix): kind=step always carries a
# non-empty prompt_file resolvable on disk. If a prompt cannot be
# resolved, the runtime emits kind=blocked with a populated reason.
# Read and execute the prompt...
RESULT="success" # or "failed" or "blocked"
elif [ "$KIND" = "decision_required" ]; then
# Answer the question...
RESULT="success"
fi
DECISION=$(spec-kitty next --agent claude --mission 042-mission --result "$RESULT" --json)
KIND=$(echo "$DECISION" | jq -r '.kind')
done
# 3. Handle terminal state — canonical post-merge sequence
if [ "$KIND" = "terminal" ] || [ "$DONE" -eq "$TOTAL" ]; then
# Run /spec-kitty.accept.
# If acceptance passes, run /spec-kitty.merge.
# After merge, follow the canonical post-merge sequence:
# a. Mission review: /spec-kitty-mission-review
# b. Author or verify retrospective:
# spec-kitty retrospect create --mission 042-mission # if record absent
# OR verify: cat .kittify/missions/<mission_id>/retrospective.yaml
# c. Surface findings:
# spec-kitty retrospect summary # read-only aggregation
# spec-kitty agent retrospect synthesize --mission 042-mission # dry-run by default; --apply to mutate
# Note: summary aggregates; synthesize applies proposals — neither authors records.
fiThe loop continues until:
terminal — mission complete, exit loopquery — read-only preview, no state mutationblocked — cannot proceed without external resolutiondecision_required — only if the agent cannot answer (escalate to user)spec-kitty next rather than manually sequencing phases--mission in multi-mission repositoriesprompt_file — it contains the full context the agent needsguard_failures on every decision, not just blocked ones#335 — Completed missions return step instead of terminal. When
spec-kitty next is called on a mission with all WPs done but no prior
runtime run state, it creates a new run starting at discovery instead of
recognizing the mission is complete. Workaround: Check
progress.done_wps == progress.total_wps as a secondary completion signal.
#336 — fixed. prompt_file is always non-empty and resolvable on disk
on kind: step decisions. When no prompt is available, the runtime now emits
a structured kind: blocked decision with a non-empty reason (and optional
machine-readable code such as no_prompt_template). Agent loops no longer
need to defensively null-check prompt_file; a kind: step decision with a
null prompt is a runtime bug.
Not all governed work happens inside an active mission. When a user asks for
help with a task that has no active spec-kitty next loop — a code review, a
quick implementation, an ad-hoc analysis — you should still invoke Spec Kitty's
governance layer with standalone dispatch.
Spec Kitty never spawns a parallel LLM call. You are the host; Spec Kitty routes, assembles governance context, and records the trail.
If the user says anything like "use spec kitty to ...", "hey spec kitty ...",
or "spec kitty <anything>", run standalone dispatch unless they are clearly
asking for a full mission.
Get context:
spec-kitty dispatch "implement the login handler" --json
spec-kitty dispatch "review WP05" --profile reviewer --jsonResponse includes invocation_id, governance_context_text, and governance_context_available.
Inject governance:
Read governance_context_text and treat it as binding governance context for your task. Follow any directives and constraints it contains.
If governance_context_available is false, note this to the user but proceed with the task.
Execute: Do the work. Generate the code, analysis, or plan.
Close the Op (mandatory — dispatch leaves it open):
spec-kitty profile-invocation complete \
--invocation-id <invocation_id> \
--outcome <done|failed|abandoned>Use the real outcome: done for completed work, failed for work that did
not succeed, abandoned for dropped work. Never leave an Op open
deliberately — spec-kitty doctor ops reports and sweeps orphans.
Every standalone invocation writes a Tier 1 JSONL file to:
kitty-ops/<invocation_id>.jsonlViewable at any time with spec-kitty invocations list --json. No SaaS connection required.
For full CLI surface documentation, see src/charter/offering/skills/spec-kitty/SKILL.md.
references/runtime-result-taxonomy.md -- Decision kinds, output fields, and precedence rulesreferences/blocked-state-recovery.md -- 6 blocked state patterns with diagnosis and recovery© spec-kitty, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in src/charter/offering/skills/spec-kitty-runtime-next of spec-kitty/spec-kitty.
Open the folder on GitHubat commit 4cabb90
Spec Kitty Runtime Next next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Spec Kitty Runtime Next this skillspec-kitty/spec-kitty | 1.7k | — | ~5.2k | Automated safety check: Pass | MIT | |
| Vercel Composition Patternssupabase/supabase | 111k | 59 repos | ~726 | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Typescript Advanced Typesrolling-scopes/rsschool-app | 10k | 25 repos | ~4.2k | Automated safety check: Pass | MPL-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT |
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
rolling-scopes/rsschool-app
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
onyx-dot-app/onyx
Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.
spec-kitty/spec-kitty
Install, verify, and recover the modern Spec Kitty 2.0.11+ operating surface.
spec-kitty/spec-kitty
Explain Spec Kitty work with compact, checkable visuals. An agent skill from spec-kitty/spec-kitty.
spec-kitty/spec-kitty
Understand how Spec Kitty manages git: what git operations Python handles automatically, what agents must do manually, worktree lifecycle, auto-commit behavior, merge execution, and the safe-commit…
spec-kitty/spec-kitty
Curate and apply canonical terminology across Spec Kitty missions.
spec-kitty/spec-kitty
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…
spec-kitty/spec-kitty
Teach agents and external systems how to use spec-kitty orchestrator-api to drive workflows from outside the host CLI.
Categories
Drive the canonical spec-kitty next --mission <handle control loop for mission advancement. Spec Kitty Runtime Next is an agent skill from spec-kitty/spec-kitty. Drive the canonical spec-kitty next --mission <handle control loop for mission advancement.
Spec Kitty Runtime Next fits situations like: development work in your project.
Run `npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a claude-code`. Or copy the skill folder (src/charter/offering/skills/spec-kitty-runtime-next in spec-kitty/spec-kitty) into .claude/skills/spec-kitty-runtime-next in your project. Claude Code loads it when a task matches its description.
Run `npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a codex`. Or copy the skill folder (src/charter/offering/skills/spec-kitty-runtime-next in spec-kitty/spec-kitty) into .agents/skills/spec-kitty-runtime-next in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add spec-kitty/spec-kitty --skill spec-kitty-runtime-next -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/spec-kitty-runtime-next, .gemini/skills/spec-kitty-runtime-next, .github/skills/spec-kitty-runtime-next and .opencode/skills/spec-kitty-runtime-next in your project.
Going by SKILL.md and its folder, Spec Kitty Runtime Next needs the command-line tools its instructions call (jq). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Spec Kitty Runtime Next is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Spec Kitty Runtime Next: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 296k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
spec-kitty (a GitHub organization) maintains it in spec-kitty/spec-kitty, which has 1,677 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 8, 2026.
Source: spec-kitty/spec-kitty on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.