{
  "name": "agent-harness",
  "version": "0.13.1",
  "repo": "https://github.com/JakeSelby/agent-harness",
  "counts": {
    "rules": 10,
    "stanceDimensions": 9,
    "stanceVariants": 26,
    "skills": 15,
    "agents": 11,
    "commands": 7,
    "hooks": 11,
    "outputStyles": 1,
    "docs": 29
  },
  "routes": [
    {
      "route": "/",
      "kind": "page",
      "id": "overview",
      "title": "Overview",
      "source": "README.md"
    },
    {
      "route": "/install/",
      "kind": "page",
      "id": "install",
      "title": "Install and configure",
      "source": "README.md"
    },
    {
      "route": "/compatibility/",
      "kind": "page",
      "id": "compatibility",
      "title": "Compatibility",
      "source": "compatibility/catalog.json"
    },
    {
      "route": "/cli/",
      "kind": "page",
      "id": "cli",
      "title": "The CLI",
      "source": "bin/harness"
    },
    {
      "route": "/rules/",
      "kind": "index",
      "id": "rules",
      "title": "Rules",
      "source": "primitives/rules"
    },
    {
      "route": "/stances/",
      "kind": "index",
      "id": "stances",
      "title": "Stances",
      "source": "primitives/stances"
    },
    {
      "route": "/skills/",
      "kind": "index",
      "id": "skills",
      "title": "Skills",
      "source": "primitives/skills"
    },
    {
      "route": "/agents/",
      "kind": "index",
      "id": "agents",
      "title": "Roles",
      "source": "primitives/roles"
    },
    {
      "route": "/commands/",
      "kind": "index",
      "id": "commands",
      "title": "Workflows",
      "source": "primitives/workflows"
    },
    {
      "route": "/hooks/",
      "kind": "index",
      "id": "hooks",
      "title": "Hooks",
      "source": "policy/hooks"
    },
    {
      "route": "/output-styles/",
      "kind": "index",
      "id": "output-styles",
      "title": "Output style",
      "source": "primitives/presentation"
    },
    {
      "route": "/docs/",
      "kind": "index",
      "id": "docs",
      "title": "Docs",
      "source": "docs"
    },
    {
      "route": "/stances/autonomy/",
      "kind": "stance-dimension",
      "id": "autonomy",
      "title": "Autonomy",
      "source": "primitives/stances/autonomy"
    },
    {
      "route": "/stances/build-vs-buy/",
      "kind": "stance-dimension",
      "id": "build-vs-buy",
      "title": "Build vs buy",
      "source": "primitives/stances/build-vs-buy"
    },
    {
      "route": "/stances/commits/",
      "kind": "stance-dimension",
      "id": "commits",
      "title": "Commits",
      "source": "primitives/stances/commits"
    },
    {
      "route": "/stances/cost/",
      "kind": "stance-dimension",
      "id": "cost",
      "title": "Cost",
      "source": "primitives/stances/cost"
    },
    {
      "route": "/stances/delegation/",
      "kind": "stance-dimension",
      "id": "delegation",
      "title": "Delegation",
      "source": "primitives/stances/delegation"
    },
    {
      "route": "/stances/licensing/",
      "kind": "stance-dimension",
      "id": "licensing",
      "title": "Licensing",
      "source": "primitives/stances/licensing"
    },
    {
      "route": "/stances/plan-ceremony/",
      "kind": "stance-dimension",
      "id": "plan-ceremony",
      "title": "Plan ceremony",
      "source": "primitives/stances/plan-ceremony"
    },
    {
      "route": "/stances/testing/",
      "kind": "stance-dimension",
      "id": "testing",
      "title": "Testing",
      "source": "primitives/stances/testing"
    },
    {
      "route": "/stances/voice/",
      "kind": "stance-dimension",
      "id": "voice",
      "title": "Voice",
      "source": "primitives/stances/voice"
    },
    {
      "route": "/rules/cache-hygiene/",
      "kind": "rules",
      "id": "cache-hygiene",
      "title": "Cache hygiene",
      "source": "primitives/rules/cache-hygiene.md"
    },
    {
      "route": "/rules/conciseness/",
      "kind": "rules",
      "id": "conciseness",
      "title": "Comment and doc conciseness, in code and docs",
      "source": "primitives/rules/conciseness.md"
    },
    {
      "route": "/rules/decisions-and-plans/",
      "kind": "rules",
      "id": "decisions-and-plans",
      "title": "Decisions and plans",
      "source": "primitives/rules/decisions-and-plans.md"
    },
    {
      "route": "/rules/delegation/",
      "kind": "rules",
      "id": "delegation",
      "title": "Delegation",
      "source": "primitives/rules/delegation.md"
    },
    {
      "route": "/rules/research-and-verification/",
      "kind": "rules",
      "id": "research-and-verification",
      "title": "Research and verification",
      "source": "primitives/rules/research-and-verification.md"
    },
    {
      "route": "/rules/secrets/",
      "kind": "rules",
      "id": "secrets",
      "title": "Secret hygiene, wherever files are tracked",
      "source": "primitives/rules/secrets.md"
    },
    {
      "route": "/rules/transcript-hygiene/",
      "kind": "rules",
      "id": "transcript-hygiene",
      "title": "Transcript hygiene",
      "source": "primitives/rules/transcript-hygiene.md"
    },
    {
      "route": "/rules/verification/",
      "kind": "rules",
      "id": "verification",
      "title": "Verification gates, in a code repository",
      "source": "primitives/rules/verification.md"
    },
    {
      "route": "/rules/voice-and-format/",
      "kind": "rules",
      "id": "voice-and-format",
      "title": "Voice and output format",
      "source": "primitives/rules/voice-and-format.md"
    },
    {
      "route": "/rules/working-style/",
      "kind": "rules",
      "id": "working-style",
      "title": "Working style",
      "source": "primitives/rules/working-style.md"
    },
    {
      "route": "/stances/autonomy/ask/",
      "kind": "stances",
      "id": "autonomy/ask",
      "title": "Autonomy stance: ask",
      "source": "primitives/stances/autonomy/ask.md"
    },
    {
      "route": "/stances/autonomy/confirm-writes/",
      "kind": "stances",
      "id": "autonomy/confirm-writes",
      "title": "Autonomy stance: confirm writes",
      "source": "primitives/stances/autonomy/confirm-writes.md"
    },
    {
      "route": "/stances/autonomy/execute/",
      "kind": "stances",
      "id": "autonomy/execute",
      "title": "Autonomy stance: execute, don't hand back",
      "source": "primitives/stances/autonomy/execute.md"
    },
    {
      "route": "/stances/build-vs-buy/capability-ceiling/",
      "kind": "stances",
      "id": "build-vs-buy/capability-ceiling",
      "title": "Build-versus-buy stance: weigh capability ceilings",
      "source": "primitives/stances/build-vs-buy/capability-ceiling.md"
    },
    {
      "route": "/stances/build-vs-buy/off/",
      "kind": "stances",
      "id": "build-vs-buy/off",
      "title": "Build-versus-buy stance: off",
      "source": "primitives/stances/build-vs-buy/off.md"
    },
    {
      "route": "/stances/commits/as-you-go/",
      "kind": "stances",
      "id": "commits/as-you-go",
      "title": "Commits stance: commit as you go",
      "source": "primitives/stances/commits/as-you-go.md"
    },
    {
      "route": "/stances/commits/conventional-attributed/",
      "kind": "stances",
      "id": "commits/conventional-attributed",
      "title": "Commits stance: Conventional Commits, gated pushes, attributed",
      "source": "primitives/stances/commits/conventional-attributed.md"
    },
    {
      "route": "/stances/commits/conventional/",
      "kind": "stances",
      "id": "commits/conventional",
      "title": "Commits stance: Conventional Commits, gated pushes",
      "source": "primitives/stances/commits/conventional.md"
    },
    {
      "route": "/stances/commits/off/",
      "kind": "stances",
      "id": "commits/off",
      "title": "Commits stance: off",
      "source": "primitives/stances/commits/off.md"
    },
    {
      "route": "/stances/cost/balanced/",
      "kind": "stances",
      "id": "cost/balanced",
      "title": "Cost stance: balanced",
      "source": "primitives/stances/cost/balanced.md"
    },
    {
      "route": "/stances/cost/frugal/",
      "kind": "stances",
      "id": "cost/frugal",
      "title": "Cost stance: frugal",
      "source": "primitives/stances/cost/frugal.md"
    },
    {
      "route": "/stances/cost/max/",
      "kind": "stances",
      "id": "cost/max",
      "title": "Cost stance: max",
      "source": "primitives/stances/cost/max.md"
    },
    {
      "route": "/stances/delegation/off/",
      "kind": "stances",
      "id": "delegation/off",
      "title": "Delegation stance: off",
      "source": "primitives/stances/delegation/off.md"
    },
    {
      "route": "/stances/delegation/session-model/",
      "kind": "stances",
      "id": "delegation/session-model",
      "title": "Delegation stance: session model everywhere",
      "source": "primitives/stances/delegation/session-model.md"
    },
    {
      "route": "/stances/delegation/tiered/",
      "kind": "stances",
      "id": "delegation/tiered",
      "title": "Delegation stance: tiered models",
      "source": "primitives/stances/delegation/tiered.md"
    },
    {
      "route": "/stances/licensing/off/",
      "kind": "stances",
      "id": "licensing/off",
      "title": "Licensing stance: off",
      "source": "primitives/stances/licensing/off.md"
    },
    {
      "route": "/stances/licensing/open-source/",
      "kind": "stances",
      "id": "licensing/open-source",
      "title": "Licensing stance: open-source project",
      "source": "primitives/stances/licensing/open-source.md"
    },
    {
      "route": "/stances/licensing/permissive-commercial/",
      "kind": "stances",
      "id": "licensing/permissive-commercial",
      "title": "Licensing stance: permissive, commercial-safe",
      "source": "primitives/stances/licensing/permissive-commercial.md"
    },
    {
      "route": "/stances/plan-ceremony/light/",
      "kind": "stances",
      "id": "plan-ceremony/light",
      "title": "Plan ceremony stance: light",
      "source": "primitives/stances/plan-ceremony/light.md"
    },
    {
      "route": "/stances/plan-ceremony/review-card/",
      "kind": "stances",
      "id": "plan-ceremony/review-card",
      "title": "Plan ceremony stance: Review Card and build gate",
      "source": "primitives/stances/plan-ceremony/review-card.md"
    },
    {
      "route": "/stances/testing/off/",
      "kind": "stances",
      "id": "testing/off",
      "title": "Testing stance: off",
      "source": "primitives/stances/testing/off.md"
    },
    {
      "route": "/stances/testing/pragmatic/",
      "kind": "stances",
      "id": "testing/pragmatic",
      "title": "Testing stance: pragmatic",
      "source": "primitives/stances/testing/pragmatic.md"
    },
    {
      "route": "/stances/testing/required/",
      "kind": "stances",
      "id": "testing/required",
      "title": "Testing stance: required",
      "source": "primitives/stances/testing/required.md"
    },
    {
      "route": "/stances/voice/answer-card/",
      "kind": "stances",
      "id": "voice/answer-card",
      "title": "Voice: answer card",
      "source": "primitives/stances/voice/answer-card.md"
    },
    {
      "route": "/stances/voice/off/",
      "kind": "stances",
      "id": "voice/off",
      "title": "Voice: off",
      "source": "primitives/stances/voice/off.md"
    },
    {
      "route": "/stances/voice/scannable/",
      "kind": "stances",
      "id": "voice/scannable",
      "title": "Voice: scannable",
      "source": "primitives/stances/voice/scannable.md"
    },
    {
      "route": "/skills/api-verification/",
      "kind": "skills",
      "id": "api-verification",
      "title": "api-verification",
      "source": "primitives/skills/api-verification/SKILL.md"
    },
    {
      "route": "/skills/architecture-viewer/",
      "kind": "skills",
      "id": "architecture-viewer",
      "title": "architecture-viewer",
      "source": "primitives/skills/architecture-viewer/SKILL.md"
    },
    {
      "route": "/skills/code-quality-instruments/",
      "kind": "skills",
      "id": "code-quality-instruments",
      "title": "code-quality-instruments",
      "source": "primitives/skills/code-quality-instruments/SKILL.md"
    },
    {
      "route": "/skills/delegation-tiering/",
      "kind": "skills",
      "id": "delegation-tiering",
      "title": "delegation-tiering",
      "source": "primitives/skills/delegation-tiering/SKILL.md"
    },
    {
      "route": "/skills/design-loop/",
      "kind": "skills",
      "id": "design-loop",
      "title": "design-loop",
      "source": "primitives/skills/design-loop/SKILL.md"
    },
    {
      "route": "/skills/harness-authoring/",
      "kind": "skills",
      "id": "harness-authoring",
      "title": "harness-authoring",
      "source": "primitives/skills/harness-authoring/SKILL.md"
    },
    {
      "route": "/skills/licensing-review/",
      "kind": "skills",
      "id": "licensing-review",
      "title": "licensing-review",
      "source": "primitives/skills/licensing-review/SKILL.md"
    },
    {
      "route": "/skills/migration-safety/",
      "kind": "skills",
      "id": "migration-safety",
      "title": "migration-safety",
      "source": "primitives/skills/migration-safety/SKILL.md"
    },
    {
      "route": "/skills/plan-authoring/",
      "kind": "skills",
      "id": "plan-authoring",
      "title": "plan-authoring",
      "source": "primitives/skills/plan-authoring/SKILL.md"
    },
    {
      "route": "/skills/sandbox/",
      "kind": "skills",
      "id": "sandbox",
      "title": "sandbox",
      "source": "primitives/skills/sandbox/SKILL.md"
    },
    {
      "route": "/skills/spike-contract/",
      "kind": "skills",
      "id": "spike-contract",
      "title": "spike-contract",
      "source": "primitives/skills/spike-contract/SKILL.md"
    },
    {
      "route": "/skills/transcript-hygiene/",
      "kind": "skills",
      "id": "transcript-hygiene",
      "title": "transcript-hygiene",
      "source": "primitives/skills/transcript-hygiene/SKILL.md"
    },
    {
      "route": "/skills/upstream-contribution/",
      "kind": "skills",
      "id": "upstream-contribution",
      "title": "upstream-contribution",
      "source": "primitives/skills/upstream-contribution/SKILL.md"
    },
    {
      "route": "/skills/workflow-status/",
      "kind": "skills",
      "id": "workflow-status",
      "title": "workflow-status",
      "source": "primitives/skills/workflow-status/SKILL.md"
    },
    {
      "route": "/skills/worktree-per-agent/",
      "kind": "skills",
      "id": "worktree-per-agent",
      "title": "worktree-per-agent",
      "source": "primitives/skills/worktree-per-agent/SKILL.md"
    },
    {
      "route": "/agents/builder/",
      "kind": "agents",
      "id": "builder",
      "title": "builder",
      "source": "primitives/roles/builder.md"
    },
    {
      "route": "/agents/design-judge/",
      "kind": "agents",
      "id": "design-judge",
      "title": "design-judge",
      "source": "primitives/roles/design-judge.md"
    },
    {
      "route": "/agents/designer/",
      "kind": "agents",
      "id": "designer",
      "title": "designer",
      "source": "primitives/roles/designer.md"
    },
    {
      "route": "/agents/gatherer/",
      "kind": "agents",
      "id": "gatherer",
      "title": "gatherer",
      "source": "primitives/roles/gatherer.md"
    },
    {
      "route": "/agents/log-compressor/",
      "kind": "agents",
      "id": "log-compressor",
      "title": "log-compressor",
      "source": "primitives/roles/log-compressor.md"
    },
    {
      "route": "/agents/planner/",
      "kind": "agents",
      "id": "planner",
      "title": "planner",
      "source": "primitives/roles/planner.md"
    },
    {
      "route": "/agents/reviewer/",
      "kind": "agents",
      "id": "reviewer",
      "title": "reviewer",
      "source": "primitives/roles/reviewer.md"
    },
    {
      "route": "/agents/spec-reviewer/",
      "kind": "agents",
      "id": "spec-reviewer",
      "title": "spec-reviewer",
      "source": "primitives/roles/spec-reviewer.md"
    },
    {
      "route": "/agents/worker-a/",
      "kind": "agents",
      "id": "worker-a",
      "title": "worker-a",
      "source": "primitives/roles/worker-a.md"
    },
    {
      "route": "/agents/worker-b/",
      "kind": "agents",
      "id": "worker-b",
      "title": "worker-b",
      "source": "primitives/roles/worker-b.md"
    },
    {
      "route": "/agents/worker-c/",
      "kind": "agents",
      "id": "worker-c",
      "title": "worker-c",
      "source": "primitives/roles/worker-c.md"
    },
    {
      "route": "/commands/research/",
      "kind": "commands",
      "id": "research",
      "title": "/research",
      "source": "primitives/workflows/research.md"
    },
    {
      "route": "/commands/plan/",
      "kind": "commands",
      "id": "plan",
      "title": "/plan",
      "source": "primitives/workflows/plan.md"
    },
    {
      "route": "/commands/build/",
      "kind": "commands",
      "id": "build",
      "title": "/build",
      "source": "primitives/workflows/build.md"
    },
    {
      "route": "/commands/review/",
      "kind": "commands",
      "id": "review",
      "title": "/review",
      "source": "primitives/workflows/review.md"
    },
    {
      "route": "/commands/land/",
      "kind": "commands",
      "id": "land",
      "title": "/land",
      "source": "primitives/workflows/land.md"
    },
    {
      "route": "/commands/handoff/",
      "kind": "commands",
      "id": "handoff",
      "title": "/handoff",
      "source": "primitives/workflows/handoff.md"
    },
    {
      "route": "/commands/close-out/",
      "kind": "commands",
      "id": "close-out",
      "title": "/close-out",
      "source": "primitives/workflows/close-out.md"
    },
    {
      "route": "/hooks/session/",
      "kind": "hooks",
      "id": "session",
      "title": "session",
      "source": "policy/hooks/harness-session.py"
    },
    {
      "route": "/hooks/brief-guard/",
      "kind": "hooks",
      "id": "brief-guard",
      "title": "brief-guard",
      "source": "policy/hooks/brief-guard.py"
    },
    {
      "route": "/hooks/filter-output/",
      "kind": "hooks",
      "id": "filter-output",
      "title": "filter-output",
      "source": "policy/hooks/filter-output.py"
    },
    {
      "route": "/hooks/grade-bash/",
      "kind": "hooks",
      "id": "grade-bash",
      "title": "grade-bash",
      "source": "policy/hooks/grade-bash.py"
    },
    {
      "route": "/hooks/plan-webfetch/",
      "kind": "hooks",
      "id": "plan-webfetch",
      "title": "plan-webfetch",
      "source": "policy/hooks/allow-plan-webfetch.py"
    },
    {
      "route": "/hooks/readonly-bash/",
      "kind": "hooks",
      "id": "readonly-bash",
      "title": "readonly-bash",
      "source": "policy/hooks/allow-readonly-bash.py"
    },
    {
      "route": "/hooks/tier-spawns/",
      "kind": "hooks",
      "id": "tier-spawns",
      "title": "tier-spawns",
      "source": "policy/hooks/tier-agent-spawns.py"
    },
    {
      "route": "/hooks/neutralize/",
      "kind": "hooks",
      "id": "neutralize",
      "title": "neutralize",
      "source": "policy/hooks/neutralize-tool-output.py"
    },
    {
      "route": "/hooks/plan-card/",
      "kind": "hooks",
      "id": "plan-card",
      "title": "plan-card",
      "source": "policy/hooks/validate-plan-card.py"
    },
    {
      "route": "/hooks/stop-gate/",
      "kind": "hooks",
      "id": "stop-gate",
      "title": "stop-gate",
      "source": "policy/hooks/stop-gate.py"
    },
    {
      "route": "/hooks/usage-log/",
      "kind": "hooks",
      "id": "usage-log",
      "title": "usage-log",
      "source": "policy/hooks/usage-log.py"
    },
    {
      "route": "/output-styles/scannable/",
      "kind": "output-styles",
      "id": "scannable",
      "title": "Scannable",
      "source": "primitives/presentation/scannable.md"
    },
    {
      "route": "/docs/benchmarks/",
      "kind": "docs",
      "id": "benchmarks",
      "title": "Cost benchmarks",
      "source": "docs/benchmarks.md"
    },
    {
      "route": "/docs/bmad-governance/",
      "kind": "docs",
      "id": "bmad-governance",
      "title": "BMad repository governance",
      "source": "docs/bmad-governance.md"
    },
    {
      "route": "/docs/bmad/",
      "kind": "docs",
      "id": "bmad",
      "title": "BMad in agent-harness and downstream repositories",
      "source": "docs/bmad.md"
    },
    {
      "route": "/docs/caught-in-the-act/",
      "kind": "docs",
      "id": "caught-in-the-act",
      "title": "Caught in the act",
      "source": "docs/caught-in-the-act.md"
    },
    {
      "route": "/docs/comparison/",
      "kind": "docs",
      "id": "comparison",
      "title": "Comparing harnesses",
      "source": "docs/comparison.md"
    },
    {
      "route": "/docs/compatibility-policy/",
      "kind": "docs",
      "id": "compatibility-policy",
      "title": "Compatibility and release policy",
      "source": "docs/compatibility-policy.md"
    },
    {
      "route": "/docs/compatibility/",
      "kind": "docs",
      "id": "compatibility",
      "title": "What is supported",
      "source": "docs/compatibility.md"
    },
    {
      "route": "/docs/field-scan/",
      "kind": "docs",
      "id": "field-scan",
      "title": "Field scan: what the configuration-compiler field does, and where this harness sits",
      "source": "docs/field-scan.md"
    },
    {
      "route": "/docs/getting-started/",
      "kind": "docs",
      "id": "getting-started",
      "title": "Start with your way of working",
      "source": "docs/getting-started.md"
    },
    {
      "route": "/docs/how-it-works/",
      "kind": "docs",
      "id": "how-it-works",
      "title": "How the shared harness works",
      "source": "docs/how-it-works.md"
    },
    {
      "route": "/docs/preferences/",
      "kind": "docs",
      "id": "preferences",
      "title": "Preferences",
      "source": "docs/preferences.md"
    },
    {
      "route": "/docs/primitive-authoring/",
      "kind": "docs",
      "id": "primitive-authoring",
      "title": "Your primitives, your working style",
      "source": "docs/primitive-authoring.md"
    },
    {
      "route": "/docs/provenance/",
      "kind": "docs",
      "id": "provenance",
      "title": "Provenance",
      "source": "docs/provenance.md"
    },
    {
      "route": "/docs/qualification-runbook/",
      "kind": "docs",
      "id": "qualification-runbook",
      "title": "Native qualification runbook",
      "source": "docs/qualification-runbook.md"
    },
    {
      "route": "/docs/releasing/",
      "kind": "docs",
      "id": "releasing",
      "title": "Coordinate a harness release and its public surfaces",
      "source": "docs/releasing.md"
    },
    {
      "route": "/docs/remote-control/",
      "kind": "docs",
      "id": "remote-control",
      "title": "Remote Control servers",
      "source": "docs/remote-control.md"
    },
    {
      "route": "/docs/role-workers/",
      "kind": "docs",
      "id": "role-workers",
      "title": "Run a shared role with constrained authority",
      "source": "docs/role-workers.md"
    },
    {
      "route": "/docs/runtime-controls/",
      "kind": "docs",
      "id": "runtime-controls",
      "title": "Runtime controls",
      "source": "docs/runtime-controls.md"
    },
    {
      "route": "/docs/runtime-installation/",
      "kind": "docs",
      "id": "runtime-installation",
      "title": "Installing shared primitives into agent runtimes",
      "source": "docs/runtime-installation.md"
    },
    {
      "route": "/docs/sandboxing/",
      "kind": "docs",
      "id": "sandboxing",
      "title": "Sandboxing",
      "source": "docs/sandboxing.md"
    },
    {
      "route": "/docs/settings-ownership/",
      "kind": "docs",
      "id": "settings-ownership",
      "title": "Settings ownership",
      "source": "docs/settings-ownership.md"
    },
    {
      "route": "/docs/stance-demo/",
      "kind": "docs",
      "id": "stance-demo",
      "title": "One personal switch, two runtime projections",
      "source": "docs/stance-demo.md"
    },
    {
      "route": "/docs/standalone-measurement/",
      "kind": "docs",
      "id": "standalone-measurement",
      "title": "Measuring without the harness",
      "source": "docs/standalone-measurement.md"
    },
    {
      "route": "/docs/sync-model/",
      "kind": "docs",
      "id": "sync-model",
      "title": "Synchronization and drift",
      "source": "docs/sync-model.md"
    },
    {
      "route": "/docs/task-continuation/",
      "kind": "docs",
      "id": "task-continuation",
      "title": "Continue a task in either runtime",
      "source": "docs/task-continuation.md"
    },
    {
      "route": "/docs/telemetry/",
      "kind": "docs",
      "id": "telemetry",
      "title": "Exporting the ledger",
      "source": "docs/telemetry.md"
    },
    {
      "route": "/docs/usage/",
      "kind": "docs",
      "id": "usage",
      "title": "Usage telemetry",
      "source": "docs/usage.md"
    },
    {
      "route": "/docs/viewer-integrations/",
      "kind": "docs",
      "id": "viewer-integrations",
      "title": "Interchangeable architecture viewers",
      "source": "docs/viewer-integrations.md"
    },
    {
      "route": "/docs/workspaces/",
      "kind": "docs",
      "id": "workspaces",
      "title": "Workspaces",
      "source": "docs/workspaces.md"
    },
    {
      "route": "/changelog/",
      "kind": "docs",
      "id": "changelog",
      "title": "Changelog",
      "source": "CHANGELOG.md"
    },
    {
      "route": "/contributing/",
      "kind": "docs",
      "id": "contributing",
      "title": "Contributing",
      "source": "CONTRIBUTING.md"
    }
  ],
  "compatibility": {
    "schema_version": 1,
    "harness_version": "0.13.1",
    "release_state": "released",
    "required_cases": [
      "installation",
      "stance-switch",
      "custom-stance",
      "permission-controls",
      "hook-composition",
      "role-confinement",
      "cost-posture",
      "gate-invalidation",
      "framework-spawn-routing",
      "bidirectional-handoff",
      "migration-uninstall",
      "spawn-confinement"
    ],
    "evidence_invalidation": {
      "version": 1,
      "runtime_paths": {
        "claude-code": "adapters/claude-code",
        "codex": "adapters/codex"
      },
      "shared_files": [
        "bindings.json",
        "capabilities.json",
        "worker.py"
      ],
      "runtime_files": [
        "hook.py"
      ]
    },
    "clients": [
      {
        "id": "claude-code-cli-macos",
        "runtime": "claude-code",
        "provider": "anthropic",
        "client": "cli",
        "platform": "macos",
        "status": "qualified",
        "required_for_release": true,
        "evidence": [
          {
            "path": "compatibility/evidence/claude-code-cli-macos-0.13.1.json",
            "sha256": "4efd04635420695abf659001557f825b5e1f2668473f334858e4d32f9bce48af"
          }
        ],
        "runtime_version": "2.1.280",
        "client_version": "2.1.280"
      },
      {
        "id": "claude-code-vscode-macos",
        "runtime": "claude-code",
        "provider": "anthropic",
        "client": "vscode",
        "platform": "macos",
        "status": "unqualified",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "claude-code-cli-linux",
        "runtime": "claude-code",
        "provider": "anthropic",
        "client": "cli",
        "platform": "linux",
        "status": "qualified",
        "required_for_release": true,
        "evidence": [
          {
            "path": "compatibility/evidence/claude-code-cli-linux-0.13.1.json",
            "sha256": "f8beef165eabc4232a3829a5d94ce28730953db6273840686dc9da85319f75ba"
          }
        ],
        "runtime_version": "2.1.278",
        "client_version": "2.1.278"
      },
      {
        "id": "claude-code-plugin-marketplace",
        "runtime": "claude-code",
        "provider": "anthropic",
        "client": "plugin-marketplace",
        "platform": "unspecified",
        "installs_hooks": false,
        "status": "unqualified",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "codex-cli-macos",
        "runtime": "codex",
        "provider": "openai",
        "client": "cli",
        "platform": "macos",
        "status": "unqualified",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "codex-vscode-macos",
        "runtime": "codex",
        "provider": "openai",
        "client": "vscode",
        "platform": "macos",
        "status": "unqualified",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "codex-desktop-macos",
        "runtime": "codex",
        "provider": "openai",
        "client": "desktop",
        "platform": "macos",
        "status": "unqualified",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "codex-cli-linux",
        "runtime": "codex",
        "provider": "openai",
        "client": "cli",
        "platform": "linux",
        "status": "unqualified",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "cursor",
        "runtime": "cursor",
        "provider": "multiple",
        "client": "editor",
        "platform": "unspecified",
        "status": "planned",
        "required_for_release": false,
        "evidence": []
      },
      {
        "id": "grok",
        "runtime": "undecided",
        "provider": "xai",
        "client": "undecided",
        "platform": "unspecified",
        "status": "planned",
        "required_for_release": false,
        "evidence": []
      }
    ],
    "limitations": [
      "Claude Code Auto Mode depends on native runtime and provider access; model unavailability is a visible limitation, not a passing qualification result.",
      "Direct native Codex role defaults can inherit parent permissions; constrained harness roles use isolated CLI workers instead.",
      "Planner publication is mediated by the harness after constrained workers return result data.",
      "The architecture-viewer integration is a preview for a separately installed implementation. A local protocol 1 candidate passed process-level harness acceptance; no viewer is bundled, and native viewer interaction and distribution/license clearance remain unverified.",
      "The usage feed is a Claude Code capability: Codex raises none of UserPromptSubmit, SubagentStart or SubagentStop, so turn spend, the fresh-session nudge, in-flight width and finished-subagent spend are not fed back there and no such event is registered.",
      "Cursor and Grok integration, hosted agents and native memory merging are planned or deferred.",
      "BMad review confinement is requested in the routed layer text rather than enforced at the spawn hook: a client can run a review layer as an unnamed native subagent, unconfined, and still report a result. Observed on Claude Code; a confined run writes isolated-worker state. Tracked in #291.",
      "On Codex, output-filter rewrites are never applied: a rewrite travels only with an allow, and the filtered commands are not auto-allowed. Tracked in #292.",
      "Under Codex auto permissions an isolated role worker launched from inside a sandboxed turn has no network access and stalls until its deadline; it completes under an acknowledged bypass. Tracked in #293.",
      "harness sync links user-level stance selections only; a HARNESS_STANCE_ variable or a project selection changes what harness stances and the hooks resolve, not the linked stance text. Tracked in #276 and #294.",
      "The 0.11.1 spawn guards refuse a constrained role's brief re-issued verbatim under another name, or carrying a `harness-role:` line; a client that paraphrases the brief and names no role is not caught, so BMad review confinement still depends on the client following the routed instructions. Tracked in #291 and #300.",
      "No third-party framework's own workflow is exercised natively in a release qualification round. Framework layering is qualified through a synthetic recipe driven at the spawn hook; that a given framework's workflow completes on a given client is not claimed by a release. The BMad Method integration is exercised by an optional suite whose last result is recorded separately, at the harness version, framework version and client stated there.",
      "Constrained-role confinement is enforced at the spawn hook only for a framework a declared descriptor covers. From 0.13.0 the hook classifies a spawn against the descriptors in policy/integrations/, so a covered recipe layer is refused whatever the client named it, and the two entries above describe 0.11.1 through 0.12.0 and stop applying at that release. What remains: recognition needs one of the framework's own layer names as the spawn type, or two sentences of its prompt text, or one of those sentences beside a path out of its routed text, so a brief rewritten with none of that, or a framework or a release no descriptor covers, still runs as an unnamed native subagent, unconfined, and can still report a result. Observed on the Claude Code CLI on Linux, where one confined run required five attempts; a confined run writes isolated-worker state. In the 0.13.0 and 0.13.1 qualification rounds a brief the client wrote in its own words kept the layer's prompt file, the layer's agent name and the framework's name, quoted none of the descriptor's phrases, and was not refused; step 9 of the qualification procedure records that as the observed limit. Tracked in #291 and #739.",
      "Codex CLI is not in the 0.13.0 or 0.13.1 stable contract: FR-12 admits it only once a scripted qualification round agrees with a hand-driven one, and the acceptance runner cannot drive Codex until #612; codex-cli-macos carries hand evidence only (#700).",
      "gate-invalidation, in the 0.13.0 and 0.13.1 qualifications of both Claude Code CLI targets, delivered its Stop events to the harness coordinator directly, not through client turns: no client turn ran the trusted gate's pass, reuse, rerun or block-then-release loop. The only Stop event observed from a client turn is hook-composition's untrusted skip.",
      "No Codex client ran in the 0.13.0 and 0.13.1 qualifications of the two Claude Code CLI targets. The Claude to Codex continuation was not observed, because a Claude session read a Claude save, and the Codex to Claude record was written by `harness task save --runtime codex`; step 7's re-established permissions were observed in neither direction. The Codex targets are not required for this release, so no round covers these.",
      "In the 0.13.0 and 0.13.1 qualifications the eleven scripted cases other than permission-controls were judged only by the case driver and the assessment of its observation text; the hand comparison owed on each case's first live round (0.13.0's) was not made and is still owed. Tracked in #741.",
      "In the 0.13.0 and 0.13.1 qualifications a band worker's effort was read from the installed worker definition, not from the subagent's transcript; its model, the budget sentence in its brief, the usage feed and the usage row were observed from the run.",
      "With a token-only login (`CLAUDE_CODE_OAUTH_TOKEN`, as in CI and containers, including the Linux target image), an isolated role worker that a Claude Code session launches cannot authenticate: the client strips the token from its tool subprocesses, and the worker reports that it is not logged in. A client whose confined layers cannot run may then do their work in its own context, unconfined, as the 0.13.0 BMad integration suite observed. Qualification rounds launch their workers from the runner rather than from a client session, so they do not exercise this path. Tracked in #759.",
      "In the 0.13.0 and 0.13.1 qualifications cost-posture compared each role the cost variant does not change by its content, byte for byte, rather than by its link, so a role replaced by an identical copy would also pass; step 8 asks that every other role keeps its link. Tracked in #742."
    ],
    "qualification_source_commit": "52bdee3c3b310375ef62b63ead1a6cc899e5bce5"
  },
  "release": {
    "tag": "v0.13.1",
    "commit": "13e87ee6a0518a5be2e8a0993bbed07168e8cf90"
  }
}