> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bridge-protocol

# Bridge-protocol (legacy node-transport)

Het Bridge-protocol is een **legacy** node-transport (TCP JSONL). Nieuwe node-clients
moeten in plaats daarvan het uniforme Gateway WebSocket-protocol gebruiken.

Als je een operator of node-client bouwt, gebruik het
[Gateway-protocol](/gateway/protocol).

**Let op:** Huidige OpenClaw-builds leveren de TCP-bridge-listener niet langer mee; dit document wordt bewaard ter historische referentie.
Legacy `bridge.*`-config-sleutels maken geen deel meer uit van het config-schema.

## Waarom we beide hebben

* **Beveiligingsgrens**: de bridge stelt een kleine toegestane lijst bloot in plaats van het
  volledige gateway-API-oppervlak.
* **Koppeling + node-identiteit**: toelating van nodes is eigendom van de gateway en gekoppeld
  aan een per-node token.
* **Discovery-UX**: nodes kunnen gateways ontdekken via Bonjour op LAN, of
  direct verbinden via een tailnet.
* **Loopback WS**: het volledige WS-control plane blijft lokaal, tenzij getunneld via SSH.

## Transport

* TCP, één JSON-object per regel (JSONL).
* Optionele TLS (wanneer `bridge.tls.enabled` true is).
* De legacy standaard listener-poort was `18790` (huidige builds starten geen TCP-bridge).

Wanneer TLS is ingeschakeld, bevatten discovery TXT-records `bridgeTls=1` plus
`bridgeTlsSha256`, zodat nodes het certificaat kunnen pinnen. Houd er rekening mee dat Bonjour/mDNS TXT-records
niet geauthenticeerd zijn; clients mogen de geadverteerde fingerprint niet
als een gezaghebbende pin behandelen zonder expliciete gebruikersintentie of andere out-of-band-verificatie.

## Handshake + koppeling

1. Client verzendt `hello` met node-metadata + token (indien al gekoppeld).
2. Indien niet gekoppeld, antwoordt de gateway met `error` (`NOT_PAIRED`/`UNAUTHORIZED`).
3. Client verzendt `pair-request`.
4. De gateway wacht op goedkeuring en verzendt vervolgens `pair-ok` en `hello-ok`.

`hello-ok` retourneert `serverName` en kan `canvasHostUrl` bevatten.

## Frames

Client → Gateway:

* `req` / `res`: scoped gateway RPC (chat, sessies, config, health, voicewake, skills.bins)
* `event`: node-signalen (spraaktranscript, agent-aanvraag, chat-abonnement, exec-levenscyclus)

Gateway → Client:

* `invoke` / `invoke-res`: node-opdrachten (`canvas.*`, `camera.*`, `screen.record`,
  `location.get`, `sms.send`)
* `event`: chat-updates voor geabonneerde sessies
* `ping` / `pong`: keepalive

Legacy afdwinging van de toegestane lijst leefde in `src/gateway/server-bridge.ts` (verwijderd).

## Exec-levenscyclusgebeurtenissen

Nodes kunnen `exec.finished`- of `exec.denied`-gebeurtenissen uitsturen om system.run-activiteit zichtbaar te maken.
Deze worden in de gateway gemapt naar systeemgebeurtenissen. (Legacy nodes kunnen nog steeds `exec.started` uitsturen.)

Payload-velden (alle optioneel tenzij vermeld):

* `sessionKey` (vereist): agent-sessie om de systeemgebeurtenis te ontvangen.
* `runId`: unieke exec-id voor groepering.
* `command`: ruwe of geformatteerde opdrachtstring.
* `exitCode`, `timedOut`, `success`, `output`: afrondingsdetails (alleen voltooid).
* `reason`: reden van weigering (alleen geweigerd).

## Tailnet-gebruik

* Bind de bridge aan een tailnet-IP: `bridge.bind: "tailnet"` in
  `~/.openclaw/openclaw.json`.
* Clients verbinden via MagicDNS-naam of tailnet-IP.
* Bonjour overschrijdt **geen** netwerken; gebruik zo nodig handmatige host/poort of wide-area DNS‑SD.

## Versionering

Bridge is momenteel **impliciet v1** (geen min/max-onderhandeling). Backward-compatibiliteit
wordt verwacht; voeg een bridge-protocolversieveld toe vóór eventuele breaking changes.
