Agent operators
Anyone running software that signs.
- Agent platforms and frameworks
- Trading and execution bots
- Treasury and payment automation
- Keeper and liquidation networks
- Market-making desks
- Rebalancing and yield strategies
Authority an agent cannot argue its way out of. Autonomous agents are about to transact at scale: rebalancing, paying, executing strategies, calling contracts on somebody's behalf. The current answer to what stops one doing something catastrophic is a prompt, a code review and hope. A prompt is not a control.
An agent is software that decides things, which means it can be persuaded to decide the wrong thing, and being non-deterministic it cannot be usefully argued with. So the limits do not live in the prompt. They live in a contract that checks every action before it executes and does not care what the agent believes it was asked to do. You set the largest single payment, how much may move in an hour and a day, which contracts and functions may be called, and which addresses may receive anything. Authority expires on a schedule, and the kill switch is one transaction, immediate, held by you.
Five surfaces, named. Anything outside this list is not covered by this wall; the perimeter page says which one covers it.
Anyone running software that signs.
Anyone on the other side of software that signs.
Anyone who has to answer for what the software did.
Public, dated and sourced. Open a row for what happened and for what would have caught or refused it.
An attacker reached the dashboard driving an autonomous agent and queued two malicious replies. The agent processed them as legitimate instructions and used its own tipping feature to send 55.5 ETH to the attacker. The model was not broken and the code was not exploited. The agent was persuaded.
A destination allowlist and a per-operation ceiling are arithmetic. They do not read the instruction, weigh how convincing it was, or have an opinion about whether the dashboard was authentic. An address the agent has never paid waits out a cooling-off window, and anything above the cap reverts.
AI Incident Database, incident 1003An agent held a prize pool with one instruction: under no circumstances transfer the money. Anyone could pay to try to change its mind. 195 participants sent 481 messages and every one failed. The 482nd presented itself as a new administrative session, told the agent to drop its refusal language, and redefined what its own functions meant.
That instruction was explicit, unambiguous, adversarially tested in public by hundreds of people, and it held 481 times. It was still not a control. A cap enforced by a contract has no 482nd message; it has a comparison that either passes or reverts, checked before the operation executes.
Simon Willison on 0xfreysa/agentA vulnerability in the message layer the trading bot trusted let an attacker initiate transfers from the wallets of users who had authorised it. The transfers were manual and the targets chosen, which is why eleven experienced traders lost $3M rather than everyone losing a little.
Software that spends money on your behalf needs a ceiling it cannot exceed, whether the instruction came from you or from someone impersonating you. Per-operation caps, rolling velocity limits by hour and by day, and a recipient allowlist bound the damage to a number you chose in advance. The kill switch is one transaction, immediate, and yours.
QuillAudits on the Banana Gun exploitA new router contract shipped without the permission and parameter checks the old one had. Three days later an attacker used a call injection against it to spend the token approvals users had already granted, and swapped the proceeds out through a mixer.
The exposure was never the bot's balance, it was the standing approvals pointed at it. Allowlisting which contracts and which specific functions an automated operator may call turns a blanket approval into a bounded one, and session authority expires rather than persisting until somebody revokes it.
CertiK on the Maestro and Unibot router exploitsThe bot's router contract lacked the permission and parameter checks that would have stopped an arbitrary call, and an attacker used it to spend users' pre-approved tokens. 280 ETH left. The team refunded 610 ETH across 106 addresses.
Two bots, one week apart, the same missing check, and in both cases users had done nothing except grant an approval to software they had reason to trust. Enforcement belongs where a compromised operator cannot argue with it: checked before the operation executes, against a policy the venue can read.
CertiK on the Maestro and Unibot router exploitsShared substrate, not features of this wall. Every layer below is already paid for by the first wall in your scope.
The limits live on chain, in a contract the agent cannot talk its way past. Every action is checked against the policy before it executes, by code that does not care what the agent believes it was asked to do. Authority expires, and the kill switch is one transaction, immediate, held by you.
Individually, or bundled with the walls beside it.
The venue deploys the gate and gets bounded counterparties. The operator registers against it and gets a credible answer to why anyone should let their software near real money
Per-operation caps, rolling velocity limits, allowlisted targets and functions, session windows and a kill switch, applied where a leaked key cannot argue with an arithmetic comparison
It runs on the same bounded-authority contracts as the Circuit Breaker: the same caps, the same scoped pauses, the same custody-free posture. An agent is just another counterparty that needs limits, and every venue that adopts a policy contract for one gets the other nearly free.
Fuga Labs is read-and-attest, never custody-and-execute.
A scoping call maps this wall against what you run and says where it reaches and where it stops. Nothing is provisioned until that is agreed in writing.