Set budgets. Track expenses. Every transaction on-chain. Your agent operates freely within rules you define -- enforced by smart contracts, not promises.
Go from zero to a fully funded AI agent treasury in under a minute.
One transaction. Your agent gets a personal treasury -- an independent smart contract you own and control.
Add any token. Set daily limits, per-tx caps, and whitelist approved recipients. All enforced on-chain.
Spends within limits. Every transaction has a reason. Pause anytime with one click.
Stake ETH. Your agent lives off the staking yield. You keep your principal. Zero ongoing costs.
Deposit ETH into the vault's Lido integration
→stETH balance rebases daily with staking rewards
→Harvest yield to fund agent operations
USDC, WETH, DAI, stETH -- all in one vault. Your agent has a unified treasury.
Set daily and per-tx limits for each token separately. Granular, on-chain controls.
Every spend recorded on-chain with a reason. Full audit trail, immutable and transparent.
One click to freeze all agent spending. Unpause anytime. You stay in control.
Restrict which addresses your agent can send to. Only approved recipients.
Smart contracts verified on-chain. SDK, MCP server, skill file -- all public.
Connect your agent to its vault using MCP, Python SDK, a skill file, or direct CLI calls.
# One command. Installs MCP server + configures Claude Code. # Your agent gets: check_budget, spend, get_history, get_vault_info curl -sL https://spendcontrol.xyz/install.sh | bash -s -- \ 0xYourVault \ YOUR_AGENT_PRIVATE_KEY \ https://eth.llamarpc.com # Then restart Claude Code. Done. # Agent can only spend within your on-chain limits. # Every transaction requires a reason (stored on-chain).
# Add to ~/.claude/settings.json (Claude Code) { "mcpServers": { "spendcontrol": { "command": "node", "args": ["/path/to/spendcontrol/mcp-server/index.js"], "env": { "VAULT_ADDRESS": "0xYourVault", "AGENT_PRIVATE_KEY": "0xYourAgentKey", "RPC_URL": "https://eth.llamarpc.com" } } } } # Tools your agent gets: # check_budget(token) — balance + daily remaining # spend(token, to, amount, reason) — on-chain transfer # get_history — past transactions with reasons # get_vault_info — tokens, limits, status
# Install git clone https://github.com/spendcontrol/agentvault cd spendcontrol/sdk/python && pip install -e . # Usage from yieldvault import VaultClient client = VaultClient( rpc_url="https://eth.llamarpc.com", vault_address="0xYourVault", agent_private_key=os.environ["AGENT_PRIVATE_KEY"], ) # Check budget for a token budget = client.check_budget("0xA0b8...eB48") # USDC address print(f"Balance: {budget['balance']}") print(f"Daily remaining: {budget['daily_remaining']}") # Spend (reason is mandatory) tx = client.spend( token_address="0xA0b8...eB48", to_address="0xRecipient", amount_wei=1000000, # 1 USDC (6 decimals) reason="GPT-4 API call — price analysis" )
# Direct smart contract calls via Foundry (cast) export VAULT="0xYourVault" export KEY="0xYourAgentKey" export RPC="https://eth.llamarpc.com" export TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" # USDC # List tokens in vault cast call $VAULT "getTokens()(address[])" --rpc-url $RPC # Check balance cast call $VAULT "balanceOf(address)(uint256)" $TOKEN --rpc-url $RPC # Check daily budget remaining cast call $VAULT "remainingDailyBudget(address)(uint256)" $TOKEN --rpc-url $RPC # Spend with reason (mandatory) cast send $VAULT \ "spend(address,address,uint256,string)" \ $TOKEN 0xRecipient 1000000 "API payment" \ --private-key $KEY --rpc-url $RPC
Deploy a personal smart contract treasury for your AI agent. You set the rules, the agent operates within them.
After creating the vault, you'll set spending limits per token (e.g. "100 USDC/day" or "0.05 WETH/tx").