{
  "$comment": "Provider-neutral, cost-aware model routing for skilldrop skills. Skills declare an ABSTRACT tier (light/standard/heavy) describing how much reasoning the task needs. The `providers` map resolves that tier to a concrete model for whatever tool you use (Claude Code, Cursor, Codex, Kiro, ...). Set `active_provider` to your tool. Tier is decided ONCE per skill (the decision is stable), not re-derived per call — that keeps routing free. Runtime heuristics in `escalation_rules` handle the cases that actually vary.",
  "version": "0.2.0",
  "active_provider": "claude-code",
  "tiers": {
    "light": {
      "use_for": "Mechanical mapping, extraction, and lookup against a fixed rubric. Deterministic enough that a small/cheap model matches a large one.",
      "relative_cost": 1
    },
    "standard": {
      "use_for": "Most generation. Synthesizing a structured artifact from a brief, where quality matters but the reasoning is not adversarial. The default tier.",
      "relative_cost": 4
    },
    "heavy": {
      "use_for": "Adversarial reasoning and weighted judgment, where a cheaper model demonstrably misses edge cases, under-calls severity, or mis-weights tradeoffs. Spend here only when the hard thinking IS the value.",
      "relative_cost": 20
    }
  },
  "providers": {
    "claude-code": {
      "label": "Claude Code (Anthropic)",
      "models": {
        "light": "claude-haiku-5-5",
        "standard": "claude-sonnet-5-5",
        "heavy": "claude-opus-5-5"
      },
      "select_via": "`/model <model-id>` in the session, or hand the skill to the model-router agent for automatic dispatch.",
      "automation": ".claude/agents/model-router.md"
    },
    "cursor": {
      "label": "Cursor",
      "models": {
        "light": "<your cheapest capable model, e.g. a small Claude/GPT/Gemini>",
        "standard": "<your default model>",
        "heavy": "<your most capable model>"
      },
      "select_via": "Pick the model in the chat/composer model dropdown before invoking the skill. Cursor rules cannot switch models programmatically — this is a manual lookup.",
      "automation": null,
      "note": "Cursor exposes whatever models your plan enables (Claude, GPT, Gemini). Fill in the three you actually use."
    },
    "openai-codex": {
      "label": "OpenAI Codex CLI",
      "models": {
        "light": "<your cheapest OpenAI model>",
        "standard": "<your default OpenAI model>",
        "heavy": "<your most capable OpenAI model>"
      },
      "select_via": "Set the model via the Codex `--model` flag or its config before running the skill.",
      "automation": null,
      "note": "Fill in with the model identifiers your Codex install accepts. Model names change — verify against `codex --help` / your config."
    },
    "kiro": {
      "label": "Kiro",
      "models": {
        "light": "<your cheapest capable model>",
        "standard": "<your default model>",
        "heavy": "<your most capable model>"
      },
      "select_via": "Select the model in Kiro's model picker, or pin it in the custom-agent / steering definition that loads the skill.",
      "automation": null
    },
    "generic": {
      "label": "Any other tool",
      "models": {
        "light": "<your cheapest capable model>",
        "standard": "<your default model>",
        "heavy": "<your most capable model>"
      },
      "select_via": "However your tool selects a model. The tier tells you which of your three to pick.",
      "automation": null
    }
  },
  "escalation_rules": [
    {
      "id": "large-input",
      "rule": "Escalate one tier (light→standard, standard→heavy) when the input the skill must reason over exceeds ~30 pages / ~20k words / ~15 source files. Large context degrades small models faster than large ones.",
      "type": "heuristic_no_llm"
    },
    {
      "id": "reasoning-floor",
      "rule": "Never downgrade a skill whose tier is 'heavy'. These are the reasoning skills; downgrading defeats their purpose. The router may upgrade but never demote below the skill's declared tier.",
      "type": "hard_constraint"
    },
    {
      "id": "ambiguous-input",
      "rule": "Escalate one tier when the input is contradictory, underspecified, or the user explicitly asks for the most rigorous output ('be thorough', 'this is going to the board'). Do NOT escalate just because the topic sounds important.",
      "type": "heuristic_no_llm"
    },
    {
      "id": "downgrade-trivial",
      "rule": "Downgrade one tier (never below 'light', never below the skill's declared floor) when the input is tiny and templated — e.g. a one-paragraph brief into adr-generator, a 3-line note into decision-log.",
      "type": "heuristic_no_llm"
    },
    {
      "id": "user-override",
      "rule": "An explicit user model choice always wins. The router reports what it would have picked, then honors the override.",
      "type": "hard_constraint"
    }
  ],
  "skills": {
    "accessibility-audit": {
      "tier": "heavy",
      "rationale": "Adversarial review against WCAG success criteria — cheaper models fault alt-text presence over quality, under-call severity, miss focus-order/name-role-value issues, and claim AT passes from screenshots. Never downgrade."
    },
    "adr-generator": {
      "tier": "standard",
      "rationale": "Structures a decision into MADR/Nygard. Some judgment on title/consequences; not adversarial."
    },
    "agent-adoption-stage": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 79% and 86% of checks in two tier trials, against standard's 82% and heavy's 79% and 79%, within 5 points of the best both times."
    },
    "agent-budget": {
      "tier": "standard",
      "rationale": "Quantitative spec synthesis against a fixed tier vocabulary and degradation ladder. Cap-setting judgment is bounded by the 3-5x rule; escalate via ambiguous-input when the workflow itself is undefined."
    },
    "agent-config-review": {
      "tier": "standard",
      "rationale": "Reading settings, hooks and MCP config against a fixed checklist of over-broad grants; bounded judgment with a verdict that follows from the findings."
    },
    "agent-incident-response": {
      "tier": "standard",
      "rationale": "A time-ordered containment checklist for a leaked credential or a runaway agent; the order is fixed, the judgment is in scoping what was reachable."
    },
    "agent-loop-design": {
      "tier": "standard",
      "rationale": "Design synthesis against a fixed state-machine pattern and exit-criteria catalog. The gate-placement judgment is bounded by the blast-radius rule; escalate via ambiguous-input when the task itself is contested."
    },
    "agent-threat-model": {
      "tier": "heavy",
      "rationale": "Adversarial reasoning over a capability graph — the judgment is which mitigations are architectural versus theatrical, and that call is exactly where a weaker model produces a confident wrong answer. Never downgraded."
    },
    "agents-md-generator": {
      "tier": "standard",
      "rationale": "Repo inspection plus synthesis against a fixed section order and line budget — the same shape as reverse-architecture. The judgment is the counterfactual test on each convention line, which is bounded; escalate via large-input on monorepos."
    },
    "ai-adoption-rollout": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 79% and 71% of checks in two tier trials, against standard's 75% and heavy's 64% and 64%, within 5 points of the best both times."
    },
    "ai-readiness-assessment": {
      "tier": "standard",
      "rationale": "Scores six fixed dimensions against a rubric and ranks gaps by blocking order. Bounded structured judgment, not adversarial reasoning; escalate via ambiguous-input when the evidence is thin or contested."
    },
    "ai-usage-policy": {
      "tier": "standard",
      "rationale": "Drafts a policy document against a fixed structure (tiers, behaviours, review matrix, exception route). Bounded generation; escalate via ambiguous-input where a regulatory regime is named or contested."
    },
    "ai-use-case-triage": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 83% and 92% of checks in two tier trials, against standard's 81% and heavy's 85% and 92%, within 5 points of the best both times."
    },
    "api-contract-draft": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 76% and 92% of checks in two tier trials, against standard's 69% and heavy's 69% and 76%, within 5 points of the best both times."
    },
    "application-form-answers": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 88% and 94% of checks in two tier trials, against standard's 88% and heavy's 81% and 81%, within 5 points of the best both times."
    },
    "architecture-diagrams": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 100% of checks in two tier trials, against standard's 93% and heavy's 93% and 93%, within 5 points of the best both times."
    },
    "audience-profile": {
      "tier": "light",
      "rationale": "Maps a fixed set of audience archetypes to structural rules. Lookup against a rubric, not synthesis."
    },
    "backlog-triage": {
      "tier": "standard",
      "rationale": "A script does the counting; the model confirms duplicates by reading, judges readiness and writes a reasoned ordering. Bounded judgment over structured data."
    },
    "behaviour-equivalence": {
      "tier": "standard",
      "rationale": "Designing a golden-master comparison is structured: what to record, what to normalise, and what counts as a difference; the diffing is done by its script."
    },
    "brand-kit": {
      "tier": "standard",
      "rationale": "Extracts and normalises brand facts from files and pages, then runs a checker. Bounded synthesis."
    },
    "brief-intake": {
      "tier": "standard",
      "rationale": "Extraction + tagging [explicit]/[implied]/[inferred]. The tagging needs care — above light, below heavy."
    },
    "bug-triage": {
      "tier": "heavy",
      "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 92% and 92% of checks in two tier trials, against standard's 76% and light's 70% and 86%, more than 5 points ahead both times; moved once its examples/ oracle shipped (RFC-0074)."
    },
    "bundle-size-review": {
      "tier": "standard",
      "rationale": "Sizes, duplicates and what pulls each module in are computed from the bundler's stats file by its script; the judgment is which removal is safe."
    },
    "business-case": {
      "tier": "heavy",
      "rationale": "Weighted multi-option judgment with a committal recommendation — cheaper models mis-weight costs, inflate benefits, and miss the flip-assumption. Never downgrade."
    },
    "cap-table": {
      "tier": "standard",
      "rationale": "Turning SAFEs, notes and a term sheet into the script's input and explaining the result is bounded; the script does the conversion math."
    },
    "capacity-cost-model": {
      "tier": "standard",
      "rationale": "Quantitative projection from a demand model against a fixed cost catalog. Headroom and scaling-cliff judgment is bounded by the reference; escalate via ambiguous-input on novel architectures."
    },
    "cloud-cost-review": {
      "tier": "standard",
      "rationale": "A stdlib script does the aggregation; the model maps columns, checks evidence and computes savings with shown arithmetic against a fixed category checklist, which is bounded judgment."
    },
    "codebase-tour": {
      "tier": "standard",
      "rationale": "Reading a repo and citing what it finds is generation over evidence; every claim is checked against a file, so a mid tier is enough."
    },
    "content-design": {
      "tier": "standard",
      "rationale": "Rewrites source text from user needs under fixed plain-language rules, with a script for the readability numbers. Prioritising questions needs judgment, but facts come from the source."
    },
    "contract-check": {
      "tier": "heavy",
      "rationale": "The mechanical faults come from the script; reading every clause from the founder's side and writing the wording to ask for is legal judgment."
    },
    "council-review": {
      "tier": "heavy",
      "rationale": "Multi-perspective deliberation + weighted reconciliation across distinct expert seats. Cheaper models collapse the seats into one voice and either manufacture or miss the real cruxes. Never downgrade."
    },
    "cover-letter": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 100% of checks in two tier trials, against standard's 100% and heavy's 100% and 100%, within 5 points of the best both times."
    },
    "dashboard-spec": {
      "tier": "standard",
      "rationale": "Structured spec from a decision and a metric list; the vanity-metric cut and chart choice need judgment but follow fixed rules."
    },
    "data-contract": {
      "tier": "standard",
      "rationale": "Schema + SLA synthesis against fixed quality dimensions and an evolution matrix. Semantics capture needs care; bounded by the catalog. Escalate via large-input on wide schemas."
    },
    "decision-log": {
      "tier": "standard",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier fell more than 5 points behind the best in both tier trials (79% and 61% against standard's 79%); one step up, to standard."
    },
    "delivery-metrics-report": {
      "tier": "standard",
      "rationale": "A stdlib script computes every number; the model maps columns, checks data quality and interprets weekly trends against fixed DORA definitions, which is bounded judgment."
    },
    "dependency-upgrade-review": {
      "tier": "standard",
      "rationale": "Reads a version diff, changelogs and CI evidence against a fixed checklist; the merge verdict follows from what is verified, not open-ended judgment."
    },
    "design-doc": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 88% and 88% of checks in two tier trials, against standard's 92% and heavy's 91% and 91%, within 5 points of the best both times."
    },
    "design-system-spec": {
      "tier": "standard",
      "rationale": "Fills a fixed spec shape (anatomy, states, tokens, accessibility) against a checked WCAG list. Needs care on states and keyboard patterns, but the structure bounds it."
    },
    "devils-advocate": {
      "tier": "heavy",
      "rationale": "Adversarial code review across four lenses. Cheaper models miss edge cases and under-call severity — the whole value is the hard thinking. Never downgrade."
    },
    "doc-critique": {
      "tier": "heavy",
      "rationale": "Adversarial doc review against rubrics. Same as devils-advocate: the value is catching what a fast pass misses. Never downgrade."
    },
    "dpia": {
      "tier": "heavy",
      "rationale": "Legal-structure judgment: screening, choosing a lawful basis per purpose, spotting inferred special category data and transfers, and scoring harm to individuals. Errors are costly and the input is usually incomplete."
    },
    "eval-harness-generator": {
      "tier": "standard",
      "rationale": "Reads a SKILL.md and synthesizes eval cases — requires understanding of skill intent but not heavy reasoning."
    },
    "context-graph": {"tier": "standard", "rationale": "The decision graph and its consistency checks are computed by its script; the model quotes the governing record and writes the fixes."},
    "event-contract-draft": {
      "tier": "standard",
      "rationale": "Contract drafting against the AsyncAPI shape with fixed rules on ordering, delivery and versioning; mid tier is enough."
    },
    "exec-summary": {
      "tier": "standard",
      "rationale": "Compression to one page. Needs to keep the right signal; escalate on very long source docs."
    },
    "feature-implement-loop": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 85% and 85% of checks in two tier trials, against standard's 85% and heavy's 76% and 85%, within 5 points of the best both times."
    },
    "feedback-synthesis": {
      "tier": "standard",
      "rationale": "Coding feedback into themes is bounded judgment; the counts by distinct person and segment come from its script."
    },
    "figma-diagrams": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 92% and 92% of checks in two tier trials, against standard's 92% and heavy's 75% and 92%, within 5 points of the best both times."
    },
    "file-to-markdown": {
      "tier": "light",
      "rationale": "A deterministic stdlib script does the extraction; the model runs it, relays the dropped-content report and hands off. No generation beyond a short summary of losses."
    },
    "shift-roster": {
      "tier": "standard",
      "rationale": "Assigning people to shifts is constraint-heavy but bounded: the script checks every rule and summarises the final rota, so the model's job is a good first assignment, fixing what the check reports and returning the person's own file."
    },
    "seating-plan": {
      "tier": "standard",
      "rationale": "Assigning guests against overlapping rules is bounded judgment; the script decides whether every rule holds."
    },
    "run-of-show": {
      "tier": "standard",
      "rationale": "Ordering a day around rooms and people is bounded judgment; the script decides whether anything clashes."
    },
    "locale-check": {
      "tier": "standard",
      "rationale": "The script finds every mechanical defect; the model ranks them by what breaks first, writes the mechanical fixes and reads reordered and named-screen strings for meaning."
    },
    "furniture-layout": {
      "tier": "heavy",
      "rationale": "Furnishing a room is design judgment: zones, focal wall and circulation traded against clearances, with a checker that tests each requirement where it applies."
    },
    "floor-plan-layout": {
      "tier": "heavy",
      "rationale": "Spatial layout is design judgment: zoning, adjacencies, daylight and circulation traded against areas, with a checker to iterate against."
    },
    "guide-builder": {
      "tier": "standard",
      "rationale": "Shapes notes into a guide without adding to them. Generation, not adversarial review."
    },
    "hypothesis-comparison": {
      "tier": "heavy",
      "rationale": "Judgment-heavy: generating real rivals, rating every evidence-hypothesis cell honestly and resisting the favourite theory is where a fast pass fails; the script only does the arithmetic."
    },
    "incident-comms": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 100% of checks in two tier trials, against standard's 85% and heavy's 92% and 93%, within 5 points of the best both times."
    },
    "information-architecture": {
      "tier": "standard",
      "rationale": "Structured synthesis from a content list into groups, labels and a nav model against fixed IA practice. Grouping needs judgment, but the method and the validation plan bound it."
    },
    "interactive-diagram": {
      "tier": "standard",
      "rationale": "Tracing a path through code and citing each part is careful reading, not adversarial judgement; the layout and the checks are done by the script."
    },
    "job-fit-analysis": {
      "tier": "standard",
      "rationale": "Matches a posting's requirements to resume lines and reports the gaps. The rule is mechanical: no line in the resume, no credit."
    },
    "judge-audit": {
      "tier": "standard",
      "rationale": "The agreement and stability statistics are computed by its script; the model's work is reading them against the decision the judge serves."
    },
    "launch-readiness": {
      "tier": "standard",
      "rationale": "Checks evidence against a fixed checklist. Bounded synthesis, not adversarial review."
    },
    "llm-eval-harness": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 71% and 71% of checks in two tier trials, against standard's 71% and heavy's 71% and 71%, within 5 points of the best both times."
    },
    "mcp-pairing": {
      "tier": "standard",
      "rationale": "Matching a loop's stages to the context each needs and the narrowest access that provides it is bounded judgment over a short checklist."
    },
    "md-to-confluence": {
      "tier": "light",
      "rationale": "Mechanical conversion to Confluence storage format done by its script, with an optional publish; the model checks what was dropped and what will be overwritten."
    },
    "md-to-docx": {
      "tier": "heavy",
      "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 79% and 93% of checks in two tier trials, against standard's 64% and light's 71% and 79%, more than 5 points ahead both times."
    },
    "md-to-pptx": {
      "tier": "light",
      "rationale": "Mechanical conversion done by its script; the model only checks the outline maps to slides and reports what was dropped."
    },
    "md-to-xlsx": {
      "tier": "standard",
      "rationale": "A stdlib script types and writes the cells; the model shapes tables from the source (headings, units, one header row), decides whether formulas are safe to enable, and checks the per-sheet type counts against the data. Bounded, mostly mechanical judgment."
    },
    "migration-plan": {
      "tier": "standard",
      "rationale": "Phased plan synthesis with a strong template. Ordering judgment is bounded by the expand/migrate/contract pattern; escalate via ambiguous-input on contested, high-stakes cutovers."
    },
    "nfr-spec": {
      "tier": "standard",
      "rationale": "Rubric-driven sweep with archetype defaults; the judgment is calibrating targets to business reality. Bounded by the catalog; escalate via ambiguous-input on contested SLOs."
    },
    "observability-plan": {
      "tier": "standard",
      "rationale": "Methodology synthesis against fixed SRE practices (golden signals, burn-rate alerting, pillar split). SLO calibration needs judgment but is bounded; escalate via ambiguous-input on contested reliability targets."
    },
    "okr-cascade": {
      "tier": "standard",
      "rationale": "Structured derivation against a fixed roll-up discipline; the causal-sentence and gap judgments need care but the template bounds them. Escalate via ambiguous-input when the company objectives themselves are contested."
    },
    "output-hygiene": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 100% of checks in two tier trials, against standard's 92% and heavy's 100% and 92%, within 5 points of the best both times."
    },
    "postmortem-generator": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 91% of checks in two tier trials, against standard's 92% and heavy's 90% and 87%, within 5 points of the best both times."
    },
    "pr-description-writer": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 85% and 85% of checks in two tier trials, against standard's 85% and heavy's 77% and 85%, within 5 points of the best both times."
    },
    "prd-draft": {
      "tier": "heavy",
      "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 85% and 76% of checks in two tier trials, against standard's 68% and light's 68% and 68%, more than 5 points ahead both times; moved once its examples/ oracle shipped (RFC-0074)."
    },
    "pre-merge-review": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 93% of checks in two tier trials, against standard's 86% and heavy's 93% and 93%, within 5 points of the best both times."
    },
    "prfaq": {
      "tier": "standard",
      "rationale": "Synthesizes a press release and FAQs from a product concept against a fixed format. The specificity discipline needs care but the template bounds it; escalate via ambiguous-input when the concept itself is contested."
    },
    "prompt-caching-advisor": {
      "tier": "heavy",
      "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 90% and 90% of checks in two tier trials, against standard's 63% and light's 83% and 73%, more than 5 points ahead both times; moved once its examples/ oracle shipped (RFC-0074)."
    },
    "refactor-plan": {
      "tier": "standard",
      "rationale": "Sequencing behaviour-preserving steps follows known patterns (characterise, parallel change, strangle); escalate via ambiguous-input for contested rewrites."
    },
    "release-notes": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 96% and 96% of checks in two tier trials, against standard's 91% and heavy's 100% and 98%, within 5 points of the best both times."
    },
    "rendering-strategy": {
      "tier": "standard",
      "rationale": "Choosing static, server, client or incremental rendering per route follows fixed trade-offs (freshness, personalisation, SEO, cost); bounded judgment."
    },
    "requirements-interview": {
      "tier": "standard",
      "rationale": "Question banks are rubric-shaped, but ranking by design impact and deriving falsification conditions for the specific feature is synthesis — above light."
    },
    "research-plan": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 79% and 79% of checks in two tier trials, against standard's 79% and heavy's 79% and 79%, within 5 points of the best both times."
    },
    "resume-tailor": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 100% of checks in two tier trials, against standard's 100% and heavy's 100% and 100%, within 5 points of the best both times."
    },
    "reverse-architecture": {
      "tier": "standard",
      "rationale": "Extracts architecture from code/IaC. Escalate to heavy on large codebases where cross-file inference is heavy."
    },
    "risk-register": {
      "tier": "standard",
      "rationale": "Structured writing against a fixed format and scale, with a script doing the checks and counts. Scoring needs some judgment but is bounded by the written scale."
    },
    "role-shortlist": {
      "tier": "standard",
      "rationale": "Reads many postings against one resume and sorts them. Each comparison is bounded; the rule (no posting read, no verdict) is mechanical."
    },
    "rollout-plan": {
      "tier": "standard",
      "rationale": "Plan synthesis on a strong template; the arithmetic of how long each exposure step must run is done by its script, not the model."
    },
    "runbook-generator": {
      "tier": "standard",
      "rationale": "Operational doc from service facts. Bounded synthesis."
    },
    "security-questionnaire-response": {
      "tier": "standard",
      "rationale": "Matches questions to evidence and writes short answers. The hard rule is mechanical: no evidence, no answer."
    },
    "service-blueprint": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 92% of checks in two tier trials, against standard's 92% and heavy's 85% and 92%, within 5 points of the best both times."
    },
    "skill-author": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 93% of checks in two tier trials, against standard's 93% and heavy's 100% and 92%, within 5 points of the best both times."
    },
    "skill-review": {
      "tier": "heavy",
      "rationale": "Adversarial audit with a verdict: routing collisions and paraphrased safety issues are what a fast pass misses, and the lint script covers only the mechanical half."
    },
    "slide-outliner": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 86% and 90% of checks in two tier trials, against standard's 83% and heavy's 83% and 93%, within 5 points of the best both times."
    },
    "slo-spec": {
      "tier": "standard",
      "rationale": "SLI choice is bounded judgment over user journeys; error-budget and burn-rate arithmetic is done by its script."
    },
    "soc2-evidence-map": {
      "tier": "standard",
      "rationale": "Maps controls against a fixed criteria set and a known Type I vs Type II evidence pattern. Judgment is needed on coverage and gap status, but the structure is bounded by the reference."
    },
    "sonar-onboard": {
      "tier": "light",
      "rationale": "Scaffolds config from detected language + a template. Deterministic fill-in; little judgment."
    },
    "sonar-review": {
      "tier": "standard",
      "rationale": "Formats Sonar API findings into a report. The hard analysis is Sonar's; this is synthesis. Escalate on very large diffs."
    },
    "source-synthesis": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 83% and 78% of checks in two tier trials, against standard's 76% and heavy's 85% and 82%, within 5 points of the best both times."
    },
    "sql-review": {
      "tier": "heavy",
      "rationale": "Adversarial correctness review: finding join fan-out, NULL and timezone bugs means reasoning about data the query never shows, and a missed finding ships a wrong number. Never downgrade."
    },
    "strategy-analysis": {
      "tier": "heavy",
      "rationale": "Framework selection plus evidenced multi-factor judgment ending in a ranked, committal verdict. Cheaper models fill cells with generic filler, skip the TOWS crossings, and refuse to take a side. Never downgrade."
    },
    "subagent-design": {
      "tier": "heavy",
      "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 100% and 100% of checks in two tier trials, against standard's 86% and light's 85% and 86%, more than 5 points ahead both times; moved once its examples/ oracle shipped (RFC-0074)."
    },
    "success-metrics": {
      "tier": "standard",
      "rationale": "Structured measurement design; the primary-metric and counter-metric choices need judgment but the template bounds it. Escalate via ambiguous-input when the goal itself is contested."
    },
    "team-status-report": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 93% of checks in two tier trials, against standard's 93% and heavy's 93% and 93%, within 5 points of the best both times."
    },
    "tech-debt-register": {
      "tier": "standard",
      "rationale": "Structures and ranks items against stated evidence. Judgment is bounded: a cost with no evidence is recorded as unknown, not estimated."
    },
    "terraform-module": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 100% of checks in two tier trials, against standard's 92% and heavy's 83% and 100%, within 5 points of the best both times."
    },
    "terraform-plan-review": {
      "tier": "heavy",
      "rationale": "Adversarial review of a destructive change: judging which replacements lose data, which access changes widen exposure, and what is out of scope needs careful reasoning; a missed destroy costs far more than the model."
    },
    "test-plan-generator": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 76% and 92% of checks in two tier trials, against standard's 76% and heavy's 61% and 54%, within 5 points of the best both times."
    },
    "threat-model": {
      "tier": "heavy",
      "rationale": "Adversarial reasoning over a design — cheaper models emit checklist residue, miss authz/insider paths, and inflate severity. Never downgrade."
    },
    "token-budget-estimator": {
      "tier": "standard",
      "rationale": "Arithmetic breakdown plus heuristic judgment on dominant cost drivers — standard fits."
    },
    "tool-use-schema-writer": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 94% and 94% of checks in two tier trials, against standard's 96% and heavy's 97% and 97%, within 5 points of the best both times."
    },
    "tracker-brief-sync": {
      "tier": "standard",
      "rationale": "Maps doc sections to items and writes acceptance criteria that restate requirements; a script checks the spec, writes the import file and computes drift. Bounded transformation with a deterministic check."
    },
    "user-journey-map": {
      "tier": "heavy",
      "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 83% and 83% of checks in two tier trials, against standard's 75% and light's 67% and 75%, more than 5 points ahead both times."
    },
    "user-story-splitter": {
      "tier": "standard",
      "rationale": "Decomposes an epic into INVEST slices with testable ACs. Structured synthesis; escalation rules cover large or contradictory PRDs."
    },
    "ux-writing": {
      "tier": "light",
      "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 92% and 92% of checks in two tier trials, against standard's 83% and heavy's 75% and 83%, within 5 points of the best both times."
    },
    "web-performance-review": {
      "tier": "standard",
      "rationale": "The metrics, opportunities and the elements behind them are read out of the Lighthouse report by its script; the model ranks fixes by what moves the user-facing numbers."
    }
  }
}
