experimental · signet by default

Bitcoin for humans
and agents.

A small, native wallet that lives in your terminal. Spend directly, or let an AI agent ask: it prepares payments inside a budget you set, and every send waits for your approval. AI asks. You approve. Keys stay yours.

curl -fsSL https://sats.sh/setup.sh | sh
Keys
local only
Default network
signet
Surfaces
CLI + MCP
Core
Rust + WASM

Live playground

The real wallet, in your browser.

The portable engine is compiled to WebAssembly. The chain is simulated; the planning, signing, UTXO protection, and grant authorization are not.

sats
signet · live wasm
starting terminal…

Keys and state stay in this tab and disappear when you close it.tab complete · ↑/↓ history · ctrl+l clear

Two native surfaces

One wallet. Two operators.

01

You, in a shell.

Intent-first commands handle the normal path. Every send shows the amount and fee before the seed is unlocked and the transaction is signed.

sats init
sats receive
sats balance
sats send tb1p... 25k
Explore the CLI
02

An agent that asks.

MCP exposes a small read-and-request surface. The agent files a request and cannot cause a signature. Every request lands in your review queue, and one password-gated approval executes exactly that payment, once — the agent does nothing further.

sats agent grant claude \
  --budget 50k --for 24h
sats agent requests --watch
sats agent approve k-invoice-1
Read the agent contract

Bounded by design

Authority stops before signing.

Agent policy is deterministic and checked before a signature is produced. A valid request waits for your approval, once; a request outside the grant gets a stable refusal. Nothing signs unattended.

agent requestsend 20,000 sat
deniedover_max_tx

Watch-only at rest

SQLite stores public descriptors. The seed stays sealed with Argon2id and XChaCha20-Poly1305.

Fail closed

Stale chain state or an unavailable configured asset guard stops planning instead of weakening it.

Recoverable broadcast

Finalized transaction hex is saved before broadcast, so a lost provider response never strands the retry.

Read the security and trust model

Portable core

The same transaction engine runs the CLI, the MCP server, and this playground.

sats-core owns deterministic planning, authorization, seed sealing, and signing boundaries—with no filesystem, network, clock, terminal, or async-runtime dependencies.