Open-source budget controller for AI agents spending USDC on Base
Project description
AgentVault
Budget controller for AI agents spending USDC on Base.
AI agents can loop indefinitely and burn through budgets without guardrails. AgentVault fixes this: each agent gets an isolated USDC wallet on Base (Coinbase L2), with strict spending rules enforced before every transaction.
Agent → wallet.authorize() → rules checked → wallet.commit() → on-chain tx
↓ denied
Discord alert
Why AgentVault?
| Problem | Solution |
|---|---|
| Agent loops → budget drained | Circuit breaker: N crashes in X minutes → automatic suspension |
| Transaction to unknown address | Configurable whitelist per agent |
| Uncontrolled spending | Weekly/monthly budget with per-transaction cap |
| No visibility | Discord alerts: approved / denied / low budget |
vs xpay.sh (main competitor): TypeScript-only, SaaS, 1.5% commission per transaction. AgentVault is Python-native, self-hostable, zero commission.
Quickstart
1. Install
pip install agentvault-budget
Or from source:
git clone https://github.com/BigFoot3/agentvault
cd agentvault
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
2. Generate a wallet
agentvault init
This creates a .env file with a fresh private key and wallet address. Fund the wallet with ETH (for gas) and USDC on Base.
3. Use in your agent
from agentvault import AgentWallet
from agentvault.exceptions import BudgetExceeded
wallet = AgentWallet(
agent_name="my-trading-agent",
budget_usdc=100,
period="week", # "day" | "week" | "month"
max_per_tx=10,
whitelist=["0xABC..."], # empty list = all addresses allowed
onchain=True, # False = dry-run (no real tx)
)
# Mandatory pattern: authorize → commit
auth = wallet.authorize(amount=5.0, to="0xABC...", reason="CoinGecko API payment")
if auth.approved:
wallet.commit(auth)
else:
raise BudgetExceeded(auth.reason)
Spending rules (evaluated in order)
- Valid amount — must be > 0 USDC
- Circuit breaker — agent suspended if N recent crashes
- Whitelist — destination address authorized (if list defined)
- Max per transaction — configurable per-transaction cap
- Period budget — weekly/monthly cumulative not exceeded
CLI
# Check agent status
agentvault status my-agent
# View transaction history
agentvault history my-agent --limit 50
# Reset circuit breaker (after fixing the underlying issue)
agentvault reset my-agent
# Generate a new private key and .env
agentvault init
Project structure
agentvault/
├── __init__.py ← public exports
├── wallet.py ← AgentWallet: authorize() / commit()
├── rules.py ← budget / whitelist / circuit breaker logic
├── notifier.py ← Discord alerts
├── storage.py ← SQLite persistence (WAL mode, concurrent-safe)
├── chain.py ← real USDC transfers on Base via web3.py
├── cli.py ← CLI: status / history / reset / init
└── exceptions.py ← BudgetExceeded, WhitelistViolation, etc.
tests/
├── test_wallet.py
├── test_rules.py
├── test_storage.py
└── test_chain.py
.env.example
pyproject.toml
Tests
source venv/bin/activate
pytest # 109 tests, ~7s
pytest --cov=agentvault # with coverage
Blockchain: Base (Coinbase L2)
- Fees: < $0.001 per transaction
- USDC: native on Base (Circle)
- Testnet: Base Sepolia — free ETH and USDC via faucets
- Faucets:
- ETH Sepolia: faucet.quicknode.com
- USDC Sepolia: faucet.circle.com
Known limitations
- Single-agent per wallet: one private key = one wallet. Multi-agent setups require separate
.envfiles. - SQLite WAL mode handles concurrent reads safely, but
authorize() → commit()is not atomic across separate processes on the same agent file. Fine for single-process agents.
Self-hosting on a VPS
Runs on a Hetzner CX23 (€3.59/month) alongside other services. No additional infrastructure needed — one SQLite file per agent.
Roadmap
- Budget / whitelist / circuit breaker logic (
rules.py) - Concurrent-safe SQLite persistence (
storage.py) - Discord alerts (
notifier.py) -
authorize() → commit()orchestration (wallet.py) - Real USDC wallet on Base (
chain.py) - CLI: status / history / reset / init
- Connect to a real agent (crypto-agent integration)
- GitHub Actions CI
License
MIT — free to use, modify, and redistribute.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentvault_budget-0.1.0.tar.gz.
File metadata
- Download URL: agentvault_budget-0.1.0.tar.gz
- Upload date:
- Size: 28.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96c0a897ccd870214ebbce4811f7a665dbdc3cb02b920baf051624f30d350d21
|
|
| MD5 |
903ffb29316c946e37c058cda567c18a
|
|
| BLAKE2b-256 |
fccf62e0cb26def6d7cf1a15d86e4703b0a2839216ee94a9eb9a9889039060e6
|
File details
Details for the file agentvault_budget-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentvault_budget-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c05ff9bddd58a44442a5fea8ef5565a71df1a00f4dd747d199f9bf816c7f9476
|
|
| MD5 |
5159c9ebd9a7d209a28bc850c91a59f5
|
|
| BLAKE2b-256 |
464c3b695b196c2db8cbf882b69e5e0a5e43e0e5ae2ea05e211d7f2c07571224
|