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 schemas full price
breakpoint · level 1
stable across all runs and users
canary + current taska fresh random token, planted every run never cached
uncached suffix — per-request entropy lives here
first user message — workspace context~3–5k tokens of file paths and UUIDs full price
breakpoint · level 2
stable per user
message history full price
  • earlier messages…
  • penultimate message — the rolling breakpoint rides here
breakpoint · level 3
rolling — moves forward each turn
latest message full 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.