The OpenClaw node appears online, but an Agent command is rejected or produces no result.
Fastest fix: treat connection and execution as separate states. Check node pairing, command-surface approval, Gateway policy, node-local approval, and target selection in that order; then rerun the same harmless command and a real Xcode build on the intended Mac. OpenClaw documents these as separate control boundaries.
This guide is for engineers maintaining OpenClaw and macOS execution nodes when an Agent can connect but cannot run commands.
It also helps Apple-platform developers verify that a remote command actually ran on the intended Mac and used its Xcode toolchain.
DevOps engineers can use the checks to restore access without replacing explicit approval with unrestricted execution.
Last updated October 27, 2026. Technical behavior was checked against the OpenClaw node troubleshooting, pairing, command-policy, execution-approval, and node-execution documentation, plus Apple’s Xcode command-line tools documentation.
00Start with the failure boundary, not the network
“Connected” describes whether the node can communicate with its Gateway. It does not, by itself, establish that the requested command is exposed, permitted by Gateway policy, approved on the node, or directed to that node. OpenClaw’s node troubleshooting guidance and node execution documentation distinguish connection and execution behavior.
That distinction matters because a broad fix can hide the actual fault. Re-pairing a healthy node will not grant a command surface that has not been approved. Relaxing a policy will not correct a request sent to a different execution target. Installing Xcode will not resolve a command rejected before it reaches the Mac.
What does an online node prove? It supports the conclusion that the node is reachable in the current status view. It does not prove that system.run is available, that policy allows the requested operation, or that the Agent selected the intended execution target. Treat each of those as a separate item to verify against the relevant OpenClaw status and logs.
Start by recording the exact failure text, the requested command, the node identity shown in OpenClaw, and the time of the attempt. Do not begin by clearing pairing records or granting broad permissions. Those actions change evidence and may make it harder to identify which layer blocked the request.
The error itself often points to the next boundary. A missing command surface is different from an approval required response, and both differ from an allowlist miss. Match the observed result to the control layer before changing configuration; OpenClaw describes command policy and node-side execution approvals separately in its command-policy documentation and execution-approval documentation.
| Observed evidence | Likely boundary to inspect | What to verify before changing anything |
|---|---|---|
| Node is absent, stale, or not paired | Node identity and pairing | The node identity shown by the Gateway and any pending pairing request |
Node is online, but system.run is unavailable |
Command-surface approval | Whether the command appears as available for that node |
| The request reports a policy denial | Gateway node-command policy | The effective allow/deny result for the actual command identifier |
The request reports approval required |
Node-local execution approval | Whether the node is waiting for human approval under its configured workflow |
The request reports allowlist miss |
Node-local command allowlist | Whether the exact executable or command form is covered by the allowlist |
| A command returns output from an unexpected environment | Execution target or account | Which node, remote account, working directory, and toolchain actually handled it |
The table is a triage map, not a substitute for logs. Similar user-facing symptoms can come from different layers. Use the exact error and the current node record to decide which branch applies.
01Verify pairing and the command surface separately
A successful pairing establishes a relationship between a node and the Gateway. It does not automatically mean that every command surface is approved. Review the node identity and pairing state using the OpenClaw pairing documentation, then inspect the node’s available command information separately.
Why can a paired node still fail to run system.run? Pairing and command availability answer different questions: pairing identifies the node, while the command surface determines whether the relevant execution capability is exposed. Confirm both rather than treating a paired status as proof of command authorization.
Use the status view and pending-request information available in the installed OpenClaw environment. Compare the node identity in those records with the node selected by the Agent. Then check whether system.run appears among the commands available for that node. If it does not, investigate command-surface approval or node declaration before editing Gateway policy.
Avoid assuming that a command identifier can be inferred from a friendly node label. Use the exact identifier shown in the status or policy information. If the displayed identity differs from the target expected by the workflow, resolve that mismatch first; otherwise, a policy review may be applied to the wrong node.
When pairing is genuinely incomplete, follow the documented pairing flow and review pending requests before approving one. Do not remove and recreate a healthy pairing merely because a later execution check failed. Keep the pairing record and the command-approval evidence distinct so the change history shows which boundary needed attention.
02Check the Gateway decision before broadening permissions
Once the intended node is paired and the command surface is available, check whether Gateway policy allows the requested node command. OpenClaw’s node command-policy documentation describes policy controls for node commands. The relevant question is not simply whether “exec” is allowed in general; it is whether the effective policy result permits the actual command identifier on the selected node.
What should be checked when OpenClaw system.run is denied? Compare the request’s command identifier with the effective allow/deny policy and the node’s declared capabilities. Then inspect the corresponding policy result or log entry. Do not respond to a denial by adding broad permissions until the precise mismatch is known.
Check the narrowest available evidence:
- The requested command identifier, including whether it is
system.run. - The node identity and command declaration associated with the request.
- The effective Gateway allow/deny result for that command.
- The log entry for the failed attempt, including any policy reason shown.
- Whether a higher-level or more specific rule changes the result for this node.
If the command is absent from the node’s declared commands, policy changes alone may not make it executable. If the command is declared but denied, determine which policy rule produced that outcome. Keep the change scoped to the node and command needed by the workflow, and preserve a way to restore the prior rule if the test does not resolve the failure.
Do not interpret a successful policy check as proof that the command ran. It only moves the investigation to the next boundary. A node can pass the Gateway decision and still require local approval or reject the command under its own allowlist.
03Resolve node-local approval without disabling the safeguard
Gateway authorization and node-local execution approval are separate checks. OpenClaw’s execution-approval documentation covers approval behavior and allowlist handling. Inspect the node’s own approval state when the failure contains wording such as approval required or allowlist miss.
What does an approval-required result mean? It indicates that execution has reached an approval boundary that still needs to be satisfied under the node’s configured process. Check whether the request is awaiting human confirmation and whether that approval was completed for the same command and node.
For an allowlist miss, compare the requested executable and command form with the node’s configured allowlist. A wrapper, a different executable path, or a changed invocation can matter if the node evaluates the actual command rather than the developer’s shorthand description. Use the documented approval interface and the node’s current configuration; do not guess at a rule syntax that is not shown in the installed environment.
Keep the permission change proportional to the task. If an operator must approve a release build, retain that approval requirement for release work. If a harmless diagnostic command needs to run unattended, define a narrow allowance only when the documented controls support that scope and the team has reviewed the consequences. Avoid turning off approvals as a shortcut: doing so can make unrelated Agent commands executable as well.
Before retrying, make sure the approval decision applies to the same node identity and command. A pairing record for one node does not establish local authorization on another, and a human approval for one request should not be treated as permanent approval for every future command.
04Confirm the execution target and Xcode environment
After the request passes the relevant authorization checks, verify where it ran. This is especially important when an Agent can select among multiple executable nodes. Review the execution request and result to confirm the selected node, then use a harmless command whose output can distinguish the intended Mac from the Gateway host or another node.
How can you verify that a remote command used the intended Mac’s Xcode? First establish the execution target. Then inspect the remote account’s toolchain and run a small build from the intended project path. Apple documents that the Xcode command-line tools require Xcode to be installed and the active developer directory to be set; the checks below use the documented xcode-select and xcodebuild tools. See Apple’s Xcode command-line tools documentation.
Run these checks through the same remote execution path used by the Agent, not only in a separate interactive session:
pwd
whoami
xcode-select -p
xcodebuild -version
Interpret the output in context. pwd helps identify the working directory, whoami identifies the remote account, xcode-select -p reports the active developer directory, and xcodebuild -version checks that the Xcode build tool responds. These checks do not prove that a project builds, but they help establish which environment received the request.
If the tools are missing or the active developer directory is not the intended one, fix the Xcode installation or selection on the target Mac before diagnosing project-specific build failures. Do not assume that an Xcode installation visible to one login session is necessarily available to the account used by the Agent.
For a minimal project validation, run a build using the project’s actual path and scheme, replacing the placeholders with values from the repository:
xcodebuild -project "<PROJECT>.xcodeproj" \
-scheme "<SCHEME>" \
-destination 'generic/platform=iOS' \
build
Use a workspace-based invocation instead if the project is organized around an .xcworkspace; use the project’s documented scheme and destination rather than copying a command that belongs to another repository. A successful command response should be tied to the intended node, account, path, and Xcode selection. A build that fails for a project error still proves more than a command that never reached the Mac, provided the logs establish where it ran.
The two decision tables below summarize what to do with the evidence. They do not replace the command output or policy logs.
| Check result | Next action | Avoid |
|---|---|---|
| Node identity does not match the intended target | Correct target selection or node binding | Re-pairing a different node without evidence |
system.run is not available |
Review command-surface approval and node declaration | Broadening Gateway allow rules first |
| Gateway policy denies the exact request | Identify the rule and make a scoped change if justified | Replacing deny controls with unrestricted execution |
| Node asks for approval | Complete or revise the documented approval workflow | Disabling all local execution approvals |
| Allowlist rejects the command | Compare the actual executable and invocation with the allowlist | Adding broad shell access to cover an unexplained mismatch |
| The harmless check runs on the wrong account or path | Correct target, account, or working-directory selection | Treating an interactive SSH result as proof of Agent execution |
| Toolchain checks pass but the build fails | Diagnose project, scheme, signing, or dependency output | Calling the failure an OpenClaw connection problem |
05Close the incident with a reproducible authorization check
Use the following checklist to confirm the repair without removing safeguards. Keep the same harmless command for the before-and-after comparison so the result is meaningful.
- [ ] Record the failed request, exact error text, selected node, and relevant log entry.
- [ ] Confirm that the node identity shown in OpenClaw matches the intended execution target.
- [ ] Check pairing state and pending pairing requests separately from command authorization.
- [ ] Confirm that
system.runis available on the selected node. - [ ] Review the effective Gateway policy result for the exact command identifier.
- [ ] Resolve any node-local approval requirement using the documented approval workflow.
- [ ] If the result is an allowlist miss, compare the actual invocation with the node’s configured allowlist.
- [ ] Run the same harmless command through the Agent and record the remote account, working directory, and node.
- [ ] Run the minimal Xcode build through that same execution route and retain its output.
- [ ] Record which approval remains necessary and the condition for rolling back any policy change.
This sequence turns a vague “connected but broken” report into evidence about a specific boundary. If the harmless command works but the build does not, keep the OpenClaw authorization path unchanged and investigate the Xcode or project output. If the build succeeds but the workflow still reports failure, compare the Agent’s target binding and result handling with the recorded command output before changing permissions again.
The same evidence also helps when a node is paired but commands still do not execute on the Mac: verify the command surface, Gateway decision, local approval, and target in that order. A successful check at one layer narrows the search; it does not certify the later layers.
06Choose a Mac execution host only after the failure is understood
If the current setup uses a Windows or Linux workstation plus an ad hoc Mac, its weak points may include a Mac that is not consistently reachable, a different login environment from the interactive developer’s, and uncertainty about which machine produced a build result. A remote Mac can provide a dedicated macOS execution environment, but it will not repair a mistaken OpenClaw policy, an unapproved command, or a project with a broken toolchain. Keep the decision tied to the diagnosed cause.
For occasional tests, a local Mac may be simpler if it is already available and can remain accessible to the workflow. For a sustained CI workload, compare the cost and operational responsibility of buying and maintaining a Mac mini with a rented remote Mac; ownership can suit stable, long-running use, while rental can fit temporary capacity or a test environment without purchasing hardware. A hosted Mac also introduces dependency on remote access and the provider’s service conditions, so it is not the right choice when the job requires local physical peripherals or uninterrupted control of hardware.
If the remaining issue is access to a macOS execution host rather than OpenClaw authorization, review the remote Mac access options and confirm that the available connection method fits the team’s workflow. When a temporary or ongoing hosted Mac is appropriate, check the NUKCLOUD Mac rental options against the required access, account, and operational constraints, then rerun the same least-privilege acceptance checks before routing production work to it.