Files
openclaw/docs/platforms/mac/bundled-gateway.md

74 lines
1.9 KiB
Markdown
Raw Normal View History

---
2026-01-11 10:15:37 +00:00
summary: "Gateway runtime on macOS (external launchd service)"
read_when:
2026-01-30 03:15:10 +01:00
- Packaging OpenClaw.app
2026-01-11 10:15:37 +00:00
- Debugging the macOS gateway launchd service
- Installing the gateway CLI for macOS
title: "Gateway on macOS"
---
2026-01-11 10:15:37 +00:00
# Gateway on macOS (external launchd)
2026-01-30 03:15:10 +01:00
OpenClaw.app no longer bundles Node/Bun or the Gateway runtime. The macOS app
expects an **external** `openclaw` CLI install, does not spawn the Gateway as a
child process, and manages a peruser launchd service to keep the Gateway
running (or attaches to an existing local Gateway if one is already running).
2026-01-11 10:15:37 +00:00
## Install the CLI (required for local mode)
2026-01-30 03:15:10 +01:00
You need Node 22+ on the Mac, then install `openclaw` globally:
2026-01-11 10:15:37 +00:00
```bash
2026-01-30 03:15:10 +01:00
npm install -g openclaw@<version>
2026-01-11 10:15:37 +00:00
```
2026-01-13 07:58:47 +00:00
The macOS apps **Install CLI** button runs the same flow via npm/pnpm (bun not recommended for Gateway runtime).
## Launchd (Gateway as LaunchAgent)
Label:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- `bot.molt.gateway` (or `bot.molt.<profile>`; legacy `com.openclaw.*` may remain)
2026-01-11 10:15:37 +00:00
Plist location (peruser):
2026-01-31 21:13:13 +09:00
- `~/Library/LaunchAgents/bot.molt.gateway.plist`
(or `~/Library/LaunchAgents/bot.molt.<profile>.plist`)
Manager:
2026-01-31 21:13:13 +09:00
2026-01-11 10:15:37 +00:00
- The macOS app owns LaunchAgent install/update in Local mode.
2026-01-30 03:15:10 +01:00
- The CLI can also install it: `openclaw gateway install`.
Behavior:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- “OpenClaw Active” enables/disables the LaunchAgent.
- App quit does **not** stop the 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:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- launchd stdout/err: `/tmp/openclaw/openclaw-gateway.log`
2026-01-11 10:15:37 +00:00
## Version compatibility
2026-01-11 10:15:37 +00:00
The macOS app checks the gateway version against its own version. If theyre
incompatible, update the global CLI to match the app version.
2026-01-11 10:15:37 +00:00
## Smoke check
```bash
2026-01-30 03:15:10 +01:00
openclaw --version
2026-01-30 03:15:10 +01:00
OPENCLAW_SKIP_CHANNELS=1 \
OPENCLAW_SKIP_CANVAS_HOST=1 \
openclaw gateway --port 18999 --bind loopback
```
2026-01-11 10:15:37 +00:00
Then:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway call health --url ws://127.0.0.1:18999 --timeout 3000
```