Skip to main content
ブリッジ(Bridge)プロトコルは、レガシー(旧式) なノード通信路 (TCP JSONL) です。新しいノードクライアントを開発する場合は、代わりに統合されたゲートウェイ WebSocket プロトコルを使用してください。 オペレーター用またはノード用のクライアントを構築する場合は、ゲートウェイプロトコル を参照してください。 注意: 現在の OpenClaw ビルドには TCP ブリッジリスナーは同梱されていません。本ドキュメントは歴史的なリファレンスとして残されています。レガシーな bridge.* 構成キーは、現在の構成スキーマからは削除されています。

なぜ 2 つのプロトコルがあるのか

  • セキュリティ境界: ブリッジは、ゲートウェイの全 API ではなく、許可リスト(allowlist)に基づいた最小限の機能のみを公開します。
  • ペアリングとノード識別: ノードの参加許可はゲートウェイが管理し、ノードごとのトークンに紐付けられます。
  • 検出体験 (UX): ノードは LAN 上の Bonjour 経由でゲートウェイを自動検出したり、Tailnet 経由で直接接続したりできます。
  • ループバック WS: 完全な WebSocket コントロールプレーンは、SSH トンネル等を使用しない限りローカル環境内に留まります。

通信方式(トランスポート)

  • TCP を使用し、1 行につき 1 つの JSON オブジェクトを送信します (JSONL)。
  • オプションで TLS に対応しています(bridge.tls.enabled が true の場合)。
  • レガシーなデフォルトの待機ポートは 18790 でした(現在のビルドでは TCP ブリッジは開始されません)。
TLS が有効な場合、検出用の TXT レコードにはヒント情報として bridgeTls=1bridgeTlsSha256 が含まれます。Bonjour/mDNS の TXT レコードは 未認証(署名なし) であることに注意してください。ユーザーによる明示的な同意や他の手段による検証がない限り、クライアントは公開されたフィンガープリントを信頼できるピンとして扱ってはいけません。

ハンドシェイクとペアリング

  1. クライアントが hello を送信します。これにはノードのメタデータと、ペアリング済みであればトークンが含まれます。
  2. ペアリングされていない場合、ゲートウェイは error (NOT_PAIRED/UNAUTHORIZED) を返します。
  3. クライアントが pair-request を送信します。
  4. ゲートウェイは承認を待ち、その後 pair-okhello-ok を送信します。
hello-ok レスポンスには serverName が含まれ、オプションで canvasHostUrl が含まれる場合があります。

フレーム(データ構造)

クライアント → ゲートウェイ:
  • req / res: スコープ制限されたゲートウェイ RPC (chat, sessions, config, health, voicewake, skills.bins)
  • event: ノードからの信号 (音声の書き起こし、エージェント要求、チャット購読、exec のライフサイクル)
ゲートウェイ → クライアント:
  • invoke / invoke-res: ノードコマンド (canvas.*, camera.*, screen.record, location.get, sms.send)
  • event: 購読済みセッションのチャット更新情報
  • ping / pong: 生存確認(キープアライブ)
レガシーな許可リストの強制処理は、かつて src/gateway/server-bridge.ts に実装されていました(現在は削除済み)。

Exec ライフサイクルイベント

ノードは exec.finished または exec.denied イベントを発行して、system.run の実行状況を知らせることができます。これらはゲートウェイ側でシステムイベントにマップされます(レガシーなノードは依然として exec.started を発行する場合があります)。 ペイロードのフィールド(注記がない限りすべてオプション):
  • sessionKey (必須): システムイベントを受け取るエージェントセッション。
  • runId: グループ化のための一意の実行 ID。
  • command: 生の、または整形されたコマンド文字列。
  • exitCode, timedOut, success, output: 完了時の詳細情報(finished の場合のみ)。
  • reason: 拒否理由(denied の場合のみ)。

Tailnet での利用

  • ブリッジを Tailnet IP にバインドする場合: ~/.openclaw/openclaw.jsonbridge.bind: "tailnet" を設定。
  • クライアントは MagicDNS 名または Tailnet IP を介して接続。
  • Bonjour はネットワークの境界を越えられません。必要に応じて、ホスト/ポートを手動指定するか、広域 DNS-SD を使用してください。

バージョン管理

ブリッジプロトコルは現在 暗黙的な v1 です(最小/最大バージョンの交渉機能はありません)。後方互換性が期待されます。破壊的な変更を行う前に、ブリッジプロトコルのバージョンフィールドを追加する必要があります。