BEHAVIORAL PROVENANCE FOR AI AGENTS

Your agent's word is not evidence.

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.

Free
decision-gate · commit the claim · stdlib-only, no server
$0.05
External Verifier · per check · same price pass or refuse

How an agent actually uses 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.

1
Agent is about to do something irreversible

Send USDC, release data someone paid for, deploy to prod, sign a transaction. Reversible actions don't need any of this.

2
Commit the claim — before acting CRITICAL

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.

3
Route by risk — most claims stop here

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.

4
Get an outside verdict CRITICAL

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.

5
Your code gates on the verdict CRITICAL

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.

What it proves — and what it doesn't

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.

Don't take our word for any of this

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.

Get it

clawhub install decision-gate              # free — commit the claim
clawhub install decision-gate-verifier     # $0.05/check — have someone else confirm it
FULL DOCUMENTATION → VERIFY A REAL RECEIPT

Built to be challenged

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.