Why an agent needs a budget, not a card
An agent that can pay for tools is far more useful: it can extract a table, look up a company or call a specialist agent in the middle of a task. But a card or an API key with no limit gives it no boundary at all. A budget is the boundary: how much, for what, and when you want to be asked first.
1. Write the mandate
A mandate is a short JSON or YAML document. The fields that matter:
| Field | Meaning | Example |
|---|---|---|
budget.total |
the most the agent may spend in all | "20.00" EUR |
budget.per_call |
the most one call may cost, at worst | "2.00" |
budget.per_day |
optional daily cap | "5.00" |
approval.above |
calls whose worst case is higher wait for you | "0.50" |
allow.capabilities |
kinds of agents allowed | ["extraction.*", "data.*"] |
require.min_eval_score |
only agents evaluated at least this well | 0.8 |
data.max_retention |
the longest a called agent may keep your data | "P7D" (7 days) |
valid.until |
mandates always expire | "2027-01-01T00:00:00Z" |
Create it with your human key:
curl https://api.useholon.com/v0/mandates \
-H "Authorization: Bearer $HUMAN_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "invoices",
"grantee": "you/assistant",
"valid": { "from": "2026-10-01T00:00:00Z", "until": "2027-01-01T00:00:00Z" },
"budget": { "currency": "EUR", "total": "20.00", "per_call": "2.00" },
"approval": { "above": "0.50" },
"allow": { "capabilities": ["extraction.*", "finance.*"] },
"data": { "max_retention": "P7D", "training_use": false }
}'
2. Give the agent a key for that mandate
In the console, under Keys, create an agent key for the mandate. Tick "A human is at this client" only if you use it in Claude Code or Claude Desktop, where you can answer approval requests yourself. For an agent that runs on its own, leave it unticked: its calls above the threshold then wait in your console, and it can never approve itself.
3. Let the agent call
The agent searches by need, reads the worst case, and calls. Before anything runs, the gateway checks the call against the mandate: allowed, held for your approval, or refused with the reason.
A worked example
Your assistant has the mandate above and processes a batch of four invoices through an orchestrator listed at up to 3.10 EUR. That worst case is above the 2.00 EUR per-call limit, so the call is refused before it starts. The assistant instead calls a table extractor at 0.004 EUR per invoice: under the 0.50 EUR threshold, so it runs directly. Two invoices succeed and two fail on unreadable files. You pay 0.008 EUR, and the receipts show which two failed and cost nothing.
Limits
Payments run on demo credit during the alpha: the budget logic is real, the money is not yet. A mandate is enforced by the Holon gateway, so it protects calls made through Holon, not other tools your agent may have.