When an agent moves money or does something it can't undo, and someone later asks
why, the only proof is usually the agent's own log — written by the same system being questioned.
decision-gate fixes the ordering and the authorship: the claim is committed
before the action, and an independent party — not you — confirms the action matched it.
Five steps. The three marked CRITICAL are the ones that make this evidence instead of decoration — miss any of them and you're back to a log that proves nothing.
Send USDC, release data someone paid for, deploy to prod, sign a transaction. Reversible actions don't need any of this.
The agent writes what it's about to do and under what authority: intent, inputs, expected state delta, cap, expiry, reversal plan. Hash-chained, so editing or reordering it later breaks the chain.
with gate(action_id="payout-88", decision="SEND",
risk_band="under-100", amount_usd=2500,
reversible=False) as receipt:
send_the_money()
Why it's critical: a record written after the outcome can always be shaped to look deliberate. Ordering is the whole point — delete the write and the action shouldn't fire.
risk_band is computed, not self-declared: pass amount_usd and
reversible and the band gets floored so a caller can raise it but never
under-claim it. Low-band claims stay local and free forever.
For the high-band ones: $0.05 on Base buys a verdict from a party that isn't you. Seven deterministic checks, no model. Returns PASS or REFUSE with a signed receipt.
receipt = client.check(contract, proposed_action, ...) receipt["verdict"] # PASS or REFUSE — $0.05 either way
Why it's critical: your own log is still your own word. This is the only step that produces something a skeptic has to accept — and it's paid the same either way, so there's no incentive to rubber-stamp.
The verifier has no custody and can't stop anything — it returns an answer. It becomes a gate only because your code is written to act only on PASS.
if receipt["verdict"] != "PASS":
abort() # the refusal is the product
Why it's critical: skip this and you've bought a receipt, not a gate. Anchor it on-chain too and the verdict outlives your logs — readable off Base by anyone, forever.
Conformance, not soundness. A PASS means the action matched the claim committed beforehand. It does not mean the decision was wise, the outcome was good, or the plan was legitimate — a dishonest plan executed exactly as declared still passes. It's not a safety check and not permission. It's a checkable data point for when something goes wrong, instead of just your word.
We sell independent verification, so "trust us, we're independent" is exactly the wrong pitch. Every receipt pins the evaluator's own code hash and can be re-derived from scratch by anyone — free, no account. A mismatch is a fraud proof. There's a real receipt from a real paid mainnet check, with the commands to check it yourself, on the proof page.
clawhub install decision-gate # free — commit the claim clawhub install decision-gate-verifier # $0.05/check — have someone else confirm itFULL DOCUMENTATION → VERIFY A REAL RECEIPT
Every check is deterministic and published — no model in the verdict path, so the same inputs produce the same answer on your machine as on ours. The registry contract's source is verified on Basescan. Every design requirement here came from a public critic who found a hole, and they're credited by name in the changelog. You're not being asked to trust us; you're being handed the tools to check us.