Nodes
A node is a paired device or headless runner that connects to the Gateway WebSocket withrole: "node" and exposes device or host commands through
node.invoke.
Nodes are optional peripherals. They do not run the Gateway service, and they
are not needed for first-run Agent setup. Use Advanced > Nodes when you need
paired-device status, pending pairings, advertised capabilities, runtime
clients, permissions, or command exposure details.
Protocol details: Gateway protocol.
What belongs where
- Advanced > Nodes: paired node status, pending pairings, capabilities, permissions, runtime clients, and raw diagnostics.
- Agent > Tools: whether a selected Agent may use node-backed tools.
- Device settings: camera, screen, microphone, location, notification, and wake-word permissions.
- Advanced > Config: raw config only when the setting does not yet have a focused page.
Pairing and status
WS nodes use device pairing. The node presents a device identity duringconnect; the Gateway creates a pairing request for role node.
nodes statusmarks a node as paired when device pairing includes rolenode.- Advanced > Nodes shows the same paired/runtime state in the browser UI.
node.pair.*andfased nodes pending/approve/rejectremain compatibility paths for clients that explicitly call the older pairing methods.
Node host for system.run
Use a node host when the Gateway runs on one machine but shell commands should 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.runandsystem.which. - Approvals: enforced on the node host through
~/.fased/exec-approvals.json.
Exec approvals and binding
Exec approvals are local to the node host.exec host=node:
Common node commands
Low-level invoke:MEDIA:<path> when they create an attachment for the
Agent.
| Capability | CLI |
|---|---|
| Canvas snapshot | fased nodes canvas snapshot --node <id> |
| Canvas navigation | fased nodes canvas present --node <id> --target https://example.com |
| Canvas eval | fased nodes canvas eval --node <id> --js "document.title" |
| Camera photo | fased nodes camera snap --node <id> |
| Camera clip | fased nodes camera clip --node <id> --duration 10s |
| Screen record | fased nodes screen record --node <id> --duration 10s --fps 10 |
| Location | fased nodes location get --node <id> |
| System command | fased nodes run --node <id> -- echo "hello" |
| Notification | fased nodes notify --node <id> --title "Ping" --body "Gateway ready" |
Capability notes
canvas.*,camera.*, andscreen.*usually require the node app to be foregrounded on iOS/Android.- Camera and screen commands require OS permissions.
- Location is off by default and requires device permission.
- Android
sms.sendis available only on devices that support telephony and grant SMS permission. - Screen and camera clips are duration-limited to avoid oversized payloads.
system.runis gated by exec approvals on macOS node mode and headless node hosts.
- Camera capture
- Location command
- Media understanding
- Audio and voice notes
- Images and media
- Talk mode
- Voice wake
Permissions map
Nodes may include apermissions map in node.list / node.describe, keyed by
permission name such as screenRecording or accessibility, with boolean
values (true means granted).
Headless node host
The headless node host connects to the Gateway WebSocket and exposessystem.run / system.which. It is useful on Linux, Windows, or a server next
to your Gateway.
- Pairing is still required.
- Node state lives in
~/.fased/node.json. - Exec approvals live in
~/.fased/exec-approvals.json. - Add
--tls/--tls-fingerprintwhen the Gateway WebSocket uses TLS. - For hosted gateways, use a private network path instead of public WebSocket exposure.