Command ladder
- Node is connected and paired for role
node. nodes describeincludes the capability you’re calling.- Exec approvals show the expected mode/allowlist.
Foreground requirements
canvas.*, camera.*, and screen.* are foreground-only on iOS/Android nodes.
Quick check and fix:
NODE_BACKGROUND_UNAVAILABLE, bring the node app to the foreground and retry.
Permissions matrix
Pairing versus approvals
Three separate gates control whether a node command succeeds:- Device pairing: can this node connect to the gateway?
- Gateway node command policy: is the RPC command ID allowed by
gateway.nodes.allowCommands/denyCommandsand platform defaults? - Exec approvals: can this node run a specific shell command locally?
system.run, the per-node policy lives in that node’s exec approvals file (openclaw approvals get --node ...), not in the gateway pairing record.
Quick checks:
- Pairing missing: approve the node device first.
nodes describemissing a command: check the gateway node command policy and whether the node actually declared that command on connect.- Pairing fine but
system.runfails: fix exec approvals/allowlist on that node.
host=node runs, the gateway also binds execution to the prepared canonical systemRunPlan. If a later caller mutates the command, cwd, or session metadata before the approved run is forwarded, the gateway rejects the run as an approval mismatch instead of trusting the edited payload.
Common node error codes
Fast recovery loop
- Re-approve device pairing.
- Re-open the node app (foreground).
- Re-grant OS permissions.
- Recreate/adjust the exec approval policy.
computer tool, screen.snapshot succeeds with Screen Recording permission, and /phone status shows the temporary or persistent gateway authorization you intended. A gateway.nodes.denyCommands entry always overrides allowCommands.