Dedicated CLI for AI agents to earn, pay, and participate in the AI economy. Access x402 paid APIs, create invoices to receive funds, request funds from human owners, and send or receive payments in USDC — all with built-in owner approvals, spending guardrails, and FROST threshold signing on Solana.
agent-cli is an early-stage Go project in the AI payments / x402 ecosystem, focused on ai-agent, ai-agent-wallet, botwallet, cli. It currently has 2 GitHub stars and 0 forks, and sits alongside related tools like botwallet, mcp, knowmint, pincerpay, Franklin, x402-solana-rust.
Your AI has a brain. Give it a wallet.
The CLI that lets AI agents hold, spend, and earn real money (USDC on Solana).
Three commands. Your agent has a wallet with spending limits, human oversight, and FROST threshold signing.
npm install -g @botwallet/agent-cli
botwallet register --name "My Agent Wallet" --owner you@email.com
botwallet paylink create 25.00 --desc "Research report" # Your agent just created an invoice
What agents can do with BotWallet:
botwallet pay @recipient 10.00botwallet paylink createbotwallet x402 fetch <url>botwallet fund 50.00botwallet withdrawEvery transaction is FROST 2-of-2 threshold signed (agent + server). The full private key never exists anywhere. Human owners set guard rails — per-transaction limits, daily caps, merchant allowlists — and approve anything outside the rules.
# npm (recommended)
npm install -g @botwallet/agent-cli
# Linux/macOS
curl -fsSL https://botwallet.co/install.sh | bash
# Windows (PowerShell)
iwr https://botwallet.co/install.ps1 | iex
# From source
go install github.com/botwallet-co/agent-cli@latest
# Create a wallet (FROST threshold key generation, saves credentials locally)
botwallet register --name "Orion's Wallet" --owner "your@email.com"
# Create an invoice and send it
botwallet paylink create 25.00 --desc "Research report"
botwallet paylink send <request_id> --to client@example.com --message "Here's your invoice"
# Two-step payment flow
botwallet pay @merchant 10.00 # Step 1: Create intent
botwallet pay confirm <transaction_id> # Step 2: FROST sign & submit
register is the recommended way to create a wallet. wallet create does the same thing.
botwallet wallet ...)| Command | Description |
|---|---|
wallet create --name "..." --owner email |
Create wallet (FROST key generation) |
wallet info |
Wallet info and claim status |
wallet balance |
Balance and spending limits |
wallet list |
List locally stored wallets |
wallet use <name> |
Switch default wallet |
wallet deposit |
Solana USDC deposit address |
wallet owner <email> |
Update pledged owner (unclaimed only) |
wallet rename <name> |
Rename display name (username unchanged) |
wallet backup |
Back up Key 1 (two-step safety process) |
wallet export -o file.bwlt |
Export wallet to encrypted .bwlt file |
wallet import file.bwlt |
Import wallet from .bwlt file |
botwallet pay ...) — Two-Step| Command | Description |
|---|---|
pay @recipient <amount> |
Step 1: Create payment intent |
pay confirm <tx_id> |
Step 2: FROST sign & submit |
pay preview @to <amount> |
Pre-check if payment will succeed |
pay list |
List payments |
pay cancel <tx_id> |
Cancel a pending payment |
pay --paylink <id> |
Pay a payment link directly |
Flags: --note, --reference, --paylink, --idempotency-key
botwallet paylink ...)| Command | Description |
|---|---|
paylink create [amount] --desc "..." |
Create payment link to get paid |
paylink send <id> --to <email|@bot> |
Send paylink to email or bot's inbox |
paylink get <id> |
Check if paid |
paylink get --reference <ref> |
Look up by your reference ID |
paylink list |
List paylinks |
paylink cancel <id> |
Cancel paylink |
Create flags: --desc (required), --item (repeatable), --expires, --reference, --revealOwner
Send flags: --to (required, email or @bot-username), --message (optional note)
--item format — repeat for each line item, total auto-calculated:
--item "API Calls, 5.00, 2" --item "Setup Fee, 10.00"
botwallet fund ...)| Command | Description |
|---|---|
fund <amount> --reason "..." |
Request funds from owner |
fund ask <amount> --reason "..." |
Same as above (explicit subcommand) |
fund list |
List fund requests |
botwallet withdraw ...) — Two-Step| Command | Description |
|---|---|
withdraw <amount> <addr> --reason "..." |
Step 1: Create request (owner must approve) |
withdraw confirm <id> |
Step 2: FROST sign & submit |
withdraw get <id> |
Check withdrawal status |
botwallet approval ...)| Command | Description |
|---|---|
approval status <approval_id> |
Check status of a specific approval (pending/approved/rejected/expired) |
Use this to poll after any action returns awaiting_approval. When status is approved, run the corresponding confirm command.
botwallet events)| Command | Description |
|---|---|
events |
Check unread notifications |
events --type approval_resolved |
Filter by event type |
events --all |
Include already-read events |
events --limit 25 |
Max events to return (default: 10) |
events --since <ISO-timestamp> |
Only events after this time |
events --mark-read |
Mark all as read |
Event types: approval_resolved, deposit_received, payment_completed, fund_requested, fund_request_funded, wallet_pledged, guardrails_updated, x402_payment_completed, x402_payment_failed
notifications is an alias for events.
botwallet x402 ...) — Two-Step| Command | Description |
|---|---|
x402 discover |
List verified Solana APIs (curated catalog) |
x402 discover "query" |
Search catalog by keyword |
x402 discover --bazaar |
Search the full x402 Bazaar (Coinbase CDP) |
x402 discover --bazaar --all |
Bazaar: include all networks (default: Solana only) |
x402 fetch <url> |
Step 1: Probe API, see price |
x402 fetch confirm <fetch_id> |
Step 2: Pay and retrieve data |
Discover flags: --bazaar, --limit (bazaar), --offset (bazaar), --all (bazaar), --facilitator
Fetch flags: --method, --body, --header (repeatable)
| Command | Description |
|---|---|
history |
Transaction history (--type in/out/payment/deposit/withdrawal) |
limits |
Spending limits and guard rails |
approvals |
List all pending owner approvals |
approval status <id> |
Check a specific approval's status |
lookup @username |
Check if recipient exists |
ping |
Test API connectivity |
version |
Print version information |
docs |
Full embedded documentation |
transactions is an alias for history.
Credentials auto-saved on wallet create. Priority order:
--api-key flagBOTWALLET_API_KEY / BW_API_KEY env var--wallet flag (selects from config)~/.botwallet/config.jsonJSON (default) — for bots:
$ botwallet wallet balance
{"balance": 42.50, "daily_limit": 500.00, "spent_today": 10.00, "remaining_today": 490.00}
Human (--human flag) — formatted with colors:
$ botwallet wallet balance --human
── Balance ────────────────────
Available: $42.50
── Daily Spending ─────────────
Spent Today: $10.00 / $500.00
# Pay someone
botwallet pay preview @openai 25.00
botwallet pay @openai 25.00 --note "API credits"
botwallet pay confirm <transaction_id>
# Earn money (simple)
botwallet paylink create 50.00 --desc "Research report"
# Earn money (itemized invoice — total auto-calculated)
botwallet paylink create --desc "Dev services" --item "API Calls, 5.00, 2" --item "Setup Fee, 10.00"
botwallet paylink send <id> --to client@example.com --message "Here's your invoice"
botwallet paylink send <id> --to @data-bot --message "Payment for data analysis"
# Request funds
botwallet fund 50.00 --reason "API costs"
# Withdraw
botwallet withdraw 100.00 YourSolanaAddr... --reason "Monthly earnings"
# Owner approves, then:
botwallet withdraw confirm <withdrawal_id>
# Wait for human approval (using approval status polling)
botwallet pay @merchant 500.00 # Returns awaiting_approval + approval_id
botwallet approval status <approval_id> # Poll: pending → approved
botwallet pay confirm <transaction_id> # After approved
# Discover and use paid APIs
botwallet x402 discover # List verified Solana APIs
botwallet x402 discover "speech" # Search by keyword
botwallet x402 fetch <url_from_results> # Probe, see price
botwallet x402 fetch confirm <fetch_id> # Pay and get data
# Multiple wallets
botwallet wallet list
botwallet wallet use my-other-wallet
BotWallet uses FROST (Flexible Round-Optimized Schnorr Threshold) 2-of-2 signatures. During wallet creation, a Distributed Key Generation ceremony produces two key shares:
~/.botwallet/seeds/<wallet>.seedThe full private key never exists anywhere. Every transaction requires both parties to produce partial signatures that combine into a valid Ed25519 signature. Neither the agent nor BotWallet can move funds alone.
All payments settle in USDC on Solana — a dollar-pegged stablecoin. 10.00 = $10.00.
make build # Current platform
make build-all # All platforms
make test # Run tests
Apache 2.0 — See LICENSE for details.
Open-source wallet infrastructure for AI agents. Earn, spend, and trade USDC on Solana with human oversight and FROST threshold signing.
MCP server for Botwallet — Give any AI agent a wallet via Model Context Protocol. FROST threshold signing, x402 paid APIs, spending guard rails.
Knowledge marketplace where AI agents autonomously buy human expertise
On-chain USDC payment gateway for AI agents. x402 protocol.
The AI agent with a wallet — spends USDC autonomously to get real work done. Apache-2.0, TypeScript.
Production-ready Rust server template for building HTTP APIs with x402 payment integration on Solana. Accept USDC payments for API access. Includes Axum, Actix and Rocket templates.
Your AI trading terminal assistant for US stocks, commodities, forex, and crypto.
Golang SDK for A2A Protocol
Publishes localhost services to the agentic web through self-hostable, trustless relays with x402 payments.
Building blocks for Agentic payments (x402, MPP, AP2) for TypeScript, Rust, Go, Python, Ruby, PHP, Lua, Kotlin and Swift.
Building blocks for Agentic payments (x402, MPP, AP2) for TypeScript, Rust, Go, Python, Ruby, PHP, Lua, Kotlin and Swift.
Go implementation of the x402 payment protocol