Node 22.16+ (we recommend Node 24 where your policy allows), official or npm -g install, openclaw onboard --install-daemon, gateway.reload.mode set to hybrid, and explicit handling of OPENCLAW_GATEWAY_TOKEN next to 127.0.0.1 listeners. Pair it with gateway hardening, model auth troubleshooting, and the blog index—no login required to read.
Why remote Mac hosting matters for this pattern
A laptop sleeps; a shared CI image resets. A dedicated remote Mac gives you stable launchd ownership, persistent disk for caches and config, and a single place where hybrid reload can reconcile file edits with in-flight sessions. That is the practical meaning of “7x24 gateway hosting”: fewer midnight SSH sessions to “just restart OpenClaw,” and a clearer boundary between loopback control plane traffic and whatever you tunnel to teammates.
Environment prerequisites (checklist)
- Node.js:
22.16or newer on the gateway host; standardize on Node 24 when your security baselines already track current LTS. - macOS role: a non-guest user that will own the plist, config directory, and any model credential files.
- Network: outbound HTTPS to the model vendors you route to; optional WireGuard or corporate proxy documented per egress whitelist playbook.
- Automation contract: decide where
OPENCLAW_GATEWAY_TOKENlives (secret manager export, plistEnvironmentVariables, or CI vault inject) before you expose dashboards through SSH tunnels.
Install OpenClaw and fix PATH drift
Install using either the official curl-based installer from current OpenClaw docs or a pinned global package:
node -v # expect v22.16+; prefer v24.x after QA # Example global install — replace the semver with the build you validated: npm install -g openclaw@<your-pinned-version> which openclaw openclaw --version
If which openclaw returns nothing in a non-interactive shell while your interactive zsh works, your npm global bin is missing from PATH. Print npm prefix -g, add $(npm prefix -g)/bin to the same PATH that launchd uses, or symlink the binary into /usr/local/bin. This single omission causes half the “works on my SSH session” tickets on hosted Macs.
Wizard and daemon: openclaw onboard --install-daemon
Run openclaw onboard --install-daemon as the user that will own production traffic. The wizard captures channels, model defaults, and auth scaffolding; the flag registers launchd so the gateway survives disconnects and reboots. Skipping the daemon and running openclaw gateway inside tmux is fine for experiments, but it is not a reproducible baseline for hybrid reload tests because process restarts and signal ownership differ from a managed service.
Verify gateway status and port 18789
After onboarding, prove readiness before you touch routing:
openclaw gateway status # add --json or --deep when your pinned release documents them
Confirm the listener matches the documented default 127.0.0.1:18789 unless you intentionally moved it. Mismatch between the dashboard URL you share internally and the actual bind address is a common source of “token works in curl from me but not from cron.” If you gate changes in CI, mirror the same checks described in config validate CI gate so invalid keys are caught before deploy.
Hot-reload scenario: hybrid mode and a model routing change
Goal: change which model handles a workspace or alias, save configuration, and observe the gateway pick up the route without a cold kill of the process—within the limits of what 2026.4.x classifies as hot-reloadable.
- Set
gateway.reload.modetohybridin your OpenClaw gateway configuration (exact nesting follows the schema youropenclaw config validateoutput references for 2026.4.x). - Run validate if your install ships
openclaw config validate; fixinvalid-keypaths before you rely on reload semantics. - Edit the model route: default model ID, provider map, or per-workspace override—whichever your routing table uses.
- Save the file on the same path the daemon reads (watch for
OPENCLAW_HOMEor config root drift between SSH and plist). - Re-run
openclaw gateway statusand send a short completion that should exercise the new route; compare provider-side logs or response metadata to confirm the switch.
Illustrative fragment (verify against your schema):
{
"gateway": {
"reload": { "mode": "hybrid" }
}
}
When hybrid reload does not apply a change, treat that as signal: either the field is in the cold-restart list for your patch level, or the daemon is reading a different config file than the editor session. Skills, rollback, and doctor documents how to merge openclaw doctor with status output so you catch that class of drift early.
OPENCLAW_GATEWAY_TOKEN and the loopback exposure boundary
Binding to loopback removes wide-area socket exposure; it does not remove the need for authenticated access. Set OPENCLAW_GATEWAY_TOKEN for local automation, health probes, and any reverse proxy that terminates in front of the gateway. When teammates reach the dashboard through SSH local forwarding, they inherit your machine’s trust boundary—document that the token is still a secret, rotate it with the same discipline as cloud API keys, and keep TLS and allowlists at the tunnel edge as in gateway security hardening.
2026.4.x notes (short, non-marketing)
Recent 2026.4.x gateway work tightens fail-closed behavior around auth and listener configuration: when validation cannot prove a safe combination, preferring “refuse to start” over “best effort open” reduces accidental anonymous exposure on shared Macs. Separately, if you install community plugins, watch peer dependency warnings during npm install—align plugin package versions with the gateway’s supported matrix so reload hooks do not throw module resolution errors mid-flight. Both topics deserve release-note detail; here we only flag them so your checklist includes validate + dependency pins.
Common errors FAQ
18789 already in use
Identify the listener with lsof -iTCP:18789 -sTCP:LISTEN. Stop duplicate gateways, stale tmux sessions, or lab instances. If you must collocate, change the bind port in configuration and update every tunnel URL and token scope consistently.
Ensure OPENCLAW_GATEWAY_TOKEN is present in the daemon environment, not only your SSH shell. After rotation, restart the service once if your version requires a cold pick-up of secrets, then re-test with the same headers your CI job uses.
Verify gateway.reload.mode, file path, and user. Run openclaw config validate when available. If the field requires restart on your semver, schedule a brief launchd bounce during a maintenance window on your hosted Mac.
Reproducible operations beat heroic SSH
When install, PATH, daemon, status, hybrid reload, and token policy are written down, remote teams stop guessing which user owns the running gateway. That is the operational payoff of MacPull-style dedicated Macs: always-on hardware where OpenClaw can hold sockets, caches, and validated config across reload cycles.
Next steps: read Help for access patterns, review pricing and purchase when you need capacity, return to the technical blog or MacPull home, and keep model auth open beside this page while you tune routing.
Host OpenClaw 7x24 on a Remote Mac
Pin 2026.4.x, keep hybrid reload and gateway tokens on a stable Apple Silicon footprint.