{
  "markdown": "<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"logos/SaturnZap%20White%20logo%20Transparent%20bg.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"logos/SaturnZap%20Main%20Logo%20Transparent%20bg.svg\">\n    <img alt=\"SaturnZap\" src=\"logos/SaturnZap%20Main%20Logo%20Transparent%20bg.svg\" width=\"400\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  <strong>A lightweight, CLI-first, non-custodial Lightning Network wallet built for autonomous AI agents.</strong><br>\n  Self-sovereign. Runs its own Lightning node. No full Bitcoin node required.\n</p>\n\n<!-- mcp-name: io.github.lqwdtech/saturnzap -->\n\n<p align=\"center\">\n  <a href=\"https://github.com/lqwdtech/SaturnZap/actions/workflows/ci.yml\"><img src=\"https://github.com/lqwdtech/SaturnZap/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"https://pypi.org/project/saturnzap/\"><img src=\"https://img.shields.io/pypi/v/saturnzap.svg\" alt=\"PyPI\"></a>\n  <a href=\"https://pypi.org/project/saturnzap/\"><img src=\"https://img.shields.io/pypi/pyversions/saturnzap.svg\" alt=\"Python versions\"></a>\n  <a href=\"https://github.com/lqwdtech/SaturnZap/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/lqwdtech/SaturnZap.svg\" alt=\"License: MIT\"></a>\n</p>\n\n```bash\n# One-line install (handles uv + the vendored ldk-node wheel)\ncurl -LsSf https://raw.githubusercontent.com/lqwdtech/SaturnZap/main/install.sh | sh\n\nexport SZ_PASSPHRASE=\"your-secure-passphrase\"\nsz setup --auto                  # Generate seed + start node + pick LQWD peer\nsz service install               # Keep the node running across reboots\nsz connect-info --check          # Share the URI with peers/LSPs\n```\n\n<details>\n<summary>Or install with <code>uv tool</code> directly</summary>\n\n```bash\nuv tool install saturnzap \\\n  --find-links https://github.com/lqwdtech/SaturnZap/releases/expanded_assets/v1.3.2\n```\n\nThe `--find-links` flag is required because `ldk-node==0.7.0` is not yet on PyPI;\nthe SaturnZap GitHub Release ships the vendored wheel.\n</details>\n\n```bash\nsz pay --invoice lnbc1... --max-sats 500\nsz fetch https://api.example.com/data --max-sats 100\n```\n\n---\n\n## What is SaturnZap?\n\nSaturnZap is an open-source Lightning wallet designed from the ground up for AI agents\noperating without human supervision. The agent installs SaturnZap, initializes its own\nLightning node, opens channels to any peer on the network, sends and receives Bitcoin\npayments, and autonomously pays for L402-gated APIs.\n\nSaturnZap is a CLI tool. It is not a hosted wallet, not a custodial service, and not a\nweb application. Keys live on the agent's machine. The agent IS the Lightning node.\n\n**Two ways to integrate:**\n- **CLI** — call `sz` commands from any language, parse JSON from stdout\n- **MCP Server** — connect AI agents directly via Model Context Protocol (stdio)\n\n> **Documentation:** See the [docs/](docs/) folder for detailed guides on\n> [getting started](docs/getting-started.md),\n> [configuration](docs/configuration.md),\n> [MCP server integration](docs/mcp-server.md),\n> [architecture](docs/architecture.md), and\n> [JSON API reference](docs/json-api-reference.md).\n\n---\n\n## Business Model\n\nSaturnZap has two layers:\n\n### CLI — Open Source (MIT)\n\nThe `sz` command-line tool is free and open source under the MIT license. Anyone can\ninstall it, fork it, audit it, and build on it. There is no licensing fee, no API key\nrequired to use the software itself, and no telemetry.\n\n### LQWD (LSP)\n\nSaturnZap ships pre-configured to use [LQWD Technologies](https://lqwd.ai) as its default\nLightning Service Provider (LSP). LQWD operates 18 Lightning nodes across 18 countries\nwith deep global channel liquidity.\n\nWhen an agent uses LQWD's infrastructure, LQWD earns through:\n\n- **Routing fees** — sats earned as payments route through LQWD nodes\n- **Channel leasing** — fees for opening and providing inbound liquidity to agents\n- **Managed connectivity** — premium peering and reliability for agents that need it\n\nLQWD is the default, not a requirement. Agents can open channels to any node on\nthe Lightning Network. SaturnZap never enforces LQWD usage. LQWD competes on quality —\n18-country coverage, deep liquidity, fast channel opens — not on lock-in.\n\nThis model mirrors how open-source software with cloud backends works: the tool is free,\nthe infrastructure is the business.\n\n---\n\n## Key Properties\n\n- **Non-custodial** — BIP39 seed lives encrypted on the agent's machine. SaturnZap never\n  holds, transmits, or has access to private keys.\n- **No full Bitcoin node** — Esplora REST API provides chain data with automatic fallback\n  (LQWD → blockstream.info → mempool.space). No bitcoind required.\n- **Peer-agnostic** — Open channels to any Lightning node. LQWD is a smart default with\n  global reach, but the agent controls its own peer relationships entirely.\n- **JSON-first** — Every command writes structured JSON to stdout. Errors go to stderr.\n  Designed for machine consumption from day one.\n- **MCP-native** — Built-in MCP server exposes 25 tools over stdio. Connect Claude,\n  Cursor, VS Code, or any MCP-compatible agent with a single config block.\n- **Autonomous** — No interactive prompts in normal operation. Designed to run\n  inside agent runtimes, shell scripts, and orchestration pipelines. (Mainnet\n  spending commands prompt for confirmation unless `--yes` is passed.)\n\n---\n\n## Architecture\n\n> Full architecture details: [docs/architecture.md](docs/architecture.md)\n\n### Component Map\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                    Integration Layer                    │\n│                                                         │\n│  sz CLI          MCP Server         OpenClaw Skill      │\n│  (typer)         (FastMCP/stdio)    (gateway)           │\n│      │               │                  │               │\n│      └───────────────┼──────────────────┘               │\n│                      │                                  │\n│              ┌───────▼───────┐                          │\n│              │  IPC Client   │  (auto-detect daemon)    │\n│              └───────┬───────┘                          │\n└──────────────────────┼──────────────────────────────────┘\n                       │ Unix Domain Socket (sz.sock)\n┌──────────────────────▼──────────────────────────────────┐\n│           Daemon (sz start — foreground, blocks)         │\n│                                                         │\n│  IPC Server (asyncio) ─── Wallet Core                   │\n│  23 JSON methods          node.py, payments.py, l402.py │\n│  threading.Lock           liquidity.py, keystore.py     │\n│  0600 socket perms        lqwd.py, config.py, output.py │\n│                           ipc.py                        │\n└──────────────────────┬──────────────────────────────────┘\n                       │\n┌──────────────────────▼──────────────────────────────────┐\n│                    LDK Node                             │\n│  - Full Lightning protocol implementation               │\n│  - Esplora chain sync (LQWD → blockstream → mempool)   │\n│  - BIP39 key management                                 │\n│  - Peer connections and channel state machine           │\n└──────────────┬────────────────────────┬─────────────────┘\n               │                        │\n┌──────────────▼──────────┐  ┌──────────▼──────────────────┐\n│   LQWD Global Nodes     │  │   Any Lightning Node        │\n│   (default — 18 nodes,  │  │   (agent can peer with      │\n│   18 countries, deep    │  │   any public node on the    │\n│   liquidity, LSPS)      │  │   Lightning Network)        │\n└─────────────────────────┘  └─────────────────────────────┘\n```\n\n### Key Design Decisions\n\n#### Unix Domain Socket IPC\n\nThe daemon (`sz start`) owns the LDK node and exposes 23 methods over a Unix\nDomain Socket at `~/.local/share/saturnzap/<network>/sz.sock`. CLI commands, the MCP\nserver, and OpenClaw automatically detect the daemon and route through IPC — no port\nconflicts, no database locks. If no daemon is running, commands fall back to starting\nan ephemeral node.\n\n#### Esplora chain sync with fallback\n\nLDK Node syncs chain data via Esplora (block explorer REST API). No external Bitcoin\nnode is needed. SaturnZap ships with a fallback chain — if the primary Esplora server\nis unreachable, it automatically probes alternatives (LQWD, blockstream.info, mempool.space)\nand connects to the first healthy endpoint. First sync takes a few minutes on a fresh\ninstall; subsequent starts are near-instant.\n\n#### LQWD as default LSP\n\nOn mainnet, fresh installs peer with **LQWD-AI-Grid** by default — LQWD's\nagent-focused LSP node that supports LSPS1 and LSPS2 (JIT channels). The node\nauto-opens a channel back on first peer contact, so a new wallet can start\nreceiving inbound liquidity without needing on-chain funds first. The 18-region\ngeographic fleet is still embedded and available: set `SZ_REGION=NEAREST` to\nfall back to timezone-based selection (e.g. LQWD-England from UTC, LQWD-Japan\nfrom JST), or `SZ_REGION=CA` / `--region CA` to pin a specific region.\n\n#### Peer-agnostic after init\n\nAfter the initial channel, agents use standard Lightning channel open flows to peer with\nanyone. SaturnZap has no routing logic that artificially prefers LQWD — Lightning\npathfinding selects the best route. LQWD nodes appear as attractive routes naturally\nbecause of their connectivity and capacity across 18 countries.\n\n#### JSON-first, non-interactive by default\n\nAll commands are designed for non-interactive execution. No spinners that break pipe\nparsing. Pass `--pretty` for human-readable output in a TTY. Default is always clean\nJSON.\n\nOne exception for safety: mainnet spending commands (`send`, `pay`, `keysend`,\n`channels open`) show a `[y/N]` confirmation. Skip it with `--yes` or\n`SZ_MAINNET_CONFIRM=yes` in automation. Signet and testnet never prompt.\n\n#### Autonomous channel management\n\nSaturnZap monitors channel health. When configured, it automatically opens new channels\nwhen outbound liquidity drops below a threshold, and requests inbound liquidity from the\nconfigured LSP when needed. Agents can run indefinitely without manual intervention.\n\n---\n\n## Technology Stack\n\n| Component | Library | Notes |\n|---|---|---|\n| Language | Python 3.12 | Type hints throughout |\n| Lightning node | ldk-node 0.7.0 | LDK Node Python bindings, Neutrino built-in |\n| CLI framework | typer | Clean API, auto-generated help |\n| HTTP client | httpx | Used for L402 interceptor |\n| Config storage | platformdirs + TOML | OS-appropriate config paths |\n| Key encryption | cryptography | Fernet encryption for seed file |\n| BIP39 | mnemonic | Seed phrase generation |\n| Package manager | uv | Fast, modern Python tooling |\n| MCP server | mcp ≥1.26 | Model Context Protocol for AI agent integration |\n| Testing | pytest | Unit + integration, 395+ tests |\n| Linting | ruff | Fast Python linter and formatter |\n\n---\n\n## LQWD Node Directory\n\nEmbedded in SaturnZap as trusted default peers. On `sz init` or `sz channels open --lsp lqwd`,\nthe nearest node is auto-selected by comparing the system's UTC offset against each\nnode's timezone — smallest offset difference wins. Override with `SZ_REGION` env var or\n`--region` flag. Full pubkeys and connection strings are in `src/saturnzap/lqwd.py`.\n\n| Alias | Region |\n|---|---|\n| LQWD-Canada | CA |\n| LQWD-Sweden | SE |\n| LQWD-France | FR |\n| LQWD-England | GB |\n| LQWD-Japan | JP |\n| LQWD-Australia | AU |\n| LQWD-Brazil | BR |\n| LQWD-Bahrain | BH |\n| LQWD-Singapore | SG |\n| LQWD-SouthAfrica | ZA |\n| LQWD-HongKong | HK |\n| LQWD-SouthKorea | KR |\n| LQWD-Indonesia | ID |\n| LQWD-Ireland | IE |\n| LQWD-Italy | IT |\n| LQWD-Germany | DE |\n| LQWD-India | IN |\n| LQWD-US-West | US |\n\nFull pubkeys and `host:port` connection strings are in `src/saturnzap/lqwd.py`.\nSignet/testnet node details maintained separately for development.\n\n---\n\n## CLI Reference\n\n> Full JSON API reference: [docs/json-api-reference.md](docs/json-api-reference.md)\n\n**Binary:** `sz`\n\nAll commands output JSON to stdout. Errors exit with code 1, written to stderr.\n\n**Global options:**\n\n```bash\nsz --network bitcoin|signet|testnet <command>   # Select Bitcoin network (default: bitcoin)\nsz --pretty <command>                             # Pretty-print JSON output\n```\n\n### Node\n\n```bash\nsz init                          # Generate seed, start node, peer with nearest LQWD node\nsz init --for-lqwd-faucet        # Mainnet preset: sets a readable alias for LQWDClaw\nsz setup                         # Guided first-run: init + address (idempotent)\nsz setup --auto                  # Non-interactive: init + address + request inbound from LQWD\nsz start                         # Foreground daemon — blocks until SIGTERM/SIGINT (systemd-friendly)\nsz start --foreground            # Legacy: print status and exit (non-persistent)\nsz stop                          # Stop the node daemon\nsz stop --close-all              # Cooperatively close all channels, then stop\nsz status                        # Node pubkey, sync state, peer/channel counts\nsz connect-info --check          # Connection URI + external reachability probe\n```\n\n### Wallet\n\n```bash\nsz address                       # New on-chain receiving address\nsz send <address>                # Send all on-chain sats to address\nsz send <address> -a 50000       # Send specific amount on-chain\nsz send <address> --yes          # Skip mainnet confirmation prompt\nsz balance                       # Onchain + lightning balances, per-channel breakdown\nsz transactions --limit 20       # Payment history\n```\n\n### Peers\n\n```bash\nsz peers list\nsz peers add <pubkey>@<host>:<port>\nsz peers remove <pubkey>\n\n# Anchor-reserve waiver / 0-conf — applied on next node start.\n# The LQWD fleet is trusted by default on mainnet.\nsz peers trust <pubkey>\nsz peers untrust <pubkey>\nsz peers trusted-list\n```\n\n### Config\n\n```bash\nsz config list                         # Show current config + known keys\nsz config get node.alias\nsz config set node.alias \"my-agent\"    # Persists to ~/.config/saturnzap/config.toml\nsz config set node.listen_port 9735\nsz config unset esplora_url\n```\n\n### Channels\n\n```bash\nsz channels list\n\n# Open to any node\nsz channels open --peer <pubkey>@<host>:<port> --amount-sats 100000\n\n# Open via LQWD — nearest node automatically selected\nsz channels open --lsp lqwd --amount-sats 100000\n\n# Open via LQWD in a specific region\nsz channels open --lsp lqwd --region JP --amount-sats 100000\n\n# Skip mainnet confirmation (for automation)\nsz channels open --lsp lqwd --amount-sats 100000 --yes\n\n# Force a private channel (default is auto-announce when reachable)\nsz channels open --lsp lqwd --amount-sats 100000 --no-announce\n\nsz channels close --channel-id <id>\nsz channels close --channel-id <id> --force\n\n# Wait for a channel to become usable (blocks until ready or timeout)\nsz channels wait --channel-id <id> --timeout 300\n```\n\n### Payments\n\n```bash\nsz invoice --amount-sats 1000 --memo \"for data\"\nsz invoice --amount-sats 1000 --wait    # Block until paid or expired\nsz pay --invoice lnbc1...\nsz pay --invoice lnbc1... --max-sats 500    # spending cap for agent safety\nsz pay --invoice lnbc1... --yes             # skip mainnet confirmation\nsz keysend --pubkey <pubkey> --amount-sats 100\nsz keysend --pubkey <pubkey> --amount-sats 100 --yes\n```\n\n### L402 — Autonomous API Payments\n\n```bash\n# Auto-detects HTTP 402, pays invoice, retries request, returns body\nsz fetch https://api.example.com/data\n\n# With per-request spending cap\nsz fetch https://api.example.com/data --max-sats 100\n\n# With custom headers\nsz fetch https://api.example.com/data --header \"X-Custom: value\"\n```\n\n### Liquidity\n\n```bash\nsz liquidity status\nsz liquidity request-inbound --amount-sats 500000\n```\n\n### Service Management\n\n```bash\nsz service install               # Install + start systemd unit (recommended for persistence)\nsz service status                # Check service status\nsz service uninstall             # Stop and remove systemd service\n```\n\nOnce installed, the LDK node stays up across reboots and every `sz` command routes\nthrough the daemon's IPC socket — no per-command startup overhead.\n\n### MCP Server\n\n```bash\nsz mcp                           # Start MCP server on stdio (for AI agent integration)\n```\n\nOr use the standalone entry point:\n\n```bash\nsz-mcp                           # Same as sz mcp\n```\n\n**Agent configuration** (Claude Desktop, Cursor, VS Code, etc.):\n\n```json\n{\n  \"mcpServers\": {\n    \"saturnzap\": {\n      \"command\": \"sz\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"SZ_PASSPHRASE\": \"your-passphrase\"\n      }\n    }\n  }\n}\n```\n\nThe MCP server exposes 25 tools covering node lifecycle, wallet, peers, channels,\npayments, L402 fetch, and liquidity management. Set `SZ_MCP_MAX_SPEND_SATS` to\nenforce a global per-request spending cap on L402 payments.\n\n---\n\n## JSON Output Format\n\n### `sz balance`\n\n```json\n{\n  \"status\": \"ok\",\n  \"network\": \"signet\",\n  \"onchain_sats\": 0,\n  \"lightning_sats\": 45000,\n  \"channels\": [\n    {\n      \"channel_id\": \"abc123\",\n      \"peer_pubkey\": \"036491...\",\n      \"peer_alias\": \"LQWD-Canada\",\n      \"capacity_sats\": 100000,\n      \"outbound_sats\": 45000,\n      \"inbound_sats\": 55000,\n      \"state\": \"open\"\n    }\n  ]\n}\n```\n\n### `sz pay`\n\n```json\n{\n  \"status\": \"ok\",\n  \"network\": \"signet\",\n  \"payment_hash\": \"def456...\",\n  \"amount_sats\": 1000,\n  \"fee_sats\": 1,\n  \"duration_ms\": 342\n}\n```\n\n### `sz fetch` (L402 flow)\n\n```json\n{\n  \"status\": \"ok\",\n  \"network\": \"signet\",\n  \"url\": \"https://api.example.com/data\",\n  \"payment_hash\": \"ghi789...\",\n  \"amount_sats\": 10,\n  \"fee_sats\": 1,\n  \"http_status\": 200,\n  \"body\": {}\n}\n```\n\n### Error (any command)\n\n```json\n{\n  \"status\": \"error\",\n  \"code\": \"INSUFFICIENT_OUTBOUND_LIQUIDITY\",\n  \"message\": \"Not enough outbound liquidity. Available: 200 sats, required: 1000 sats.\"\n}\n```\n\n---\n\n## Exit Codes\n\n| Code | Meaning |\n|---|---|\n| 0 | Success |\n| 1 | General error |\n| 2 | Node not running — run `sz start` |\n| 3 | Insufficient funds |\n| 4 | Channel not found |\n| 5 | Peer unreachable |\n| 6 | Invoice expired or invalid |\n| 7 | LSP request failed |\n\n---\n\n## Project Structure\n\n```\n/\n├── README.md\n├── LICENSE                        # MIT\n├── pyproject.toml                 # Package definition, sz entry point\n├── uv.lock\n├── .env.example                   # Environment variable template\n│\n├── docs/\n│   ├── getting-started.md         # Installation and first-run guide\n│   ├── configuration.md           # Config file and env var reference\n│   ├── mcp-server.md              # MCP server setup and tool reference\n│   ├── architecture.md            # Design decisions and component map\n│   └── json-api-reference.md      # Full JSON shapes for all commands\n│\n├── src/\n│   └── saturnzap/\n│       ├── __init__.py\n│       ├── cli.py                 # Typer app — all sz commands\n│       ├── node.py                # LDK Node lifecycle + channels + peers\n│       ├── payments.py            # Send / receive / invoice / keysend\n│       ├── l402.py                # L402 HTTP interceptor\n│       ├── liquidity.py           # Channel health scoring + recommendations\n│       ├── keystore.py            # BIP39 seed, Fernet encryption\n│       ├── lqwd.py                # LQWD node directory (18 regions)\n│       ├── config.py              # Config paths, Esplora fallback, TOML loader\n│       ├── mcp_server.py          # MCP server — 25 tools for AI agents\n│       ├── service.py             # Systemd service generator\n│       └── output.py              # JSON output, TTY detection, --pretty\n│\n├── tests/\n│   ├── test_cli.py                # CLI smoke tests\n│   ├── test_keystore.py           # Seed encryption\n│   ├── test_node.py               # Node lifecycle + channel rejection\n│   ├── test_ipc.py                # IPC layer\n│   ├── test_payments.py           # Payment helpers\n│   ├── test_l402.py               # L402 parsing\n│   ├── test_liquidity.py          # Health scoring\n│   ├── test_config.py             # Config + env vars\n│   ├── test_mcp_server.py         # MCP server\n│   ├── test_backup.py             # Backup/restore\n│   ├── test_service.py            # Systemd service\n│   ├── test_lqwd.py               # LQWD directory\n│   ├── test_output.py             # JSON output\n│   ├── integration/               # Multi-command flows\n│   ├── security/                  # Input validation, spending guards\n│   ├── reliability/               # Edge cases, concurrency\n│   ├── ux/                        # Agent workflow scenarios\n│   └── live/                      # Droplet tests (@live marker)\n│\n├── skills/\n│   └── saturnzap/\n│       ├── SKILL.md               # OpenClaw skill definition\n│       └── references/\n│           └── json-contracts.md  # Full JSON output reference\n│\n├── vendor/\n│   └── ldk_node-0.7.0-py3-none-any.whl  # LDK Node Python bindings (Linux x86_64)\n│\n├── security/\n│   ├── security_scan.py\n│   └── profiles/\n│       └── saturnzap.yaml\n│\n├── hooks/\n│   ├── pre-commit\n│   └── pre-push\n│\n└── .github/\n    └── workflows/\n        ├── ci.yml                 # Lint + test on push/PR\n        └── publish.yml            # PyPI publish on version tags\n```\n\n---\n\n## Development Environment\n\n| | |\n|---|---|\n| **OS** | Ubuntu 24.04 (DigitalOcean Droplet, 2GB RAM / 2 vCPU) |\n| **Editor** | VS Code via Remote SSH |\n| **Python** | 3.12 |\n| **Network** | Bitcoin mainnet (default) / signet / testnet — selectable via `--network` |\n| **Chain source** | Esplora REST API with automatic fallback chain |\n| **LQWD nodes** | 18 regions, pubkeys embedded in `src/saturnzap/lqwd.py` |\n\n### Droplet Setup\n\n```bash\n# Install uv\ncurl -LsSf https://astral.sh/uv/install.sh | sh\nsource $HOME/.local/bin/env\n\n# Clone and install\ngit clone https://github.com/lqwdtech/SaturnZap\ncd saturnzap\nuv venv\nsource .venv/bin/activate\nuv sync\n\n# Run\nsz --help\n```\n\n### Install from PyPI\n\n```bash\n# Quick path: one-line installer (handles uv + the vendored ldk-node wheel)\ncurl -LsSf https://raw.githubusercontent.com/lqwdtech/SaturnZap/main/install.sh | sh\n\n# Manual path: ldk-node is not yet on PyPI — use --find-links to pull it from GitHub Releases\npip install saturnzap --find-links https://github.com/lqwdtech/SaturnZap/releases/expanded_assets/v1.3.2\n\n# Or with uv\nuv pip install saturnzap --find-links https://github.com/lqwdtech/SaturnZap/releases/expanded_assets/v1.3.2\n```\n\n---\n\n## Development Phases\n\n### Phase 1 — Node Foundation ✅\n\n`sz init`, `sz start`, `sz stop`, `sz status`\n\nBIP39 seed generation, encrypted storage, LDK Node startup, Esplora chain sync,\nauto-peer with nearest LQWD node, JSON output infrastructure.\n\n### Phase 2 — Channel Management ✅\n\n`sz channels`, `sz peers`, `sz address`, `sz balance`\n\nOpen channels to any node. LQWD LSP-assisted channel opens. LQWD node directory\nembedded (18 regions, timezone-based auto-selection). Channels are announced to\nthe public gossip graph by default when the node is reachable from the internet,\nturning agents into public routing nodes automatically. Channel list and close.\n\n### Phase 3 — Payments ✅\n\n`sz invoice`, `sz pay`, `sz keysend`, `sz transactions`\n\nFull BOLT11 send and receive. Variable-amount invoices. Keysend. Transaction history\nwith sorting and pagination.\n\n### Phase 4 — L402 ✅\n\n`sz fetch`\n\nHTTP client with 402 detection, invoice extraction, auto-pay, request retry.\nPer-request spending caps. Token caching to avoid re-paying the same resource.\n\n### Phase 5 — Liquidity Intelligence ✅\n\n`sz liquidity`\n\nChannel health monitoring with 0-100 scoring. Actionable recommendations.\nInbound liquidity requests via LQWD. Geography-aware peer selection across 18 regions.\n\n### Phase 6 — Packaging and Integration ✅\n\n`pip install saturnzap` / `uv add saturnzap` / `sz mcp`\n\nMCP server with 25 tools. Esplora fallback chain. GitHub Actions CI/CD.\nPyPI packaging. OpenClaw skill definition. Security scanner (Grade A+).\n\n### Phase 7 — Mainnet Support ✅\n\n`sz --network bitcoin`\n\nNetwork selection via CLI flag (`--network signet|testnet|bitcoin`), config.toml, or\ndefault. Network-namespaced data directories isolate wallets per network. Real LQWD\nmainnet node directory (18 nodes). Mainnet safety confirmation prompt on spending\ncommands, skippable with `--yes` flag or `SZ_MAINNET_CONFIRM=yes`. Network field\nincluded in all JSON responses.\n\n### Upcoming\n\n- PyPI publish (trusted publisher workflow ready)\n- Docker image\n- OpenClaw ClawHub listing\n\n---\n\n## Responsible Use\n\nSaturnZap is non-custodial software. You hold your own keys, and you are solely\nresponsible for your funds. It is provided under the MIT license on an \"as is\"\nbasis — the usual open-source terms apply. A few practical suggestions:\n\n- Start with small amounts on mainnet while you get comfortable with the tooling.\n- Back up your seed phrase somewhere safe and offline. Without it, there is no\n  recovery path.\n- Use `--network signet` for development and integration testing — signet coins\n  are free and isolated from your mainnet wallet.\n- Set spending caps (`--max-sats`, `SZ_CLI_MAX_SPEND_SATS`, `SZ_MCP_MAX_SPEND_SATS`)\n  when running autonomous agents.\n\nSee [SECURITY.md](SECURITY.md) for the threat model and disclosure policy.\n\n---\n\n## License\n\nMIT License. See [LICENSE](LICENSE).\n\nThe SaturnZap CLI is free and open source. LQWD infrastructure services are commercial.\nUsing SaturnZap with non-LQWD peers requires no agreement with LQWD Technologies.\n\n---\n\n## About LQWD\n\n**LQWD Technologies Corp** (TSXV: LQWD | OTCQX: LQWDF) is a publicly traded Lightning\nNetwork infrastructure company. LQWD operates 18 Lightning nodes across 18 countries,\nproviding routing infrastructure, liquidity services, and LSP connectivity for agents\nand developers building on Bitcoin's Lightning Network.\n\n- Corporate: https://lqwdtech.com\n- Agent endpoint: https://lqwd.ai\n- Network: 18 nodes, 18 countries, 1,600+ channels",
  "bytes": 25793,
  "sha": "690c03cf34a6c80608a0d2ba9c91f5f29c6a1880198e7d40d79de9b3d3f67841",
  "repo_slug": "lqwdtech/saturnzap",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lqwdtech_saturnzap_1399507b/readme"
}