23 KiB
summary, read_when, title, sidebarTitle
| summary | read_when | title | sidebarTitle | |||
|---|---|---|---|---|---|---|
| OpenClaw Gateway CLI (`openclaw gateway`) — run, query, and discover gateways |
|
Gateway | Gateway |
The Gateway is OpenClaw's WebSocket server (channels, nodes, sessions, hooks). Subcommands in this page live under openclaw gateway ….
Run the Gateway
Run a local Gateway process:
openclaw gateway
Foreground alias:
openclaw gateway run
Options
WebSocket port (default comes from config/env; usually `18789`). Listener bind mode. Auth mode override. Token override (also sets `OPENCLAW_GATEWAY_TOKEN` for the process). Password override. Read the gateway password from a file. Expose the Gateway via Tailscale. Reset Tailscale serve/funnel config on shutdown. Allow gateway start without `gateway.mode=local` in config. Bypasses the startup guard for ad-hoc/dev bootstrap only; does not write or repair the config file. Create a dev config + workspace if missing (skips BOOTSTRAP.md). Reset dev config + credentials + sessions + workspace (requires `--dev`). Kill any existing listener on the selected port before starting. Verbose logs. Only show CLI backend logs in the console (and enable stdout/stderr). Websocket log style. Alias for `--ws-log compact`. Log raw model stream events to jsonl. Raw stream jsonl path. Inline `--password` can be exposed in local process listings. Prefer `--password-file`, env, or a SecretRef-backed `gateway.auth.password`.Startup profiling
- Set
OPENCLAW_GATEWAY_STARTUP_TRACE=1to log phase timings during Gateway startup, including per-phaseeventLoopMaxdelay and plugin lookup-table timings for installed-index, manifest registry, startup planning, and owner-map work. - Run
pnpm test:startup:gateway -- --runs 5 --warmup 1to benchmark Gateway startup. The benchmark records first process output,/healthz,/readyz, startup trace timings, event-loop delay, and plugin lookup-table timing details.
Query a running Gateway
All query commands use WebSocket RPC.
- 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. - `--url `: Gateway WebSocket URL. - `--token `: Gateway token. - `--password `: Gateway password. - `--timeout `: timeout/budget (varies per command). - `--expect-final`: wait for a "final" response (agent calls). 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.gateway health
openclaw gateway health --url ws://127.0.0.1:18789
The HTTP /healthz endpoint is a liveness probe: it returns once the server can answer HTTP. The HTTP /readyz endpoint is stricter and stays red while startup sidecars, channels, or configured hooks are still settling. Local or authenticated detailed readiness responses include an eventLoop diagnostic block with event-loop delay, event-loop utilization, CPU core ratio, and a degraded flag.
gateway usage-cost
Fetch usage-cost summaries from session logs.
openclaw gateway usage-cost
openclaw gateway usage-cost --days 7
openclaw gateway usage-cost --json
gateway stability
Fetch the recent diagnostic stability recorder from a running Gateway.
openclaw gateway stability
openclaw gateway stability --type payload.large
openclaw gateway stability --bundle latest
openclaw gateway stability --bundle latest --export
openclaw gateway stability --json
gateway diagnostics export
Write a local diagnostics zip that is designed to attach to bug reports. For the privacy model and bundle contents, see Diagnostics Export.
openclaw gateway diagnostics export
openclaw gateway diagnostics export --output openclaw-diagnostics.zip
openclaw gateway diagnostics export --json
The export contains a manifest, a Markdown summary, config shape, sanitized config details, sanitized log summaries, sanitized Gateway status/health snapshots, and the newest stability bundle when one exists.
It is meant to be shared. It keeps operational details that help debugging, such as safe OpenClaw log fields, subsystem names, status codes, durations, configured modes, ports, plugin ids, provider ids, non-secret feature settings, and redacted operational log messages. It omits or redacts chat text, webhook bodies, tool outputs, credentials, cookies, account/message identifiers, prompt/instruction text, hostnames, and secret values. When a LogTape-style message looks like user/chat/tool payload text, the export keeps only that a message was omitted plus its byte count.
gateway status
gateway status shows the Gateway service (launchd/systemd/schtasks) plus an optional probe of connectivity/auth capability.
openclaw gateway status
openclaw gateway status --json
openclaw gateway status --require-rpc
gateway probe
gateway probe is the "debug everything" command. It always probes:
- your configured remote gateway (if set), and
- localhost (loopback) even if remote is configured.
If you pass --url, that explicit target is added ahead of both. Human output labels the targets as:
URL (explicit)Remote (configured)orRemote (configured, inactive)Local loopback
openclaw gateway probe
openclaw gateway probe --json
- `ok`: at least one target is reachable.
- `degraded`: at least one target had scope-limited detail RPC.
- `capability`: best capability seen across reachable targets (`read_only`, `write_capable`, `admin_capable`, `pairing_pending`, `connected_no_operator_scope`, or `unknown`).
- `primaryTargetId`: best target to treat as the active winner in this order: explicit URL, SSH tunnel, configured remote, then local loopback.
- `warnings[]`: best-effort warning records with `code`, `message`, and optional `targetIds`.
- `network`: local loopback/tailnet URL hints derived from current config and host networking.
- `discovery.timeoutMs` and `discovery.count`: the actual discovery budget/result count used for this probe pass.
Per target (`targets[].connect`):
- `ok`: reachability after connect + degraded classification.
- `rpcOk`: full detail RPC success.
- `scopeLimited`: detail RPC failed due to missing operator scope.
Per target (`targets[].auth`):
- `role`: auth role reported in `hello-ok` when available.
- `scopes`: granted scopes reported in `hello-ok` when available.
- `capability`: the surfaced auth capability classification for that target.
- `ssh_tunnel_failed`: SSH tunnel setup failed; the command fell back to direct probes.
- `multiple_gateways`: more than one target was reachable; this is unusual unless you intentionally run isolated profiles, such as a rescue bot.
- `auth_secretref_unresolved`: a configured auth SecretRef could not be resolved for a failed target.
- `probe_scope_limited`: WebSocket connect succeeded, but the read probe was limited by missing `operator.read`.
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:
openclaw gateway probe --ssh user@gateway-host
Config (optional, used as defaults):
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
Low-level RPC helper.
openclaw gateway call status
openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
Manage the Gateway service
openclaw gateway install
openclaw gateway start
openclaw gateway stop
openclaw gateway restart
openclaw gateway uninstall
Install with a wrapper
Use --wrapper when the managed service must start through another executable, for example a
secrets manager shim or a run-as helper. The wrapper receives the normal Gateway args and is
responsible for eventually exec'ing openclaw or Node with those args.
cat > ~/.local/bin/openclaw-doppler <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
exec doppler run --project my-project --config production -- openclaw "$@"
EOF
chmod +x ~/.local/bin/openclaw-doppler
openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --force
openclaw gateway restart
You can also set the wrapper through the environment. gateway install validates that the path is
an executable file, writes the wrapper into service ProgramArguments, and persists
OPENCLAW_WRAPPER in the service environment for later forced reinstalls, updates, and doctor
repairs.
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --force
openclaw doctor
To remove a persisted wrapper, clear OPENCLAW_WRAPPER while reinstalling:
OPENCLAW_WRAPPER= openclaw gateway install --force
openclaw gateway restart
Discover gateways (Bonjour)
gateway discover scans for Gateway beacons (_openclaw-gw._tcp).
- Multicast DNS-SD:
local. - Unicast DNS-SD (Wide-Area Bonjour): choose a domain (example:
openclaw.internal.) and set up split DNS + a DNS server; see Bonjour.
Only gateways with Bonjour discovery enabled (default) advertise the beacon.
Wide-Area discovery records include (TXT):
role(gateway role hint)transport(transport hint, e.g.gateway)gatewayPort(WebSocket port, usually18789)sshPort(optional; clients default SSH targets to22when it is absent)tailnetDns(MagicDNS hostname, when available)gatewayTls/gatewayTlsSha256(TLS enabled + cert fingerprint)cliPath(remote-install hint written to the wide-area zone)
gateway discover
openclaw gateway discover
Examples:
openclaw gateway discover --timeout 4000
openclaw gateway discover --json | jq '.beacons[].wsUrl'