Tiers & cost

Four tiers, one budget

One turn’s block, drawn to scale against the ceiling it has to fit inside: what each tier costs, and how much of the window is left for the task rather than for the memory.

tokens per turn · 200 stored memories · measuredceiling 2,0001,320 used05001,0001,5002,000Pinnedcontradictions, weak domains, corrections79Index linesone gist line per held memory1,180Triggered bodiesfull text, only where an identifier earned it141Headroomleft for the task, not the memory600

The tiers

What each one holds, and what it costs

L0Pinned

Unresolved contradictions, per-domain reliability, and any correction caught in the message being answered.

When the agent must not guess, or must be careful in a domain it has been failing in.

Full body, every turn
L1Hot cache

Facts pre-staged for the work in front of it. A new fact lands here immediately.

Default home for everything you tell the service.

One index line, plus a body when a trigger fires
L2Warm store

Indexed candidates, scored against each turn and promoted if they earn it.

Facts that are true but not currently relevant.

Nothing until promoted
L3Cold archive

Everything else, still searchable, still recallable on demand.

History. Retrieved by a question, never by the context builder.

Nothing until recalled

Injection reasons

Four reasons a line is there

Every line carries the rule that selected it. Four reasons is a small enough set that a token bill can be attributed, which is what makes analytics an argument rather than a decoration.

ReasonIncludedWhat earned it
indexA single gist line.The default, and what almost every memory costs. 200 memories index for ~1.3k tokens.
triggerThe full body.You named something concrete the transcript does not already contain — a build id, a host, a path — and a memory mentions it. No model decides this.
tensionThe full body.Two stored claims contradict each other. A contradiction is a question to ask, not trivia to skim.
guardrailThe full body.A domain this agent has been measurably unreliable in.
—Nothing.Above the index budget. The report says so rather than quietly dropping the tail.

measured, 200 memories

Index + triggers1,320 tok
Every body3,643 tok

Same 200 facts. 77% fewer tokens, and the window keeps its room for the actual task.

Chroma’s 2025 context-rot report measures accuracy falling as input length grows, with the damage coming from topically-related distractors rather than from structure.

Reproduce with pnpm measure.

Reading your own bill

The shape of the spend tells you what to fix

Mostly index lines, no bodies

Not a budget problem. A store with nothing worth promoting, and the opposite fix — promote more, do not raise the ceiling.

One trigger body per turn

Healthy. Something concrete was named each time and exactly one memory earned a full body.

truncated: true on most turns

The ceiling is doing its job and the store is larger than the window. Raise it, or accept a smaller hot set — both are legitimate, neither is silent.

A tension on every build

Something is being contradicted often enough to pin itself into every prompt. That is a queue for a human, not a budget.

The dashboard splits the spend by the same four rules, per endpoint and per key. The dashboard reference →