Remote View
Remote View is a Remote Ops feature for viewing a Guida browser tab from another client. It uses WebView2’s Chrome DevTools Protocol bridge to capture tab frames and a WebSocket stream to send frames and input messages.
Remote View is useful for browser dashboards, lightweight control UIs, and private-network observers that need to see what a Guida node is doing without sitting at the desktop.
Requirements
Section titled “Requirements”- Remote Ops API must be enabled.
- The client must be able to reach the Remote Ops bind address and port.
- Input is accepted only when the session is started with
allowInput: true.
Guida does not authenticate Remote View clients separately from Remote Ops. Secure the channel externally.
Start a session
Section titled “Start a session”Call browser.remoteView.start through POST /api/ops/rpc.
{ "jsonrpc": "2.0", "id": "view-1", "method": "browser.remoteView.start", "params": { "tabId": "optional-tab-id", "transport": "websocket", "allowInput": true, "quality": 75, "maxFps": 15 }}Omit tabId to use the active browser tab.
The result includes sessionId, tabId, webSocketUrl, frameFormat, inputEnabled, availableTransports, nodeId, and nodeName.
WebSocket messages
Section titled “WebSocket messages”Connect to the returned webSocketUrl.
Server-to-client messages include:
session.startedframeerrorpongsession.stopped
Frame messages contain JPEG data and viewport metadata, including dimensions needed to map client pointer coordinates back to Guida’s input viewport.
Client-to-server messages include:
{ "type": "ping" }{ "type": "session.stop" }{ "type": "input.pointer", "event": "down", "x": 120, "y": 80, "button": "left", "clickCount": 1 }{ "type": "input.pointer", "event": "up", "x": 120, "y": 80, "button": "left", "clickCount": 1 }{ "type": "input.wheel", "x": 120, "y": 80, "deltaX": 0, "deltaY": -240 }{ "type": "input.key", "event": "down", "key": "Enter", "code": "Enter" }{ "type": "input.text", "text": "hello" }Coordinate mapping
Section titled “Coordinate mapping”The client must map rendered image coordinates back to the viewport metadata sent with each frame. Do not assume the image element size, JPEG dimensions, and browser input viewport are identical.
This matters especially when:
- the client fits the frame into a resizable pane
- Guida is using a desktop fit viewport
- Guida is using a mobile or tablet device-emulation preset
- the streamed frame includes browser/device offsets
Keep this mapping in one client-side utility. Pointer input should be sent in Guida’s input coordinate space, not in raw CSS pixels from the surrounding web UI.
Mobile and touch input
Section titled “Mobile and touch input”When the Guida tab is using a mobile or tablet preset, Guida enables device and touch emulation. Remote View then forwards pointer-style input as CDP touch input where appropriate.
Wheel gestures may be translated into touch-scroll gestures for mobile viewports. Clients should still send the same Remote View protocol messages; Guida decides how to dispatch them to CDP based on the tab’s current viewport mode.
Viewed-tab indicator
Section titled “Viewed-tab indicator”While a Remote View session is active, Guida shows an in-app indicator on the observed tab so the local user can see that the tab is being viewed or controlled.
View-only sessions indicate remote viewing. Input-enabled sessions indicate remote control. The indicator is part of Guida’s browser chrome, not arbitrary page content, and it is removed when the session stops.
Stop a session
Section titled “Stop a session”Call browser.remoteView.stop:
{ "jsonrpc": "2.0", "id": "view-stop-1", "method": "browser.remoteView.stop", "params": { "sessionId": "remote-view-session-id", "reason": "operator closed viewer" }}Use browser.remoteView.status to inspect active sessions.
Transport boundary
Section titled “Transport boundary”The first transport is WebSocket because it is simple and works well on private networks such as NetBird. The Remote View command and input protocol are deliberately separate from the transport so a later WebRTC transport can reuse the same session model.
Next steps
Section titled “Next steps”- Remote Ops API - enable the control surface and call RPC methods
- Automation Mode - CDP-backed test harness launch mode
- Browser & DOM API - viewport and DOM input APIs