Skills Bank of Bots
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bankofbotsandy/bank-of-bots" ~/.claude/skills/clawdbot-skills-bank-of-bots && rm -rf "$T"
skills/bankofbotsandy/bank-of-bots/SKILL.mdSetup
If you haven't connected yet, follow the setup guide:
https://app.bankofbots.ai/docs/agent-setup
Once connected, you need these credentials for all API calls:
— your agent API keyBOB_API_KEY
— your agent IDBOB_AGENT_ID
—BOB_API_URLhttps://api.bankofbots.ai/api/v1
You can use the
bob CLI (optional) or call the REST API directly. All commands output structured JSON with an ok field and next_actions that suggest follow-up commands.
Non-custodial v0 mode note: use BTC rails (
lightning, onchain) and proof flows. Direct custodial ingress endpoints (wallet fund, wallet receive, receive confirm, operator fund) return 409 Conflict.
Core concepts
- Agent: An AI agent with its own identity, wallets, and spending policies
- Wallet: Holds a balance in a specific currency (USD, BTC, USDC). Each agent can have multiple wallets.
- Policy: Spend limits, rate limits, and kill switches that constrain agent behavior
- Transaction: A record of money moving in or out of a wallet
- Payment: An outbound payment to an external bank account (ACH, wire) or internal account (book)
- Counterparty: A saved bank account destination for ACH/wire payouts
- Service Gate: A priced action that callers unlock by presenting a completed payment intent
Commands
Check your identity
bob auth me
Returns your role (agent or operator), identity details, and role-aware
next_actions.
Agent details and wallet balances
bob agent get <agent-id>
Response includes a
wallets array with each wallet's balance, currency, rail, and status.
Wallet management
# List wallets for an agent bob wallet list <agent-id> # Fund a wallet (operator-only, legacy custody mode) bob wallet fund <agent-id> --wallet-id <id> --amount <cents> # Generate a receive invoice or deposit address bob wallet receive <agent-id> --rail lightning --amount <sats> bob wallet receive <agent-id> --rail onchain # receive is disabled in non-custodial v0 mode (409 Conflict) # Get/set wallet budget (smallest currency unit) bob wallet budget get <agent-id> --wallet-id <id> bob wallet budget set <agent-id> --wallet-id <id> --amount <cents>
bob wallet list now includes a bob_address field on each wallet when a default agent address is available.
In non-custodial v0 mode, bob wallet fund and bob wallet receive are intentionally disabled (409 Conflict).
| Flag | Description |
|---|---|
| Required: lightning or onchain (auto-selects wallet by rail) |
| Specific wallet ID (overrides --rail lookup) |
| Sats to request (required for lightning) |
| BTC hint when multiple wallets share a rail |
| Optional payment description |
| Invoice TTL for lightning (default 900) |
Returns
data.instructions with the payable invoice, address, or account details.
One-shot send (auto-quote + execute)
bob send <agent-id> <destination> --amount <n> [--currency BTC]
Destination is auto-detected:
→ same-operator internal transfer<agent-uuid>
→ routes asjade@bankofbots.ai
(BTC by default)bob_address
→ Lightning invoice (BTC)lnbc...
→ on-chain BTC addressbc1.../bcrt1.../tb1...
| Flag | Description |
|---|---|
| Required. Smallest currency unit |
| Override auto-detected currency |
| cheapest, fastest, or balanced (default: balanced) |
| Optional payment note |
| Maximum acceptable fee |
| Pin to a specific rail |
| Override auto-detection: raw, bank_counterparty, unit_account, bob_address |
Quotes then executes in one step. Returns
intent_id, payment_id, and quote_summary. On failure, next_actions includes exact recovery commands.
CLI config introspection
# Show active api_url, platform, config file path and source (env/config/default) bob config show # Update a single config value without re-init bob config set api-url <url> bob config set platform <generic|openclaw|claude>
Record a transaction (spend from your wallet)
bob tx record <agent-id> --amount <cents> --currency BTC
| Flag | Description |
|---|---|
| Required. Amount in smallest currency unit (cents for USD, sats for BTC) |
| USD, BTC, or USDC (default: BTC) |
| auto, lightning, onchain, card, ach, wire, book (default: auto) |
| Target endpoint or merchant identifier |
| Specific wallet to debit (auto-selected if omitted) |
Transfer money to another agent
bob tx transfer <from-agent-id> --to-agent-id <to-agent-id> --amount <cents> --currency BTC
| Flag | Description |
|---|---|
| Required. Destination agent ID |
| Required. Amount in smallest currency unit |
| USD, BTC, or USDC (default: BTC) |
| Optional note |
Create an outbound payment (legacy USD rails: ACH, wire, or book)
# ACH or wire — requires a saved counterparty bob payments create <agent-id> --amount <cents> --rail ach --counterparty-id <id> # Book transfer — instant, between internal accounts bob payments create <agent-id> --amount <cents> --rail book --to-account-id <id>
| Flag | Description |
|---|---|
| Required. Amount in smallest currency unit |
| ach, wire, or book (default: auto) |
| Required for ACH/wire. Saved bank account ID |
| Required for book. Destination account ID |
| Optional note |
Check payment status
bob payments get <agent-id> <payment-id>
If status is pending or clearing,
next_actions will suggest re-checking.
Manage counterparties (saved bank accounts)
# Create bob payments counterparties create <agent-id> \ --name "Vendor Inc" \ --routing-number 021000021 \ --account-number 123456789 \ --account-type checking # List bob payments counterparties list <agent-id> # Delete bob payments counterparties delete <agent-id> <counterparty-id>
Quote and execute payments (intent workflow)
The intent workflow quotes routes before executing, giving you visibility into fees, ETAs, and available rails.
# Quote routes for a payment (shows ranked options with fees and ETAs) bob intent quote <agent-id> --amount <sats> --destination-type raw --destination-ref <lnbc...|bc1...> # Execute a quoted intent (uses best quote by default) bob intent execute <agent-id> <intent-id> [--quote-id <id>] # Check intent status and route details bob intent get <agent-id> <intent-id> # List recent intents bob intent list <agent-id>
| Flag | Description |
|---|---|
| Required. Amount in smallest currency unit |
| , , , or |
| Raw invoice/address, counterparty ID, Unit account ID, or |
| , , or (default: balanced) |
| or (default: auto) |
| Pin to a specific rail (lightning, onchain, ach, wire, book) |
| Pin to a specific wallet |
| Maximum acceptable fee in cents |
Non-custodial proof submission
For raw BTC payment intents, submit proof of payment to verify settlement:
# Bind Lightning node ownership first (one-time per agent/rail) bob intent node-bind-challenge <agent-id> [--wallet-id <wallet-id>] bob intent node-bind-verify <agent-id> --challenge-id <challenge-id> --signature <signature> # Create ownership challenge bound to proof context (required when attestation is enforced) bob intent proof-challenge <agent-id> <intent-id> --txid <txid> bob intent proof-challenge <agent-id> <intent-id> --payment-hash <hash> # On-chain transaction proof bob intent submit-proof <agent-id> <intent-id> --txid <txid> # Lightning payment hash proof bob intent submit-proof <agent-id> <intent-id> --payment-hash <hash> # Lightning preimage proof (strongest verification) bob intent submit-proof <agent-id> <intent-id> --preimage <hex> --proof-ref <payment-hash> # With optional BOLT11 invoice for amount verification bob intent submit-proof <agent-id> <intent-id> --preimage <hex> --proof-ref <payment-hash> --invoice <lnbc...> # Ownership-attested submission bob intent submit-proof <agent-id> <intent-id> --txid <txid> \ --ownership-challenge-id <challenge-id> \ --ownership-signature <signature> # Historical proof import for credit building bob agent credit-import <agent-id> --preimage <hex> --proof-ref <payment-hash> --amount <sats> --direction inbound --invoice <lnbc...>
submit-proof requires a valid challenge id/signature pair.
BTC proof ownership currently uses a Lightning node identity anchor for both lightning and onchain proof types.
| Proof Type | Description |
|---|---|
| On-chain transaction ID |
| Lightning payment hash |
| Lightning preimage (SHA256 verified against payment hash, strongest proof) |
Query history
# Transactions bob tx list <agent-id> --status complete --direction outbound --limit 10 # Payments bob payments list <agent-id> # Transfers bob tx transfers <agent-id> bob tx transfers <agent-id> --with-agent-id <peer-agent-id> # Spend summary bob spend list <agent-id>
Marketplace discovery
# Public agent profiles bob marketplace agents --q "automation" # Public service gates bob marketplace gates --category data --min-price 100 --max-price 10000 # Available gate categories bob marketplace categories
View policies
bob policy list <agent-id>
Agent credit score and history
# View credit score, tier, and effective policy limits bob agent credit <agent-id> # View credit event timeline bob agent credit-events <agent-id> [--limit 50] [--offset 0]
The credit system scores agents from 0-100 across four tiers: trusted (80+, 1.5x limits), growing (65-79, 1.2x limits), building (45-64, 1.0x limits), and watch (0-44, 0.6x limits). When credit tier enforcement is enabled, the tier multiplier adjusts spend and rate limits up or down from the base policy values.
Agent routing profile (autonomous rail preference)
# Inspect current weighting and preferred rail order bob agent routing-profile <agent-id> # Update balanced-scoring weights + preferred rails bob agent routing-profile set <agent-id> \ --cost-weight 0.6 \ --eta-weight 0.4 \ --reliability-weight 0.2 \ --liquidity-weight 0.1 \ --preferred-usd book,ach,wire \ --preferred-btc lightning,onchain
Routing profile influences quote ranking for
priority=balanced and is applied during intent quote + execute.
Agent webhooks and event stream
# Create/list/get/update/delete webhooks scoped to one agent bob agent webhooks create <agent-id> --url https://example.com/hook --events payment_intent.complete,payment.failed bob agent webhooks list <agent-id> bob agent webhooks get <agent-id> <webhook-id> bob agent webhooks update <agent-id> <webhook-id> --active true bob agent webhooks delete <agent-id> <webhook-id> # Pull recent agent events (paginated) bob agent events <agent-id> --limit 30 --offset 0
Agent-scoped webhooks/events include payment intent lifecycle events (
quoted, executing, submitted, complete, failed) so agents can react asynchronously without polling every endpoint.
Operator funding
bob operator fund --agent-id <id> --amount <cents> [--currency BTC] [--wallet-id <id>] # Batch fund many agents bob operator fund batch --items-file funding-batch.json bob operator fund batch --agent-id <id1> --agent-id <id2> --amount <cents> [--currency BTC]
In non-custodial v0 mode these commands are intentionally disabled (
409 Conflict). Fund from external/self-custody and submit/import BTC payment proofs for credit.
Operator credit controls
# View current operator credit posture bob operator credit summary # Force snapshot recompute bob operator credit refresh # Toggle runtime enforcement of credit tier multipliers bob operator credit enforcement set --enabled=true
Operator payment addresses
# Create and inspect address aliases bob address create --handle ops bob address list # Bind destination endpoints bob address add-endpoint <address-id> --currency BTC --rail lightning --destination-type raw --destination-ref <lnbc...> # Enable/disable a bound endpoint bob address set-endpoint-status <address-id> <endpoint-id> --status disabled # Resolve live routing capabilities bob address resolve --address ops@bankofbots.ai --currency BTC
Sub-agent management (create agents under your operator)
You have an operator identity (
BOB_OPERATOR_API_KEY) that lets you create and manage sub-agents. Use --api-key to authenticate as your operator when running agent management commands.
# Create a sub-agent under your operator bob agent create --api-key "$BOB_OPERATOR_API_KEY" \ --name "my-worker" \ --operator-id "$BOB_OPERATOR_ID" \ --budget 50000 \ --currency BTC # List agents under your operator bob agent list --api-key "$BOB_OPERATOR_API_KEY" # Rotate a sub-agent's API key bob agent rotate-key <sub-agent-id> --api-key "$BOB_OPERATOR_API_KEY"
| Flag | Description |
|---|---|
| Required. Use to authenticate as operator |
| Required. Human-readable name for the sub-agent |
| Required. Your operator ID () |
| Initial spend budget in smallest currency unit |
| USD, BTC, or USDC (default: BTC) |
| Comma-separated list of currencies for wallet creation |
| Auto-approve the agent (default: true) |
The created sub-agent gets its own API key, wallets, and policies. You can fund it, transfer money to it, and set its policies — all using your operator key. The sub-agent's API key is returned in the response.
Operator BTC settlement and reconciliation
# Settle pending BTC receives, expire stale requests, and discover on-chain fees bob operator btc sweep # Compare platform BTC ledger totals against LND gateway balances bob operator btc reconcile
BTC rails are regtest/LND-backed in this environment. Synthetic BTC stub mode is disabled.
Service gates (pay-to-access)
# Create a priced gate (agent must have a payment address) bob gate create <agent-id> --name "premium-api" --price 1000 --currency BTC # List active gates bob gate list <agent-id> # Get gate details bob gate get <agent-id> <gate-id> # Disable/re-enable a gate bob gate update <agent-id> <gate-id> --status disabled # Unlock a gate (caller presents a completed payment intent targeting the gate owner) bob gate unlock <owner-agent-id> <gate-id> --intent-id <payment-intent-id> # View unlock history bob gate unlocks <agent-id> <gate-id> # List gates this agent has unlocked as a caller (outbound gate spend) bob gate my-unlocks <agent-id> # Discover another agent's active gates (any authenticated caller) bob gate discover <agent-id>
| Flag | Description |
|---|---|
| Required. Human-readable gate name |
| Required. Minimum payment amount (smallest currency unit) |
| USD, BTC, or USDC (default: BTC) |
| Required for unlock. Completed payment intent ID |
| For update: active or disabled |
Output format
Every command returns JSON with this structure:
{ "ok": true, "command": "bob tx record", "data": { ... }, "next_actions": [ { "command": "bob tx list <agent-id>", "description": "View transaction history" } ] }
Always check
ok before using data. When ok is false, data.error contains the error message and next_actions provides recovery suggestions. Use next_actions to discover what to do next.
Error recovery
When
ok is false, next_actions provides context-aware recovery suggestions. Key patterns:
- Kill switch active: STOP all transactions immediately. Run
to confirm.bob policy list <agent-id> - Spend/rate limit exceeded: Check
to see current usage vs limits.bob spend list <agent-id> - Insufficient balance: Check
to see available funds.bob wallet list <agent-id> - 403 Forbidden: Check
to verify your identity and role.bob auth me
Important rules
- Amounts are always in the smallest currency unit: cents for USD, satoshis for BTC.
- Policies set by your operator constrain your spending. If a transaction is denied,
explains why. Do not retry denied transactions without changing the parameters.data.error - Kill switch: If you receive a kill switch denial, stop all transaction attempts immediately. The operator has frozen your spending.
- Settlement times: Book payments are instant. ACH takes 1-3 business days. Wire settles same day.
- next_actions: Every response includes suggested follow-up commands. Use them to discover what to do next.