How it works
The agent can only propose. The contract decides, in a fixed order, and records every decision.
Tiers
Four outcomes
- Auto
Within your limits and sent to an approved destination. Executes instantly.
- Ask
Valid destination, but over a limit. You approve or reject on your phone.
- Block
Breaks a rule. Nothing moves, and the reason is recorded.
- Circuit breaker
Too many blocked attempts in a short window. The agent is frozen automatically.
Evaluation order
Checked top to bottom. The first match wins.
- 1BlockAgent frozen or revoked
FROZEN - 2BlockPolicy expired
EXPIRED - 3BlockDestination not on your allowlist
NOT_ALLOWLISTED - 4AskOver per-payment limit, remaining daily limit, or max % of vault
OVER_PER_TX · OVER_DAILY · OVER_VAULT_PCT - 5AutoWithin every limit, approved destination
NONE
Daily limits use a fixed UTC day. Known edge case: an agent can spend up to about 2x the daily limit across midnight.
Circuit breaker
Too many blocks, and the agent freezes itself.
Every blocked proposal is counted in a rolling window. When the count reaches your threshold (default 3 in 10 minutes), the agent is frozen and an AgentFrozen event is recorded. Every later proposal is blocked with reason FROZEN until you unfreeze.
Blocked proposals don't revert. They return a decision and emit an event, so the reason and the counter persist on-chain. Rejected or expired approval requests don't count toward the breaker.
Receipts
Every attempt is recorded, including blocked ones.
Each proposal produces a Proposed event and exactly one Decided event with the tier and reason. Approvals, rejections, freezes and rule changes are events too. The receipt timeline is built only from this log.
Why the AI has no authority
Strict schema at execution. No chat.
The agent sends a fixed proposal: action, token, amount, destination. Unknown fields are rejected. There is no free-text channel that can talk the vault into anything.
Rules are set by you with sliders. Tightening applies instantly. Loosening shows a structured diff and needs your explicit confirmation. An AI may suggest tightening; it can never loosen a rule on its own.
Layer model
Agent, Bounded, Wallet, Rails
- Layer 1Agent
Any AI. Untrusted. Can only propose.
- Layer 2Bounded
Who may spend, and how much. Enforced by the contract.
- Layer 3Wallet
The vault holds the funds you own.
- Layer 4Rails
x402, transfers, DeFi. How money actually moves.