Gateway service runbook¶
Huling na-update: 2025-12-09
Ano ito¶
- Ang laging tumatakbong proseso na may-ari ng iisang koneksyon ng Baileys/Telegram at ng control/event plane.
-
- Pinapalitan ang legacy na
gatewaycommand. 6. CLI entry point:openclaw gateway.
- Pinapalitan ang legacy na
- Tumatakbo hanggang ihinto; lalabas na non-zero sa mga fatal error para i-restart ito ng supervisor.
Paano patakbuhin (local)¶
openclaw gateway --port 18789
# for full debug/trace logs in stdio:
openclaw gateway --port 18789 --verbose
# if the port is busy, terminate listeners then start:
openclaw gateway --force
# dev loop (auto-reload on TS changes):
pnpm gateway:watch
- Ang config hot reload ay nagmo-monitor ng
~/.openclaw/openclaw.json(oOPENCLAW_CONFIG_PATH). - Default na mode:
gateway.reload.mode="hybrid"(hot-apply ng mga ligtas na pagbabago, restart kapag kritikal). - Gumagamit ang hot reload ng in-process restart via SIGUSR1 kapag kailangan.
- I-disable gamit ang
gateway.reload.mode="off". - Ibinabind ang WebSocket control plane sa
127.0.0.1:<port>(default 18789). -
- Ang parehong port ay naghahatid din ng HTTP (control UI, hooks, A2UI). 8. Single-port multiplex.
- OpenAI Chat Completions (HTTP):
/v1/chat/completions. - OpenResponses (HTTP):
/v1/responses. - Tools Invoke (HTTP):
/tools/invoke. -
- Nagsisimula ng Canvas file server bilang default sa
canvasHost.port(default18793), na naghahain nghttp://<gateway-host>:18793/__openclaw__/canvas/mula sa~/.openclaw/workspace/canvas. 10. I-disable gamit angcanvasHost.enabled=falseoOPENCLAW_SKIP_CANVAS_HOST=1.
- Nagsisimula ng Canvas file server bilang default sa
- Nagla-log sa stdout; gamitin ang launchd/systemd para panatilihing buhay at i-rotate ang mga log.
- I-pass ang
--verbosepara i-mirror ang debug logging (handshakes, req/res, events) mula sa log file papunta sa stdio kapag nagti-troubleshoot. - Gumagamit ang
--forcenglsofpara hanapin ang mga listener sa napiling port, nagpapadala ng SIGTERM, nagla-log kung ano ang pinatay, pagkatapos ay sinisimulan ang gateway (mabilis na bumibigo kung wala anglsof). - Kung tumatakbo sa ilalim ng supervisor (launchd/systemd/mac app child-process mode), ang stop/restart ay karaniwang nagpapadala ng SIGTERM; ang mga mas lumang build ay maaaring ipakita ito bilang
pnpmELIFECYCLEexit code 143 (SIGTERM), na isang normal na shutdown, hindi crash. - Ang SIGUSR1 ay nagti-trigger ng in-process restart kapag awtorisado (gateway tool/config apply/update, o i-enable ang
commands.restartpara sa manual restarts). -
- Kinakailangan ang Gateway auth bilang default: itakda ang
gateway.auth.token(oOPENCLAW_GATEWAY_TOKEN) ogateway.auth.password. 12. Kailangang magpadala ang mga client ngconnect.params.auth.token/passwordmaliban kung gumagamit ng Tailscale Serve identity.
- Kinakailangan ang Gateway auth bilang default: itakda ang
- Ang wizard ay gumagawa na ngayon ng token bilang default, kahit sa loopback.
- Port precedence:
--port>OPENCLAW_GATEWAY_PORT>gateway.port> default18789.
Remote access¶
- Mas mainam ang Tailscale/VPN; kung hindi, SSH tunnel:
bash
ssh -N -L 18789:127.0.0.1:18789 user@host
-
Pagkatapos, kumokonekta ang mga client sa
ws://127.0.0.1:18789sa pamamagitan ng tunnel. -
Kung may naka-configure na token, dapat isama ito ng mga client sa
connect.params.auth.tokenkahit sa pamamagitan ng tunnel.
Maramihang gateway (iisang host)¶
-
Karaniwang hindi kailangan: maaaring magsilbi ang isang Gateway ng maraming messaging channels at agents. 14. Gumamit lamang ng maraming Gateways para sa redundancy o mahigpit na isolation (hal: rescue bot).
-
Sinusuportahan kung ihiwalay mo ang state + config at gumamit ng natatanging mga port. macOS: `bot.molt.
Ang mga pangalan ng serbisyo ay profile-aware:
-
- macOS:
bot.molt.<profile>17.(maaaring umiiral pa rin ang legacycom.openclaw.*)
- macOS:
- Linux:
openclaw-gateway-<profile>.service - Windows:
OpenClaw Gateway (<profile>)
Ang install metadata ay naka-embed sa service config:
OPENCLAW_SERVICE_MARKER=openclawOPENCLAW_SERVICE_KIND=gatewayOPENCLAW_SERVICE_VERSION=<version>
- Rescue-Bot Pattern: panatilihing hiwalay ang ikalawang Gateway na may sariling profile, state dir, workspace, at base port spacing. 19. Buong gabay: Rescue-bot guide.
Dev profile (--dev)¶
Mabilis na ruta: patakbuhin ang ganap na hiwalay na dev instance (config/state/workspace) nang hindi naaapektuhan ang iyong primary setup.
openclaw --dev setup
openclaw --dev gateway --allow-unconfigured
# then target the dev instance:
openclaw --dev status
openclaw --dev health
Mga default (maaaring i-override via env/flags/config):
OPENCLAW_STATE_DIR=~/.openclaw-devOPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.jsonOPENCLAW_GATEWAY_PORT=19001(Gateway WS + HTTP)- browser control service port =
19003(derived:gateway.port+2, loopback lang) canvasHost.port=19005(derived:gateway.port+4)- Ang default na
agents.defaults.workspaceay nagiging~/.openclaw/workspace-devkapag pinatakbo mo angsetup/onboardsa ilalim ng--dev.
Derived ports (mga panuntunang pangkalahatan):
- Base port =
gateway.port(oOPENCLAW_GATEWAY_PORT/--port) - browser control service port = base + 2 (loopback lang)
canvasHost.port = base + 4(oOPENCLAW_CANVAS_HOST_PORT/ config override)-
- Ang mga Browser profile CDP port ay awtomatikong ina-allocate mula sa
browser.controlPort + 9 .. 21. + 108(naka-persist bawat profile).
- Ang mga Browser profile CDP port ay awtomatikong ina-allocate mula sa
Checklist kada instance:
- natatanging
gateway.port - natatanging
OPENCLAW_CONFIG_PATH - natatanging
OPENCLAW_STATE_DIR - natatanging
agents.defaults.workspace - hiwalay na mga numero ng WhatsApp (kung gumagamit ng WA)
Service install kada profile:
openclaw --profile main gateway install
openclaw --profile rescue gateway install
Halimbawa:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json OPENCLAW_STATE_DIR=~/.openclaw-a openclaw gateway --port 19001
OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b openclaw gateway --port 19002
Protocol (pananaw ng operator)¶
- Buong docs: Gateway protocol at Bridge protocol (legacy).
-
- Mandatoryong unang frame mula sa client:
req {type:"req", id, method:"connect", params:{minProtocol,maxProtocol,client:{id,displayName?,version,platform,deviceFamily?,modelIdentifier?,mode,instanceId?}, caps, auth?, locale?, userAgent? 23. } }.
- Mandatoryong unang frame mula sa client:
- Sumasagot ang Gateway ng
res {type:"res", id, ok:true, payload:hello-ok }(ook:falsena may error, pagkatapos ay magsasara). - Pagkatapos ng handshake:
- Mga request:
{type:"req", id, method, params}→{type:"res", id, ok, payload|error} - Mga event:
{type:"event", event, payload, seq?, stateVersion?} - }
(para sa WS clients, anginstanceIday galing saconnect.client.instanceId).shutdown— lalabas ang Gateway; kasama sa payload angreasonat opsyonal narestartExpectedMs`. - Ang mga
agentna response ay two-stage: una angresack{runId,status:"accepted"}, pagkatapos ay ang final nares{runId,status:"ok"|"error",summary}matapos matapos ang run; dumarating ang streamed output bilangevent:"agent".
Mga method (paunang set)¶
health— buong health snapshot (kaparehong hugis ngopenclaw health --json).status— maikling buod.system-presence— kasalukuyang listahan ng presence.system-event— mag-post ng presence/system note (structured).send— magpadala ng mensahe sa pamamagitan ng aktibong channel(s).agent— magpatakbo ng agent turn (nag-i-stream ng mga event pabalik sa parehong koneksyon).node.list— ilista ang paired + kasalukuyang nakakonektang mga node (kasama angcaps,deviceFamily,modelIdentifier,paired,connected, at ina-advertise nacommands).node.describe— ilarawan ang isang node (capabilities + sinusuportahangnode.invokecommands; gumagana para sa mga paired node at para sa kasalukuyang nakakonektang unpaired node).node.invoke— i-invoke ang isang command sa isang node (hal.canvas.*,camera.*).node.pair.*— lifecycle ng pairing (request,list,approve,reject,verify).
Tingnan din: Presence para sa kung paano ginagawa/dinededup ang presence at kung bakit mahalaga ang isang stable na client.instanceId.
Mga event¶
agent— mga streamed tool/output event mula sa agent run (may seq-tag).presence— mga update sa presence (mga delta na may stateVersion) na itinutulak sa lahat ng nakakonektang client.tick— periodic keepalive/no-op para kumpirmahin ang pagiging buhay.- Dapat muling kumonek ang mga client. Gumagamit ang mga error ng `{ code, message, details?, retryable?, retryAfterMs?
WebChat integration¶
- Ang WebChat ay isang native na SwiftUI UI na direktang nakikipag-usap sa Gateway WebSocket para sa history, sends, abort, at mga event.
- Ang remote na paggamit ay dumadaan sa parehong SSH/Tailscale tunnel; kung may naka-configure na gateway token, isinasama ito ng client sa panahon ng
connect. - Ang macOS app ay kumokonekta sa iisang WS (shared connection); hini-hydrate nito ang presence mula sa initial snapshot at nakikinig sa mga
presenceevent para i-update ang UI.
Typing at validation¶
- Vine-validate ng server ang bawat inbound frame gamit ang AJV laban sa JSON Schema na inilalabas mula sa mga protocol definition.
- Ang mga client (TS/Swift) ay kumokonsumo ng mga generated type (TS direkta; Swift via generator ng repo).
- Ang mga protocol definition ang source of truth; i-regenerate ang schema/models gamit ang:
pnpm protocol:genpnpm protocol:gen:swift
Connection snapshot¶
- Ang
hello-okay may kasamangsnapshotna maypresence,health,stateVersion, atuptimeMskasama angpolicy {maxPayload,maxBufferedBytes,tickIntervalMs}para makapag-render agad ang mga client nang walang dagdag na request. - Ang
health/system-presenceay nananatiling available para sa manual refresh, ngunit hindi kailangan sa oras ng connect.
Mga error code (res.error shape)¶
-
- Gumagamit ang mga error ng `{ code, message, details?, retryable?, retryAfterMs? Hindi nire-replay ang mga event.
- Mga standard na code:
NOT_LINKED— hindi authenticated ang WhatsApp.AGENT_TIMEOUT— hindi tumugon ang agent sa loob ng naka-configure na deadline.INVALID_REQUEST— nabigo ang schema/param validation.UNAVAILABLE— nagsa-shutdown ang Gateway o hindi available ang isang dependency.
Keepalive behavior¶
- Ang mga
tickevent (o WS ping/pong) ay inilalabas nang pana-panahon para malaman ng mga client na buhay ang Gateway kahit walang trapiko. - Ang mga send/agent acknowledgement ay hiwalay na mga response; huwag i-overload ang ticks para sa sends.
Replay / gaps¶
-
- }
. 26. Ang mga event ay hindi nire-replay.openclaw gateway installay nagsusulat ng~/Library/LaunchAgents/bot.molt.gateway.plist(obot.molt.
- }
Supervision (halimbawa sa macOS)¶
- Gamitin ang launchd para panatilihing buhay ang serbisyo:
- Program: path patungo sa
openclaw - Arguments:
gateway - KeepAlive: true
- StandardOut/Err: mga path ng file o
syslog - Sa failure, nire-restart ng launchd; ang fatal na misconfig ay dapat magpatuloy sa pag-exit para mapansin ng operator.
- Ang LaunchAgents ay per-user at nangangailangan ng naka-log in na session; para sa headless setups gumamit ng custom LaunchDaemon (hindi shipped).
-
- Nakikita ng mga client ang mga seq gap at dapat mag-refresh (
health+system-presence) bago magpatuloy.28.openclaw gateway installay nagsusulat ng~/Library/LaunchAgents/bot.molt.gateway.plist(o `bot.molt.
- Nakikita ng mga client ang mga seq gap at dapat mag-refresh (
- Ang
openclaw doctoray nag-audit ng LaunchAgent config at maaaring i-update ito sa kasalukuyang mga default.
Pamamahala ng Gateway service (CLI)¶
Gamitin ang Gateway CLI para sa install/start/stop/restart/status:
openclaw gateway status
openclaw gateway install
openclaw gateway stop
openclaw gateway restart
openclaw logs --follow
Mga tala:
- Ang
gateway statusay nagpo-probe ng Gateway RPC bilang default gamit ang resolved port/config ng serbisyo (i-override gamit ang--url). - Ang
gateway status --deepay nagdadagdag ng system-level scans (LaunchDaemons/system units). - Ang
gateway status --no-probeay nilalaktawan ang RPC probe (kapaki-pakinabang kapag down ang networking). - Ang
gateway status --jsonay stable para sa mga script. - Ang
gateway statusay nag-uulat ng supervisor runtime (tumatakbo ang launchd/systemd) nang hiwalay sa RPC reachability (WS connect + status RPC). - Ang
gateway statusay nagpi-print ng config path + probe target para maiwasan ang kalituhan ng “localhost vs LAN bind” at profile mismatches. - Ang
gateway statusay nagsasama ng huling gateway error line kapag mukhang tumatakbo ang serbisyo ngunit sarado ang port. - Ang
logsay nagta-tail ng Gateway file log via RPC (hindi na kailangan ang manual natail/grep). - Inirerekomenda pa rin namin ang isang gateway bawat makina para sa karamihan ng setup; gumamit ng hiwalay na mga profile/port para sa redundancy o rescue bot.
Tingnan ang Multiple gateways. 29. .plist
; nililinis ang legacycom.openclaw.*`). - Cleanup:
openclaw gateway uninstall(kasalukuyang serbisyo) atopenclaw doctor(legacy migrations). - Ang
gateway installay no-op kapag naka-install na; gamitin angopenclaw gateway install --forcepara mag-reinstall (mga pagbabago sa profile/env/path).
Bundled mac app:
; ang mga legacycom.openclaw.*` label ay maayos pa ring na-a-unload).30. Tingnan ang Multiple gateways.- Para ihinto nang maayos, gamitin ang
openclaw gateway stop(olaunchctl bootout gui/$UID/bot.molt.gateway). - Para mag-restart, gamitin ang
openclaw gateway restart(olaunchctl kickstart -k gui/$UID/bot.molt.gateway). - Ang
launchctlay gumagana lamang kung naka-install ang LaunchAgent; kung hindi, gamitin muna angopenclaw gateway install. kapag nagpapatakbo ng named profile.31.; ang mga legacycom.openclaw.*label ay maayos pa ring na-u-unload).
Supervision (systemd user unit)¶
Inirerekomenda namin ang mga user service para sa single-user na mga makina (mas simple ang env, per-user config). Gumamit ng system service para sa multi-user o always-on na mga server (hindi kailangan ng lingering, shared supervision).
openclaw gateway install ay nagsusulat ng user unit.
Ina-audit ng openclaw doctor ang unit at maaaring i-update ito upang tumugma sa kasalukuyang inirerekomendang default. Pinapatakbo ito ng onboarding sa Linux/WSL2 (maaaring humingi ng sudo; nagsusulat ng /var/lib/systemd/linger).
Gumawa ng ~/.config/systemd/user/openclaw-gateway[-<profile>].service:
[Unit]
Description=OpenClaw Gateway (profile: <profile>, v<version>)
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/openclaw gateway --port 18789
Restart=always
RestartSec=5
Environment=OPENCLAW_GATEWAY_TOKEN=
WorkingDirectory=/home/youruser
[Install]
WantedBy=default.target
I-enable ang lingering (kailangan para mabuhay ang user service kahit mag-logout/idle):
sudo loginctl enable-linger youruser
- ` kapag nagpapatakbo ng isang pinangalanang profile. Alternatibo (system service) - para sa always-on o multi-user na mga server, maaari kang mag-install ng systemd system unit sa halip na user unit (hindi kailangan ng lingering).
systemctl --user enable --now openclaw-gateway[-<profile>].service
Gumawa ng /etc/systemd/system/openclaw-gateway[-<profile>].service (kopyahin ang unit sa itaas, palitan ang WantedBy=multi-user.target, itakda ang User= + WorkingDirectory=), pagkatapos:
33. Pinapatakbo ng onboarding ito sa Linux/WSL2 (maaaring humingi ng sudo; nagsusulat sa /var/lib/systemd/linger).
sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-gateway[-<profile>].service
Windows (WSL2)¶
Ang mga install sa Windows ay dapat gumamit ng WSL2 at sundin ang seksyon ng Linux systemd sa itaas.
Mga pagsusuri sa operasyon¶
- Liveness: buksan ang WS at magpadala ng
req:connect→ asahan angresna maypayload.type="hello-ok"(na may snapshot). - Readiness: tawagin ang
health→ asahan angok: trueat isang naka-link na channel salinkChannel(kapag naaangkop). - Debug: mag-subscribe sa mga
tickatpresenceevent; tiyaking ipinapakita ngstatusang linked/auth age; ipinapakita ng mga presence entry ang host ng Gateway at mga nakakonektang client.
Mga garantiya sa kaligtasan¶
- Ipagpalagay ang isang Gateway bawat host bilang default; kung nagpapatakbo ng maraming profile, ihiwalay ang mga port/state at i-target ang tamang instance.
- Walang fallback sa direktang koneksyon ng Baileys; kung down ang Gateway, mabilis na babagsak ang mga send.
- Ang mga non-connect first frame o malformed JSON ay tinatanggihan at isinasara ang socket.
- Maayos na shutdown: mag-emit ng
shutdownevent bago magsara; dapat hawakan ng mga client ang close + reconnect.
Mga helper ng CLI¶
openclaw gateway health|status— humiling ng health/status sa Gateway WS.openclaw message send --target <num> --message "hi" [--media ...]— magpadala sa pamamagitan ng Gateway (idempotent para sa WhatsApp).openclaw agent --message "hi" --to <num>— magpatakbo ng agent turn (naghihintay ng final bilang default).openclaw gateway call <method> --params '{"k":"v"}'— raw method invoker para sa debugging.openclaw gateway stop|restart— ihinto/i-restart ang supervised gateway service (launchd/systemd).- Ipinagpapalagay ng mga helper subcommand ng Gateway na may tumatakbong gateway sa
--url; hindi na sila awtomatikong nag-i-spawn ng isa.
Gabay sa migration¶
- I-retire ang paggamit ng
openclaw gatewayat ng legacy TCP control port. - I-update ang mga client para magsalita ng WS protocol na may mandatory connect at structured presence.