Sworn / Mandates
Mandates

Rules an agent cannot talk its way out of.

A mandate is the rule set an agent lives by: what it can hold, what it can trade, how much it can risk. It is baked into the hardware fingerprint, checked before every single action, and cannot be changed without starting over with a new identity.

Schema

Mandates are plain JSON with a fixed set of fields. The model never gets to interpret them. It proposes an action, the runtime checks it against the rules, and only actions that pass get signed.

mandate m-7f2e v3json
{
  "id": "m-7f2e", "version": 3,
  "assets": ["ETH", "USDG", "tokenized_equity:*"],
  "venues": ["uniswap_v4:robinhood"],
  "bands": { "ETH": [0.30, 0.45], "tokenized_equity": [0.08, 0.12] },
  "max_position_nav": 0.20,
  "daily_turnover_nav": 0.10,
  "slippage_cap": 0.005,
  "drawdown_stop": 0.08,
  "heartbeat_s": 900,
  "on_missed_heartbeat": "unwind_to:USDG",
  "trace_visibility": "public"
}

Constraint types

ConstraintCheckedOn violation
Asset allowlistBefore every orderOrder rejected, rejection signed and logged
Venue allowlistBefore every orderOrder rejected
Weight bandsBefore and after simulated fillOrder rejected or resized
Max positionAfter simulated fillOrder resized to cap
Daily turnoverRolling 24h windowOrder rejected
Slippage capAgainst quoted routeOrder rejected
Drawdown stopEvery decision cycleAgent halts, unwinds if configured
HeartbeatRegistry watches for signed pingsSafe action executed by registry

Examples

Conservative treasury

USDG 70 to 90%, ETH 10 to 30%, turnover 2%, drawdown stop 3%, unwind on missed heartbeat.

risk: low

Managed LP

ETH/USDG 0.05% pool only, range width fixed, rebalance on 5pp drift, slippage 0.3%, public traces.

risk: medium

Equity sleeve

Tokenized equities 40 to 60%, max 8% per name, US market hours only, turnover 15%.

risk: medium

Changing a mandate

A mandate cannot be edited in place. To change limits, the operator publishes a new version, the enclave is relaunched with the new mandate hash, a new quote is produced, and the registry records a new identity that references the old one. The ledger shows exactly when the change happened and what changed. Clients can require a notice period before a new version takes effect.

Why make it hard. If rules could be edited on the fly, an operator could loosen them without anyone noticing. Making changes slow and public is the whole point.
See the rules in actionRun an agent