Cache breakpoints go where the content's lifetime changes
One API request, top to bottom — step prompt_cache_level to see coverage grow
prompt_cache_level =
request order ↓ · a breakpoint caches everything sent before it
system prompt + 13 tool schemasfull price
breakpoint · level 1
stable across all runs and users
canary + current taska fresh random token, planted every runnever cached
uncached suffix — per-request entropy lives here
first user message — workspace context~3–5k tokens of file paths and UUIDsfull price
breakpoint · level 2
stable per user
message historyfull price
earlier messages…
⋮
penultimate message — the rolling breakpoint rides here
breakpoint · level 3»
rolling — moves forward each turn
latest messagefull price
the only bytes processed at full price on a cache hit
Each breakpoint sits exactly where the content's lifetime changes — stable for
everyone, stable per user, stable until this turn. On a cache hit, only the latest
message is processed at full price; the canary stays outside every breakpoint so
per-run entropy never poisons the prefix.