Skip to main content

What does validate do?

The validate command checks a transaction against the policy engine before your agent signs anything. If the policy allows it, you get an intentId. If it blocks, you get a blockReason. If it requires approval, you get an intentId and a prompt to wait. Preflight validation is action-based. You describe what you want to do, and the policy engine evaluates it. No gas parameters, no calldata, no intentHash computation.

Options

Success output

Blocked output

The blockReason code tells you exactly which policy check failed. See the block reasons reference for the full list.

Approval required

When the transaction triggers an approval workflow, the response includes the intentId and a next step:
Run mandate approve <intentId> to poll until the owner approves or rejects in the dashboard.

The reason field

Every validation requires a --reason. This is not optional decoration. The policy engine scans the reason for prompt injection patterns, anomalous behavior, and policy violations. A clear, specific reason (“Payment for March invoice from Acme Corp”) is more likely to pass than a vague one (“sending money”).
If you omit --reason, the command returns an error. The policy engine requires it for every transaction.

Raw mode (legacy)

Raw mode sends full EVM transaction parameters and computes an intentHash locally. Use this only for self-custodial flows where you build the transaction yourself.
Deprecated. Use preflight mode instead. Raw validation is kept for legacy self-custodial flows but will be removed in a future version.

Raw mode required flags

Raw mode optional flags

Raw mode returns an additional next field pointing to the event command for posting the txHash after broadcast.

Next Steps

Transfer Command

Shorthand for ERC20 transfers with automatic action mapping.

Wait for Approval

Poll until the owner approves a pending intent.

Validate Guide

End-to-end walkthrough of the validation flow.