The suite · Policies
Most agent “policies” are a paragraph in a system prompt, which our own Model Watch benchmark shows agents can be talked out of. A Fidacy mandate is not advice to the model. It is a signed, versioned object a deterministic engine enforces before money moves, and the model's opinion about it is irrelevant.
Five seconds to read, one file to edit. On the local firewall it lives in ~/.fidacy/config.json and hot-reloads on the next call, no restart. On a hosted account it is managed in the console with team governance.
{
"mandate": {
"payees": ["supplier:acme-hosting", "supplier:globex-freight"],
"categories": ["saas", "invoice"],
"currency": "USD",
"perTxMax": 2500,
"maxTotal": 10000
}
}Deny by default
A payee not on the list does not get paid, at any amount. This is the rule that stops a swapped or lookalike vendor, and it is the default out of the box.
One payment per invoice
A second request for the same invoiceRef is denied regardless of amount. Re-presenting a paid invoice at a higher figure is the oldest BEC move; here it is structurally impossible.
Caps and windows
Per-transaction ceiling, total budget for the window, validity dates, single currency. Everything an agent may do has a boundary a human wrote.
Revocation in one call
A revoked mandate stops the agent instantly. No deploy, no restart, no hunting for which systems cached the old rules.
Every signed verdict carries policy_version inside the credential. Months later, in a dispute, you do not argue about which rules were active when the agent paid: the verdict says so, the signature proves it was not edited, and the Bitcoin-anchored trail proves when. Policy changes become an auditable history instead of a wiki page's edit log.
On the console, advanced policies add backtesting: replay a proposed rule change against your real decision history and see what it would have blocked or allowed before you ship it.