FINANCIAL CONTROLS FOR AUTONOMOUS AGENTS
Give your agenta budget, not your wallet.
Create programmable wallets with spending limits, scoped permissions, approvals and live expense tracking on Robinhood Chain.
Research Agent
0x81…3A1Spent
$184
Budget
$500/month
Permissions
- Compute
- APIs
- Trading
- Transfers
Latest
- OpenAI$4.20
- Compute$12.40
- Data$8.00
Policy receipt
The missing middle
NO ACCESSorFULL ACCESS
The agent cannot pay for anything. A person stops to buy every API call it needs.
The agent holds a private key. One bad instruction can empty the wallet.
Those are the two settings an agent gets today. AgentSpend is everything between them.
- Agent walletA smart account you own.
- Session keyScoped, expiring, revocable.
- PoliciesWhat it may do, signed by you.
- BudgetPer transaction, day, week and month.
- Allowed actionsNamed contracts, assets and recipients.
- Live monitoringEvery request, as it happens.
- Audit trailWho did what, and why it was allowed.
How it works
Set the rules once.
Read the statement after.
Step 1
Set the budget
Create a wallet for the agent and fund it. Choose what it can spend per transaction, day, week and month, who it can pay, and when its key expires. You sign the policy from your own wallet, and the limits go onchain.
ResearchBot policy
AWAITING SIGNATURE- Per transaction
- $200
- Daily
- $250
- Weekly
- $400
- Monthly
- $500
- Wallet
- 0x81…3A1
- Funded
- 500 USDG
- Allowed vendors
- OpenAI, GPUFarm, Data provider
- Allowed assets
- USDG, ETH
- Unknown recipients
- Blocked
- Human approval
- Above $100
- Session key
- Expires in 7 days
Your wallet signs every limit above, and nobody can widen them without your signature.
Step 2
The agent spends
The agent names a vendor and an amount. AgentSpend checks the request, signs it and sends it, so the agent never touches a private key. The expense lands on the statement, categorized.
Above your threshold, it waits for a person. Your approval is a wallet signature, and the agent's reason is shown but never trusted on its own.
Expenses
Example statement
TODAY
- 12:42OpenAI API creditsResearch AgentAI/API$4.20APPROVED
- 11:18Cloud computeBuilder AgentCompute$12.40APPROVED
- 10:04NVDA Stock TokenTrading AgentTrading$48.20APPROVED
- 09:32Unknown transferRecipient not approvedNever sent$240.00BLOCKED
- Spent today
- $64.80
- Stopped before it left the wallet
- $240.00
APPROVAL NEEDEDResearchBot wants to spend $180
- Vendor
- GPUFarm
- Agent's reason
- “Run 4-hour GPU job”
- Policy
- Requires approval > $100
Step 3
Every spend is explained
Every request gets a receipt: what was asked, what each rule said, what it cost in USD at the time, and which transaction paid for it. Blocked attempts get one too. Export it all as CSV or JSON for your books.
OpenAI API credits
Today at 12:42
$4.20
APPROVED- Agent
- Research Agent
- Wallet
- 0x81…3A1
- Vendor
- OpenAI
- Amount
- 4.20 USDG
- USD value at time
- $4.20
- Category
- AI/API
- Gas
- Paid by wallet
- Tx hash
- 0x4be1…c07a
- UserOperation
- 0x9d02…71fe
- Session key
- 0x3ac4…e210
- Approver
- Policy, no human needed
- Agent's reason
- “Summarizing 40 papers”
Transaction simulation
- Leaves the wallet
- 4.20 USDG
- Reaches
- OpenAI
- Approvals changed
- None
- Agent is active
- Session key is active
- Within key validity window
- Contract allowlisted
- Contract not blocklisted
- Function allowed
- Asset allowedUSDG
- Recipient validOpenAI
- No unlimited approval
- No dangerous function
- USD value is reliable
- Under per-transaction limit$4.20 of $200
- Under daily budget$4.20 of $250
- Under weekly budget$61.60 of $400
- Under monthly budget$184 of $500
- Under daily transaction limit3 of 50 today
- Balance available
- Simulation succeeded
- Onchain rules agree
APPROVEDStep 4
Stop it instantly
Freeze ends autonomous spending the moment you press it, with no wallet prompt. The session key is revoked onchain and its key material is destroyed. Your funds stay where they are, and you can move them yourself.
ACTIVEResearchBot
0x81…3A1- Autonomous spending stopped
- Waiting requests cancelled
- Session key revoked onchain
- Key material destroyed
- Funds still in your smart account
Security
Two locks on every spend.
Funds stay in your smart account, and the owner keeps ultimate control. A spend has to pass both locks, and the first one does not depend on us.
Lock 1, onchain
Hard limits in the contract
A policy module on your smart account checks every operation against rules you signed. These limits hold even if AgentSpend itself is down or compromised.
- Expiry
- A session key stops working on the date you set.
- Spend caps
- Per transaction, daily, weekly and monthly, in USD.
- Allowed contracts
- Only the contracts you list.
- Allowed selectors
- Which functions it may call on those contracts.
- Allowed assets
- Only the tokens you list.
Lock 2, offchain
A policy engine in front of it
Before anything is signed, AgentSpend works out what the request really does and what it is worth, then asks a person when your rules say so.
- Live USD valuation
- Every spend priced at the current rate.
- Simulation
- What the transaction would really do, before it is signed.
- Approvals
- Above your threshold, a person decides.
- Anomaly alerts
- Spend spikes and repeated blocks reach you.
When something goes wrong
- The agent is tricked or goes off script
- It can only ask. A request outside the rules fails both locks and lands on your statement as blocked.
- An agent credential leaks
- The agent never gets the owner key, or any chain key. A stolen credential can only make requests, and each one still faces the policy.
- Someone asks for a Permit signature
- Session keys can never sign Permit approvals. The module refuses every signature request made on the account's behalf.
- AgentSpend is down
- Nothing gets signed, so nothing gets spent. The owner can recover funds directly, with no AgentSpend service involved.
- AgentSpend is compromised
- The onchain limits still hold. The worst case is what you signed: allowed recipients, inside the caps, until the key expires. Your wallet can revoke the key at the contract.
Built on ZeroDev Kernel v3.1 and ERC-4337 on Robinhood Chain.
For developers
The agent asks.
The policy answers.
The SDK's sessionKey is a scoped API credential. It reaches one agent's wallet, budget and expenses, and it holds no chain key.
Using an MCP client instead? @agentspend/mcp gives an agent the same requests as tools, with no master wallet access.
import { AgentSpend } from "@agentspend/sdk";
const spend = new AgentSpend({
agentId: process.env.AGENTSPEND_AGENT_ID,
sessionKey: process.env.AGENTSPEND_API_KEY,
});
await spend.pay({
vendor: "gpufarm",
amount: "15",
asset: "USDG",
purpose: "compute",
});POST /v1/payments
Authorization: Bearer as_live_…
Idempotency-Key: job-2291-gpu
Content-Type: application/json
{
"agentId": "7c1e4a52-…",
"vendorId": "gpufarm",
"amount": "15",
"currency": "USDG",
"purpose": "compute"
}{
"intentId": "c41d7f06-8b13-4e2a-b5f4-6a90e17d3c28",
"status": "APPROVED",
"decision": "APPROVED",
"estimatedUsdValue": "15000000",
"estimatedUsd": "15",
"policyChecks": [
{ "id": "recipient_allowed", "label": "Recipient valid", "status": "PASS" },
{ "id": "daily_budget", "label": "Under daily budget", "status": "PASS",
"detail": "$8.20 used + $15.00 of $250.00" },
{ "id": "onchain_policy", "label": "Onchain rules agree", "status": "PASS" }
],
"risk": "LOW",
"findings": []
}