Bug Report: macOS Node Missing system.run.prepare Command
Environment
- OpenClaw Version: 2026.3.1
- Gateway Platform: Linux (Ubuntu)
- Node Platform: macOS 26.3.0 (Mac mini, Mac14,12)
- Node Version: 2026.3.1
Description
The macOS companion app does not report the system.run.prepare command in its commands list when connecting to the Gateway, causing all nodes.run operations to fail.
Expected Behavior
According to the source code (node-commands-BAFJumuL.js), NODE_SYSTEM_RUN_COMMANDS should include:
system.run.prepare
system.run
system.which
The macOS companion app should report all three commands when connecting to the Gateway.
Actual Behavior
The macOS node only reports:
The system.run.prepare command is missing from the declared commands list.
Impact
-
nodes.run tool fails: When attempting to execute commands via nodes.run, the Gateway tries to call system.run.prepare first, but the node rejects it with:
node command not allowed: the node (platform: macOS 26.3.0) does not support "system.run.prepare"
-
Mac-only skills show as unavailable: Skills that require macOS-specific binaries (e.g., things-mac, managing-apple-music, peekaboo, sag) are marked as "missing" in the Gateway web UI, even though:
- The node is connected and paired
getRemoteSkillEligibility() correctly identifies the Mac node
- The required binaries exist on the Mac
-
Documentation mismatch: The official documentation states that Mac-only skills should work when a Mac node is connected, but this bug prevents that functionality.
Steps to Reproduce
- Install OpenClaw 2026.3.1 on a Linux Gateway
- Install OpenClaw 2026.3.1 companion app on macOS
- Pair the Mac node with the Gateway
- Check the node's declared commands:
openclaw nodes describe --node <node-id> --json | jq '.commands'
- Observe that
system.run.prepare is missing
- Attempt to run a command via
nodes.run:
openclaw nodes run --node <node-id> --command '["which", "things"]'
- Observe the error:
node command not allowed: the node does not support "system.run.prepare"
Root Cause Analysis
The macOS companion app's connection logic (node-cli-DiUsrGop.js, line ~1306) correctly spreads NODE_SYSTEM_RUN_COMMANDS:
commands: [
...NODE_SYSTEM_RUN_COMMANDS,
...NODE_EXEC_APPROVALS_COMMANDS,
...browserProxyEnabled ? [NODE_BROWSER_PROXY_COMMAND] : []
]
However, the actual commands sent to the Gateway are missing system.run.prepare. This suggests either:
- A build/bundling issue where
NODE_SYSTEM_RUN_COMMANDS is incorrectly defined in the macOS build
- A runtime filtering issue that removes
system.run.prepare before sending the connection request
- A version mismatch between the Gateway and companion app code
Workaround
Use SSH or other direct methods to execute commands on the Mac, bypassing nodes.run:
ssh user@mac-ip "things ..."
Additional Context
- The Gateway's
resolveNodeCommandAllowlist() correctly includes system.run.prepare in the macOS allowlist
- The command handler for
system.run.prepare exists in the node CLI code (line 1094)
- This appears to be a regression or incomplete implementation in version 2026.3.1
Suggested Fix
Ensure the macOS companion app correctly includes all commands from NODE_SYSTEM_RUN_COMMANDS when building the connection parameters. Verify that the bundled/compiled version matches the source code definition.
Bug Report: macOS Node Missing
system.run.prepareCommandEnvironment
Description
The macOS companion app does not report the
system.run.preparecommand in itscommandslist when connecting to the Gateway, causing allnodes.runoperations to fail.Expected Behavior
According to the source code (
node-commands-BAFJumuL.js),NODE_SYSTEM_RUN_COMMANDSshould include:system.run.preparesystem.runsystem.whichThe macOS companion app should report all three commands when connecting to the Gateway.
Actual Behavior
The macOS node only reports:
system.runsystem.whichThe
system.run.preparecommand is missing from the declared commands list.Impact
nodes.runtool fails: When attempting to execute commands vianodes.run, the Gateway tries to callsystem.run.preparefirst, but the node rejects it with:Mac-only skills show as unavailable: Skills that require macOS-specific binaries (e.g.,
things-mac,managing-apple-music,peekaboo,sag) are marked as "missing" in the Gateway web UI, even though:getRemoteSkillEligibility()correctly identifies the Mac nodeDocumentation mismatch: The official documentation states that Mac-only skills should work when a Mac node is connected, but this bug prevents that functionality.
Steps to Reproduce
system.run.prepareis missingnodes.run:node command not allowed: the node does not support "system.run.prepare"Root Cause Analysis
The macOS companion app's connection logic (
node-cli-DiUsrGop.js, line ~1306) correctly spreadsNODE_SYSTEM_RUN_COMMANDS:However, the actual commands sent to the Gateway are missing
system.run.prepare. This suggests either:NODE_SYSTEM_RUN_COMMANDSis incorrectly defined in the macOS buildsystem.run.preparebefore sending the connection requestWorkaround
Use SSH or other direct methods to execute commands on the Mac, bypassing
nodes.run:ssh user@mac-ip "things ..."Additional Context
resolveNodeCommandAllowlist()correctly includessystem.run.preparein the macOS allowlistsystem.run.prepareexists in the node CLI code (line 1094)Suggested Fix
Ensure the macOS companion app correctly includes all commands from
NODE_SYSTEM_RUN_COMMANDSwhen building the connection parameters. Verify that the bundled/compiled version matches the source code definition.