Skip to content

Remote skill bin probe times out when node is co-located with gateway (macOS app as node on same host) #40527

@Adam-Researchh

Description

@Adam-Researchh

Summary

When the OpenClaw macOS app connects to the gateway running on the same machine with the node role, the skills-remote system attempts to probe it for skill binaries via system.run / system.which. The macOS app does not handle this RPC, causing a timeout warning on every gateway startup and node reconnect:

[skills-remote] remote bin probe timed out (Researchh's Mac Studio (178b77...));
check node connectivity for Researchh's Mac Studio (178b77...)

Root Cause

  1. macOS app connects → requests node role → approved
  2. node-command-policy.tsPLATFORM_DEFAULTS.macos auto-includes system.run, system.run.prepare, system.which
  3. skills-remote.tsprimeRemoteSkillsCache() sees a Mac node with system.run → probes it for installed bins
  4. The macOS app does not handle system.run/system.which RPCs → probe times out

This is a mismatch: the macOS platform defaults assume the node can run shell commands (designed for remote Mac nodes running the CLI/daemon), but the macOS app does not implement that capability.

Impact

  • Warning spam in gateway logs on every startup and node reconnect
  • 10+ second timeout delay during startup while waiting for the probe
  • Confusing "check node connectivity" message when the node is actually connected and working fine

Current Workaround

Adding denyCommands to block the probe-triggering commands:

{
  "gateway": {
    "nodes": {
      "denyCommands": ["system.run", "system.run.prepare", "system.which"]
    }
  }
}

This works but is heavy-handed — it also blocks legitimate system.run for any actual remote nodes that could handle it.

Suggested Fix

A few possible approaches (not mutually exclusive):

  1. Detect co-located nodes: If the node's connection originates from 127.0.0.1 / ::1 and the gateway already has local shell access, skip remote bin probing for that node.

  2. Node capability declaration: Have nodes declare which commands they actually implement (the macOS app could omit system.run from its declared capabilities). The probe already checks declaredCommands via isNodeCommandAllowed() — if the app declared an empty or accurate command set, the probe would skip it.

  3. Separate app vs CLI platform defaults: Distinguish between macOS (app) and macOS (CLI/daemon) in PLATFORM_DEFAULTS. The app client mode is "ui" vs "cli" — this metadata is already available in the pairing record.

  4. Add a config flag: Something like gateway.nodes.skipRemoteBinProbe: true or skills.remote.enabled: false (currently skills.remote is rejected as an unrecognized config key).

Environment

  • OpenClaw 2026.3.7
  • macOS app 2026.3.7 (2026030790)
  • Gateway and macOS app on the same Mac Studio (M1 Ultra)
  • macOS 26.3.0

Related

  • node-command-policy.tsPLATFORM_DEFAULTS.macos includes SYSTEM_COMMANDS
  • skills-remote.tsprimeRemoteSkillsCache() triggers the probe
  • Config schema rejects skills.remote as an unrecognized key (no way to disable remote skills via config)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Normal backlog priority with limited blast radius.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.

    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