OpenClawSkills
GitHub
Platforms • TutorialHeader.readTime

Gateway on macOS

Gateway runtime on macOS (external launchd service)

OpenClaw.app no longer bundles Node/Bun or Gateway runtime. The macOS app

expects an ''external'' ''openclaw'' CLI install, does not spawn Gateway as a

child process, and manages a per‑user launchd service to keep Gateway

running (or attaches to an existing local Gateway if one is already running).

Tutorial.step

Install CLI (required for local mode)

You need Node 22+ on Mac, then install ''openclaw'' globally:

Bash
npm install -g openclaw@'<version>'

The macOS app's Install CLI button runs the same flow via npm/pnpm (bun not recommended for Gateway runtime).

Tutorial.step

Launchd (Gateway as LaunchAgent)

Label:

- ''bot.molt.gateway'' (or ''bot.molt.<profile>''; legacy ''com.openclaw.*'' may remain)

Plist location (per‑user):

- ''~/Library/LaunchAgents/bot.molt.gateway.plist''

(or ''~/Library/LaunchAgents/bot.molt.<profile>.plist'')

Manager:

- The macOS app owns LaunchAgent install/update in Local mode.

- The CLI can also install it: ''openclaw gateway install''.

Behavior:

- "OpenClaw Active" enables/disables LaunchAgent.

- App quit does not stop gateway (launchd keeps it alive).

- If a Gateway is already running on the configured port, the app attaches to

it instead of starting a new one.

Logging:

- launchd stdout/err: ''/tmp/openclaw/openclaw-gateway.log''

Tutorial.step

Version compatibility

The macOS app checks the gateway version against its own version. If they're

incompatible, update the global CLI to match the app version.

Tutorial.step

Smoke check

Bash
openclaw --version

OPENCLAW_SKIP_CHANNELS=1 \
OPENCLAW_SKIP_CANVAS_HOST=1 \
openclaw gateway --port 18999 --bind loopback

Then:

Bash
openclaw gateway call health --url ws://127.0.0.1:18999 --timeout 3000