Self-custodial Bitcoin wallet for humans and agents.
curl -fsSL https://sats.sh/setup.sh | shKeys and state stay in this tab and disappear when you close it.tab complete · ↑/↓ history · ctrl+l clear
sats is a command-line Bitcoin wallet written in Rust, with an MCP server for agents. You spend directly from your shell. An agent can only ask.
An agent files a payment request within limits you set. You review the recipient, amount, and real fee, then enter your password, and sats signs exactly that payment, once. AI asks. You approve. Keys stay yours.
The terminal above is the real wallet engine compiled to WebAssembly, running against a simulated chain.
Self-custodial
Your seed is sealed on your machine with Argon2id and XChaCha20-Poly1305 and unsealed only for the command you run. The wallet database is watch-only.
Agents ask, you approve
Agents connect over MCP and get five tools to read the wallet and file requests. None of them approve, sign, or broadcast.
Hard limits per agent
sats agent grant sets a budget, a per-payment cap, a fee cap, a recipient allowlist, and an expiry. Approval can't override them.
Verified signing
sats recomputes what the transaction pays and signs only if it matches what you approved, once. Every signed transaction is saved before broadcast.
Fails closed
No spending on stale chain data. 546- and 330-sat outputs are left alone by default.
Test networks only
Signet is the default network, where coins have no value; testnet4 and regtest are available. This release refuses mainnet.
Portable core
Planning, authorization, and signing live in sats-core, with no filesystem, network, or clock. The same core runs the terminal above.