How the agent works
What happens to a payment, how the salary is set and what the agent can and cannot do.
Every payment is split into boxes
Your money lives in a vault you own, divided into boxes: taxes, payroll, salary, operating, emergency and profit. When a payment arrives, the agent splits it in a fixed order: first the share set aside for taxes (with a small buffer that is returned as a refund later), then the gap for the payroll and bills due in the next 30 days, then the liquidity floor, then what the salary box is owed, then the liquidity target, then the emergency cushion. Whatever is left goes to the remainder.
The order is code, not a preference the agent can reinterpret: the same payment always produces the same split, and every step is explained in a receipt.
Where this is enforced: packages/core/src/cascade.ts, packages/brain/src/receipt.ts
The salary is regular because it is smoothed
The salary is a fixed amount paid on the same day each month. The agent proposes an amount from your history and a forecast, and the proposal is held back by whatever binds it: taxes not yet covered, too little history, an unknown spending level, the cushion floor or the risk in the worst scenarios. Each receipt names the limit that applied, so you can see why the number is what it is.
The salary box is never invested: it exists to pay you.
Where this is enforced: packages/brain/src/salary.ts, packages/brain/src/forecast.ts
What the agent can and cannot do
The vault enforces the agent's limits in the contract itself. The agent can only move money to recipients you approved, up to a cap per window, and never below the floor of a box. It cannot withdraw to an address you did not approve, and it cannot change these limits. Only you can withdraw, pause the agent or remove it, each in one transaction.
Above an amount you choose, the agent does not act: it proposes, and nothing happens until you approve. A circuit breaker stops it altogether if an action would break an invariant of the box accounts.
Where this is enforced: contracts/src/vault/BoxVault.sol, packages/brain/src/breaker.ts, packages/brain/src/autonomy.ts