Skip to content

macOS app still starts node service via obsolete openclaw service node start command #43171

@skernelx

Description

@skernelx

Summary

The macOS app currently tries to start the local node service with the old CLI shape:

openclaw service node start --json

But current official CLIs no longer support the top-level service command. This appears to be the real root cause behind the macOS app symptoms where:

  • the node connects but stays missing system.run.prepare
  • nodes.run fails with does not support system.run.prepare
  • app logs show node service start failed: (Did you mean devices?)

This is related to #31959 and #37591, but those issues describe the symptom. This issue points to the startup path that appears to cause the symptom.

Environment

  • macOS app: 2026.3.8-beta.1 (installed from the v2026.3.8 mac asset line)
  • local CLI: 2026.3.8
  • gateway: Linux OCI, 2026.3.8
  • transport: Remote over SSH

What I verified

1. SSH / remote gateway path is healthy

After fixing local remote config to the normal SSH shape and clearing stale local port-guard state, the official probe succeeds:

openclaw gateway probe --ssh <target> --ssh-identity <key> --json => ok: true

So this is not a Tailscale / SSH reachability problem.

2. The official app node can connect, but still lacks the exec startup path

The macOS app node shows up connected, but its command list is missing system.run.prepare and nodes.run fails with:

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

3. The app log matches a local CLI mismatch

The app logs:

[ai.openclaw:node.service] node service start failed: (Did you mean devices?)

4. The macOS source still uses the old command shape

In apps/macos/Sources/OpenClaw/NodeServiceManager.swift, the app builds the local node-service command as:

CommandResolver.openclawCommand(subcommand: "service", extraArgs: ["node", "start", "--json"], configRoot: ["gateway": ["mode": "local"]])

That ends up calling:

openclaw service node start --json

5. Current official CLI reproduces the failure directly

Running this locally with the official CLI gives:

error: unknown command 'service'
(Did you mean devices?)

I also checked official npm CLI packages across multiple versions (including 2026.2.26, 2026.3.1, 2026.3.2, 2026.3.8-beta.1, 2026.3.8). They all use the flattened openclaw node ... command surface, not openclaw service node ....

Expected behavior

The macOS app should start/manage the local node service using the current CLI shape, for example under openclaw node ..., so that the node advertises the full exec surface including system.run.prepare.

Actual behavior

The app appears to call an obsolete command shape, the node service never comes up correctly, and the node connects without the full exec command surface.

Why this matters

Without this fix, the macOS app can still expose UI-centric capabilities like screen/canvas/browser, but it cannot serve as a complete exec-capable node for nodes.run on a current official CLI install.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions