openclaw - 💡(How to fix) Fix [Bug]: macOS companion app node missing system.run.prepare — exec completely broken on macOS local mode [3 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#48809Fetched 2026-04-08 00:52:18
View on GitHub
Comments
3
Participants
2
Timeline
6
Reactions
0
Participants
Timeline (top)
commented ×3closed ×1locked ×1subscribed ×1

On macOS local mode, the companion app's built-in node does not advertise system.run.prepare, making all exec operations fail. This is a P0-level issue — remote command execution (the core use case for Telegram/mobile control) is completely non-functional.

Root Cause

Root cause chain

  1. NodeServiceManager.swift calls obsolete openclaw service node start (removed in CLI 2026.3.x) → node service fails to start
  2. App falls back to degraded node mode → only advertises system.run, not system.run.prepare
  3. Gateway (2026.3.13) requires system.run.prepare before system.run → rejected
  4. No fallback path exists in gateway when node lacks system.run.prepare

Fix Action

Fix / Workaround

Impact

  • All exec operations broken on macOS local mode
  • Telegram/mobile remote control completely non-functional
  • No official workaround except manually installing CLI node host (which defeats the purpose of the companion app and loses TCC permission delegation)

Code Example

node command not allowed: the node (platform: macOS 26.3.1) does not support "system.run.prepare"

---

Commands: browser.proxy, camera.clip, camera.list, camera.snap, canvas.*, screen.record, system.notify, system.run, system.which
# system.run.prepare is ABSENT
RAW_BUFFERClick to expand / collapse

Bug type

Regression / blocking

Summary

On macOS local mode, the companion app's built-in node does not advertise system.run.prepare, making all exec operations fail. This is a P0-level issue — remote command execution (the core use case for Telegram/mobile control) is completely non-functional.

Root cause chain

  1. NodeServiceManager.swift calls obsolete openclaw service node start (removed in CLI 2026.3.x) → node service fails to start
  2. App falls back to degraded node mode → only advertises system.run, not system.run.prepare
  3. Gateway (2026.3.13) requires system.run.prepare before system.run → rejected
  4. No fallback path exists in gateway when node lacks system.run.prepare

Environment

  • macOS 26.3.1 (Tahoe), Apple Silicon
  • OpenClaw CLI: 2026.3.13
  • OpenClaw macOS App: v2026.3.12
  • Mode: local (app manages gateway + acts as node)

Steps to reproduce

  1. Install OpenClaw CLI 2026.3.13 + macOS companion app v2026.3.12
  2. Use local mode (default)
  3. Execute any command via Telegram or API (e.g., exec echo hello)
  4. Observe failure

Actual behavior

node command not allowed: the node (platform: macOS 26.3.1) does not support "system.run.prepare"

openclaw nodes describe confirms missing command:

Commands: browser.proxy, camera.clip, camera.list, camera.snap, canvas.*, screen.record, system.notify, system.run, system.which
# system.run.prepare is ABSENT

Expected behavior

Exec commands should work. Either:

  • App node should advertise system.run.prepare (fix NodeServiceManager → PR #46843)
  • Or gateway should fallback to system.run when system.run.prepare is unavailable (PR #36504)

Impact

  • All exec operations broken on macOS local mode
  • Telegram/mobile remote control completely non-functional
  • No official workaround except manually installing CLI node host (which defeats the purpose of the companion app and loses TCC permission delegation)

Related issues & PRs

  • #43171 — Root cause: obsolete openclaw service node start command
  • #46843 — Fix: update NodeServiceManager.swift (OPEN, no review)
  • #38781 — Fix: add system.run.prepare to node declaration (OPEN, no review)
  • #36504 — Fix: gateway fallback when system.run.prepare unavailable (OPEN, no review)
  • #43330 — Fix: add system.run.prepare support (CLOSED/abandoned due to security concern)
  • #37591, #29171, #31959, #34561 — Related symptom reports

Note

4 PRs addressing this issue have been open for 2-12 days with zero official review. Given this completely blocks exec on macOS, could a maintainer please prioritize review?

extent analysis

Fix Plan

To resolve the issue, we need to update the NodeServiceManager.swift to use the correct command to start the node service. We also need to add system.run.prepare to the node declaration or implement a fallback in the gateway.

Update NodeServiceManager.swift

// Replace the obsolete command with the new one
// Before:
// nodeService.start(with: "openclaw service node start")
// After:
nodeService.start(with: "openclaw node start")

Add system.run.prepare to Node Declaration

// Add system.run.prepare to the node declaration
// Before:
// nodeCommands = ["browser.proxy", "camera.clip", "camera.list", "camera.snap", "canvas.*", "screen.record", "system.notify", "system.run", "system.which"]
// After:
nodeCommands = ["browser.proxy", "camera.clip", "camera.list", "camera.snap", "canvas.*", "screen.record", "system.notify", "system.run", "system.run.prepare", "system.which"]

Implement Gateway Fallback

# In the gateway, implement a fallback to system.run when system.run.prepare is unavailable
def execute_command(command):
    if command == "system.run" and not node_supports("system.run.prepare"):
        # Fallback to system.run
        return execute_system_run(command)
    # ... rest of the function remains the same

Verification

To verify the fix, follow these steps:

  1. Update the NodeServiceManager.swift with the new command.
  2. Add system.run.prepare to the node declaration or implement the gateway fallback.
  3. Restart the node service and the gateway.
  4. Execute a command via Telegram or API (e.g., exec echo hello).
  5. Verify that the command executes successfully.

Extra Tips

  • Make sure to review and test the changes thoroughly to avoid introducing new issues.
  • Consider adding automated tests to prevent similar regressions in the future.
  • If you encounter any issues during the update process, refer to the related PRs (#43171, #46843, #38781, #36504) for more information.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Exec commands should work. Either:

  • App node should advertise system.run.prepare (fix NodeServiceManager → PR #46843)
  • Or gateway should fallback to system.run when system.run.prepare is unavailable (PR #36504)

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING