Skip to main content

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)

  1. Valid amount — must be > 0 USDC
  2. Circuit breaker — agent suspended if N recent crashes
  3. Whitelist — destination address authorized (if list defined)
  4. Max per transaction — configurable per-transaction cap
  5. 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:

Known limitations

  • Single-agent per wallet: one private key = one wallet. Multi-agent setups require separate .env files.
  • 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentvault_budget-0.1.0.tar.gz (28.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentvault_budget-0.1.0-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

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

Hashes for agentvault_budget-0.1.0.tar.gz
Algorithm Hash digest
SHA256 96c0a897ccd870214ebbce4811f7a665dbdc3cb02b920baf051624f30d350d21
MD5 903ffb29316c946e37c058cda567c18a
BLAKE2b-256 fccf62e0cb26def6d7cf1a15d86e4703b0a2839216ee94a9eb9a9889039060e6

See more details on using hashes here.

File details

Details for the file agentvault_budget-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for agentvault_budget-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c05ff9bddd58a44442a5fea8ef5565a71df1a00f4dd747d199f9bf816c7f9476
MD5 5159c9ebd9a7d209a28bc850c91a59f5
BLAKE2b-256 464c3b695b196c2db8cbf882b69e5e0a5e43e0e5ae2ea05e211d7f2c07571224

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page