RFC BC inverts the tool-execution direction. A client (browser, IDE, mobile app) opens a WebSocket to the runtime and registers its own tools. When the agent calls one, the runtime routes the invoke over the socket to the connected client; the client runs the tool locally and returns the result. Four layers: a transport-agnostic registry (invoke↔result correlation, per-principal connection map, per-key connection cap, delegate-and-block Invoke), a bearer-authed GET /v1/client-tools WebSocket endpoint (bearer rides Sec-WebSocket-Protocol because browsers can't set Authorization on a WS handshake), dispatch through client__-prefixed advertised tools (grants gated by tools: allowlist globs), and a TypeScript connectClientTools helper in @loomcycle/client that auto-reconnects. v1.16.1 fixes the wire-safe name (client: to client__) because Anthropic, OpenAI, and Ollama all reject colons in tool names, so v1.16.0 was uncallable end-to-end until the rename. LoomBoard's Chrome side-panel extension is the first customer, migrating from a channel-bridge to RFC BC in the same three-day window with browser_read_page, fill, click, and navigate tools plus a Confirm-vs-Auto approval bar.
Nginx Proxy Manager on Your Home Lab: Performance Tuning Beyond the Defaults