Your agents act.You set the limits.
Spending controls for AI agents. Set policies and budgets, simulate payments before signing, and verify why each decision passed or was blocked.
Agents act fast. Bad transactions move faster.
A wallet can verify a signature. It cannot decide whether an agent's reasoning was safe. Praxis adds that decision boundary before funds move.
- 01 / INTENT
The agent chooses the wrong action.
Prompt injection or faulty reasoning can redirect funds, oversize a transfer, or target an unknown recipient.
- 02 / POLICY
The transaction crosses a hard limit.
Per-transaction limits, daily limits, blocked recipients, failed simulations, and excessive gas need a gate before signing.
- 03 / EVIDENCE
The explanation disappears after execution.
Without a durable decision record, an operator can see that funds moved but cannot reconstruct the agent's intent and simulation report.
Decision first. Signature second.
The report returns to the agent before the wallet is asked to sign, so the agent can self-correct on evidence instead of guessing.
The agent decides. The wallet keeps control.
Praxis is the evidence-producing boundary between autonomous intent and wallet authority.
Decides, but never receives the private key.
The agent submits intent and receives the simulation report before it confirms or aborts.
Simulates, scores, and enforces policy.
Seven built-in risk rules inspect the dry-run result before any request reaches signing.
Keeps signing authority.
The wallet adapter signs only after the simulation and policy gate return a proceed decision.
Records both approvals and interventions.
Walrus reasoning and a tamper-evident on-chain receipt preserve why a spend ran or stopped.
Put the report inside the agent loop.
The agent sees simulated balance changes, gas, risk findings, and the gate recommendation before it decides whether to continue.
const result = await praxis.spend({
to: recipient,
amount: 5_000_000n,
reasoning: { prompt, decision, model },
onReport: (report) =>
report.recommendation === "proceed",
});
// confirmed | aborted + simulationReport