2026-01-09 07:51:27 +01:00
---
2026-01-30 03:15:10 +01:00
summary: "OpenClaw Gateway CLI (`openclaw gateway` ) — run, query, and discover gateways"
2026-01-09 07:51:27 +01:00
read_when:
- Running the Gateway from the CLI (dev or servers)
- Debugging Gateway auth, bind modes, and connectivity
- Discovering gateways via Bonjour (LAN + tailnet)
2026-01-31 16:04:03 -05:00
title: "gateway"
2026-01-09 07:51:27 +01:00
---
# Gateway CLI
2026-01-30 03:15:10 +01:00
The Gateway is OpenClaw’ s WebSocket server (channels, nodes, sessions, hooks).
2026-01-09 07:51:27 +01:00
2026-01-30 03:15:10 +01:00
Subcommands in this page live under `openclaw gateway …` .
2026-01-09 07:51:27 +01:00
Related docs:
2026-01-31 21:13:13 +09:00
2026-01-09 07:51:27 +01:00
- [/gateway/bonjour ](/gateway/bonjour )
- [/gateway/discovery ](/gateway/discovery )
- [/gateway/configuration ](/gateway/configuration )
## Run the Gateway
Run a local Gateway process:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway
2026-01-09 07:51:27 +01:00
```
2026-01-21 17:45:12 +00:00
Foreground alias:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway run
2026-01-21 17:45:12 +00:00
```
2026-01-09 07:51:27 +01:00
Notes:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- By default, the Gateway refuses to start unless `gateway.mode=local` is set in `~/.openclaw/openclaw.json` . Use `--allow-unconfigured` for ad-hoc/dev runs.
2026-01-09 07:51:27 +01:00
- Binding beyond loopback without auth is blocked (safety guardrail).
2026-02-19 10:00:27 +01:00
- `SIGUSR1` triggers an in-process restart when authorized (`commands.restart` is enabled by default; set `commands.restart: false` to block manual restart, while gateway tool/config apply/update remain allowed).
2026-01-17 17:16:20 +00:00
- `SIGINT` /`SIGTERM` handlers stop the gateway process, but they don’ t restore any custom terminal state. If you wrap the CLI with a TUI or raw-mode input, restore the terminal before exit.
2026-01-09 07:51:27 +01:00
### Options
- `--port <port>` : WebSocket port (default comes from config/env; usually `18789` ).
2026-01-21 20:35:39 +00:00
- `--bind <loopback|lan|tailnet|auto|custom>` : listener bind mode.
2026-01-09 07:51:27 +01:00
- `--auth <token|password>` : auth mode override.
2026-01-30 03:15:10 +01:00
- `--token <token>` : token override (also sets `OPENCLAW_GATEWAY_TOKEN` for the process).
- `--password <password>` : password override (also sets `OPENCLAW_GATEWAY_PASSWORD` for the process).
2026-01-09 07:51:27 +01:00
- `--tailscale <off|serve|funnel>` : expose the Gateway via Tailscale.
- `--tailscale-reset-on-exit` : reset Tailscale serve/funnel config on shutdown.
2026-01-11 02:24:35 +00:00
- `--allow-unconfigured` : allow gateway start without `gateway.mode=local` in config.
2026-01-09 10:39:00 +01:00
- `--dev` : create a dev config + workspace if missing (skips BOOTSTRAP.md).
2026-01-09 15:11:32 +01:00
- `--reset` : reset dev config + credentials + sessions + workspace (requires `--dev` ).
2026-01-09 07:51:27 +01:00
- `--force` : kill any existing listener on the selected port before starting.
- `--verbose` : verbose logs.
- `--claude-cli-logs` : only show claude-cli logs in the console (and enable its stdout/stderr).
- `--ws-log <auto|full|compact>` : websocket log style (default `auto` ).
- `--compact` : alias for `--ws-log compact` .
- `--raw-stream` : log raw model stream events to jsonl.
- `--raw-stream-path <path>` : raw stream jsonl path.
## Query a running Gateway
All query commands use WebSocket RPC.
2026-01-09 09:27:27 +01:00
Output modes:
2026-01-31 21:13:13 +09:00
2026-01-09 09:27:27 +01:00
- Default: human-readable (colored in TTY).
- `--json` : machine-readable JSON (no styling/spinner).
- `--no-color` (or `NO_COLOR=1` ): disable ANSI while keeping human layout.
Shared options (where supported):
2026-01-31 21:13:13 +09:00
2026-01-09 09:27:27 +01:00
- `--url <url>` : Gateway WebSocket URL.
- `--token <token>` : Gateway token.
- `--password <password>` : Gateway password.
- `--timeout <ms>` : timeout/budget (varies per command).
2026-01-09 07:51:27 +01:00
- `--expect-final` : wait for a “final” response (agent calls).
2026-02-04 18:59:44 -05:00
Note: when you set `--url` , the CLI does not fall back to config or environment credentials.
Pass `--token` or `--password` explicitly. Missing explicit credentials is an error.
2026-01-09 07:51:27 +01:00
### `gateway health`
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway health --url ws://127.0.0.1:18789
2026-01-09 07:51:27 +01:00
```
### `gateway status`
2026-01-21 17:45:12 +00:00
`gateway status` shows the Gateway service (launchd/systemd/schtasks) plus an optional RPC probe.
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway status
openclaw gateway status --json
2026-01-21 17:45:12 +00:00
```
Options:
2026-01-31 21:13:13 +09:00
2026-01-21 17:45:12 +00:00
- `--url <url>` : override the probe URL.
- `--token <token>` : token auth for the probe.
- `--password <password>` : password auth for the probe.
- `--timeout <ms>` : probe timeout (default `10000` ).
- `--no-probe` : skip the RPC probe (service-only view).
- `--deep` : scan system-level services too.
### `gateway probe`
`gateway probe` is the “debug everything” command. It always probes:
2026-01-31 21:13:13 +09:00
2026-01-09 09:27:27 +01:00
- your configured remote gateway (if set), and
- localhost (loopback) **even if remote is configured** .
2026-01-15 18:08:20 +01:00
If multiple gateways are reachable, it prints all of them. Multiple gateways are supported when you use isolated profiles/ports (e.g., a rescue bot), but most installs still run a single gateway.
2026-01-09 09:27:27 +01:00
2026-01-09 07:51:27 +01:00
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway probe
openclaw gateway probe --json
2026-01-09 07:51:27 +01:00
```
2026-01-09 10:39:00 +01:00
#### Remote over SSH (Mac app parity)
The macOS app “Remote over SSH” mode uses a local port-forward so the remote gateway (which may be bound to loopback only) becomes reachable at `ws://127.0.0.1:<port>` .
CLI equivalent:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway probe --ssh user@gateway -host
2026-01-09 10:39:00 +01:00
```
Options:
2026-01-31 21:13:13 +09:00
2026-01-09 10:39:00 +01:00
- `--ssh <target>` : `user@host` or `user@host:port` (port defaults to `22` ).
- `--ssh-identity <path>` : identity file.
2026-01-22 23:07:58 +00:00
- `--ssh-auto` : pick the first discovered gateway host as SSH target (LAN/WAB only).
2026-01-09 10:39:00 +01:00
Config (optional, used as defaults):
2026-01-31 21:13:13 +09:00
2026-01-09 10:39:00 +01:00
- `gateway.remote.sshTarget`
- `gateway.remote.sshIdentity`
2026-01-09 07:51:27 +01:00
### `gateway call <method>`
Low-level RPC helper.
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway call status
openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
2026-01-09 07:51:27 +01:00
```
2026-01-21 17:45:12 +00:00
## Manage the Gateway service
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway install
openclaw gateway start
openclaw gateway stop
openclaw gateway restart
openclaw gateway uninstall
2026-01-21 17:45:12 +00:00
```
Notes:
2026-01-31 21:13:13 +09:00
2026-01-21 17:45:12 +00:00
- `gateway install` supports `--port` , `--runtime` , `--token` , `--force` , `--json` .
- Lifecycle commands accept `--json` for scripting.
2026-01-09 07:51:27 +01:00
## Discover gateways (Bonjour)
2026-01-30 03:15:10 +01:00
`gateway discover` scans for Gateway beacons (`_openclaw-gw._tcp` ).
2026-01-09 07:51:27 +01:00
- Multicast DNS-SD: `local.`
2026-01-30 03:15:10 +01:00
- Unicast DNS-SD (Wide-Area Bonjour): choose a domain (example: `openclaw.internal.` ) and set up split DNS + a DNS server; see [/gateway/bonjour ](/gateway/bonjour )
2026-01-09 07:51:27 +01:00
2026-01-20 10:29:13 +00:00
Only gateways with Bonjour discovery enabled (default) advertise the beacon.
2026-01-09 07:51:27 +01:00
2026-01-09 13:45:25 +01:00
Wide-Area discovery records include (TXT):
2026-01-31 21:13:13 +09:00
2026-01-20 12:20:20 +00:00
- `role` (gateway role hint)
- `transport` (transport hint, e.g. `gateway` )
2026-01-09 13:45:25 +01:00
- `gatewayPort` (WebSocket port, usually `18789` )
- `sshPort` (SSH port; defaults to `22` if not present)
- `tailnetDns` (MagicDNS hostname, when available)
2026-01-20 10:29:13 +00:00
- `gatewayTls` / `gatewayTlsSha256` (TLS enabled + cert fingerprint)
2026-01-09 13:45:25 +01:00
- `cliPath` (optional hint for remote installs)
2026-01-09 07:51:27 +01:00
### `gateway discover`
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway discover
2026-01-09 07:51:27 +01:00
```
Options:
2026-01-31 21:13:13 +09:00
2026-01-09 07:51:27 +01:00
- `--timeout <ms>` : per-command timeout (browse/resolve); default `2000` .
- `--json` : machine-readable output (also disables styling/spinner).
Examples:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway discover --timeout 4000
openclaw gateway discover --json | jq '.beacons[].wsUrl'
2026-01-09 07:51:27 +01:00
```