Nodes
A node is a companion device (headless) that connects to the Gateway WebSocket (same port as operators) withrole: "node" and exposes a command surface (e.g. camera.*, system.*) via node.invoke. Protocol details: Gateway protocol.
Legacy transport: Bridge protocol (TCP JSONL; deprecated/removed for current nodes).
Notes:
- Nodes are peripherals, not gateways. They don’t run the gateway service.
- Telegram messages land on the gateway, not on nodes.
Status + identity
Nodes connect over the Gateway WebSocket withrole: "node". Use the CLI to inspect:
nodes statusshows connection state and capabilities.- Use
--display-namewhen starting a node to set a friendly name.
Remote node host (system.run)
Use a node host when your Gateway runs on one machine and you want commands to execute on another. The model still talks to the gateway; the gateway forwardsexec calls to the node host when host=node is selected.
What runs where
- Gateway host: receives messages, runs the model, routes tool calls.
- Node host: executes
system.run/system.whichon the node machine. - Approvals: enforced on the node host via
~/.crocbot/exec-approvals.json.
Start a node host (foreground)
On the node machine:Start a node host (service)
Naming
Naming options:--display-nameoncrocbot node run/crocbot node install(persists in~/.crocbot/node.jsonon the node).crocbot nodes rename --node <id|name|ip> --name "Build Node"(gateway override).
Allowlist the commands
Exec approvals are per node host. Add allowlist entries from the gateway:~/.crocbot/exec-approvals.json.
Point exec at the node
Configure defaults (gateway config):exec call with host=node runs on the node host (subject to the
node allowlist/approvals).
Related:
Invoking commands
Low-level (raw RPC):Photos + videos (node camera)
Photos (jpg):
mp4):
- The node must be foregrounded for
camera.*(background calls returnNODE_BACKGROUND_UNAVAILABLE). - Clip duration is clamped (currently
<= 60s) to avoid oversized base64 payloads.
Screen recordings (nodes)
Nodes exposescreen.record (mp4). Example:
screen.recordrequires the node app to be foregrounded.- Screen recordings are clamped to
<= 60s. --no-audiodisables microphone capture.- Use
--screen <index>to select a display when multiple screens are available.
Location (nodes)
Nodes exposelocation.get when Location is enabled in settings.
CLI helper:
- Location is off by default.
- “Always” requires system permission; background fetch is best-effort.
- The response includes lat/lon, accuracy (meters), and timestamp.
System commands (node host)
The headless node host exposessystem.run, system.which, and system.execApprovals.get/set.
Examples:
system.runreturns stdout/stderr/exit code in the payload.system.runsupports--cwd,--env KEY=VAL,--command-timeout, and--needs-screen-recording.system.notifysupports--priority <passive|active|timeSensitive>and--delivery <system|overlay|auto>.- On headless node host,
system.runis gated by exec approvals (~/.crocbot/exec-approvals.json).
Exec node binding
When multiple nodes are available, you can bind exec to a specific node. This sets the default node forexec host=node (and can be overridden per agent).
Global default:
Permissions map
Nodes may include apermissions map in node.list / node.describe, keyed by permission name (e.g. screenRecording, accessibility) with boolean values (true = granted).
Headless node host (cross-platform)
crocbot can run a headless node host (no UI) that connects to the Gateway WebSocket and exposessystem.run / system.which. This is useful on Linux/Windows
or for running a minimal node alongside a server.
Start it:
- Ensure gateway auth is configured for non-loopback connections.
- The node host stores its node id, token, display name, and gateway connection info in
~/.crocbot/node.json. - Exec approvals are enforced locally via
~/.crocbot/exec-approvals.json(see Exec approvals). - Add
--tls/--tls-fingerprintwhen the Gateway WS uses TLS.
