docs/nodes/troubleshooting.md
Use this page when a node is visible in status but node tools fail.
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Then run node specific checks:
openclaw nodes status
openclaw nodes describe --node <idOrNameOrIp>
openclaw approvals get --node <idOrNameOrIp>
Healthy signals:
node.nodes describe includes the capability you are calling.canvas.*, camera.*, and screen.* are foreground only on iOS/Android nodes.
Quick check and fix:
openclaw nodes describe --node <idOrNameOrIp>
openclaw nodes canvas snapshot --node <idOrNameOrIp>
openclaw logs --follow
If you see NODE_BACKGROUND_UNAVAILABLE, bring the node app to the foreground and retry.
| Capability | iOS | Android | macOS node app | Typical failure code |
|---|---|---|---|---|
camera.snap, camera.clip | Camera (+ mic for clip audio) | Camera (+ mic for clip audio) | Camera (+ mic for clip audio) | *_PERMISSION_REQUIRED |
screen.record | Screen Recording (+ mic optional) | Screen capture prompt (+ mic optional) | Screen Recording | *_PERMISSION_REQUIRED |
location.get | While Using or Always (depends on mode) | Foreground/Background location based on mode | Location permission | LOCATION_PERMISSION_REQUIRED |
system.run | n/a (node host path) | n/a (node host path) | Exec approvals required | SYSTEM_RUN_DENIED |
These are different gates:
gateway.nodes.allowCommands / denyCommands and platform defaults?Quick checks:
openclaw devices list
openclaw nodes status
openclaw approvals get --node <idOrNameOrIp>
openclaw approvals allowlist add --node <idOrNameOrIp> "/usr/bin/uname"
If pairing is missing, approve the node device first.
If nodes describe is missing a command, check the gateway node command policy and whether the node actually declared that command on connect.
If pairing is fine but system.run fails, fix exec approvals/allowlist on that node.
Node pairing is an identity/trust gate, not a per-command approval surface. For system.run, the per-node policy lives in that node's exec approvals file (openclaw approvals get --node ...), not in the gateway pairing record.
For approval-backed host=node runs, the gateway also binds execution to the
prepared canonical systemRunPlan. If a later caller mutates 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.
NODE_BACKGROUND_UNAVAILABLE → app is backgrounded; bring it foreground.CAMERA_DISABLED → camera toggle disabled in node settings.*_PERMISSION_REQUIRED → OS permission missing/denied.LOCATION_DISABLED → location mode is off.LOCATION_PERMISSION_REQUIRED → requested location mode not granted.LOCATION_BACKGROUND_UNAVAILABLE → app is backgrounded but only While Using permission exists.SYSTEM_RUN_DENIED: approval required → exec request needs explicit approval.SYSTEM_RUN_DENIED: allowlist miss → command blocked by allowlist mode.
On Windows node hosts, shell-wrapper forms like cmd.exe /c ... are treated as allowlist misses in
allowlist mode unless approved via ask flow.openclaw nodes status
openclaw nodes describe --node <idOrNameOrIp>
openclaw approvals get --node <idOrNameOrIp>
openclaw logs --follow
If still stuck:
Related: