Cost reporting
Some harnesses report tokens but no dollar cost. This page says which, how Kraft prices their sessions, and which caps bound a session Kraft cannot price. For how the caps work, see Caps and budgets.
Harnesses that report no cost
codex, cursor, amp and antigravity report tokens but no cost. claude and opencode report their own cost. gemini is different again: Kraft reads nothing from its log, and asks the agent to write its token counts, and its cost only if it knows it, into its result file.
Kraft estimates a finished session's cost from prices.json, the rate table shipped with each release (Anthropic, OpenAI and Google models, refreshed per release). It prices the session on the model the log names or, when the log names none, the model Kraft launched it with.
| Harness | Priced on | Not priced when |
|---|---|---|
codex | Its launch model (gpt-5.6-sol in the shipped deep agent profile), because its log names no model. | A task passes no model: the CLI runs on its own default, which Kraft cannot price. |
amp | The model its log names, when the table lists it. | The table lacks that model. |
cursor | A launch model the table lists, such as gpt-5.6-sol. The price is the provider's list price (OpenAI's, here), not what Cursor bills on your plan or in credits. | Its log names the model "Auto", and Cursor's own model ids usually are not in the table. |
antigravity | A base model id the table lists, such as gemini-3.8-flash with effort set. The price is Google's API list price, not the quota or credits a signed-in account spends. | Its log names a model only when launched with one, and a slug with the effort in it (gemini-3.8-flash-low) is not priced. |
gemini | The launch model, when the table lists it, on the tokens the agent reports. | The agent reports no tokens: the session counts as nothing at all, against a dollar cap or a token_budget. |
The estimate stays marked as one (~$4.20 (est.)), never as the agent's own figure. The board shows the tokens of a session Kraft cannot price, with no dollar figure.
Dollar caps and a session Kraft cannot price
A session Kraft cannot price has no dollar figure. The two kinds of dollar cap treat it differently:
| Cap | Counts the session as | What happens |
|---|---|---|
budget.work_item_usd, budget.daily_usd and kraft item create --budget | $0 | Never stops for it. The item's timeline says so the first time (spend_unpriced), and kraft admin doctor warns about each harness the chains launch on an unpriced model. |
A per-scope budget_usd | Unknown spend | Stops the next launch in that scope until you act. Raising the cap does not clear the stop: set budget_usd=none, as Raise a cap on a stopped item shows. |
token_budget bounds any harness whose tokens Kraft reads, and Gemini only as far as its agent reports them.| You want to bound | Claude, OpenCode (report cost) | Codex, Amp, Antigravity, Gemini on a priced model (estimated) | Cursor, or any unpriced model |
|---|---|---|---|
| One work item | budget.work_item_usd, --budget, or budget_usd on the work item | The same | token_budget on the work item |
| One node, step or task | budget_usd or token_budget on that scope | The same | token_budget on that scope |
| Everything in a day | budget.daily_usd | budget.daily_usd | No cap counts it. |
Today's spend against the daily cap is GET /api/budget/today, and every item's own share of it is budget_cap.daily on GET /api/work-items/{id} (see HTTP API).
Long-context pricing
Some models cost more once a request's context passes a size, such as OpenAI's past 272k tokens. Kraft prices a whole session at that higher rate when one of its requests passed the size. It can tell only from a log that shows each request: Claude's and Amp's.
Codex's log shows only running totals, so Kraft prices a Codex session at the base rate, and a long-context one estimates low.
Related
- Caps and budgets: how the caps layer and why a raise is bounded.
- Agent harnesses: which harnesses report cost, side by side.
- Raise a cap on a stopped item: the way past a
budget_usdstop.