CLI(lcpdctl)— go-lcpd 用 protoc-gen-cobra クライアント
このドキュメントでは以下の使い方を説明します:lcpdctl:go-lcpdの gRPC API(lcpd.v1.LCPDService)向けに生成された CLI クライアントlcpd-oneshot:RequestQuoteと(任意で)AcceptAndExecuteを実行する小さなヘルパー
前提
- Go 1.24.4+
jq(任意。いくつかの例で JSON の整形表示にのみ使用)
CLI ツールをインストール(推奨)
バイナリをgo-lcpd/bin/ にインストールします(Nix 不要):
./bin/lcpd-grpcd./bin/lcpdctl./bin/lcpd-oneshot
安全性と運用上の注意
lcpd-grpcdは plaintext gRPC(TLS なし / 認証なし)を提供します。127.0.0.1にバインドするか、遠隔アクセスが必要なら SSH/VPN/リバースプロキシ等で保護してください。AcceptAndExecuteはlndを使って BOLT11 invoice を支払います。mainnet では実際に資金を消費します。regtest から始め、少額で試してください。- LCP メッセージングには Provider への Lightning ピア接続が必要であり、Provider 側が LCP(manifest 観測)をサポートしている必要があります。
- サポートされるタスク種別は
openai.chat_completions.v1のみです(OpenAI 互換の request/response JSON bytes をそのまま運ぶ passthrough)。 - Quote の実行は
terms.quoteExpiryによって時間制限されます。expiry 後の呼び出しは失敗するのが想定挙動です。 - LCP ピアメッセージングには payload 制限(manifest の
max_payload_bytes)があります。go-lcpdのデフォルトは16384バイトです。 job_idの CLI フラグは base64(proto のbytes)で、protojson のエンコーディングに合わせています。lcpdctl --timeoutは dial timeout(接続確立までの上限)であり RPC の deadline ではありません。長い RPC は Ctrl-C でキャンセルするか、全体の deadline が必要ならlcpd-oneshot -timeout ...を使ってください。
- 以前のドキュメントでは
CreateQuote → Execute → VerifyReceiptのような手順名が登場していました。 現在のgo-lcpdの公開 gRPC フローはRequestQuote → AcceptAndExecuteで、invoice binding の検証はAcceptAndExecute内部で行われます。
起動(gRPC daemon)
別ターミナルで gRPC daemon を起動します。Requester モード(推奨デフォルト)
Requester モードは、ピアメッセージングと invoice 支払いのためにlnd 接続が必要です:
Provider モード(任意)
Provider モードには以下が必要です:LCPD_PROVIDER_CONFIG_PATH(YAML)LCPD_BACKEND(例:openai)LCPD_LND_*(Provider もピアメッセージングを使うため)
configuration-ja.md。
lnd 無効(gRPC のみ)
ListLCPPeers / RequestQuote / AcceptAndExecute)には lnd が必要です。
One-shot CLI(lcpd-oneshot)
lcpd-oneshot は gRPC API の薄いラッパーです:
- 常に
RequestQuoteを実行 -pay-invoice=trueのときのみAcceptAndExecuteを実行
server-addr=127.0.0.1:50051model=gpt-5.2timeout=30s
lcpd-oneshotは insecure gRPC(TLS なし)です。localhost にバインドしたlcpd-grpcdと合わせて使ってください。peer-idが必要です(66 hex の compressed pubkey)。
--prompt → 位置引数(スペース結合)→ stdin。
例(text 出力):
--json を使ってください。
価格表示について:
- このツールは
price_msatに加えて、利便のためprice_sat(10 進文字列、milli-sat 精度)も表示します。
対話チャットモード(-chat)
-chat は簡易 REPL を実行し、会話コンテキストを維持するために「全 transcript」を各ターンのプロンプトに埋め込みます。
各ターンで請求額と累計が表示されます:
paid=<sat> sat total=<sat> sat
-chatには-pay-invoice=trueが必要です(そうでないとモデル応答を得られません)。- 終了は
/exit(または Ctrl-D)です。 - stdin/stdout が TTY のとき、可読性のために
lcpd-oneshotは Bubble Tea の小さな TUI を使います。それ以外はプレーンな REPL にフォールバックします。 - チャット履歴は
-max-prompt-bytes(デフォルト12000)に収まるよう切り詰められる場合があります。-max-prompt-bytes=0で無効化できます(payload 制限に注意)。 - 任意:
-system-prompt "..."で System 指示を会話の先頭に追加できます。
lnd 連携(カスタムメッセージ / lcp_manifest 交換)
設定されている場合、go-lcpd は gRPC で lnd に接続し、BOLT #1 のカスタムメッセージで lcp_manifest を交換します。
これにより、既存の Lightning ピア接続の上で LCP 対応ピアを自動 discovery できます。
ListLCPPeers で一覧できます。