Self-custodial Bitcoin wallet for humans and agents.

curl -fsSL https://sats.sh/setup.sh | sh

v0.0.3 (notes) · signet by default · status: experimental

satssignet · wasm
starting terminal…

Keys 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.