メインコンテンツへスキップ

Bridge protocol(legacy node transport)

TCP bridgeは削除されました。現在のOpenClawビルドにはbridge listenerが含まれておらず、bridge.* configキーもスキーマから削除されています。このページは歴史的な参考情報としてのみ残されています。すべてのnode/operatorクライアントではGateway Protocolを使用してください。

なぜ存在していたのか

  • セキュリティ境界: bridgeはGateway API surface全体ではなく、小さなallowlistのみを公開します。
  • pairing + node identity: nodeの受け入れはGatewayが管理し、nodeごとのトークンに結び付けられます。
  • Discovery UX: nodeはLAN上でBonjour経由でGatewayを発見するか、tailnet経由で直接接続できます。
  • Loopback WS: 完全なWS control planeは、SSHでトンネルされない限りローカルのままです。

Transport

  • TCP、1行ごとに1つのJSONオブジェクト(JSONL)。
  • 任意のTLS(bridge.tls.enabled がtrueのとき)。
  • 以前のデフォルトlistenerポートは 18790 でした(現在のビルドではTCP bridgeは起動しません)。
TLSが有効な場合、discovery TXTレコードには非秘密のヒントとして bridgeTls=1bridgeTlsSha256 が含まれます。なお、Bonjour/mDNS TXTレコードには認証がないため、クライアントは明示的なユーザー意思やその他の帯域外検証なしに、広告されたフィンガープリントを信頼できるpinとして扱ってはいけません。

Handshake + pairing

  1. クライアントは、nodeメタデータとトークン(すでにpair済みの場合)を含む hello を送信します。
  2. pairされていない場合、Gatewayは errorNOT_PAIRED/UNAUTHORIZED)を返します。
  3. クライアントは pair-request を送信します。
  4. Gatewayは承認を待ち、その後 pair-okhello-ok を送信します。
過去には、hello-okserverName を返し、canvasHostUrl を含むこともありました。

Frames

クライアント → Gateway:
  • req / res: スコープ付きGateway RPC(chat、sessions、config、health、voicewake、skills.bins)
  • event: nodeシグナル(voice transcript、agent request、chat subscribe、exec lifecycle)
Gateway → クライアント:
  • invoke / invoke-res: nodeコマンド(canvas.*camera.*screen.recordlocation.getsms.send
  • event: subscribeされたsession向けのchat更新
  • ping / pong: keepalive
過去のallowlist強制は src/gateway/server-bridge.ts にありました(現在は削除済み)。

Exec lifecycle events

nodeは exec.finished または exec.denied eventを送信して、system.runアクティビティを表面化できます。 これらはGateway内でsystem eventにマッピングされます。(legacy nodeは exec.started をまだ送信することがあります。) ペイロードフィールド(特記がない限りすべて任意):
  • sessionKey(必須): system eventを受け取るagent session。
  • runId: グループ化のための一意なexec id。
  • command: 生の、または整形済みのコマンド文字列。
  • exitCodetimedOutsuccessoutput: 完了の詳細(finishedのみ)。
  • reason: 拒否理由(deniedのみ)。

履歴上のtailnet利用

  • bridgeをtailnet IPにbindするには: ~/.openclaw/openclaw.jsonbridge.bind: "tailnet" を設定します(履歴情報のみ。bridge.* はもう有効ではありません)。
  • クライアントはMagicDNS名またはtailnet IP経由で接続します。
  • Bonjourはネットワークをまたがりません。必要な場合は手動のhost/portまたは広域DNS‑SDを使用してください。

Versioning

bridgeは暗黙のv1でした(min/maxネゴシエーションなし)。このセクションは歴史的参考情報のみです。現在のnode/operatorクライアントはWebSocketの Gateway Protocolを使用します。