If you are buying an agent-first product, the question that matters after “does it work” is “what will it cost when everyone uses it”. Most of that answer is decided by engineering rather than by a price list. A conversation that re-introduces your business on every turn, re-sends a pasted screenshot on every step, and pours every query result into its own history costs several times what the same conversation costs once those things are fixed.

Actionary fixes them. None of it changes what the agent can do.

Nothing is re-sent that hasn’t changed

The instructions the agent works from ship as cached blocks: one shared across every tenant, one holding your own entity catalogue, and one for the tool surface. Cached reads bill at roughly a tenth of fresh input, so the two largest blocks in every turn are close to free after the first call.

Everything that genuinely changes each turn — today’s date, the record you are looking at, memory retrieved for that question — is deliberately kept outside those cached blocks. A date in the wrong place would invalidate your entity catalogue once a day, every day, and you would pay to re-send it.

The agent starts knowing your business

Your entities and fields are already in the prompt, refreshed only when your schema changes. A conversation begins oriented instead of spending its first three or four calls working out what a Deal is in your system.

Heavy things stop being heavy

Big columns never ship in lists. A meeting transcript runs 12,000–24,000 tokens per row. Ask for a list of recordings and the transcripts are projected out — the agent fetches one in full only when it needs it. Measured: a two-row list fell from 36,838 bytes to 114.

Older results become summaries. Behind a recent window, earlier tool results are compressed to a structured digest — a 121-record result becomes 280 characters. It is deterministic rather than model-generated, which matters for cost as well as correctness: identical between turns, so caching still works.

Images stay where they belong. A pasted screenshot is kept so you can scroll back to it, and drops out of what the model re-reads on later steps. A 5.3MB paste weighs 9 tokens on subsequent turns rather than 1.3 million.

A wasted turn is a cost

Two of the eleven exist purely because the cheapest tokens are the ones a retry never spends.

A summary never pretends to be the content. When a long value is compressed, it is replaced by its length — never by its opening characters. An opening fragment reads like the real thing, so an agent will quote from it, and an edit built on that quote names text your record does not contain. It fails, then it tries to work out why, and you pay for the whole detour.

A refusal hands back the answer. When an edit does not match, the platform already holds the current text — it just read it. So it returns it with the refusal. The next attempt is correct, in that call, instead of a fresh fetch and several turns of the agent reasoning about a document it cannot see.

Routing, and knowing when to stop

The first step of a turn uses the primary model; later steps route to a cheaper one where one applies. A turn that would breach your per-minute limit is refused up front rather than retried into a rate-limit wall. Reopening the agent resumes an old conversation only while its cache is still warm, so a cold reopen does not pay full price to reload a stale transcript. And you can compact a long conversation on demand.

What you can see and control

Live headroom. A continuous countdown of your per-minute budget sits under the composer — amber under 16% remaining, red under 4%. Budget pressure is visible as it happens rather than after a failure.

Hard caps. Metered spend is capped per tenant, calendar-bounded, and hard-blocked at 100%. The default is $5 a day and $100 a month, and it is yours to set. Chat and workflow usage share one meter, so there is no second pool to watch.

Your own keys, if you prefer. Bring your own provider key and the spend is yours directly, at your rates.

No second observability stack. Per-tool and per-entity latency, and every call the agent made, are already in the product.

Measured, not asserted

Every number here came from the running system rather than from a design document, and each mechanism is written up with its measurement in the technical differentiators pack. The reason to publish them is simple: agent spend is the part of an AI product most easily left to grow, and the engineering that holds it down is invisible from a demo.