The price feed sleeps every weekend.
The vault reads the NYSE calendar onchain, holidays and early closes included. No session, no trade.
Claude proposes every move. An onchain mandate weighs it against market hours, live prices and hard limits. One failed check and the vault says no, on the record.
An agent that only reads a DEX price will buy on a Saturday, chase a pool that drifted from fair value, or trade through a stock split. Maat turns each trap into a rule the contract enforces.
The vault reads the NYSE calendar onchain, holidays and early closes included. No session, no trade.
Each buy compares a 30-minute Aerodrome TWAP with Chainlink. We measured these premiums in session before setting the limit.
When the B20 multiplier moves, the vault records it and pauses that token for 24 hours while prices settle.
Claude never holds the keys to the rules. It writes intents. The vault checks them against a mandate it cannot change, then emits a Decision either way.
Every 15 minutes in session, Claude reads the vault, the market and the mandate, and returns intents with a rationale.
Each intent is simulated against the live contract from the executor address, under the exact rules that will apply.
Nine checks in order, from market session and feed age to premium, caps and weight. Credit moves also check health factor. One fails, it stops.
Allowed or refused, the Decision event lands onchain with its reason code, the rationale hash and a Builder Code.
event Decision( bytes32 indexed intentId, Action action, address indexed token, uint256 amount, bool allowed, Reason reason, bytes32 rationaleHash );
Every transaction carries a Base Builder Code (ERC-8021), so each decision is attributable to Maat onchain.
A refusal is not an error log. It is a reason code inside the Decision event, readable by anyone, from a dashboard or another agent.
| TIME (ET) | INTENT | DECISION | NOTE | GAS USED |
|---|---|---|---|---|
| Thu 5 Nov 10:30 | BUY NVDAc · $20 | ALLOWED · OK | NVDAc under its 33% target weight. | 758,192 |
| Thu 5 Nov 10:30 | SUPPLY NVDAc · $15 | ALLOWED · OK | Posted as collateral on Aave V4. | 286,707 |
| Thu 5 Nov 10:30 | BORROW USDC · $5 | ALLOWED · OK | Compute runway, health factor above 2.0. | 484,173 |
| Sat 7 Nov | BUY GOOGLc · $10 | REFUSED · MARKET_CLOSED | Weekend. Refused and logged once. | 111,116 |
Recorded by the agent loop on a fork of Base mainnet at block 53,551,627, against the real B20 tokens, Aerodrome pools and the Aave V4 Equities Hub. Mainnet rows will link to Basescan.
The owner commits the mandate onchain. Any change is queued in public with its full contents and waits 24 hours, so neither the agent nor a stolen key can relax a limit in the moment.
Other agents pay about one cent to ask whether a stock trade is safe right now. USDC lands in the vault.
Equal-weight NVDAc, GOOGLc and AAPLc, rebalanced past a 5% drift, only in session.
Stocks become collateral on the Equities Hub.
A small loan covers compute, never below the target health factor.
Claude usage is paid onchain to an allowlisted payee.