{
  "_readme": "Per-model unit prices in USD per million tokens. Source: Anthropic public pricing (Claude-family rows verified 2026-07-28 against the current model table; the gpt-* rows remain approximate). Update when Anthropic publishes new tiers. Rung names (fable / opus / sonnet / haiku) are the pipeline's stable identifiers and `modelId` is the wire value they currently resolve to - dispatch reads the rung, so a generation move is a `modelId` edit here plus the phase specs, never a rename of the rungs. Unknown models render USD as ' - ' and emit a footnote  -  never block PR-body generation. cacheReadPerMtok is the discounted rate for prompt-cache hits (~10% of inPerMtok); the renderer prices a phase's tokens_cached at this rate when the tracker records it, so resume/cache reuse is visible in the ledger.",
  "schemaVersion": "1.1.0",
  "prices": {
    "fable": {
      "inPerMtok": 10.0,
      "outPerMtok": 50.0,
      "cacheReadPerMtok": 1.0,
      "modelId": "claude-fable-5",
      "note": "Top tier (restored v10.6.0)  -  architects, Reviewer 1, triage. Verified against Anthropic pricing 2026-07-02."
    },
    "opus": {
      "inPerMtok": 5.0,
      "outPerMtok": 25.0,
      "cacheReadPerMtok": 0.5,
      "modelId": "claude-opus-5",
      "note": "Second tier - dev phase on a Short run, Reviewer 1 and triage on Copilot CLI, and the opus rung of the fable -> opus -> sonnet fallback ladder. Same rate as the Opus 4.8 it replaces, so the ledger needed no reprice on the generation move. Claude Opus 5 draws on a rate-limit pool SEPARATE from the combined Opus 4.x pool - moving traffic here neither frees headroom on the old bucket nor inherits it."
    },
    "sonnet": {
      "inPerMtok": 3.0,
      "outPerMtok": 15.0,
      "cacheReadPerMtok": 0.3,
      "modelId": "claude-sonnet-5",
      "note": "Floor tier for Claude-family dispatch - Reviewer 3 on both hosts, and the terminal rung of the fallback ladder. Priced at the standard 3/15 rather than the 2/10 introductory rate that runs through 2026-08-31: over-reporting during the intro window is the safe direction for a cost ledger, and it needs no dated edit when the intro ends."
    },
    "haiku": {
      "inPerMtok": 1.0,
      "outPerMtok": 5.0,
      "cacheReadPerMtok": 0.1,
      "modelId": "claude-haiku-4-5",
      "note": "Speed tier - task-clarifier and other latency-sensitive dispatches, plus the terminal rung of the fallback ladder. Named by its alias like every other rung here rather than by a dated snapshot, so the four rungs stay comparable at a glance."
    },
    "gpt-5.4": {
      "inPerMtok": 10.0,
      "outPerMtok": 30.0,
      "cacheReadPerMtok": 1.0,
      "modelId": "gpt-5.4",
      "note": "Copilot CLI Reviewer 2 and Codex CLI Reviewer 2  -  approximate; verify against OpenAI pricing page before relying on totals."
    },
    "gpt-5.6": {
      "inPerMtok": 10.0,
      "outPerMtok": 30.0,
      "cacheReadPerMtok": 1.0,
      "modelId": "gpt-5.6",
      "note": "Codex CLI top tier  -  Reviewer 1 at xhigh effort, Reviewer 3 at medium, triage at max, and the fable/opus rungs of the Codex persona tier map. Reasoning effort changes output volume, not the per-token rate, so one entry covers every effort level. Approximate; verify against OpenAI pricing before relying on totals."
    },
    "gpt-5.6-terra": {
      "inPerMtok": 1.0,
      "outPerMtok": 5.0,
      "cacheReadPerMtok": 0.1,
      "modelId": "gpt-5.6-terra",
      "note": "Codex CLI floor tier  -  speed-optimised, maps the haiku rung of the Codex persona tier map (task-clarifier). Approximate; verify against OpenAI pricing before relying on totals."
    }
  }
}
