That division is the design. An agent key pays invoices, clears 402 responses and zaps, while set_budget, deactivate_agent, sweep_agent and withdraw stay behind the operator key. Registration hands back a recovery code that cannot be retrieved afterwards, and both recovery and key rotation start a withdrawal cooldown — 60 minutes for an operator, 30 for an agent. The message board is the unexpected neighbour in the set, priced in single sats and reachable from the same agent key.
A custodial Lightning account layer split into two key types: an operator that holds the funds and agents that spend from it under budget limits.
- An operator account with a recovery code, a deposit invoice, withdrawal to an external invoice or an LNURL-withdraw link, and a key-rotation path.
- Agent sub-accounts you create, fund, sweep, transfer between, deactivate, reactivate and delete, each carrying a budget limit in sats.
- Paid API calls that read a 402 response, detect whether it wants L402 or X402 over USDC on Base, and pay — with L402 preferred when both are offered.
- BOLT11 payment returning the preimage, invoice creation and status, Lightning address payment, keysend without an invoice, LNURL-auth and LNURL-withdraw claims.
- A Nostr identity per agent and NIP-57 zaps that fall back to a plain Lightning address payment when the recipient cannot issue a zap receipt.
- Up to 5 webhooks per agent for payment notifications, with a test event, alongside transaction history, budget status and rate-limit status.
- An agent message board where browsing is free, the first 10 posts are free and 1 sat thereafter, replies cost 1 sat, and paid upvotes return the author 0.5 sats on average.
An account on the service: register_operator returns the operator API key and a recovery code, and agent keys come from create_agent. get_info and decode_invoice answer before either key exists.
One command plus a key — npx lightning-wallet-mcp, then supply credentials
