Lnd
by @roasbeef
Install and run Lightning Terminal (litd) which bundles lnd, loop, pool, tapd, and faraday in a single Docker container. Defaults to neutrino backend with SQLite storage on testnet. Supports watch-only mode with remote signer, standalone mode, and regtest development. Use when setting up a Lightning node for payments, channel management, liquidity management (loop), channel marketplace (pool), taproot assets (tapd), or enabling agent L402 commerce.
clawhub install lndπ About This Skill
name: lnd description: Install and run Lightning Terminal (litd) which bundles lnd, loop, pool, tapd, and faraday in a single Docker container. Defaults to neutrino backend with SQLite storage on testnet. Supports watch-only mode with remote signer, standalone mode, and regtest development. Use when setting up a Lightning node for payments, channel management, liquidity management (loop), channel marketplace (pool), taproot assets (tapd), or enabling agent L402 commerce.
Lightning Terminal (litd) β Lightning Network Node
Install and operate a Lightning Terminal (litd) node for agent-driven payments. litd bundles lnd with loop, pool, tapd, and faraday β giving agents access to liquidity management, channel marketplace, and taproot assets in a single container.
Default: Docker container, neutrino backend, SQLite storage, testnet. No full
Bitcoin node required. Use --network mainnet for real coins.
Default mode: watch-only with remote signer. Private keys stay on a separate
signer container β the agent never touches key material. For quick testing, use
--mode standalone (keys on disk, less secure).
Quick Start (Container β Recommended)
Watch-Only with Remote Signer (Production)
# 1. Install litd image
skills/lnd/scripts/install.sh2. Start litd + signer containers
skills/lnd/scripts/start-lnd.sh --watchonly3. Set up signer wallet (first run only)
skills/lightning-security-module/scripts/setup-signer.sh --container litd-signer4. Import credentials and create watch-only wallet
skills/lnd/scripts/import-credentials.sh --bundle ~/.lnget/signer/credentials-bundle
skills/lnd/scripts/create-wallet.sh5. Check status
skills/lnd/scripts/lncli.sh getinfo
Standalone (Testing Only)
# 1. Install litd image
skills/lnd/scripts/install.sh2. Start litd container
skills/lnd/scripts/start-lnd.sh3. Create standalone wallet (generates seed β keys on disk)
skills/lnd/scripts/create-wallet.sh --mode standalone4. Check status
skills/lnd/scripts/lncli.sh getinfo
> Warning: Standalone mode stores the seed mnemonic and wallet passphrase on > disk. Do not use for mainnet funds you cannot afford to lose.
Regtest Development
# Start litd + bitcoind for local development
skills/lnd/scripts/start-lnd.sh --regtestCreate wallet and mine some blocks
skills/lnd/scripts/create-wallet.sh --container litd --mode standalone
docker exec litd-bitcoind bitcoin-cli -regtest -generate 101
Container Modes
| Mode | Command | Containers | Use Case |
|------|---------|-----------|----------|
| Standalone | start-lnd.sh | litd | Testing, development |
| Watch-only | start-lnd.sh --watchonly | litd + litd-signer | Production |
| Regtest | start-lnd.sh --regtest | litd + litd-bitcoind | Local dev |
Profiles
Profiles customize litd behavior without editing compose files:
# List available profiles
skills/lnd/scripts/docker-start.sh --list-profilesStart with a profile
skills/lnd/scripts/start-lnd.sh --profile taproot
skills/lnd/scripts/start-lnd.sh --profile debug
| Profile | Purpose |
|---------|---------|
| default | Standard operation (info logging) |
| debug | Trace logging, verbose subsystems |
| taproot | Simple taproot channels enabled |
| wumbo | Large channels up to 10 BTC |
| regtest | Regtest network preset |
Network Selection
Default is testnet. Override with --network:
# Testnet (default β no real coins)
skills/lnd/scripts/start-lnd.shMainnet (real coins β use with remote signer)
skills/lnd/scripts/start-lnd.sh --network mainnet --watchonlySignet (testing network)
skills/lnd/scripts/start-lnd.sh --network signet
litd Sub-Daemons
litd integrates multiple daemons. Access them via the --cli flag:
# lnd CLI (default)
skills/lnd/scripts/lncli.sh getinfoLoop β liquidity management (submarine swaps)
skills/lnd/scripts/lncli.sh --cli loop quote out 100000Pool β channel marketplace
skills/lnd/scripts/lncli.sh --cli pool accounts listTaproot Assets (tapd)
skills/lnd/scripts/lncli.sh --cli tapcli assets listLightning Terminal (litd)
skills/lnd/scripts/lncli.sh --cli litcli getinfoFaraday β channel analytics
skills/lnd/scripts/lncli.sh --cli frcli revenue
Installation
Default: pulls the litd Docker image.
skills/lnd/scripts/install.sh
This pulls lightninglabs/lightning-terminal:v0.16.0-alpha from Docker Hub and
verifies the image. The litd image includes lncli, litcli, loop, pool, tapcli,
and frcli.
Build from Source (Fallback)
skills/lnd/scripts/install.sh --source
Requires Go toolchain. Builds lnd and lncli with all build tags.
Native Mode
For running without Docker, use --native:
# Start natively
skills/lnd/scripts/start-lnd.sh --native --mode standaloneStop natively
skills/lnd/scripts/stop-lnd.sh --native
Native mode uses the config template at skills/lnd/templates/lnd.conf.template
and runs lnd as a background process.
Remote Nodes
Connect to a remote lnd node with connection credentials:
skills/lnd/scripts/lncli.sh \
--rpcserver remote-host:10009 \
--tlscertpath ~/remote-tls.cert \
--macaroonpath ~/remote-admin.macaroon \
getinfo
MCP / Lightning Node Connect
For read-only access without direct gRPC connectivity, use the
lightning-mcp-server skill with Lightning Node Connect (LNC). LNC uses
encrypted WebSocket tunnels β no TLS certs, macaroons, or open ports needed.
Just a pairing phrase from Lightning Terminal.
skills/lightning-mcp-server/scripts/install.sh
skills/lightning-mcp-server/scripts/configure.sh
skills/lightning-mcp-server/scripts/setup-claude-config.sh
Wallet Setup
Watch-Only Wallet (Default)
Imports account xpubs from the remote signer β no seed or private keys on this machine.
# Import credentials bundle from signer
skills/lnd/scripts/import-credentials.sh --bundle Create watch-only wallet (auto-detects litd container)
skills/lnd/scripts/create-wallet.sh
Standalone Wallet
Generates a seed locally. Use only for testing.
skills/lnd/scripts/create-wallet.sh --mode standalone
Handles the full wallet creation flow via REST API:
1. Generates a secure random wallet passphrase
2. Calls /v1/genseed to generate a 24-word seed mnemonic
3. Calls /v1/initwallet with the passphrase and seed
4. Stores credentials securely:
- ~/.lnget/lnd/wallet-password.txt (mode 0600)
- ~/.lnget/lnd/seed.txt (mode 0600)
Unlock Wallet
skills/lnd/scripts/unlock-wallet.sh
Auto-unlock is enabled by default in the container via
--wallet-unlock-password-file. Manual unlock is only needed if auto-unlock
is disabled.
Recover Wallet from Seed (Standalone Only)
skills/lnd/scripts/create-wallet.sh --mode standalone --recover --seed-file ~/.lnget/lnd/seed.txt
Starting and Stopping
Start
# Docker standalone (default)
skills/lnd/scripts/start-lnd.shDocker watch-only (production)
skills/lnd/scripts/start-lnd.sh --watchonlyDocker with profile
skills/lnd/scripts/start-lnd.sh --profile taprootMainnet
skills/lnd/scripts/start-lnd.sh --network mainnet
Stop
# Stop (preserve data)
skills/lnd/scripts/stop-lnd.shStop and clean (remove volumes)
skills/lnd/scripts/stop-lnd.sh --cleanStop all litd containers
skills/lnd/scripts/stop-lnd.sh --all
Node Operations
All commands auto-detect the litd container:
Node Info
skills/lnd/scripts/lncli.sh getinfo
skills/lnd/scripts/lncli.sh walletbalance
skills/lnd/scripts/lncli.sh channelbalance
Funding
skills/lnd/scripts/lncli.sh newaddress p2tr
skills/lnd/scripts/lncli.sh walletbalance
Channel Management
skills/lnd/scripts/lncli.sh connect @:9735
skills/lnd/scripts/lncli.sh openchannel --node_key= --local_amt=1000000
skills/lnd/scripts/lncli.sh listchannels
skills/lnd/scripts/lncli.sh closechannel --funding_txid= --output_index=
Payments
skills/lnd/scripts/lncli.sh addinvoice --amt=1000 --memo="test payment"
skills/lnd/scripts/lncli.sh decodepayreq
skills/lnd/scripts/lncli.sh sendpayment --pay_req=
skills/lnd/scripts/lncli.sh listpayments
Macaroon Bakery
Use the macaroon-bakery skill for least-privilege agent credentials:
skills/macaroon-bakery/scripts/bake.sh --role pay-only
skills/macaroon-bakery/scripts/bake.sh --role invoice-only
skills/macaroon-bakery/scripts/bake.sh --inspect
Configuration
Container Config
The Docker compose templates pass configuration via command-line arguments. For
advanced customization, mount a custom litd.conf:
skills/lnd/templates/litd.conf.templateskills/lnd/templates/lnd.conf.templateNote: litd requires lnd. prefix for lnd flags (e.g., lnd.bitcoin.active).
Standalone lnd does not use the prefix.
Key Defaults
--network mainnet)Container Naming & Ports
| Container | Purpose | Ports |
|-----------|---------|-------|
| litd | Main Lightning Terminal | 8443, 10009, 9735, 8080 |
| litd-signer | Remote signer (lnd) | 10012, 10013 |
| litd-bitcoind | Bitcoin Core (regtest only) | 18443, 28332, 28333 |
Port Reference
| Port | Service | Description | |-------|-----------|--------------------------------| | 8443 | litd UI | Lightning Terminal web UI | | 9735 | Lightning | Peer-to-peer Lightning Network | | 10009 | gRPC | lncli and programmatic access | | 8080 | REST | REST API (wallet, etc.) | | 10012 | Signer gRPC | Remote signer RPC | | 10013 | Signer REST | Signer REST API |
File Locations
| Path | Purpose |
|------|---------|
| ~/.lnget/lnd/wallet-password.txt | Wallet unlock passphrase (0600) |
| ~/.lnget/lnd/seed.txt | 24-word mnemonic backup (0600, standalone only) |
| ~/.lnget/lnd/signer-credentials/ | Imported signer credentials (watch-only) |
| versions.env | Pinned container image versions |
| skills/lnd/templates/ | Docker compose and config templates |
| skills/lnd/profiles/ | Profile .env files |
Version Pinning
Container image versions are pinned in versions.env at the repo root:
LITD_VERSION=v0.16.0-alpha
LND_VERSION=v0.20.0-beta
Override at runtime:
LITD_VERSION=v0.17.0-alpha skills/lnd/scripts/start-lnd.sh
Integration with lnget
Once litd is running with a funded wallet and open channels:
lnget config init
lnget ln status
lnget --max-cost 1000 https://api.example.com/paid-data
Security Considerations
See references/security.md for detailed guidance.
Default model (watch-only with remote signer):
lightning-security-module skillStandalone model (testing only):
Macaroon security:
macaroon-bakery skillTroubleshooting
"wallet not found"
Runskills/lnd/scripts/create-wallet.sh to create the wallet."wallet locked"
Runskills/lnd/scripts/unlock-wallet.sh. Auto-unlock is enabled by default."chain backend is still syncing"
Neutrino needs time to sync headers:skills/lnd/scripts/lncli.sh getinfo | jq '{synced_to_chain, block_height}'
Container not starting
docker logs litd
docker logs litd-signer
"remote signer not reachable"
docker ps | grep litd-signer
docker logs litd-signer
βοΈ Configuration
Container Config
The Docker compose templates pass configuration via command-line arguments. For
advanced customization, mount a custom litd.conf:
skills/lnd/templates/litd.conf.templateskills/lnd/templates/lnd.conf.templateNote: litd requires lnd. prefix for lnd flags (e.g., lnd.bitcoin.active).
Standalone lnd does not use the prefix.
Key Defaults
--network mainnet)π Tips & Best Practices
"wallet not found"
Runskills/lnd/scripts/create-wallet.sh to create the wallet."wallet locked"
Runskills/lnd/scripts/unlock-wallet.sh. Auto-unlock is enabled by default."chain backend is still syncing"
Neutrino needs time to sync headers:skills/lnd/scripts/lncli.sh getinfo | jq '{synced_to_chain, block_height}'
Container not starting
docker logs litd
docker logs litd-signer
"remote signer not reachable"
docker ps | grep litd-signer
docker logs litd-signer