Concepts
The policy layer
Three actors, one contract. Understand them and the rest of this documentation falls into place.
Three actors
- The agent proposes. It reads state, sizes ideas, and calls validate or propose endpoints. It never executes.
- The policy decides. The user’s Investment Policy Statement is encoded as a structured bundle of bands, floors, ceilings, and standing rules. Every proposal is evaluated against it deterministically.
- The human attests. Allowed proposals land in the user’s attestation queue in the AC app, where the user accepts or rejects before anything reaches a custodian.
Why not let the agent execute?
Letting an agent execute compresses every risk decision into one prompt. That decision happens at the worst possible moment — under whatever context window pressure the model is under — and the consequence is irreversible. We hoist those decisions out of the prompt and into a contract you defined off-line, when you weren’t under pressure.
A request’s lifecycle
- The agent sends a
validate_tradeorpropose_tradecall with the trade payload. - The server resolves the user’s active IPS, builds a current portfolio snapshot, and runs the proposal through every guardrail (mandate bands, asset authority, standing rules, drawdown).
- The decision is written to the audit log — accept or reject, with the rule that fired.
- For
validate, the call ends here. Forpropose, an allowed decision creates aServiceRequestfor human attestation. A blocked decision creates nothing — the agent gets the violations back instead. - On attestation, the user accepts; the AC backend executes against the custodian and updates the request to completed.
Compared to execute-style platforms
- Who decides: the model in the moment (execute) vs. the IPS encoded off-line (policy).
- Audit trail: per-platform, often opaque vs. every decision logged with the rule.
- Recovery: the trade already executed and recovery becomes a dispute vs. caught at attestation and never executed.
- Custody risk: you delegate authority to the agent vs. custody never leaves the user.
Implications for your code
- Surface attestation back to the user. After
propose_tradesucceeds, tell the user to open the AC app to approve — don’t pretend the trade executed. - Lean on validate_trade. It’s free, audit-logged, and tells you exactly which rules would block your proposal so you can shape it correctly.
- Let the policy shape sizing. Read
get_mandateand use the utilization numbers to choose amounts that fit. Don’t guess.
Last updated 2026-06-15