Gateway Runbook
Gateway runbook
Section titled “Gateway runbook”Use this page for day-1 startup and day-2 operations of the Gateway service.
Symptom-first diagnostics with exact command ladders and log signatures.
Task-oriented setup guide + full configuration reference.
SecretRef contract, runtime snapshot behavior, and migrate/reload operations.
Exact secrets apply target/path rules and ref-only auth-profile behavior.
5-minute local startup
Section titled “5-minute local startup”Start the Gateway
Terminal window openclaw gateway --port 18789# debug/trace mirrored to stdioopenclaw gateway --port 18789 --verbose# force-kill listener on selected port, then startopenclaw gateway --forceVerify service health
Terminal window openclaw gateway statusopenclaw statusopenclaw logs --followHealthy baseline:
Runtime: runningandRPC probe: ok.Validate channel readiness
Terminal window openclaw channels status --probeWith a reachable gateway this runs live per-account channel probes and optional audits. If the gateway is unreachable, the CLI falls back to config-only channel summaries instead of live probe output.
Runtime model
Section titled “Runtime model”- One always-on process for routing, control plane, and channel connections.
- Single multiplexed port for:
- WebSocket control/RPC
- HTTP APIs, OpenAI compatible (
/v1/models,/v1/embeddings,/v1/chat/completions,/v1/responses,/tools/invoke) - Control UI and hooks
- Default bind mode:
loopback. - Auth is required by default. Shared-secret setups use
gateway.auth.token/gateway.auth.password(orOPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD), and non-loopback reverse-proxy setups can usegateway.auth.mode: "trusted-proxy".
OpenAI-compatible endpoints
Section titled “OpenAI-compatible endpoints”OpenClaw’s highest-leverage compatibility surface is now:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completionsPOST /v1/responses
Why this set matters:
- Most Open WebUI, LobeChat, and LibreChat integrations probe
/v1/modelsfirst. - Many RAG and memory pipelines expect
/v1/embeddings. - Agent-native clients increasingly prefer
/v1/responses.
Planning note:
/v1/modelsis agent-first: it returnsopenclaw,openclaw/default, andopenclaw/<agentId>.openclaw/defaultis the stable alias that always maps to the configured default agent.- Use
x-openclaw-modelwhen you want a backend provider/model override; otherwise the selected agent’s normal model and embedding setup stays in control.
All of these run on the main Gateway port and use the same trusted operator auth boundary as the rest of the Gateway HTTP API.
Port and bind precedence
Section titled “Port and bind precedence”| Setting | Resolution order |
|---|---|
| Gateway port | --port → OPENCLAW_GATEWAY_PORT → gateway.port → 18789 |
| Bind mode | CLI/override → gateway.bind → loopback |
Hot reload modes
Section titled “Hot reload modes”gateway.reload.mode | Behavior |
|---|---|
off | No config reload |
hot | Apply only hot-safe changes |
restart | Restart on reload-required changes |
hybrid (default) | Hot-apply when safe, restart when required |
Operator command set
Section titled “Operator command set”openclaw gateway statusopenclaw gateway status --deep # adds a system-level service scanopenclaw gateway status --jsonopenclaw gateway installopenclaw gateway restartopenclaw gateway stopopenclaw secrets reloadopenclaw logs --followopenclaw doctorgateway status --deep is for extra service discovery (LaunchDaemons/systemd system
units/schtasks), not a deeper RPC health probe.
Multiple gateways (same host)
Section titled “Multiple gateways (same host)”Most installs should run one gateway per machine. A single gateway can host multiple agents and channels.
You only need multiple gateways when you intentionally want isolation or a rescue bot.
Useful checks:
openclaw gateway status --deepopenclaw gateway probeWhat to expect:
gateway status --deepcan reportOther gateway-like services detected (best effort)and print cleanup hints when stale launchd/systemd/schtasks installs are still around.gateway probecan warn aboutmultiple reachable gatewayswhen more than one target answers.- If that is intentional, isolate ports, config/state, and workspace roots per gateway.
Detailed setup: /gateway/multiple-gateways.
Remote access
Section titled “Remote access”Preferred: Tailscale/VPN. Fallback: SSH tunnel.
ssh -N -L 18789:127.0.0.1:18789 user@hostThen connect clients locally to ws://127.0.0.1:18789.
See: Remote Gateway, Authentication, Tailscale.
Supervision and service lifecycle
Section titled “Supervision and service lifecycle”Use supervised runs for production-like reliability.
openclaw gateway installopenclaw gateway statusopenclaw gateway restartopenclaw gateway stopLaunchAgent labels are ai.openclaw.gateway (default) or `ai.openclaw.
(named profile).openclaw doctor` audits and repairs service config drift.
openclaw gateway installsystemctl --user enable --now openclaw-gateway[-].service openclaw gateway status
For persistence after logout, enable lingering:
```bashsudo loginctl enable-lingerManual user-unit example when you need a custom install path:
```ini[Unit]Description=OpenClaw GatewayAfter=network-online.targetWants=network-online.target
[Service]ExecStart=/usr/local/bin/openclaw gateway --port 18789Restart=alwaysRestartSec=5TimeoutStopSec=30TimeoutStartSec=30SuccessExitStatus=0 143KillMode=control-group
[Install]WantedBy=default.targetopenclaw gateway installopenclaw gateway status --jsonopenclaw gateway restartopenclaw gateway stopNative Windows managed startup uses a Scheduled Task named OpenClaw Gateway
(or `OpenClaw Gateway (
)for named profiles). If Scheduled Task creation is denied, OpenClaw falls back to a per-user Startup-folder launcher that points atgateway.cmd` inside the state directory.
Use a system unit for multi-user/always-on hosts.
sudo systemctl daemon-reloadsudo systemctl enable --now openclaw-gateway[-].service
Use the same service body as the user unit, but install it under`/etc/systemd/system/openclaw-gateway[-].serviceand adjustExecStart=if youropenclaw` binary lives elsewhere.
Multiple gateways on one host
Section titled “Multiple gateways on one host”Most setups should run one Gateway. Use multiple only for strict isolation/redundancy (for example a rescue profile).
Checklist per instance:
- Unique
gateway.port - Unique
OPENCLAW_CONFIG_PATH - Unique
OPENCLAW_STATE_DIR - Unique
agents.defaults.workspace
Example:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json OPENCLAW_STATE_DIR=~/.openclaw-a openclaw gateway --port 19001OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b openclaw gateway --port 19002See: Multiple gateways.
Dev profile quick path
Section titled “Dev profile quick path”openclaw --dev setupopenclaw --dev gateway --allow-unconfiguredopenclaw --dev statusDefaults include isolated state/config and base gateway port 19001.
Protocol quick reference (operator view)
Section titled “Protocol quick reference (operator view)”- First client frame must be
connect. - Gateway returns
hello-oksnapshot (presence,health,stateVersion,uptimeMs, limits/policy). hello-ok.features.methods/eventsare a conservative discovery list, not a generated dump of every callable helper route.- Requests:
req(method, params)→res(ok/payload|error). - Common events include
connect.challenge,agent,chat,session.message,session.tool,sessions.changed,presence,tick,health,heartbeat, pairing/approval lifecycle events, andshutdown.
Agent runs are two-stage:
- Immediate accepted ack (
status:"accepted") - Final completion response (
status:"ok"|"error"), with streamedagentevents in between.
See full protocol docs: Gateway Protocol.
Operational checks
Section titled “Operational checks”Liveness
Section titled “Liveness”- Open WS and send
connect. - Expect
hello-okresponse with snapshot.
Readiness
Section titled “Readiness”openclaw gateway statusopenclaw channels status --probeopenclaw healthGap recovery
Section titled “Gap recovery”Events are not replayed. On sequence gaps, refresh state (health, system-presence) before continuing.
Common failure signatures
Section titled “Common failure signatures”| Signature | Likely issue |
|---|---|
refusing to bind gateway ... without auth | Non-loopback bind without a valid gateway auth path |
another gateway instance is already listening / EADDRINUSE | Port conflict |
Gateway start blocked: set gateway.mode=local | Config set to remote mode, or local-mode stamp is missing from a damaged config |
unauthorized during connect | Auth mismatch between client and gateway |
For full diagnosis ladders, use Gateway Troubleshooting.
Safety guarantees
Section titled “Safety guarantees”- Gateway protocol clients fail fast when Gateway is unavailable (no implicit direct-channel fallback).
- Invalid/non-connect first frames are rejected and closed.
- Graceful shutdown emits
shutdownevent before socket close.
Related: