{
  "schema": "agent-public-bench@1",
  "generatedAt": "2026-10-07T00:00:00.000Z",
  "url": "https://agent.sasid.ai/benchmarks/prompt-cache-break-even",
  "study": {
    "slug": "prompt-cache-break-even",
    "title": "Prompt cache break-even: after how many reuses does a cached prefix cost less?",
    "seoTitle": "Prompt cache break-even by model and session length",
    "description": "A calculation on list prices: reuses before a cached prompt prefix costs less, per Claude and GPT model, and cost per 1,000 sessions of 1 to 20 turns.",
    "question": "With the cache-write surcharge Anthropic lists, after how many reuses does a cached prompt prefix cost less than no cache? What does that mean for a session of 1 to 20 turns, for each model’s price, and for a workload split across sessions?",
    "answer": "Calculation: a wholly new prefix with a 1-hour write costs less from the 3rd request, after 2 reuses. All four Claude price rows list a 1-hour write at twice the input price. Exact break-even is 1.03 to 1.11 reuses. With 19% already cached, it needs 1 reuse. This uses a pooled share from n = 6 sessions; session range 18.680% to 18.689%. A 5-minute write (an assumed 1.25 times the input price) needs 1 reuse. GPT-6.1 Sol and GPT-6 Luna list no write surcharge in the price list, so they save from the first reuse. They still do at the 1.25× write that another product table lists. For 1,000 10-turn sessions, the Sonnet 1-hour prefix cost is $45.42 against $156.62 without caching: 71.0% less. The prefix is a rounded mean of 7,831 tokens (n = 3; range 7,831 to 7,832). A one-turn session costs 2.0 times as much with the cache ($31.32 against $15.66 per 1,000). Each recorded session ran in a new temporary folder. Of 4 later sessions, 0 met the reuse proxy (95% Wilson 0% to 49%). The split calculation assumes ten full writes; it is not a replay of those partly cached sessions. The Opus 5.5 cache-read price is open: $0.2 or $0.4 per million. At $0.4, the break-even moves from 1.05 to 1.11 reuses, and the 10-turn saving from 75.5% to 71.0%.",
    "date": "2026-10-06",
    "updated": "2026-10-06",
    "tags": [
      "prompt-caching",
      "break-even",
      "thought-experiment",
      "calculation",
      "llm-pricing",
      "claude-haiku",
      "claude-sonnet",
      "claude-opus",
      "claude-fable",
      "gpt-6-1-sol",
      "gpt-6-luna"
    ],
    "method": [
      "This study makes no new model call and has no raw file of its own. It calculates from two inputs. The first is the turn tokens that the caching study recorded in 6 Claude Code sessions (3 on Sonnet 5.5, 3 on Opus 5.5). The second is the list prices in the price sources.",
      "A prefix of T tokens goes out in k + 1 requests. The first request writes it to the cache. The k later requests, the reuses, read it. Prices are USD per million tokens: input i, cache read r, cache write w.",
      "No cache: (k + 1) × T × i. A 1-hour write: T × w + k × T × r, where w is the listed 1-hour write price (twice i for every Anthropic model in the price list). A 5-minute write: T × 1.25 × i + k × T × r.",
      "The 1.25 is the multiplier that the caching study protocol states as Anthropic’s published figure. It is not in the price list. It is an assumption here. No 5-minute write occurred in the recorded sessions.",
      "Break-even: the cached prefix costs less when k > (w − i) ÷ (i − r). The exact break-even is that fraction. The reuses needed is the smallest non-negative whole number above it. A negative fraction means the first request already costs less, with zero reuses.",
      "A share f of the prefix can already be in the cache when the first request arrives. That request reads the share and writes the rest: T × (f × r + (1 − f) × w) + k × T × r.",
      "In the recorded sessions, turn 1 read 1,463 tokens on its first request. The usage counters do not record read/write timing. That is f = 19% (8,778 of 46,978 tokens, 6 sessions). Its origin was not isolated. The dollar figures use f = 0, the whole prefix new, which is the stricter case. The break-even rows show both.",
      "T is the rounded mean turn-1 input (uncached input + cache reads + cache writes) of a model’s recorded sessions. For Sonnet 5.5 it is 7,831 tokens (range 7,831 to 7,832, n = 3). For Opus 5.5 it is 7,828 tokens (the same in every session, n = 3). A session of N turns is N requests that send the prefix, so k = N − 1. The cost tables give 1,000 sessions of 1, 2, 3, 5, 10 and 20 turns.",
      "Split case: 10 requests as one 10-turn session (one write, 9 reads) against 10 one-turn sessions (10 writes). Each recorded session ran in a fresh process and a new temporary working folder. Of 4 later sessions, 0 met the reuse proxy. The split case assumes a wholly new prefix with no shared reuse; the receipts do not test that exact case. The reuse proxy follows the caching study’s rule: turn 1 reads more than it writes.",
      "Opus 5.5 price question: the price list gives a cache read of $0.2 per million (5% of the $4 input price). Another table of the product lists $0.4 (10%). This study did not check the vendor price. Every Opus 5.5 row and the second Opus line show both values.",
      "Check against the recorded sessions, on the input side only (output excluded). The recorded 5-turn sessions saved 55.4% on Sonnet 5.5 (n = 3; session range 54.3% to 57.1%) and 59.2% on Opus 5.5 (n = 3; range 58.5% to 59.7%). These ranges are not confidence intervals. The formula gives 52.0% and 56.0% with a new prefix, and 59.1% and 63.3% with 19% already cached. The two formula cases bracket the recorded figure for both models. The recorded sessions also wrote the tokens that each turn added.",
      "With output included, the recorded saving is 50.0% for Sonnet 5.5 (n = 3; session range 47.5% to 54.1%) and 53.1% for Opus 5.5 (n = 3; session range 51.4% to 54.3%). These are list-price calculations. The ranges are not confidence intervals.",
      "Everything is a list-price calculation, not a bill. The sample behind T is n = 3 sessions per model."
    ],
    "caveats": [
      "The retained Claude protocol file was created at 14:43:55 UTC, after the first counted session at 14:35:39 UTC on 2026-10-06. Its declaration says 14:25 UTC, but file times do not verify that claim. Treat this as a retrospective protocol record.",
      "The source has 30 attempted Claude turns, 0 failed turns and 0 turns without token usage. Failed turns with usage remain in cost totals. Missing usage cannot be priced. No quality rate or cache-caused speed effect is claimed.",
      "7 counted turns record a provider rate-limit warning status. The retained outcome log says there was no warning. The protocol calls for a stop on limit text in an error or warning. These receipts do not establish whether that text appeared; this discrepancy remains unresolved.",
      "One shared Mac and one synthetic ledger supplied these tokens. The ledger was shortened once after a two-call probe and before the counted sessions. All 30 counted answers passed, so this task set hits a quality ceiling. This calculation does not rank model quality or speed.",
      "A calculation, not a run and not a bill. The recorded calls used flat subscriptions. The prices are list prices dated 2026-09-21 (Anthropic) and 2026-10-03 (OpenAI); they can change.",
      "The formula prices the shared prefix only. A real turn also writes new tokens to the cache at the write price. In the recorded sessions that was 58 to 1,117 tokens per turn after turn 1. A real turn also produces output, which costs the same with or without the cache. The check against the recorded sessions shows the size of this effect.",
      "The formula assumes that every reuse arrives before the cache entry expires. An entry lasts 5 minutes or 1 hour, by write type. When the gap between requests is longer, the write repeats and the saving shrinks.",
      "The recorded sessions wrote 1-hour entries only (0 of 30 turns wrote a 5-minute entry). The 5-minute rows use an assumed 1.25 multiplier that this study did not test.",
      "Only 0 of 4 later sessions met the read-more-than-write proxy (95% Wilson 0% to 49%). They still read some cached tokens. This proxy does not establish cache provenance. Each recorded session ran in a fresh process and a new temporary working folder. The caching study protocol names that folder as one untested hypothesis for the miss, and this study did not test it. The split case assumes no shared reuse and a wholly new prefix. It does not price the partly cached recorded first turns. A script that keeps one working folder may read an earlier session’s cache: check your own receipts before you use the split case.",
      "The 19% already-cached share is not a constant. We recorded it on Sonnet 5.5 and Opus 5.5 sessions. For Haiku 4.5 and Fable 5.1 it is a what-if. The one Haiku 4.5 probe session (outside every cell) read 0 tokens from the cache on turn 1.",
      "The Opus 5.5 cache-read price is open: $0.2 or $0.4 per million. This study shows both. Resolve the price before you quote an Opus figure.",
      "The dollar figures depend on T: one synthetic ledger in one CLI version, 3 sessions per model. A different prefix changes the dollars. It does not change the break-even reuses, which depend on the price ratios only.",
      "The GPT rows follow the price list, which has no write surcharge. Another table of the product lists a write price of 1.25× input for both models. At that price they need 1 reuse (exact break-even 0.26 and 0.28), and a prefix used once costs 1.25 times as much. We did not check the vendor price. The Codex app-server reports no cache writes, and this study did not test reuse for GPT. The caching study measured Codex reads on a larger context."
    ],
    "sourceIds": [
      "calc-cache-pricing",
      "agent-caching-consistency",
      "price-anthropic",
      "price-openai"
    ],
    "stats": [
      {
        "id": "cache-break-even-1h-reuses",
        "label": "Reuses before a 1-hour cached prefix costs less, whole prefix new (calculation)",
        "value": 2,
        "unit": "count",
        "display": "2 reuses (the 3rd request)",
        "note": "Same for Haiku 4.5, Sonnet 5.5, Opus 5.5 and Fable 5.1. Exact break-even 1.03 to 1.11 reuses."
      },
      {
        "id": "cache-break-even-1h-reuses-recorded",
        "label": "Reuses before a 1-hour cached prefix costs less, 19% of it already cached as a pooled recorded share (calculation)",
        "value": 1,
        "unit": "count",
        "display": "1 reuse (the 2nd request)",
        "note": "Exact break-even 0.65 to 0.72 reuses. The recorded Claude Code sessions paid back on turn 2 (see the recorded-payback stat)."
      },
      {
        "id": "cache-break-even-5m-reuses",
        "label": "Reuses before a 5-minute cached prefix costs less, whole prefix new (calculation, assumed 1.25× write)",
        "value": 1,
        "unit": "count",
        "display": "1 reuse (the 2nd request)",
        "note": "Exact break-even 0.26 to 0.28 reuses. The 1.25 multiplier is an assumption."
      },
      {
        "id": "cache-break-even-no-surcharge-reuses",
        "label": "Reuses before a cached prefix costs less when the list price has no write surcharge (GPT-6.1 Sol and GPT-6 Luna; calculation)",
        "value": 1,
        "unit": "count",
        "display": "1 reuse (saves from the first read)",
        "note": "Exact break-even 0 reuses: a write is plain input, so the first read is already cheaper than sending the prefix again. Another table of the product lists a write price of 1.25× input for both models. At that price the exact break-even is 0.26 reuses (GPT-6.1 Sol) and 0.28 reuses (GPT-6 Luna), so 1 reuse still pays. We did not check the vendor price."
      },
      {
        "id": "cache-break-even-prefix-sonnet",
        "label": "Mean turn-1 input in the Sonnet 5.5 sessions (calculation)",
        "value": 7831,
        "unit": "tokens",
        "display": "7,831 tokens",
        "n": 3,
        "note": "Rounded mean calculation from 3 sessions (range 7,831 to 7,832): uncached input + cache reads + cache writes on turn 1."
      },
      {
        "id": "cache-break-even-prefix-opus",
        "label": "Mean turn-1 input in the Opus 5.5 sessions (calculation)",
        "value": 7828,
        "unit": "tokens",
        "display": "7,828 tokens",
        "n": 3,
        "note": "Rounded mean calculation from 3 sessions (the same in every session)."
      },
      {
        "id": "cache-break-even-precached-share",
        "label": "Share of turn-1 input read from the cache (calculation; origin not isolated)",
        "value": 0.1869,
        "unit": "rate",
        "display": "19% (8,778 of 46,978 turn-1 tokens)",
        "n": 6,
        "note": "Calculation across 6 sessions; session share range 18.680% to 18.689%. This is not a binomial pass rate. This part cost the read price on turn 1, not the write price."
      },
      {
        "id": "cache-break-even-recorded-payback",
        "label": "Turn at which a recorded Claude Code session’s total input cost with the cache first fell below its cost with no cache (calculation on recorded tokens)",
        "value": 2,
        "unit": "count",
        "display": "2 turns (6 of 6 sessions)",
        "n": 6,
        "note": "Input side only, 1-hour writes at the list price, output left out. After turn 1 the cache had cost more, as the formula says for a prefix used once."
      },
      {
        "id": "cache-break-even-once-penalty",
        "label": "Cost of caching a prefix that is used once, as a multiple of no cache (1-hour write; calculation)",
        "value": 2,
        "unit": "ratio",
        "display": "2.0x",
        "note": "A 5-minute write: 1.3x (assumption). Same for every Anthropic model in the price list."
      },
      {
        "id": "cache-break-even-sonnet-10-turns",
        "label": "Saving from a 1-hour cache over 10 turns, Sonnet 5.5 prefix (calculation)",
        "value": 0.71,
        "unit": "rate",
        "display": "71.0% ($45.42 vs $156.62 per 1,000 sessions)",
        "note": "Prefix of 7,831 tokens; whole prefix new; output left out."
      },
      {
        "id": "cache-break-even-opus-10-turns",
        "label": "Saving from a 1-hour cache over 10 turns, Opus 5.5 prefix, cache read $0.2 per M (calculation)",
        "value": 0.755,
        "unit": "rate",
        "display": "75.5% ($76.71 vs $313.12 per 1,000 sessions)",
        "note": "Prefix of 7,828 tokens; whole prefix new; output left out."
      },
      {
        "id": "cache-break-even-opus-read-price",
        "label": "Saving from a 1-hour cache over 10 turns, Opus 5.5 prefix, cache read $0.4 per M (calculation)",
        "value": 0.71,
        "unit": "rate",
        "display": "71.0% ($90.80 vs $313.12 per 1,000 sessions)",
        "note": "Break-even 1.11 reuses at $0.4 per M against 1.05 at $0.2 per M. The vendor price was not checked."
      },
      {
        "id": "cache-break-even-split-sonnet",
        "label": "10 one-turn sessions with no shared reuse with a 1-hour cache, as a multiple of one 10-turn session, Sonnet 5.5 prefix (calculation)",
        "value": 6.9,
        "unit": "ratio",
        "display": "6.9x ($313.24 vs $45.42 per 1,000 workloads)",
        "note": "With no cache the same 10 requests cost $156.62. Each recorded session ran in a new temporary folder, and 0 of 4 met the read-more-than-write proxy. The split case assumes a wholly new prefix with no shared reuse."
      },
      {
        "id": "cache-break-even-cross-session",
        "label": "Later sessions whose first turn read more tokens than it wrote (reuse proxy)",
        "value": 0,
        "unit": "count",
        "display": "0 of 4",
        "n": 4,
        "note": "95% Wilson 0% to 49%, n = 4 later sessions. Same proxy as the caching study: reads exceed writes. It cannot identify cache provenance. The cause was not tested."
      },
      {
        "id": "cache-break-even-5m-writes-recorded",
        "label": "Recorded Claude turns that wrote a 5-minute cache entry",
        "value": 0,
        "unit": "count",
        "display": "0 of 30",
        "n": 30,
        "note": "Every recorded write was a 1-hour write, so the 1.25 multiplier of the 5-minute rows was not tested."
      },
      {
        "id": "cache-break-even-check-sonnet",
        "label": "Saving over 5 turns on the input side, recorded vs the formula (calculation), Sonnet 5.5",
        "value": 0.5535,
        "unit": "rate",
        "display": "55.4% recorded (formula 52.0% with a new prefix, 59.1% with 19% already cached)",
        "n": 3,
        "note": "Calculation on recorded tokens and list prices; session saving range 54.3% to 57.1%, not a confidence interval. The recorded figure includes new turn tokens; the formula does not."
      },
      {
        "id": "cache-break-even-check-opus",
        "label": "Saving over 5 turns on the input side, recorded vs the formula (calculation), Opus 5.5",
        "value": 0.5918,
        "unit": "rate",
        "display": "59.2% recorded (formula 56.0% with a new prefix, 63.3% with 19% already cached)",
        "n": 3,
        "note": "Calculation on recorded tokens and list prices; session saving range 58.5% to 59.7%, not a confidence interval. Opus 5.5 cache read at $0.2 per M."
      }
    ],
    "charts": [
      {
        "id": "cache-break-even-reads",
        "title": "Reuses before a cached prefix costs less, by model and write type (calculation)",
        "subtitle": "The break-even point: reuses at which the cached and the uncached cost are equal, at list prices",
        "kind": "grouped-bar",
        "unit": "score",
        "yLabel": "Reuses at break-even",
        "series": [
          {
            "name": "1-hour write (2× input), whole prefix new",
            "points": [
              {
                "label": "Claude Haiku 4.5",
                "value": 1.11
              },
              {
                "label": "Claude Sonnet 5.5",
                "value": 1.11
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.2 per M)",
                "value": 1.05
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.4 per M)",
                "value": 1.11
              },
              {
                "label": "Claude Fable 5.1",
                "value": 1.03
              }
            ]
          },
          {
            "name": "1-hour write, pooled n = 6 session share, 19% already cached (as recorded)",
            "points": [
              {
                "label": "Claude Haiku 4.5",
                "value": 0.72
              },
              {
                "label": "Claude Sonnet 5.5",
                "value": 0.72
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.2 per M)",
                "value": 0.67
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.4 per M)",
                "value": 0.72
              },
              {
                "label": "Claude Fable 5.1",
                "value": 0.65
              }
            ]
          },
          {
            "name": "5-minute write (1.25× input, an assumption)",
            "points": [
              {
                "label": "Claude Haiku 4.5",
                "value": 0.28
              },
              {
                "label": "Claude Sonnet 5.5",
                "value": 0.28
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.2 per M)",
                "value": 0.26
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.4 per M)",
                "value": 0.28
              },
              {
                "label": "Claude Fable 5.1",
                "value": 0.26
              }
            ]
          }
        ],
        "note": "Calculation, not a run: break-even reuses = (write price − input price) ÷ (input price − cache-read price). A cached prefix costs less once the reuses pass that point. On a new prefix, a 1-hour write needs 2 reuses (the 3rd request). With 19% already cached it needs 1 reuse, and a 5-minute write needs 1 reuse. The 1.25 of the 5-minute write is an assumption. The caching study protocol states it as Anthropic’s published figure. No 5-minute write occurred in the recorded sessions. We recorded the 19% on Sonnet 5.5 and Opus 5.5 sessions. For Haiku 4.5 and Fable 5.1 it is a what-if. GPT-6.1 Sol and GPT-6 Luna list no write surcharge, so their break-even is 0 reuses and the chart leaves them out. The price list gives Opus 5.5 a cache read of $0.2 per million. Another table of the product lists $0.4. We did not check the vendor price, so the chart shows both.",
        "sourceIds": [
          "calc-cache-pricing",
          "price-anthropic",
          "price-openai"
        ]
      },
      {
        "id": "cache-break-even-cost-curve",
        "title": "Cost of a reused prefix with and without the cache, by session length (calculation)",
        "subtitle": "Prefix of 7,831 tokens (Sonnet 5.5) and 7,828 tokens (Opus 5.5), the rounded mean turn-1 input; n = 3 Sonnet sessions (range 7,831 to 7,832) and 3 Opus sessions (the same in every session); USD per 1,000 sessions",
        "kind": "line",
        "unit": "usd",
        "xLabel": "Turns in the session (requests that send the prefix)",
        "yLabel": "USD per 1,000 sessions (list price)",
        "series": [
          {
            "name": "Claude Sonnet 5.5 (no cache)",
            "points": [
              {
                "label": "1 turn",
                "value": 15.66
              },
              {
                "label": "2 turns",
                "value": 31.32
              },
              {
                "label": "3 turns",
                "value": 46.99
              },
              {
                "label": "5 turns",
                "value": 78.31
              },
              {
                "label": "10 turns",
                "value": 156.62
              },
              {
                "label": "20 turns",
                "value": 313.24
              }
            ]
          },
          {
            "name": "Claude Sonnet 5.5 (1-hour cache write)",
            "points": [
              {
                "label": "1 turn",
                "value": 31.32
              },
              {
                "label": "2 turns",
                "value": 32.89
              },
              {
                "label": "3 turns",
                "value": 34.46
              },
              {
                "label": "5 turns",
                "value": 37.59
              },
              {
                "label": "10 turns",
                "value": 45.42
              },
              {
                "label": "20 turns",
                "value": 61.08
              }
            ]
          },
          {
            "name": "Claude Opus 5.5 (no cache)",
            "points": [
              {
                "label": "1 turn",
                "value": 31.31
              },
              {
                "label": "2 turns",
                "value": 62.62
              },
              {
                "label": "3 turns",
                "value": 93.94
              },
              {
                "label": "5 turns",
                "value": 156.56
              },
              {
                "label": "10 turns",
                "value": 313.12
              },
              {
                "label": "20 turns",
                "value": 626.24
              }
            ]
          },
          {
            "name": "Claude Opus 5.5 (1-hour cache write, read $0.2 per M)",
            "points": [
              {
                "label": "1 turn",
                "value": 62.62
              },
              {
                "label": "2 turns",
                "value": 64.19
              },
              {
                "label": "3 turns",
                "value": 65.76
              },
              {
                "label": "5 turns",
                "value": 68.89
              },
              {
                "label": "10 turns",
                "value": 76.71
              },
              {
                "label": "20 turns",
                "value": 92.37
              }
            ]
          },
          {
            "name": "Claude Opus 5.5 (1-hour cache write, read $0.4 per M)",
            "points": [
              {
                "label": "1 turn",
                "value": 62.62
              },
              {
                "label": "2 turns",
                "value": 65.76
              },
              {
                "label": "3 turns",
                "value": 68.89
              },
              {
                "label": "5 turns",
                "value": 75.15
              },
              {
                "label": "10 turns",
                "value": 90.8
              },
              {
                "label": "20 turns",
                "value": 122.12
              }
            ]
          }
        ],
        "note": "Calculation, not a bill. The chart multiplies list prices by a prefix of 7,831 tokens (Sonnet) or 7,828 tokens (Opus). It uses a 1-hour write at 2× input and treats the whole prefix as new. It leaves out output and the tokens that each turn adds. The cache costs more at 1 to 2 turns and less from 3. The second Opus line uses a $0.4 cache read, which another table of the product lists. We did not check the vendor price. The table adds the 5-minute write.",
        "sourceIds": [
          "calc-cache-pricing",
          "agent-caching-consistency",
          "price-anthropic",
          "price-openai"
        ]
      },
      {
        "id": "cache-break-even-session-split",
        "title": "One 10-turn session or ten 1-turn sessions: cost with and without the cache (calculation)",
        "subtitle": "USD per 1,000 workloads of 10 requests that send the same prefix; each recorded session started in a new temporary folder, n = 4 later sessions; 0 met the read-more-than-write proxy, 95% Wilson 0% to 49%",
        "kind": "grouped-bar",
        "unit": "usd",
        "yLabel": "USD per 1,000 workloads of 10 requests (list price)",
        "series": [
          {
            "name": "No cache (the same either way)",
            "points": [
              {
                "label": "Claude Sonnet 5.5",
                "value": 156.62
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.2 per M)",
                "value": 313.12
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.4 per M)",
                "value": 313.12
              }
            ]
          },
          {
            "name": "One 10-turn session, 1-hour cache",
            "points": [
              {
                "label": "Claude Sonnet 5.5",
                "value": 45.42
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.2 per M)",
                "value": 76.71
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.4 per M)",
                "value": 90.8
              }
            ]
          },
          {
            "name": "Ten 1-turn sessions, 1-hour cache (assumed no reuse of the new prefix)",
            "points": [
              {
                "label": "Claude Sonnet 5.5",
                "value": 313.24
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.2 per M)",
                "value": 626.24
              },
              {
                "label": "Claude Opus 5.5 (cache read $0.4 per M)",
                "value": 626.24
              }
            ]
          }
        ],
        "note": "Calculation, not a bill: the same prefix, prices and 1-hour write as the cost-curve chart. Each recorded session ran in a new temporary working folder. On turn 1, 0 of 4 later sessions read more tokens than they wrote. This proxy cannot identify which earlier call supplied a cache entry. The split calculation assumes no shared reuse and a wholly new prefix, so it charges ten full writes. With reuse across sessions they would cost the same as one 10-turn session. The cause of the missing reuse was not tested here. The caching study protocol names the random temporary folder as one untested hypothesis. The table adds the 5-minute variants.",
        "sourceIds": [
          "calc-cache-pricing",
          "agent-caching-consistency",
          "price-anthropic",
          "price-openai"
        ]
      }
    ],
    "tables": [
      {
        "id": "cache-break-even-models",
        "title": "Break-even reuses by model (calculation)",
        "columns": [
          {
            "key": "model",
            "label": "Priced as",
            "unit": "text"
          },
          {
            "key": "input",
            "label": "Input $/M",
            "unit": "usd"
          },
          {
            "key": "read",
            "label": "Cache read $/M",
            "unit": "usd"
          },
          {
            "key": "write1h",
            "label": "1-hour write $/M",
            "unit": "usd"
          },
          {
            "key": "write5m",
            "label": "5-minute write $/M (assumed 1.25×)",
            "unit": "usd"
          },
          {
            "key": "be1h",
            "label": "Break-even, 1-hour, new prefix",
            "unit": "score"
          },
          {
            "key": "whole1h",
            "label": "Reuses needed, 1-hour, new prefix",
            "unit": "count"
          },
          {
            "key": "be1hRec",
            "label": "Break-even, 1-hour, 19% already cached",
            "unit": "score"
          },
          {
            "key": "whole1hRec",
            "label": "Reuses needed, 1-hour, 19% already cached",
            "unit": "count"
          },
          {
            "key": "be5m",
            "label": "Break-even, 5-minute",
            "unit": "score"
          },
          {
            "key": "whole5m",
            "label": "Reuses needed, 5-minute",
            "unit": "count"
          },
          {
            "key": "note",
            "label": "Note",
            "unit": "text"
          }
        ],
        "rows": [
          {
            "model": "Claude Haiku 4.5",
            "input": 1,
            "read": 0.1,
            "write1h": 2,
            "write5m": 1.25,
            "be1h": 1.11,
            "whole1h": 2,
            "be1hRec": 0.72,
            "whole1hRec": 1,
            "be5m": 0.28,
            "whole5m": 1,
            "note": "Anthropic list price, 1-hour write at 2× input"
          },
          {
            "model": "Claude Sonnet 5.5",
            "input": 2,
            "read": 0.2,
            "write1h": 4,
            "write5m": 2.5,
            "be1h": 1.11,
            "whole1h": 2,
            "be1hRec": 0.72,
            "whole1hRec": 1,
            "be5m": 0.28,
            "whole5m": 1,
            "note": "Anthropic list price, 1-hour write at 2× input"
          },
          {
            "model": "Claude Opus 5.5 (cache read $0.2 per M)",
            "input": 4,
            "read": 0.2,
            "write1h": 8,
            "write5m": 5,
            "be1h": 1.05,
            "whole1h": 2,
            "be1hRec": 0.67,
            "whole1hRec": 1,
            "be5m": 0.26,
            "whole5m": 1,
            "note": "Anthropic list price, 1-hour write at 2× input"
          },
          {
            "model": "Claude Opus 5.5 (cache read $0.4 per M)",
            "input": 4,
            "read": 0.4,
            "write1h": 8,
            "write5m": 5,
            "be1h": 1.11,
            "whole1h": 2,
            "be1hRec": 0.72,
            "whole1hRec": 1,
            "be5m": 0.28,
            "whole5m": 1,
            "note": "Cache-read price from another product table; the vendor price was not checked"
          },
          {
            "model": "Claude Fable 5.1",
            "input": 10,
            "read": 0.25,
            "write1h": 20,
            "write5m": 12.5,
            "be1h": 1.03,
            "whole1h": 2,
            "be1hRec": 0.65,
            "whole1hRec": 1,
            "be5m": 0.26,
            "whole5m": 1,
            "note": "Anthropic list price, 1-hour write at 2× input"
          },
          {
            "model": "GPT-6.1 Sol",
            "input": 2,
            "read": 0.1,
            "write1h": 2,
            "write5m": 2,
            "be1h": 0,
            "whole1h": 1,
            "be1hRec": -0.19,
            "whole1hRec": 0,
            "be5m": 0,
            "whole5m": 1,
            "note": "No write surcharge in the price list: a write is plain input, so the cache saves from the first read. Another product table lists 1.25× input as the write price: break-even 0.26 reuses"
          },
          {
            "model": "GPT-6 Luna",
            "input": 0.1,
            "read": 0.01,
            "write1h": 0.1,
            "write5m": 0.1,
            "be1h": 0,
            "whole1h": 1,
            "be1hRec": -0.19,
            "whole1hRec": 0,
            "be5m": 0,
            "whole5m": 1,
            "note": "No write surcharge in the price list: a write is plain input, so the cache saves from the first read. Another product table lists 1.25× input as the write price: break-even 0.28 reuses"
          }
        ]
      },
      {
        "id": "cache-break-even-saving-by-turns",
        "title": "Saving from the cache by session length (calculation; negative = the cache costs more)",
        "columns": [
          {
            "key": "model",
            "label": "Priced as",
            "unit": "text"
          },
          {
            "key": "write",
            "label": "Write",
            "unit": "text"
          },
          {
            "key": "t1",
            "label": "1 turn",
            "unit": "rate"
          },
          {
            "key": "t2",
            "label": "2 turns",
            "unit": "rate"
          },
          {
            "key": "t3",
            "label": "3 turns",
            "unit": "rate"
          },
          {
            "key": "t5",
            "label": "5 turns",
            "unit": "rate"
          },
          {
            "key": "t10",
            "label": "10 turns",
            "unit": "rate"
          },
          {
            "key": "t20",
            "label": "20 turns",
            "unit": "rate"
          }
        ],
        "rows": [
          {
            "model": "Claude Haiku 4.5",
            "write": "1-hour write, new prefix",
            "t1": -1,
            "t2": -0.05,
            "t3": 0.2667,
            "t5": 0.52,
            "t10": 0.71,
            "t20": 0.805
          },
          {
            "model": "Claude Haiku 4.5",
            "write": "5-minute write (assumed 1.25×)",
            "t1": -0.25,
            "t2": 0.325,
            "t3": 0.5167,
            "t5": 0.67,
            "t10": 0.785,
            "t20": 0.8425
          },
          {
            "model": "Claude Sonnet 5.5",
            "write": "1-hour write, new prefix",
            "t1": -1,
            "t2": -0.05,
            "t3": 0.2667,
            "t5": 0.52,
            "t10": 0.71,
            "t20": 0.805
          },
          {
            "model": "Claude Sonnet 5.5",
            "write": "5-minute write (assumed 1.25×)",
            "t1": -0.25,
            "t2": 0.325,
            "t3": 0.5167,
            "t5": 0.67,
            "t10": 0.785,
            "t20": 0.8425
          },
          {
            "model": "Claude Opus 5.5 (cache read $0.2 per M)",
            "write": "1-hour write, new prefix",
            "t1": -1,
            "t2": -0.025,
            "t3": 0.3,
            "t5": 0.56,
            "t10": 0.755,
            "t20": 0.8525
          },
          {
            "model": "Claude Opus 5.5 (cache read $0.2 per M)",
            "write": "5-minute write (assumed 1.25×)",
            "t1": -0.25,
            "t2": 0.35,
            "t3": 0.55,
            "t5": 0.71,
            "t10": 0.83,
            "t20": 0.89
          },
          {
            "model": "Claude Opus 5.5 (cache read $0.4 per M)",
            "write": "1-hour write, new prefix",
            "t1": -1,
            "t2": -0.05,
            "t3": 0.2667,
            "t5": 0.52,
            "t10": 0.71,
            "t20": 0.805
          },
          {
            "model": "Claude Opus 5.5 (cache read $0.4 per M)",
            "write": "5-minute write (assumed 1.25×)",
            "t1": -0.25,
            "t2": 0.325,
            "t3": 0.5167,
            "t5": 0.67,
            "t10": 0.785,
            "t20": 0.8425
          },
          {
            "model": "Claude Fable 5.1",
            "write": "1-hour write, new prefix",
            "t1": -1,
            "t2": -0.0125,
            "t3": 0.3167,
            "t5": 0.58,
            "t10": 0.7775,
            "t20": 0.8763
          },
          {
            "model": "Claude Fable 5.1",
            "write": "5-minute write (assumed 1.25×)",
            "t1": -0.25,
            "t2": 0.3625,
            "t3": 0.5667,
            "t5": 0.73,
            "t10": 0.8525,
            "t20": 0.9138
          },
          {
            "model": "GPT-6.1 Sol",
            "write": "no write surcharge",
            "t1": 0,
            "t2": 0.475,
            "t3": 0.6333,
            "t5": 0.76,
            "t10": 0.855,
            "t20": 0.9025
          },
          {
            "model": "GPT-6 Luna",
            "write": "no write surcharge",
            "t1": 0,
            "t2": 0.45,
            "t3": 0.6,
            "t5": 0.72,
            "t10": 0.81,
            "t20": 0.855
          }
        ]
      },
      {
        "id": "cache-break-even-cost-per-1000",
        "title": "Cost per 1,000 sessions by session length (calculation)",
        "columns": [
          {
            "key": "line",
            "label": "Priced as",
            "unit": "text"
          },
          {
            "key": "prefix",
            "label": "Prefix (tokens)",
            "unit": "tokens"
          },
          {
            "key": "turns",
            "label": "Turns",
            "unit": "count"
          },
          {
            "key": "none",
            "label": "No cache (USD)",
            "unit": "usd"
          },
          {
            "key": "c1h",
            "label": "1-hour write (USD)",
            "unit": "usd"
          },
          {
            "key": "c5m",
            "label": "5-minute write, assumed 1.25× (USD)",
            "unit": "usd"
          },
          {
            "key": "save1h",
            "label": "Saving, 1-hour",
            "unit": "rate"
          },
          {
            "key": "save5m",
            "label": "Saving, 5-minute",
            "unit": "rate"
          }
        ],
        "rows": [
          {
            "line": "Claude Sonnet 5.5",
            "prefix": 7831,
            "turns": 1,
            "none": 15.66,
            "c1h": 31.32,
            "c5m": 19.58,
            "save1h": -1,
            "save5m": -0.25
          },
          {
            "line": "Claude Sonnet 5.5",
            "prefix": 7831,
            "turns": 2,
            "none": 31.32,
            "c1h": 32.89,
            "c5m": 21.14,
            "save1h": -0.05,
            "save5m": 0.325
          },
          {
            "line": "Claude Sonnet 5.5",
            "prefix": 7831,
            "turns": 3,
            "none": 46.99,
            "c1h": 34.46,
            "c5m": 22.71,
            "save1h": 0.2667,
            "save5m": 0.5167
          },
          {
            "line": "Claude Sonnet 5.5",
            "prefix": 7831,
            "turns": 5,
            "none": 78.31,
            "c1h": 37.59,
            "c5m": 25.84,
            "save1h": 0.52,
            "save5m": 0.67
          },
          {
            "line": "Claude Sonnet 5.5",
            "prefix": 7831,
            "turns": 10,
            "none": 156.62,
            "c1h": 45.42,
            "c5m": 33.67,
            "save1h": 0.71,
            "save5m": 0.785
          },
          {
            "line": "Claude Sonnet 5.5",
            "prefix": 7831,
            "turns": 20,
            "none": 313.24,
            "c1h": 61.08,
            "c5m": 49.34,
            "save1h": 0.805,
            "save5m": 0.8425
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "prefix": 7828,
            "turns": 1,
            "none": 31.31,
            "c1h": 62.62,
            "c5m": 39.14,
            "save1h": -1,
            "save5m": -0.25
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "prefix": 7828,
            "turns": 2,
            "none": 62.62,
            "c1h": 64.19,
            "c5m": 40.71,
            "save1h": -0.025,
            "save5m": 0.35
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "prefix": 7828,
            "turns": 3,
            "none": 93.94,
            "c1h": 65.76,
            "c5m": 42.27,
            "save1h": 0.3,
            "save5m": 0.55
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "prefix": 7828,
            "turns": 5,
            "none": 156.56,
            "c1h": 68.89,
            "c5m": 45.4,
            "save1h": 0.56,
            "save5m": 0.71
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "prefix": 7828,
            "turns": 10,
            "none": 313.12,
            "c1h": 76.71,
            "c5m": 53.23,
            "save1h": 0.755,
            "save5m": 0.83
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "prefix": 7828,
            "turns": 20,
            "none": 626.24,
            "c1h": 92.37,
            "c5m": 68.89,
            "save1h": 0.8525,
            "save5m": 0.89
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "prefix": 7828,
            "turns": 1,
            "none": 31.31,
            "c1h": 62.62,
            "c5m": 39.14,
            "save1h": -1,
            "save5m": -0.25
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "prefix": 7828,
            "turns": 2,
            "none": 62.62,
            "c1h": 65.76,
            "c5m": 42.27,
            "save1h": -0.05,
            "save5m": 0.325
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "prefix": 7828,
            "turns": 3,
            "none": 93.94,
            "c1h": 68.89,
            "c5m": 45.4,
            "save1h": 0.2667,
            "save5m": 0.5167
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "prefix": 7828,
            "turns": 5,
            "none": 156.56,
            "c1h": 75.15,
            "c5m": 51.66,
            "save1h": 0.52,
            "save5m": 0.67
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "prefix": 7828,
            "turns": 10,
            "none": 313.12,
            "c1h": 90.8,
            "c5m": 67.32,
            "save1h": 0.71,
            "save5m": 0.785
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "prefix": 7828,
            "turns": 20,
            "none": 626.24,
            "c1h": 122.12,
            "c5m": 98.63,
            "save1h": 0.805,
            "save5m": 0.8425
          }
        ]
      },
      {
        "id": "cache-break-even-split",
        "title": "10 requests as one session or as 10 one-turn sessions with no shared reuse, per 1,000 workloads (calculation)",
        "columns": [
          {
            "key": "line",
            "label": "Priced as",
            "unit": "text"
          },
          {
            "key": "none",
            "label": "No cache (USD)",
            "unit": "usd"
          },
          {
            "key": "one1h",
            "label": "One 10-turn session, 1-hour (USD)",
            "unit": "usd"
          },
          {
            "key": "ten1h",
            "label": "10 one-turn sessions with no shared reuse, 1-hour (USD)",
            "unit": "usd"
          },
          {
            "key": "one5m",
            "label": "One 10-turn session, 5-minute (USD)",
            "unit": "usd"
          },
          {
            "key": "ten5m",
            "label": "10 one-turn sessions with no shared reuse, 5-minute (USD)",
            "unit": "usd"
          },
          {
            "key": "ratio",
            "label": "10 one-turn sessions with no shared reuse vs one session, 1-hour",
            "unit": "ratio"
          }
        ],
        "rows": [
          {
            "line": "Claude Sonnet 5.5",
            "none": 156.62,
            "one1h": 45.42,
            "ten1h": 313.24,
            "one5m": 33.67,
            "ten5m": 195.78,
            "ratio": 6.9
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.2 per M)",
            "none": 313.12,
            "one1h": 76.71,
            "ten1h": 626.24,
            "one5m": 53.23,
            "ten5m": 391.4,
            "ratio": 8.2
          },
          {
            "line": "Claude Opus 5.5 (cache read $0.4 per M)",
            "none": 313.12,
            "one1h": 90.8,
            "ten1h": 626.24,
            "one5m": 67.32,
            "ten5m": 391.4,
            "ratio": 6.9
          }
        ]
      },
      {
        "id": "cache-break-even-inputs",
        "title": "Recorded inputs and a check of the formula (calculation)",
        "columns": [
          {
            "key": "model",
            "label": "Recorded sessions",
            "unit": "text"
          },
          {
            "key": "sessions",
            "label": "Sessions",
            "unit": "count"
          },
          {
            "key": "prefix",
            "label": "Turn-1 input, rounded mean (tokens)",
            "unit": "tokens"
          },
          {
            "key": "range",
            "label": "Turn-1 prefix, range (tokens)",
            "unit": "text"
          },
          {
            "key": "already",
            "label": "Already cached at turn 1, mean (tokens)",
            "unit": "tokens"
          },
          {
            "key": "written",
            "label": "Written on turn 1, mean (tokens)",
            "unit": "tokens"
          },
          {
            "key": "savingRange",
            "label": "Input saving, session range (not a confidence interval)",
            "unit": "text"
          },
          {
            "key": "recordedInput",
            "label": "Recorded saving, input side, 5 turns",
            "unit": "rate"
          },
          {
            "key": "newPrefix",
            "label": "Formula, whole prefix new, 5 turns",
            "unit": "rate"
          },
          {
            "key": "precached",
            "label": "Formula, 19% already cached, 5 turns",
            "unit": "rate"
          },
          {
            "key": "wholeSavingRange",
            "label": "Saving with output, session range (not a confidence interval)",
            "unit": "text"
          },
          {
            "key": "recordedWhole",
            "label": "Recorded saving, with output, 5 turns",
            "unit": "rate"
          }
        ],
        "rows": [
          {
            "model": "Claude Sonnet 5.5 · Claude Code",
            "sessions": 3,
            "prefix": 7831,
            "range": "7,831 to 7,832",
            "already": 1463,
            "written": 6366,
            "savingRange": "54.3% to 57.1%",
            "wholeSavingRange": "47.5% to 54.1%",
            "recordedInput": 0.5535,
            "newPrefix": 0.52,
            "precached": 0.591,
            "recordedWhole": 0.4996
          },
          {
            "model": "Claude Opus 5.5 · Claude Code",
            "sessions": 3,
            "prefix": 7828,
            "range": "7,828",
            "already": 1463,
            "written": 6363,
            "savingRange": "58.5% to 59.7%",
            "wholeSavingRange": "51.4% to 54.3%",
            "recordedInput": 0.5918,
            "newPrefix": 0.56,
            "precached": 0.6329,
            "recordedWhole": 0.5313
          }
        ]
      }
    ],
    "related": [
      "caching-consistency",
      "cost-thought-experiments"
    ]
  },
  "sources": [
    {
      "id": "agent-caching-consistency",
      "title": "Caching sessions and repeated prompts (Claude Code and Codex CLI)",
      "kind": "run",
      "date": "2026-10-06",
      "note": "Part 1: 5-turn CLI sessions over a fixed synthetic ledger, with the cache counters each provider reports per turn. Part 2: three prompts with deterministic validators, 10 repetitions per model. Declared protocols, validator controls before inference, every attempt kept; answers are published as ordinal ids, never as text.",
      "data": [
        "/benchmarks/raw/caching-consistency/caching.json",
        "/benchmarks/raw/caching-consistency/consistency.json"
      ]
    },
    {
      "id": "price-anthropic",
      "title": "Anthropic list prices (Claude models)",
      "kind": "price-list",
      "date": "2026-09-21",
      "url": "https://platform.claude.com/docs/en/about-claude/pricing",
      "note": "Prices as listed by the vendor on 2026-09-21 and recorded in the product price table. Cache reads at the listed rate, one-hour cache writes at twice the input price."
    },
    {
      "id": "price-openai",
      "title": "OpenAI list prices",
      "kind": "price-list",
      "date": "2026-10-03",
      "url": "https://developers.openai.com/api/docs/pricing",
      "note": "Token prices as listed by the vendor on 2026-10-03."
    },
    {
      "id": "calc-cache-pricing",
      "title": "Cost with and without the prompt cache (calculation)",
      "kind": "calculation",
      "date": "2026-10-06",
      "note": "Recorded tokens per turn × Anthropic list prices. With the cache: uncached input at the input price, cache reads at the cache-read price, 1-hour cache writes at twice the input price, 5-minute writes at 1.25 times (an assumption; none occurred). Without a cache: every input token at the input price. Output is priced the same in both. Not a bill.",
      "data": [
        "/benchmarks/raw/caching-consistency/caching.json"
      ]
    }
  ]
}
