Kairo Runtime is a local agent operating system — not a template dumper and not an
installer for AI apps. It detects agents you already use (Cursor, Codex, OpenCode,
Claude), writes managed sections into their configs, installs coordination components
under ~/.harness, and keeps that ecosystem healthy with status, sync, backups,
and rollback.
The npm package (@kal-elsam/kairo-runtime) is how Kairo Runtime is distributed. The
product identity is the local control plane: setup, status, sync, doctor (with update
as a technical alias).
@kal-elsam/harness remains available as a compatibility bridge that delegates to
Kairo Runtime and prints a migration warning. Prefer @kal-elsam/kairo-runtime and the
kairo CLI for new installs. See packages/harness-bridge/README.md.
Terminal UX aims for Pi-like clarity (clear modes, non-interactive flags, extensible commands) without depending on Pi as a runtime or adding a Pi adapter.
- npm: https://www.npmjs.com/package/@kal-elsam/kairo-runtime
- repo: https://github.com/Kal-elSam/harness
Recommended entry — run Kairo Runtime in your terminal (interactive setup wizard in a TTY):
npx @kal-elsam/kairo-runtimePreview without writing anything:
npx @kal-elsam/kairo-runtime --dry-runOne-liner bootstrap (checks Node/npm, previews the plan, writes nothing by default):
curl -fsSL https://raw.githubusercontent.com/Kal-elSam/harness/main/scripts/install.sh | shPreview the installer plan only (no download, no network package run):
curl -fsSL https://raw.githubusercontent.com/Kal-elSam/harness/main/scripts/install.sh | sh -s -- --dry-runThe bootstrap installer:
- requires Node.js 20.12+ and npm
- runs
@kal-elsam/kairo-runtimevianpx(ornpm exec) - ends with
kairo setup --dry-runby default (no agent configs, no~/.harnesswrites) - never uses
sudo, never modifies shell profiles, and never installs AI apps
Apply the plan when you are ready:
npx @kal-elsam/kairo-runtime --yes
# or
curl -fsSL https://raw.githubusercontent.com/Kal-elSam/harness/main/scripts/install.sh | sh -s -- --yesCI, scripts, and advanced non-interactive configure:
npx @kal-elsam/kairo-runtime install --agents cursor,codex --yes
npx @kal-elsam/kairo-runtime setup --yes --agents allPassthrough examples:
curl -fsSL https://raw.githubusercontent.com/Kal-elSam/harness/main/scripts/install.sh | sh -s -- --agents all --yes
curl -fsSL https://raw.githubusercontent.com/Kal-elSam/harness/main/scripts/install.sh | sh -s -- --components orchestrator,sdd-core --yesControl plane:
kairo status
kairo sync
kairo upgrade --dry-run
npx @kal-elsam/kairo-runtime@latest setup --yesAfter install.sh --yes, verify health with kairo status, repair drift with kairo sync,
and move to the latest package with npx @kal-elsam/kairo-runtime@latest setup --yes.
# Installed CLI version (local package / PATH)
kairo --version
npx @kal-elsam/kairo-runtime --version
# Latest published version on npm
npm view @kal-elsam/kairo-runtime version
# Converge to the latest published package
kairo upgrade --dry-run
npx @kal-elsam/kairo-runtime@latest setup --yes
npx @kal-elsam/kairo-runtime@latest syncIf you prefer npm directly (no curl):
npx @kal-elsam/kairo-runtime
npx @kal-elsam/kairo-runtime --dry-run
npx @kal-elsam/kairo-runtime install --agents cursor,codex --components orchestrator,sdd-core --yesOptional global install:
npm i -g @kal-elsam/kairo-runtime
kairo --versionLegacy opt-in: scaffold governance files into a repository:
npx @kal-elsam/kairo-runtime install --scope=workspace| Command | Description |
|---|---|
kairo |
Primary — short and direct |
kairo-runtime |
Descriptive alias |
harness |
Legacy alias (prefer kairo) |
agentic-harness |
Legacy descriptive alias |
kairo --version
kairo
kairo --dry-run
kairo setup
kairo setup --dry-run
kairo setup --agents all
kairo install --agents cursor,codex --yes
kairo status
kairo status --json
kairo adapters
kairo adapters --json
kairo sync
kairo sync --dry-run
kairo sync --dry-run --json
kairo policy
kairo policy --json
kairo policy set profile safe
kairo policy reset
kairo install
kairo install --agents all
kairo install --agents cursor,codex --components orchestrator,sdd-core
kairo doctor
kairo doctor --json
kairo update # technical alias; prefer sync
kairo detect
kairo components
kairo components validate
kairo components init <id> --label "<label>"
kairo components pack <id> --out <file> # advanced
kairo components import <file> # advanced
kairo backups
kairo history
kairo history --command sync --action repaired
kairo history last --json
kairo report
kairo report --json
kairo report --out ./diagnostics.txt
kairo rollback --to <snapshot> [--apply]
kairo uninstall
kairo install --scope=workspace # opt-in / legacyLegacy CLI aliases (backward compatible): harness, agentic-harness, sgs-harness, harness-sgs
kairo help lists commands and JSON support; longer examples live in this README.
To try locally from this repo:
node ./bin/kairo.js setup --dry-run
node ./bin/kairo.js status
node ./bin/kairo.js sync --dry-run
node ./bin/kairo.js adapters --json
node ./bin/kairo.js install --dry-runKairo Runtime does not install Cursor, Codex, OpenCode, or Claude Code. It detects their home-directory roots and writes managed sections into their config files.
| Adapter | Label | Root | Config file |
|---|---|---|---|
cursor |
Cursor | ~/.cursor |
~/.cursor/AGENTS.md |
codex |
Codex | ~/.codex |
~/.codex/AGENTS.md |
opencode |
OpenCode | ~/.config/opencode |
~/.config/opencode/AGENTS.md |
claude |
Claude Code | ~/.claude |
~/.claude/CLAUDE.md |
Inspect detection and managed state:
kairo adapters
kairo adapters --jsonAgent selection defaults:
- If agent roots are detected → configure detected agents only.
- If none are detected → safe fallback to all four supported adapters.
- Force all four explicitly:
kairo setup --agents all
kairo install --agents allPrimary flow remains kairo → status → sync (or kairo setup explicitly).
| Scope | Default for | Behavior |
|---|---|---|
agent-global |
bare kairo, setup, install, update, doctor, status, uninstall |
Primary path. Configures local agent roots, managed sections, ~/.harness state. No project folders. |
workspace |
init only (opt-in/legacy) |
Explicit --scope=workspace. Copies repo-template/ into the current repo. |
Bare kairo opens the Ink setup UI (Local Agent Operating System) in a TTY. kairo setup --simple uses the Clack wizard instead. kairo setup
is equivalent. Detects agents, shows a plan, and lets you choose agents/components before
applying. Use --dry-run to preview without writing, or --yes / flags to skip prompts.
Use kairo install for explicit non-interactive configure in CI and scripts.
kairo
kairo --dry-run
kairo setup
kairo setup --dry-run
kairo setup --agents cursor,codex --components orchestrator,sdd-core --yes
kairo install --agents cursor,codex --yesControl panel for the local ecosystem: detected vs managed agents, installed components, check counts (ok/missing/stale), backups, overall status, and the recommended next action.
kairo status
kairo status --json--json prints a stable machine-readable envelope for CI, tooling, and debugging
(ok, overall, agents, components, checks, backups, nextAction,
cliVersion). Human text remains the default. Exit code is non-zero when
overall is not ok.
Primary convergence command. Detects managed state, repairs drift with the same
safe engine as update (managed content only, backups before config changes,
user content preserved), then prints a status summary.
kairo sync
kairo sync --dry-run
kairo sync --dry-run --json- No state → recommends
kairo setup, writes nothing. - Already OK → writes nothing.
- Drift/missing/stale → repairs, then shows status.
--jsonuses the same stable envelope asstatus, plus sync fields (action,wrote, planned/applied repairs when present).kairo updateremains as a technical alias.
Read-only audit log of managed operations under ~/.harness/history.jsonl.
Use it to investigate what Kairo Runtime applied without parsing JSONL manually.
kairo history
kairo history --command sync
kairo history --action repaired --limit 10
kairo history last
kairo history last --json
kairo history last --command sync- Filters:
--command,--action,--limit(combine before limiting). history lastprints the most recent matching event; exit 0 when empty.- Queries never write to
~/.harness.
Read-only local diagnostics bundle for support and debugging. Combines status,
policy, adapters, diff/drift preview, and recent history without modifying
~/.harness or agent configs.
kairo report
kairo report --json
kairo report --out ./diagnostics.txt
kairo report --limit 10- Default stdout is human-readable;
--jsonis stable for CI. --out <file>writes only to the path you specify (text or JSON per flags).--limit <n>controls history events included (default 20).- Corrupt
history.jsonllines appear as warnings; valid events still display. - No telemetry and no full config contents — paths, states, and summaries only.
Optional local operation preferences under ~/.harness/policy.json. Use this
when your team wants consistent apply/preflight defaults without repeating CLI
flags on every setup, sync, or upgrade.
kairo policy
kairo policy --json
kairo policy set profile ci
kairo policy set preflight true
kairo policy set agents detected
kairo policy set components orchestrator,sdd-core
kairo policy resetProfiles:
| Profile | Behavior |
|---|---|
safe |
Preflight on; interactive terminal prompts before apply (default). |
ci |
Preflight on; non-interactive apply allowed via policy (applyMode: confirm). |
fast |
Same as ci — preflight on, confirmation via policy instead of a prompt. |
Precedence: CLI flags > policy file > internal defaults. Without a policy
file, behavior matches 0.18.0. policy reset deletes only policy.json; it
does not touch state.json, managed adapters, or installed components.
Keys: profile, applyMode (prompt | confirm), preflight, agents
(detected, all, or a comma-separated list), components.
Visibility (0.20.0+): kairo status, kairo explain, and apply preflight on
setup/sync/upgrade show the effective policy and consent source (cli,
policy, interactive, or none). status --json includes a stable policy
field.
Non-interactive configure. Same engine as setup.
kairo install --dry-run # preview the plan, writes nothing
kairo install # apply
kairo install --agents cursor,claudeWhat it does:
- Detects local agents:
cursor,codex,opencode,claude. If none are detected, it targets all supported agents. - Installs the orchestrator/conductor contract to
~/.harness/core/. - Adds a managed marker section to each agent config
(for example
~/.cursor/AGENTS.md):
<!-- harness:managed:start -->
...managed content, refreshed by kairo sync...
<!-- harness:managed:end -->- Everything outside the markers is user-owned and always preserved.
- Before modifying any existing config it snapshots the file to
~/.harness/backups/<timestamp>/. - Records everything in
~/.harness/state.json. - Set
HARNESS_HOME=/some/dirto redirect the whole managed root (useful for testing and sandboxed environments).
Technical/compatibility alias for the repair engine used by sync. Prefer
kairo sync for day-to-day use. Requires an existing ~/.harness/state.json.
Reports installed agents, managed state, backups, and missing configs. Exits non-zero when managed state or a tracked config is missing.
kairo doctor
kairo doctor --json--json uses the same stable control-plane envelope as status, including the
detailed checks array.
Removes managed sections from agent configs (with a fresh backup first),
deletes ~/.harness/state.json and ~/.harness/core/. Backups are preserved.
Opt-in custom components live in the current repo under .harness/components/.
They never override bundled IDs (orchestrator, sdd-core) and install copies
assets into ~/.harness/components/<id>/ only when you pass --components.
Create, validate, and install:
kairo components init team-rules --label "Team Rules"
# edit .harness/components/team-rules/README.md
kairo components validate
kairo install --components team-rulesAdvanced: share a workspace component between repos (no remote registry):
kairo components pack team-rules --out team-rules.tgz
# copy team-rules.tgz into another repo
kairo components import team-rules.tgz
kairo components validate
kairo install --components team-ruleskairo componentslists bundled and workspace catalogs.kairo components validate [--cwd <path>]runs the same loader used by install/doctor.kairo components init <id> --label "<label>"scaffoldscatalog.json,.harness/components/<id>/README.md, and a catalog entry (version: "0.1.0"). It refuses existing IDs and bundled IDs, and does not write to~/.harness.kairo components pack <id> --out <file>builds a portable.tgz(partial catalog + assets).kairo components import <file>installs declared assets only; no overwrite by default, no~/.harnesswrites, no package scripts.
The workspace harness is not a one-shot copy. Every init writes a manifest
that later update and doctor runs rely on. All workspace commands accept
--scope=workspace; init implies it.
Installs repo-template/ into the target project and writes
.harness/manifest.json with the installed mode, CLI version, and a content
hash for every file the harness created.
kairo init --mode enterprise --all-adapters
kairo install --scope=workspace --mode standard --adapters codex,cursorBy default it never overwrites a file that already exists. Pass --force to
overwrite, or --dry-run to preview without writing anything.
Important behavior:
- Running just
kairo(ornpx/pnpm dlx @kal-elsam/kairo-runtime) now runs the agent-global install, not the workspace scaffold. - Within workspace scope,
mode=standardremains the default. --adaptersinstalls only the requested adapters.--all-adapterskeeps the previous “install everything” behavior.
Supported adapters:
codex, cursor, claude, gemini, copilot, opencode, piRead-only inspection command. It reports the global agents detected on this machine, then the current project stack and adapter markers, and prints the recommended install command.
kairo detectReapplies the current harness templates to an already-installed project.
kairo update --scope=workspace --dry-run # preview: created / updated / unchanged / skipped
kairo update --scope=workspace # apply
kairo update --scope=workspace --force # also overwrite files you modified locallyupdate is conservative by design:
- Files unchanged since install are safely refreshed to the latest template.
- Files you edited locally are skipped unless
--forceis passed. - Files that exist but were never tracked by the harness are left alone.
- New files added in newer harness releases are created.
.harness/manifest.jsonis rewritten with the new hashes, CLI version, and adapter selection.
Read-only health check. Never modifies files.
kairo doctor --scope=workspaceReports each check as OK, WARNING, or MISSING:
- Required files missing (
AGENTS.md,docs/ai/harness.md,docs/ai/memory.md) fail the check (non-zero exit code). - Recommended files missing are reported as warnings.
- If
.harness/manifest.jsonis missing, doctor warns and suggestskairo init. - If a file tracked in the manifest was deleted after install, doctor reports manifest drift.
{
"packageName": "@kal-elsam/kairo-runtime",
"cliVersion": "0.2.0",
"mode": "enterprise",
"adapters": ["codex", "cursor"],
"installedAt": "2026-07-02T18:00:00.000Z",
"updatedAt": "2026-07-02T18:00:00.000Z",
"files": {
"AGENTS.md": "3f9a...",
"docs/ai/harness.md": "8b21..."
}
}This file is the source of truth for what the harness owns in a project. Commit it to version control.
The CLI copies and personalizes repo-template/ into the target project.
Always-installed core depends on the selected mode, and adapter folders are now filtered separately.
Core examples:
AGENTS.md
docs/ai/
docs/skills/
docs/specs/
.gentle-ai/
.harness/
setup-agent-links.shAdapter-specific examples:
.codex/
.cursor/
.claude/
.pi/
.opencode/
.github/copilot-instructions.md
CLAUDE.md
GEMINI.mdFeature/extended examples (mostly standard/enterprise depending on mode):
.github/
evals/
scripts/harness/Core rule:
AGENTS.md governs.
Adapters translate.
MCPs observe and preserve context.
Human approves impact.Engram and Graphify are documented as external integrations: they help with memory and context graphs, but they do not replace the repo as the source of truth.
Built for:
- Cursor-first, but not Cursor-only.
- Gentle AI as the operational reference for SDD/TDD.
- AGENTS.md as the universal source.
- SDD, TDD, evals, checkpoints, review, and human approval.
- Engram/Graphify as external memory, analysis, or context-graph systems without locking the repo to a single tool.
prompts/HARNESS_INSTALLER_MASTER.md
prompts/HARNESS_MINIMAL.md
prompts/HARNESS_STANDARD.md
prompts/HARNESS_ENTERPRISE.md
repo-template/Install from the package:
pnpm dlx @kal-elsam/kairo-runtime install
pnpm dlx @kal-elsam/kairo-runtime detect
pnpm dlx @kal-elsam/kairo-runtime install --scope=workspace --mode standard --adapters codex,cursor
pnpm dlx @kal-elsam/kairo-runtime init --mode enterprise --all-adapters
pnpm dlx @kal-elsam/kairo-runtime doctorManual fallback for a new Cursor project (without the npm package):
- Open the project.
- Copy the contents of
prompts/HARNESS_INSTALLER_MASTER.md. - Paste it into Cursor.
- Specify the mode:
Install the harness in standard mode.Or:
Install the harness in enterprise mode because this project will have AI, API, DB, and external integrations.| Mode | Use case |
|---|---|
| minimal | scripts, technical spikes, landing pages, small prototypes |
| standard | real frontend/backend apps, simple SaaS, medium products |
| enterprise | AI agents, critical workflows, API/DB/auth/evals, multi-agent |
Published on npm as @kal-elsam/kairo-runtime. Releases use npm Trusted Publishing/OIDC
from GitHub Actions — no NPM_TOKEN.
@kal-elsam/harness is published separately as a compatibility bridge from
packages/harness-bridge/ (see bridge README).
| Tag pattern | Package | Publish root |
|---|---|---|
kairo-runtime-v* |
@kal-elsam/kairo-runtime |
repo root |
harness-bridge-v* |
@kal-elsam/harness |
packages/harness-bridge/ |
v* |
legacy / historical root releases | repo root |
Kairo Runtime releases should use kairo-runtime-vX.Y.Z going forward. The first
bootstrap used v0.1.0; later releases use package-aware tags such as
kairo-runtime-v0.1.1.
Before tagging a new version:
npm test
npm run smoke
npm pack --dry-runAfter the release commit, verify attribution was not added to the message:
npm run release:check
git log -1 --format=%BCI also scans commit ranges for attribution trailers:
npm run release:check -- --range origin/main...HEADRelease commits must not include Co-authored-by or other AI attribution
trailers. Do not rewrite published tags; ship a corrective patch version instead.
npm run smoke packs the current source into a tarball, installs it in a
throwaway temp project with a fake HARNESS_HOME, and exercises both scopes end
to end:
- agent-global:
setup --dry-run,status,install,doctor, drift simulation,syncrepair,backups, rollback preview (no writes), rollback apply (with safety backup),uninstall. - workspace:
install --scope=workspace,doctor,update --dry-run.
Release flow (Kairo Runtime):
# bump version in package.json and package-lock.json
git add .
git commit -m "chore: release kairo-runtime 0.1.1"
npm run release:check
git tag kairo-runtime-v0.1.1
git push origin main
git push origin kairo-runtime-v0.1.1Bridge release flow:
# bump packages/harness-bridge/package.json (+ lockfile)
git add .
git commit -m "chore: release harness bridge 0.30.0"
npm run release:check
git tag harness-bridge-v0.30.0
git push origin main
git push origin harness-bridge-v0.30.0Legacy v* tags still publish from the repo root for historical continuity.
After npm publishes the tag, verify published provenance against git and the registry:
git fetch --tags origin
git fetch origin main
npm run release:published -- --version 0.1.1 --tag kairo-runtime-v0.1.1
npm run smoke:registry -- --version 0.1.1
npm run smoke:installer -- --version 0.1.1 --tag kairo-runtime-v0.1.1
npm run smoke:bridgerelease:published checks npm version, npm gitHead, the release git tag on
origin, and origin/main. Override the package and tag when needed:
npm run release:published -- \
--package @kal-elsam/kairo-runtime \
--tag kairo-runtime-v0.1.1 \
--version 0.1.1
npm run release:published -- \
--package @kal-elsam/harness \
--tag harness-bridge-v0.30.0 \
--version 0.30.0Without --tag, provenance checks fall back to v${version} (legacy tags).
smoke:registry installs @kal-elsam/kairo-runtime from the npm registry (not the local tarball) into a throwaway workspace with a fake HARNESS_HOME and npm cache, then runs the recommended flow via kairo: setup --dry-run, setup --yes, status, drift simulation, sync, status --json (expects overall=ok), and uninstall. Use latest by default, pin with --version x.y.z, or override with --package.
smoke:installer validates the public one-liner path: curl .../install.sh | sh against GitHub raw and the npm registry with isolated HARNESS_HOME. Preview must not write ~/.harness; --yes --agents all must reach kairo status --json with overall=ok, then kairo uninstall must remove managed sections. Pin with --version x.y.z after publish. For package-aware Kairo Runtime tags, pass the git tag explicitly:
npm run smoke:installer -- --version 0.1.1 --tag kairo-runtime-v0.1.1Without --tag, the install script resolves from legacy v${version} tags.
Suggested first Kairo Runtime tag after bootstrap: kairo-runtime-v0.1.1.
The publish.yml workflow runs on v*, kairo-runtime-v*, and harness-bridge-v*
tags and publishes to npm using the npm-publish environment.
It runs npm run release:check on HEAD immediately before npm publish.
See the full policy in SECURITY.md.
The agent must not operate as a free-form programmer.
Requirement
→ Spec
→ Plan
→ Tests failing first
→ Implementation
→ Validation
→ Review
→ Human approvalAfter installing the harness in a repo, run:
/sdd-init
gentle-ai skill-registry refresh
gentle-ai doctor/sdd-init detects stack and testing.
skill-registry refresh updates the skill registry.
doctor checks ecosystem health.
This pack does not assume a specific implementation. It defines integration points in:
docs/ai/context-graph.md
docs/ai/memory.md
docs/skills/context-graph.mdThe rule:
- The repo keeps the source of truth in Markdown.
- Engram can index decisions, specs, memory, and conventions.
- Graphify can build the architecture graph: modules, dependencies, features, and risks.
- No external memory replaces
AGENTS.md,docs/ai/, or the code.
This version adds:
docs/ai/model-policy.mddocs/ai/provider-routing.mddocs/ai/tool-adapters.mddocs/ai/context-budget.mddocs/skills/model-selection.mddocs/skills/tool-adapter-sync.md- Adapters for Codex, Claude, Gemini, GitHub Copilot, Cursor, and Gentle AI
- Codex skills: SDD, TDD, evals, checkpoint
- Claude agents/skills pointers
- Gemini pointer
- SDD subagents per phase
- Explicit policy for cost-efficient models such as DeepSeek
v2 principle:
Universal core first.
Tool adapters second.
Model providers third.Cursor remains the primary editor, but not the source of truth.
This version adds Loop Engineering as a formal harness layer and positions OpenCode + Gentle AI + DeepSeek as the primary execution adapter for this flow.
OpenCode executes.
Gentle AI structures SDD/TDD.
DeepSeek iterates cheaply.
Harness governs.
Loops repair with boundaries.
Evals validate.
Graphify observes dependencies.
Engram preserves learning.
Human approves impact.New modules:
docs/ai/loops.md
docs/ai/loop-policy.md
docs/ai/loop-observability.md
docs/ai/loop-log.md
docs/skills/loop-design.md
docs/skills/loop-debugging.md
docs/skills/loop-review.md
docs/skills/loop-retrospective.md
.opencode/
.gentle-ai/loops/
evals/loop-regression/This version corrects the interpretation that the harness is OpenCode-based.
v4 rule:
AGENTS.md governs.
docs/ai defines.
docs/skills operationalize.
docs/specs specify.
evals validate.
Adapters translate.
Models execute.
Humans approve impact.OpenCode may be the user's preferred runtime because Gentle AI + DeepSeek live there, but it has no higher authority than Cursor, Codex, Claude, Gemini, or Pi.
Key new document:
docs/ai/adapter-parity.mdNew rule:
No adapter is primary by authority.
An adapter can be primary only by workflow preference.
The core universal remains the governance layer.This version moves the harness closer to a real control plane — beyond methodology and documentation.
Docs guide.
Policies constrain.
CI gates enforce.
Evals measure.
Hooks block unsafe actions.
Trust policy protects skills/tools.
Installer manages lifecycle.New modules:
docs/ai/enforcement.md
docs/ai/quality-gates.md
docs/ai/eval-strategy.md
docs/ai/trust-policy.md
docs/ai/installer-cli.md
docs/ai/observability-runtime.md
docs/ai/rollback-runtime.md
docs/ai/maintainability-gates.md
.github/workflows/harness-quality-gate.yml
.github/workflows/harness-security-gate.yml
.github/dependabot.yml
scripts/harness/
evals/golden/
evals/tool-calls/
evals/schema/
evals/regression/This version adds explicit feature/task spec sizing.
The harness already had installation modes:
minimal
standard
enterpriseBut those describe harness installation size, not the complexity of a feature spec.
v6 adds:
basic spec
standard spec
complex specRule:
Do not force complex SDD on simple tasks.
Do not allow basic specs for high-impact work.
Spec complexity must match risk, ambiguity, architecture impact, testability and blast radius.New core files:
docs/ai/spec-sizing.md
docs/ai/spec-intake.md
docs/ai/spec-escalation.md
docs/specs/templates/basic-spec.md
docs/specs/templates/standard-spec.md
docs/specs/templates/complex-spec.md
docs/skills/spec-complexity-classifier.md
docs/skills/spec-intake.md
docs/skills/spec-escalation-review.md