Live on Ethereum Mainnet

Control Every Dollar
Your AI Agent Spends

Set budgets. Track expenses. Every transaction on-chain. Your agent operates freely within rules you define -- enforced by smart contracts, not promises.

Read Docs
Vaults Created
--
Tokens Supported
Any ERC20
Yield Staking
Lido stETH
Est. APY
~3.5%

Three steps to autonomous agent finance

Go from zero to a fully funded AI agent treasury in under a minute.

Create a Vault

One transaction. Your agent gets a personal treasury -- an independent smart contract you own and control.

Deposit & Set Rules

Add any token. Set daily limits, per-tx caps, and whitelist approved recipients. All enforced on-chain.

Agent Operates

Spends within limits. Every transaction has a reason. Pause anytime with one click.

Lido

Free Agents. Powered by Lido.

Stake ETH. Your agent lives off the staking yield. You keep your principal. Zero ongoing costs.

1

You stake ETH

Deposit ETH into the vault's Lido integration

2

Lido generates ~3.5% APY

stETH balance rebases daily with staking rewards

3

Agent pays for itself

Harvest yield to fund agent operations

Yield-only mode: agent can only spend harvested yield. Principal is locked.

Built for trust, not promises

Multi-Token Treasury

USDC, WETH, DAI, stETH -- all in one vault. Your agent has a unified treasury.

Per-Token Limits

Set daily and per-tx limits for each token separately. Granular, on-chain controls.

Expense Reports

Every spend recorded on-chain with a reason. Full audit trail, immutable and transparent.

Instant Pause

One click to freeze all agent spending. Unpause anytime. You stay in control.

Whitelist Control

Restrict which addresses your agent can send to. Only approved recipients.

Open Source

Smart contracts verified on-chain. SDK, MCP server, skill file -- all public.

Integrate in minutes

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

Ready to fund your agent?

Create a New Vault

Deploy a personal smart contract treasury for your AI agent. You set the rules, the agent operates within them.

The wallet address your AI agent will use to spend

After creating the vault, you'll set spending limits per token (e.g. "100 USDC/day" or "0.05 WETH/tx").