Skip to main content

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.

Release files for agentvault-budget 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentvault-budget 0.1.0
File Size Uploaded
agentvault_budget-0.1.0.tar.gz 28.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agentvault-budget 0.1.0
File Interpreter ABI Platform
agentvault_budget-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 49.9 kB

Release files / agentvault_budget-0.1.0.tar.gz

Download URL agentvault_budget-0.1.0.tar.gz
Size 28.4 kB
Tags Source
SHA-256 checksum
How to use checksums
96c0a897ccd870214ebbce4811f7a665dbdc3cb02b920baf051624f30d350d21
BLAKE2b-256 checksum
How to use checksums
fccf62e0cb26def6d7cf1a15d86e4703b0a2839216ee94a9eb9a9889039060e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / agentvault_budget-0.1.0-py3-none-any.whl

Download URL agentvault_budget-0.1.0-py3-none-any.whl
Size 21.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c05ff9bddd58a44442a5fea8ef5565a71df1a00f4dd747d199f9bf816c7f9476
BLAKE2b-256 checksum
How to use checksums
464c3b695b196c2db8cbf882b69e5e0a5e43e0e5ae2ea05e211d7f2c07571224
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page