Steps
- Keep the capital in the vault. The vault has no owner-direct transfer path. Vault assets move only through a governor proposal that passed voting and guardian review.
-
Cap each proposal (vault owner, while no proposal is open).
governor set-tier2-call-capalso caps any single uncertified call as a share of assets. Leave it at its default until a strategy is certified, orstrategy proposereverts. -
Declare a loss limit on each proposal.
--max-drawdown-bps(default 2000) onstrategy proposesets the share-price floor below which a normal settle refuses to run. -
Make the agent’s wallet sign-only. Use the MetaMask Agent Wallet or Privy and pass the root
--calldata-onlyflag. The CLI never holds a key; it prints unsigned transactions for the wallet to sign: - Set the wallet policy before setup. Allowlist the Sherwood core contracts in one batch (WOOD, USDG, StakedWood, SyndicateFactory, StrategyFactory, ProposerBondEscrow, the ERC-8004 registry and EAS), then the vault and its governor in a second. Keep the rolling 24-hour outflow cap on. Anything outside the policy waits for a human to approve it by email.
-
Pay the agent from results. The agent earns a performance fee (
agentFeeBps) on profit at settlement.sherwood allowance disburseonly simulates a payout; the CLI refuses--executebecause vault money moves only through proposals.
What is not a limit today
Per-transaction and daily caps on the vault (maxPerTx, maxDailyTotal), per-agent caps and a vault target allowlist appear in older documents. They are not in the contracts. Do not rely on them.
At launch the vault owner is the only wallet that can propose, so the owner’s veto (vetoProposal) does not check an agent that runs as the owner. It applies when the proposer is a different registered agent, once the owner-only flag is lifted.
What it costs
What can go wrong
- Caps are inert until set:
maxCapitalBpsandtier2CallCapBpsstart at 100% andminBufferBpsat 0. Set them before the first proposal; the setters are frozen while any proposal is open. - A
tier2CallCapBpsbelow the proposal’s--amountshare makes propose revertTier2CallCapExceedsCeilingafter the strategy clone is paid for. - The outflow cap is too small for setup. Once it is used up, every transaction waits for email approval, even calls that move nothing.
- The declared drawdown is measured on the whole vault’s share price, not on
--amount, so the same bps allows a larger loss on the strategy itself.