CLI Gateway
Gateway adalah server WebSocket OpenClaw (channel, node, sesi, hook). Subperintah di halaman ini berada di bawahopenclaw gateway ….
Dokumentasi terkait:
Menjalankan Gateway
Jalankan proses Gateway lokal:- Secara default, Gateway menolak untuk memulai kecuali
gateway.mode=localdisetel di~/.openclaw/openclaw.json. Gunakan--allow-unconfigureduntuk proses ad-hoc/dev. openclaw onboard --mode localdanopenclaw setupdiharapkan menulisgateway.mode=local. Jika file ada tetapigateway.modetidak ada, perlakukan itu sebagai konfigurasi yang rusak atau tertimpa dan perbaiki alih-alih mengasumsikan mode lokal secara implisit.- Jika file ada dan
gateway.modetidak ada, Gateway memperlakukannya sebagai kerusakan konfigurasi yang mencurigakan dan menolak untuk “menebak mode lokal” untuk Anda. - Bind di luar loopback tanpa autentikasi diblokir (guardrail keamanan).
SIGUSR1memicu restart dalam proses jika diizinkan (commands.restartaktif secara default; setelcommands.restart: falseuntuk memblokir restart manual, sementara penerapan/pembaruan tool/konfigurasi gateway tetap diizinkan).- Handler
SIGINT/SIGTERMmenghentikan proses gateway, tetapi tidak memulihkan status terminal kustom apa pun. Jika Anda membungkus CLI dengan TUI atau input mode mentah, pulihkan terminal sebelum keluar.
Opsi
--port <port>: port WebSocket (default berasal dari config/env; biasanya18789).--bind <loopback|lan|tailnet|auto|custom>: mode bind listener.--auth <token|password>: override mode autentikasi.--token <token>: override token (juga menetapkanOPENCLAW_GATEWAY_TOKENuntuk proses).--password <password>: override kata sandi. Peringatan: kata sandi inline dapat terlihat di daftar proses lokal.--password-file <path>: baca kata sandi gateway dari file.--tailscale <off|serve|funnel>: ekspos Gateway melalui Tailscale.--tailscale-reset-on-exit: reset konfigurasi Tailscale serve/funnel saat shutdown.--allow-unconfigured: izinkan gateway mulai tanpagateway.mode=localdi config. Ini melewati guard startup hanya untuk bootstrap ad-hoc/dev; ini tidak menulis atau memperbaiki file config.--dev: buat config + workspace dev jika belum ada (melewati BOOTSTRAP.md).--reset: reset config + kredensial + sesi + workspace dev (memerlukan--dev).--force: matikan listener yang ada pada port yang dipilih sebelum memulai.--verbose: log verbose.--cli-backend-logs: hanya tampilkan log backend CLI di konsol (dan aktifkan stdout/stderr).--claude-cli-logs: alias usang untuk--cli-backend-logs.--ws-log <auto|full|compact>: gaya log websocket (defaultauto).--compact: alias untuk--ws-log compact.--raw-stream: log event stream model mentah ke jsonl.--raw-stream-path <path>: path jsonl stream mentah.
Mengueri Gateway yang sedang berjalan
Semua perintah kueri menggunakan RPC WebSocket. Mode output:- Default: dapat dibaca manusia (berwarna di TTY).
--json: JSON yang dapat dibaca mesin (tanpa styling/spinner).--no-color(atauNO_COLOR=1): nonaktifkan ANSI sambil tetap mempertahankan tata letak untuk manusia.
--url <url>: URL WebSocket Gateway.--token <token>: token Gateway.--password <password>: kata sandi Gateway.--timeout <ms>: timeout/anggaran waktu (bervariasi per perintah).--expect-final: tunggu respons “final” (panggilan agen).
--url, CLI tidak kembali menggunakan kredensial config atau environment.
Berikan --token atau --password secara eksplisit. Kredensial eksplisit yang tidak ada akan menghasilkan error.
gateway health
gateway usage-cost
Ambil ringkasan biaya penggunaan dari log sesi.
--days <days>: jumlah hari yang disertakan (default30).
gateway status
gateway status menampilkan layanan Gateway (launchd/systemd/schtasks) beserta probe RPC opsional.
--url <url>: tambahkan target probe eksplisit. Remote yang dikonfigurasi + localhost tetap diprobe.--token <token>: autentikasi token untuk probe.--password <password>: autentikasi kata sandi untuk probe.--timeout <ms>: timeout probe (default10000).--no-probe: lewati probe RPC (tampilan layanan saja).--deep: pindai juga layanan tingkat sistem.--require-rpc: keluar dengan status non-zero saat probe RPC gagal. Tidak dapat digabungkan dengan--no-probe.
gateway statustetap tersedia untuk diagnostik meskipun config CLI lokal tidak ada atau tidak valid.gateway statusmenyelesaikan SecretRef autentikasi yang dikonfigurasi untuk autentikasi probe jika memungkinkan.- Jika SecretRef autentikasi yang diperlukan tidak terselesaikan di jalur perintah ini,
gateway status --jsonmelaporkanrpc.authWarningsaat konektivitas/autentikasi probe gagal; berikan--token/--passwordsecara eksplisit atau selesaikan sumber secret terlebih dahulu. - Jika probe berhasil, peringatan auth-ref yang tidak terselesaikan disembunyikan untuk menghindari positif palsu.
- Gunakan
--require-rpcdalam skrip dan otomatisasi saat layanan yang mendengarkan saja tidak cukup dan Anda memerlukan RPC Gateway itu sendiri dalam keadaan sehat. --deepmenambahkan pemindaian best-effort untuk instalasi launchd/systemd/schtasks tambahan. Ketika beberapa layanan mirip gateway terdeteksi, output untuk manusia mencetak petunjuk pembersihan dan memperingatkan bahwa sebagian besar setup seharusnya menjalankan satu gateway per mesin.- Output untuk manusia mencakup path log file yang telah diselesaikan beserta snapshot path/validitas config CLI-vs-service untuk membantu mendiagnosis drift profil atau state-dir.
- Pada instalasi systemd Linux, pemeriksaan drift autentikasi layanan membaca nilai
Environment=danEnvironmentFile=dari unit (termasuk%h, path dalam tanda kutip, beberapa file, dan file opsional-). - Pemeriksaan drift menyelesaikan SecretRef
gateway.auth.tokenmenggunakan env runtime gabungan (env perintah layanan terlebih dahulu, lalu fallback env proses). - Jika autentikasi token tidak aktif secara efektif (nilai eksplisit
gateway.auth.modeadalahpassword/none/trusted-proxy, atau mode tidak disetel sehingga password bisa menang dan tidak ada kandidat token yang bisa menang), pemeriksaan drift token melewati resolusi token config.
gateway probe
gateway probe adalah perintah “debug semuanya”. Perintah ini selalu memprobe:
- gateway remote yang dikonfigurasi (jika ada), dan
- localhost (loopback) bahkan jika remote dikonfigurasi.
--url, target eksplisit tersebut ditambahkan di depan keduanya. Output untuk manusia memberi label pada
target sebagai:
URL (eksplisit)Remote (dikonfigurasi)atauRemote (dikonfigurasi, tidak aktif)Local loopback
Reachable: yesberarti setidaknya satu target menerima koneksi WebSocket.RPC: okberarti panggilan RPC detail (health/status/system-presence/config.get) juga berhasil.RPC: limited - missing scope: operator.readberarti koneksi berhasil tetapi RPC detail dibatasi oleh scope. Ini dilaporkan sebagai keterjangkauan terdegradasi, bukan kegagalan penuh.- Kode keluar non-zero hanya ketika tidak ada target yang diprobe yang dapat dijangkau.
--json):
- Level atas:
ok: setidaknya satu target dapat dijangkau.degraded: setidaknya satu target memiliki RPC detail yang dibatasi scope.primaryTargetId: target terbaik untuk diperlakukan sebagai pemenang aktif dalam urutan ini: URL eksplisit, tunnel SSH, remote yang dikonfigurasi, lalu local loopback.warnings[]: catatan peringatan best-effort dengancode,message, dantargetIdsopsional.network: petunjuk URL local loopback/tailnet yang diturunkan dari config saat ini dan jaringan host.discovery.timeoutMsdandiscovery.count: anggaran penemuan/jumlah hasil aktual yang digunakan untuk pass probe ini.
- Per target (
targets[].connect):ok: keterjangkauan setelah koneksi + klasifikasi terdegradasi.rpcOk: keberhasilan penuh RPC detail.scopeLimited: RPC detail gagal karena scope operator tidak ada.
ssh_tunnel_failed: setup tunnel SSH gagal; perintah kembali menggunakan probe langsung.multiple_gateways: lebih dari satu target dapat dijangkau; ini tidak biasa kecuali Anda sengaja menjalankan profil terisolasi, seperti rescue bot.auth_secretref_unresolved: SecretRef autentikasi yang dikonfigurasi tidak dapat diselesaikan untuk target yang gagal.probe_scope_limited: koneksi WebSocket berhasil, tetapi RPC detail dibatasi karenaoperator.readtidak ada.
Remote melalui SSH (paritas app Mac)
Mode “Remote over SSH” pada app macOS menggunakan port-forward lokal sehingga gateway remote (yang mungkin hanya di-bind ke loopback) menjadi dapat dijangkau diws://127.0.0.1:<port>.
Padanan CLI:
--ssh <target>:user@hostatauuser@host:port(port default22).--ssh-identity <path>: file identitas.--ssh-auto: pilih host gateway pertama yang ditemukan sebagai target SSH dari endpoint discovery yang telah diselesaikan (local.ditambah domain area luas yang dikonfigurasi, jika ada). Petunjuk TXT saja diabaikan.
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
Helper RPC level rendah.
--params <json>: string objek JSON untuk parameter (default{})--url <url>--token <token>--password <password>--timeout <ms>--expect-final--json
--paramsharus berupa JSON yang valid.--expect-finalterutama untuk RPC gaya agen yang mengalirkan event perantara sebelum payload final.
Mengelola layanan Gateway
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--force,--jsongateway uninstall|start|stop|restart:--json
gateway installmendukung--port,--runtime,--token,--force,--json.- Ketika autentikasi token memerlukan token dan
gateway.auth.tokendikelola oleh SecretRef,gateway installmemvalidasi bahwa SecretRef dapat diselesaikan tetapi tidak menyimpan token yang telah diselesaikan ke metadata environment layanan. - Jika autentikasi token memerlukan token dan SecretRef token yang dikonfigurasi tidak terselesaikan, instalasi gagal secara tertutup alih-alih menyimpan fallback plaintext.
- Untuk autentikasi kata sandi pada
gateway run, pilihOPENCLAW_GATEWAY_PASSWORD,--password-file, ataugateway.auth.passwordberbasis SecretRef daripada--passwordinline. - Dalam mode autentikasi tersimpulkan,
OPENCLAW_GATEWAY_PASSWORDyang hanya ada di shell tidak melonggarkan persyaratan token instalasi; gunakan konfigurasi yang persisten (gateway.auth.passwordatauenvconfig) saat menginstal layanan terkelola. - Jika
gateway.auth.tokendangateway.auth.passwordsama-sama dikonfigurasi dangateway.auth.modetidak disetel, instalasi diblokir sampai mode disetel secara eksplisit. - Perintah siklus hidup menerima
--jsonuntuk scripting.
Menemukan gateway (Bonjour)
gateway discover memindai beacon Gateway (_openclaw-gw._tcp).
- Multicast DNS-SD:
local. - Unicast DNS-SD (Wide-Area Bonjour): pilih domain (contoh:
openclaw.internal.) dan siapkan split DNS + server DNS; lihat /gateway/bonjour
role(petunjuk peran gateway)transport(petunjuk transport, misalnyagateway)gatewayPort(port WebSocket, biasanya18789)sshPort(opsional; klien menggunakan target SSH default22ketika ini tidak ada)tailnetDns(hostname MagicDNS, jika tersedia)gatewayTls/gatewayTlsSha256(TLS diaktifkan + sidik jari sertifikat)cliPath(petunjuk instalasi remote yang ditulis ke zona area luas)
gateway discover
--timeout <ms>: timeout per perintah (browse/resolve); default2000.--json: output yang dapat dibaca mesin (juga menonaktifkan styling/spinner).
- CLI memindai
local.ditambah domain area luas yang dikonfigurasi saat ada yang diaktifkan. wsUrldalam output JSON diturunkan dari endpoint layanan yang telah diselesaikan, bukan dari petunjuk TXT saja sepertilanHostatautailnetDns.- Pada mDNS
local.,sshPortdancliPathhanya disiarkan ketikadiscovery.mdns.modeadalahfull. Wide-area DNS-SD tetap menuliscliPath;sshPorttetap opsional di sana juga.