Agent wallet

Give your agent
a Bitcoin wallet.
Single Rust binary. Self-custodial. JSON on every command.

bitkit-cli runs Bitcoin and Lightning from the command line. Your agent creates a wallet, opens channels, sends and receives payments, and reads structured output, all without an API key or a custodial account.

Install
$ curl -sSL https://raw.githubusercontent.com/synonymdev/bitkit-cli/main/install.sh | sh

Four commands to first payment

01

Install

One shell command. Downloads a static binary, no runtime dependencies. Also builds from source with cargo build --release (Rust 1.85+).

02

Init

bitkit init --no-password --accept-tos --json creates a BIP-39 wallet. Seed is AES-256-GCM + Argon2id encrypted, or plaintext for automation.

03

Fund

bitkit address gives you an on-chain address. Fund it, then use bitkit lsp cjit to get a zero-conf Lightning channel via Blocktank.

--json on every command

Every command wraps output in a JSON envelope with typed exit codes (0 through 5). Agents parse structured data, not terminal formatting. Daemon mode keeps the LDK node hot so commands execute instantly instead of cold-starting each time.

Agent session
$ bitkit init --no-password --accept-tos --json
{"ok":true,"data":{"seed_created":true}}

$ bitkit start --json
{"ok":true,"data":{"port":3457}}

$ bitkit invoice 5000 --json
{"ok":true,"data":{"bolt11":"lnbc50n1..."}}

$ bitkit pay lnbc... --json
{"ok":true,"data":{"preimage":"a1b2c3..."}}
Webhooks
# ~/.bitkit/mainnet/config.toml
[node]
webhook_url = "https://agent.example.com/hook"
webhook_secret = "hmac-secret"

# events: payment_received, payment_sent,
# payment_failed, channel_ready, channel_closed
# HMAC-SHA256 signed, 3x retry with backoff

Persistent node, instant commands

bitkit start runs a background daemon on port 3457. All subsequent commands proxy through its HTTP API instead of cold-starting. Configure webhooks in config.toml to get HMAC-signed POSTs on payment and channel events. Real-time stream at ws://localhost:3457/events.

Single binary, full Lightning node

Rust, LDK under the hood, Blocktank as the LSP. Mainnet by default, regtest with --network regtest.

Wallet

init, balance, info, history, address, send (with drain), list-utxos. BIP-39 seed, encrypted or plaintext. GPG backup option.

Lightning

invoice (with --wait and --qr), pay, keysend. BOLT 11 invoices, max-fee and timeout controls.

LNURL

LNURL-pay, LNURL-withdraw, Lightning Addresses. Pay user@domain directly from the CLI.

Channels

open-channel, close-channel, force-close, update-channel-config, list-channels. Full lifecycle management.

LSP / Blocktank

lsp create-order, lsp open-channel, lsp cjit for zero-conf instant channels. Auto-liquidity mode reorders inbound capacity when it drops below threshold.

Daemon

start, stop, status. HTTP API on :3457 with Basic Auth. Webhooks (HMAC-SHA256, 3x retry) and WebSocket event stream.

Agent-ready

--json on every command. Exit codes 0-5 (success, user error, network, insufficient funds, ToS, geoblocked). Shell completions for bash, zsh, fish, PowerShell.

Messaging

E2E encrypted messages via Pubky. message send, read, listen, whoami. Agent-to-agent communication over an authenticated channel.

Not custodial. Not an exchange.

Your agent holds the keys. No API token from a third-party wallet provider, no custodial account that can freeze funds or require KYC to withdraw. A static Rust binary that talks to the Bitcoin network directly.

01

Self-custodial

The seed phrase lives on the machine running the agent. Nobody else can recover or freeze those funds. Back it up with GPG if the agent environment is ephemeral.

02

Works stateless or persistent

Each command cold-starts the LDK node and shuts down on exit. Or run the daemon for instant execution. Same binary, same commands either way.

03

Also available as bk

Short alias. bk balance --json does exactly what bitkit balance --json does. Fewer characters in agent prompts.

bitkit-cli vs phoenixd

Runtime

Single Rust binary, no runtime dependencies. phoenixd needs JVM (JRE 11+).

Output

JSON envelope on every CLI command with typed exit codes (0-5). phoenixd gives JSON only on API responses, exit code is 0 or 1.

LSP fees

Blocktank (Synonym). Lowest channel-open fees in our benchmarks. phoenixd uses ACINQ, which charges more.

Fee bumping

RBF + CPFP. phoenixd does CPFP only.

Messaging

E2E encrypted via Pubky. phoenixd has no messaging.

Webhooks

HMAC-SHA256 signed with 3x retry and backoff. phoenixd fires once, no retry.

Your agent.
Your keys.

MIT licensed. Works with OpenClaw, NanoClaw, Moltis, Claude Code, or any harness that can run shell commands.