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.
# Paste this to your agent (Claude Code, Cursor, OpenClaw, etc.): Read the SpendControl skill file and use it: https://spendcontrol.xyz/skill.md My vault address: 0xYourVault Your private key is in AGENT_PRIVATE_KEY env variable. Network: Ethereum Mainnet (RPC: https://eth.llamarpc.com) # That's it. The skill file teaches the agent everything: # - How to check budget per token # - How to spend (reason required) # - Token decimals (USDC=6, WETH=18) # - Daily/per-tx limits # - Rules to follow
# 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").