Nodes
A node is a paired device or headless runner that connects to the Gateway and exposes local commands throughnode.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
WebSocket nodes use device pairing. The node presents device info duringconnect, and 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.
- 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.