Context
What each request carried, and what Iris measures.
Press 4. Context shows the newest turn on the wire, broken into the three things a
request is made of, each sized in tokens and priced at list rates.

What a request is made of
| Part | What it is | Who controls it |
|---|---|---|
| System prompt | Claude Code's own operating instructions, plus your environment and CLAUDE.md | Partly you — block 2 is yours |
| Tool schemas | The full JSON definition of every tool Claude is allowed to call | You, via the deny list |
| Conversation | Every message so far, including tool_use and tool_result payloads | Grows on its own |
The first two together are the fixed prefix. It is re-sent on every single message of the session, whether or not anything in it is used. That is the number worth reading.
The system prompt, block by block
Click System prompt. Iris shows every block it saw, in full, with its size and whether it
carries cache_control. Message blocks are previewed at 300 characters; the system prompt
deliberately is not, because you cannot audit a cost you are only shown the first paragraph of. The
only cap is a 200k-character guard against a pathological payload.

What to look for in your own:
- Block count and cache flags. Uncached system blocks are re-billed at full input price every turn. Two cached blocks with a stable prefix is the cheap shape.
- How much of it is yours. A
CLAUDE.mdthat grew to a few thousand characters is a permanent per-turn cost. Iris shows you what the rule costs before you decide it is worth it. - Order. Anything appended before a cache breakpoint invalidates everything below it. If your project instructions change every session, the whole prefix underneath is rewritten at write price.
Tool schemas
The Tool schemas tab lists every definition with its token weight and call count, and carries a trim simulator that models a change before you commit to it. Acting on what you find there is Optimize.

Conversation and changes
Conversation shows every message block including tool payloads — often the largest single source of growth in a long session. Changes diffs the prefix between two live turns and attributes the growth to a source, which is how you catch a prefix that quietly grew mid-session.
Caching, and why the dollar figures move
Cached blocks are billed at write price once, then read back at roughly 10% of input price until the TTL expires. The dashed lines in the ribbon are cache breakpoints. A stable prefix is therefore much cheaper than its token count suggests — and a prefix that changes every session is much more expensive than it looks.
What Iris measures, and what it does not
It measures: the exact bytes of each system block, tool schema and message on the wire;
the usage figures Anthropic returns; cache reads, writes and expiries; latency and
status per call.
It estimates: token counts. These start as chars/4 and are then calibrated —
Iris divides the measured input total from the response by its own estimate and scales every
figure by that ratio, so the numbers track what you were billed rather than a raw guess. They are
close, not exact.
It does not measure: anything about the model's reasoning, output quality, or what Claude
would have done differently. It also does not model your contract — dollars are list rates for known
models, and an unknown model stays unpriced rather than being printed as $0.00. Claude
Console is the invoice.
The Token Tax walks through one full measurement — how a 28.0k baseline became 5.6k, and what stayed enabled.