What does non-custodial mean?
Mandate never holds, accesses, or stores private keys. All transaction signing happens locally on the agent’s machine. Mandate validates the intent (what the agent wants to do and why), not the execution (signing and broadcasting). The private key stays with the agent throughout the entire lifecycle of every transaction. This is not a theoretical claim. The Mandate API has no endpoint that accepts a private key. Thevalidate endpoint receives action metadata, a reason string, and optionally a destination address and amount. The validate/raw endpoint receives unsigned transaction parameters and an intent hash. Neither endpoint requires or accepts key material.
How does Mandate compare to other models?
| Aspect | Custodial Wallet | Session Key | Mandate |
|---|---|---|---|
| Who holds the key? | Service provider | Delegated signer | Agent (local) |
| What if service is compromised? | Funds at risk, direct theft possible | Limited risk within delegation scope | No key exposure, no fund access |
| What does the service check? | N/A (provider controls funds) | Signature validity + spend limits | Intent + reason + 14 policy checks |
| Can the service steal funds? | Yes | Limited (within delegated permissions) | No (no key access, ever) |
| Detects prompt injection? | No | No | Yes (18 patterns + LLM judge) |
| Audit trail includes “why”? | No | No | Yes (reason field on every transaction) |
What is the validation flow?
The non-custodial flow has four steps. The agent builds the transaction, asks Mandate for permission, signs locally, and reports the result.- Validate: Agent sends transaction details to
POST /api/validate. Mandate evaluates 14 policy checks and returnsallowed,blocked, orapproval_required. - Sign locally: If allowed, the agent signs the transaction with its own private key. Mandate is not involved in this step.
- Broadcast: The agent sends the signed transaction to the blockchain. Mandate is not involved in this step.
- Post event: The agent reports the transaction hash to
POST /api/intents/{id}/events. Mandate fetches the on-chain transaction and verifies it matches what was validated.
Why does this matter for AI agents?
AI agents are high-value attack targets. They hold private keys, execute transactions autonomously, and process untrusted inputs from users, tools, and web content. A compromised agent with a custodial wallet means total fund loss. With Mandate’s non-custodial model, a compromise of the Mandate API does not give the attacker signing capability. The attacker could at most disable validation (which the agent detects as an unreachable API and halts per fail-safe rules) or return falseallowed responses. Even false positives from a compromised API cannot produce signed transactions: the agent still signs locally, and the envelope verifier catches parameter mismatches after broadcast.
The attack surface is fundamentally different. Mandate validates intent. The agent controls execution. Neither party has the other’s capabilities.
Next Steps
Threat Model
Detailed analysis of attack vectors and how Mandate mitigates each one.
How It Works
End-to-end walkthrough of a validated transaction.
Architecture
System architecture and backend service overview.
Intent Hash
How the intent hash binds validation to execution.