CLI commands
Gateway
Gateway คือเซิร์ฟเวอร์ WebSocket ของ OpenClaw (ช่องทาง, โหนด, เซสชัน, ฮุก) คำสั่งย่อยในหน้านี้อยู่ใต้ openclaw gateway …
การตั้งค่า mDNS ภายในเครื่อง + DNS-SD แบบ wide-area
วิธีที่ OpenClaw ประกาศและค้นหา Gateway
คีย์การกำหนดค่า Gateway ระดับบนสุด
เรียกใช้ Gateway
เรียกใช้กระบวนการ Gateway ภายในเครื่อง:
openclaw gatewayนามแฝงแบบ foreground:
openclaw gateway runพฤติกรรมการเริ่มต้น
- โดยค่าเริ่มต้น Gateway จะปฏิเสธการเริ่มทำงาน เว้นแต่จะตั้งค่า
gateway.mode=localไว้ใน~/.openclaw/openclaw.jsonใช้--allow-unconfiguredสำหรับการรันเฉพาะกิจ/การพัฒนา openclaw onboard --mode localและopenclaw setupควรเขียนgateway.mode=localหากมีไฟล์อยู่แล้วแต่ไม่มีgateway.modeให้ถือว่าเป็นการกำหนดค่าที่เสียหรือถูกเขียนทับ และซ่อมแซมแทนที่จะถือว่าเป็นโหมด local โดยนัย- หากมีไฟล์อยู่แล้วและไม่มี
gateway.modeGateway จะถือว่านั่นเป็นความเสียหายของการกำหนดค่าที่น่าสงสัย และปฏิเสธที่จะ "เดา local" ให้คุณ - การ bind นอกเหนือจาก loopback โดยไม่มี auth จะถูกบล็อก (ขอบเขตป้องกันด้านความปลอดภัย)
lan,tailnetและcustomปัจจุบัน resolve ผ่านเส้นทาง BYOH ที่เป็น IPv4 เท่านั้น- BYOH แบบ IPv6-only ยังไม่รองรับโดยตรงบนเส้นทางนี้ในปัจจุบัน ใช้ sidecar หรือพร็อกซี IPv4 หากโฮสต์เองเป็น IPv6-only
SIGUSR1ทริกเกอร์การรีสตาร์ทภายในกระบวนการเมื่อได้รับอนุญาต (commands.restartเปิดใช้งานโดยค่าเริ่มต้น; ตั้งค่าcommands.restart: falseเพื่อบล็อกการรีสตาร์ทด้วยตนเอง ขณะที่ gateway tool/config apply/update ยังคงได้รับอนุญาต)- ตัวจัดการ
SIGINT/SIGTERMจะหยุดกระบวนการ gateway แต่จะไม่คืนค่าสถานะเทอร์มินัลแบบกำหนดเองใด ๆ หากคุณครอบ CLI ด้วย TUI หรืออินพุต raw-mode ให้คืนค่าเทอร์มินัลก่อนออก
ตัวเลือก
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tcG9ydCA8cG9ydA
" type="number">
พอร์ต WebSocket (ค่าเริ่มต้นมาจาก config/env; โดยปกติคือ 18789)
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tYmluZCA8bG9vcGJhY2t8bGFufHRhaWxuZXR8YXV0b3xjdXN0b20
" type="string">
โหมด bind ของ listener ปัจจุบัน lan, tailnet และ custom resolve ผ่านเส้นทาง IPv4-only
"--authOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdG9rZW4gPHRva2Vu
" type="string">
การแทนที่ token (ตั้งค่า OPENCLAW_GATEWAY_TOKEN ให้กระบวนการด้วย)
"--password"--tailscale--tailscale-reset-on-exitbooleanรีเซ็ตการกำหนดค่า serve/funnel ของ Tailscale เมื่อปิดการทำงาน
--bind custom + gateway.customBindHoststringปัจจุบันคาดหวังที่อยู่ IPv4 สำหรับ BYOH แบบ IPv6-only ให้วาง sidecar หรือพร็อกซี IPv4 ไว้หน้า Gateway และชี้ OpenClaw ไปยัง endpoint IPv4 นั้น
--allow-unconfiguredbooleanอนุญาตให้ gateway เริ่มทำงานโดยไม่มี gateway.mode=local ใน config ข้ามตัวป้องกันการเริ่มต้นสำหรับการ bootstrap เฉพาะกิจ/การพัฒนาเท่านั้น; ไม่เขียนหรือซ่อมแซมไฟล์ config
--devbooleanสร้าง config + workspace สำหรับ dev หากไม่มีอยู่ (ข้าม BOOTSTRAP.md)
--resetbooleanรีเซ็ต config + ข้อมูลประจำตัว + เซสชัน + workspace สำหรับ dev (ต้องใช้ --dev)
--forcebooleanฆ่า listener ที่มีอยู่บนพอร์ตที่เลือกก่อนเริ่มต้น
--verbosebooleanบันทึกแบบละเอียด
--cli-backend-logsbooleanแสดงเฉพาะบันทึก backend ของ CLI ในคอนโซล (และเปิดใช้ stdout/stderr)
"--ws-log--compactbooleanนามแฝงสำหรับ --ws-log compact
--raw-streambooleanบันทึกเหตุการณ์สตรีมโมเดลดิบไปยัง jsonl
รีสตาร์ท Gateway
openclaw gateway restartopenclaw gateway restart --safeopenclaw gateway restart --safe --skip-deferralopenclaw gateway restart --forceopenclaw gateway restart --safe ขอให้ Gateway ที่กำลังทำงานตรวจสอบงาน OpenClaw ที่ยังทำงานอยู่ก่อนรีสตาร์ท หากมีการดำเนินการในคิว, การส่งคำตอบ, การรันแบบฝัง หรือการรันงานที่ยังใช้งานอยู่ Gateway จะรายงานตัวบล็อก รวมคำขอรีสตาร์ทแบบปลอดภัยที่ซ้ำกัน และรีสตาร์ทเมื่อการทำงานที่ยังใช้งานอยู่ระบายหมดแล้ว restart แบบธรรมดาจะคงพฤติกรรมตัวจัดการบริการเดิมไว้เพื่อความเข้ากันได้ ใช้ --force เฉพาะเมื่อคุณต้องการเส้นทางแทนที่ทันทีอย่างชัดเจน
openclaw gateway restart --safe --skip-deferral รันการรีสตาร์ทที่ประสานงานและรับรู้ OpenClaw แบบเดียวกับ --safe แต่ข้ามประตูการเลื่อนเพราะงานที่ยังใช้งานอยู่ เพื่อให้ Gateway ส่งสัญญาณรีสตาร์ททันทีแม้จะมีการรายงานตัวบล็อก ใช้เป็นช่องทางหลบหลีกสำหรับผู้ปฏิบัติการเมื่อการเลื่อนถูกตรึงไว้ด้วยการรันงานที่ค้าง และ --safe เพียงอย่างเดียวจะรออย่างไม่มีกำหนด --skip-deferral ต้องใช้ร่วมกับ --safe
การ profiling Gateway
- ตั้งค่า
OPENCLAW_GATEWAY_STARTUP_TRACE=1เพื่อบันทึกเวลาแต่ละเฟสระหว่างการเริ่มต้น Gateway รวมถึงดีเลย์eventLoopMaxต่อเฟส และเวลาของตารางค้นหา plugin สำหรับ installed-index, manifest registry, startup planning และงาน owner-map - ตั้งค่า
OPENCLAW_GATEWAY_RESTART_TRACE=1เพื่อบันทึกบรรทัดrestart trace:ในขอบเขตรีสตาร์ทสำหรับการจัดการสัญญาณรีสตาร์ท, การระบายงานที่ยังใช้งานอยู่, เฟส shutdown, การเริ่มครั้งถัดไป, เวลา ready และเมตริกหน่วยความจำ - ตั้งค่า
OPENCLAW_DIAGNOSTICS=timelineพร้อมOPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>เพื่อเขียน timeline การวินิจฉัยการเริ่มต้นแบบ JSONL ตาม best-effort สำหรับ harness QA ภายนอก คุณยังสามารถเปิดใช้ flag ด้วยdiagnostics.flags: ["timeline"]ใน config ได้; พาธยังคงมาจาก env เพิ่มOPENCLAW_DIAGNOSTICS_EVENT_LOOP=1เพื่อรวมตัวอย่าง event-loop - รัน
pnpm buildก่อน จากนั้นรันpnpm test:startup:gateway -- --runs 5 --warmup 1เพื่อ benchmark การเริ่มต้น Gateway เทียบกับ entry ของ CLI ที่ build แล้ว benchmark จะบันทึก output แรกของกระบวนการ,/healthz,/readyz, เวลา startup trace, ดีเลย์ event-loop และรายละเอียดเวลาของตารางค้นหา plugin - รัน
pnpm buildก่อน จากนั้นรันpnpm test:restart:gateway -- --case skipChannels --runs 1 --restarts 5เพื่อ benchmark การรีสตาร์ท Gateway ภายในกระบวนการเทียบกับ entry ของ CLI ที่ build แล้วบน macOS หรือ Linux benchmark การรีสตาร์ทใช้ SIGUSR1 เปิดใช้ทั้ง startup และ restart traces ในกระบวนการลูก และบันทึก/healthzถัดไป,/readyzถัดไป, downtime, เวลา ready, CPU, RSS และเมตริก restart trace - ถือว่า
/healthzเป็น liveness และ/readyzเป็นความพร้อมใช้งานได้จริง บรรทัด trace และ output benchmark มีไว้สำหรับการระบุเจ้าของ; อย่าถือว่า span trace หนึ่งรายการหรือตัวอย่างหนึ่งรายการเป็นข้อสรุปด้านประสิทธิภาพที่สมบูรณ์
Query Gateway ที่กำลังทำงาน
คำสั่ง query ทั้งหมดใช้ WebSocket RPC
โหมด output
- ค่าเริ่มต้น: อ่านได้สำหรับมนุษย์ (มีสีใน TTY)
--json: JSON ที่อ่านได้ด้วยเครื่อง (ไม่มี styling/spinner)--no-color(หรือNO_COLOR=1): ปิด ANSI ขณะยังคง layout สำหรับมนุษย์
ตัวเลือกร่วม
--url <url>: URL WebSocket ของ Gateway--token <token>: token ของ Gateway--password <password>: รหัสผ่านของ Gateway--timeout <ms>: timeout/budget (แตกต่างกันตามคำสั่ง)--expect-final: รอการตอบกลับแบบ "final" (การเรียก agent)
gateway health
openclaw gateway health --url ws://127.0.0.1:18789openclaw gateway health --port 18789endpoint HTTP /healthz เป็น probe สำหรับ liveness: จะตอบกลับเมื่อเซิร์ฟเวอร์ตอบ HTTP ได้ endpoint HTTP /readyz เข้มงวดกว่าและยังคงเป็นสีแดงขณะที่ plugin sidecar, ช่องทาง หรือ hook ที่กำหนดค่าไว้ในการเริ่มต้นยัง settle ไม่เสร็จ การตอบกลับ readiness แบบละเอียดที่เป็น local หรือ authenticated จะรวมบล็อกวินิจฉัย eventLoop พร้อมดีเลย์ event-loop, การใช้ประโยชน์ event-loop, อัตราส่วนแกน CPU และ flag degraded
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tcG9ydCA8cG9ydA
" type="number">
กำหนดเป้าหมาย Gateway แบบ local loopback บนพอร์ตนี้ ค่านี้จะแทนที่ OPENCLAW_GATEWAY_URL และ OPENCLAW_GATEWAY_PORT สำหรับการเรียก health
gateway usage-cost
ดึงสรุป usage-cost จากบันทึกเซสชัน
openclaw gateway usage-costopenclaw gateway usage-cost --days 7openclaw gateway usage-cost --agent work --jsonopenclaw gateway usage-cost --all-agentsopenclaw gateway usage-cost --json"--days"--agent--all-agentsbooleanรวมสรุปค่าใช้จ่ายจาก agent ที่กำหนดค่าไว้ทั้งหมด ไม่สามารถใช้ร่วมกับ --agent
gateway stability
ดึงตัวบันทึกเสถียรภาพการวินิจฉัยล่าสุดจาก Gateway ที่กำลังทำงาน
openclaw gateway stabilityopenclaw gateway stability --type payload.largeopenclaw gateway stability --bundle latestopenclaw gateway stability --bundle latest --exportopenclaw gateway stability --jsonOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tbGltaXQgPGxpbWl0
" type="number" default="25">
จำนวนเหตุการณ์ล่าสุดสูงสุดที่จะรวม (สูงสุด 1000)
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdHlwZSA8dHlwZQ
" type="string">
กรองตามประเภทเหตุการณ์วินิจฉัย เช่น payload.large หรือ diagnostic.memory.pressure
"--since-seq--bundle [path]stringอ่าน bundle เสถียรภาพที่ persist ไว้แทนการเรียก Gateway ที่กำลังทำงาน ใช้ --bundle latest (หรือแค่ --bundle) สำหรับ bundle ใหม่ที่สุดใต้ไดเรกทอรี state หรือส่งพาธ JSON ของ bundle โดยตรง
--exportbooleanเขียน zip การวินิจฉัยสำหรับ support ที่แชร์ได้แทนการพิมพ์รายละเอียดเสถียรภาพ
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tb3V0cHV0IDxwYXRo
" type="string">
พาธ output สำหรับ --export
ความเป็นส่วนตัวและพฤติกรรมของ bundle
- records จะเก็บ metadata เชิงปฏิบัติการ: ชื่อเหตุการณ์, จำนวน, ขนาด byte, ค่าหน่วยความจำ, สถานะคิว/เซสชัน, ชื่อช่องทาง/plugin และสรุปเซสชันที่ redacted แล้ว โดยจะไม่เก็บข้อความแชต, body ของ webhook, output ของ tool, body คำขอหรือการตอบกลับดิบ, token, cookie, ค่าลับ, hostname หรือ session id ดิบ ตั้งค่า
diagnostics.enabled: falseเพื่อปิดใช้งานตัวบันทึกทั้งหมด - เมื่อ Gateway ออกแบบ fatal, timeout ระหว่าง shutdown และความล้มเหลวในการเริ่มต้นหลังรีสตาร์ท OpenClaw จะเขียน snapshot การวินิจฉัยเดียวกันไปยัง
~/.openclaw/logs/stability/openclaw-stability-*.jsonเมื่อตัวบันทึกมีเหตุการณ์ ตรวจสอบ bundle ใหม่ที่สุดด้วยopenclaw gateway stability --bundle latest;--limit,--typeและ--since-seqยังมีผลกับ output ของ bundle ด้วย
gateway diagnostics export
เขียน zip การวินิจฉัยภายในเครื่องที่ออกแบบมาเพื่อแนบกับรายงานบั๊ก สำหรับโมเดลความเป็นส่วนตัวและเนื้อหา bundle โปรดดู Diagnostics Export
openclaw gateway diagnostics exportopenclaw gateway diagnostics export --output openclaw-diagnostics.zipopenclaw gateway diagnostics export --json"--log-lines"--log-bytes"--url"--token"--password"--timeout--no-stability-bundlebooleanข้ามการค้นหาบันเดิลเสถียรภาพที่คงอยู่
--jsonbooleanพิมพ์พาธที่เขียน ขนาด และแมนิเฟสต์เป็น JSON
การส่งออกประกอบด้วยแมนิเฟสต์ สรุป Markdown รูปแบบคอนฟิก รายละเอียดคอนฟิกที่ผ่านการล้างข้อมูล สรุปบันทึกที่ผ่านการล้างข้อมูล สแนปช็อตสถานะ/สถานภาพของ Gateway ที่ผ่านการล้างข้อมูล และบันเดิลเสถียรภาพล่าสุดเมื่อมีอยู่
ออกแบบมาเพื่อใช้แชร์ โดยเก็บรายละเอียดการทำงานที่ช่วยในการดีบัก เช่น ฟิลด์บันทึก OpenClaw ที่ปลอดภัย ชื่อระบบย่อย รหัสสถานะ ระยะเวลา โหมดที่กำหนดค่าไว้ พอร์ต รหัส plugin รหัสผู้ให้บริการ การตั้งค่าฟีเจอร์ที่ไม่ใช่ความลับ และข้อความบันทึกการทำงานที่ปกปิดข้อมูลแล้ว โดยจะละเว้นหรือปกปิดข้อความแชต เนื้อหา webhook เอาต์พุตเครื่องมือ ข้อมูลรับรอง คุกกี้ ตัวระบุบัญชี/ข้อความ ข้อความ prompt/คำสั่ง ชื่อโฮสต์ และค่าความลับ เมื่อข้อความรูปแบบ LogTape ดูเหมือนข้อความ payload ของผู้ใช้/แชต/เครื่องมือ การส่งออกจะเก็บไว้เพียงว่ามีข้อความถูกละเว้นพร้อมจำนวนไบต์ของข้อความนั้น
gateway status
gateway status แสดงบริการ Gateway (launchd/systemd/schtasks) พร้อมการตรวจสอบเสริมของความสามารถในการเชื่อมต่อ/การยืนยันตัวตน
openclaw gateway statusopenclaw gateway status --jsonopenclaw gateway status --require-rpc"--url"--token"--password"--timeout--no-probebooleanข้ามการตรวจสอบการเชื่อมต่อ (มุมมองเฉพาะบริการ)
--deepbooleanสแกนบริการระดับระบบด้วย
--require-rpcbooleanยกระดับการตรวจสอบการเชื่อมต่อเริ่มต้นเป็นการตรวจสอบการอ่าน และออกด้วยค่าที่ไม่เป็นศูนย์เมื่อการตรวจสอบการอ่านนั้นล้มเหลว ไม่สามารถใช้ร่วมกับ --no-probe ได้
ความหมายของสถานะ
gateway statusยังคงพร้อมใช้งานสำหรับการวินิจฉัย แม้เมื่อคอนฟิก CLI ภายในเครื่องหายไปหรือไม่ถูกต้องgateway statusเริ่มต้นพิสูจน์สถานะบริการ การเชื่อมต่อ WebSocket และความสามารถการยืนยันตัวตนที่เห็นได้ในเวลาจับมือ ไม่ได้พิสูจน์การดำเนินการอ่าน/เขียน/ผู้ดูแล- การตรวจสอบเพื่อวินิจฉัยไม่เปลี่ยนแปลงข้อมูลสำหรับการยืนยันตัวตนอุปกรณ์ครั้งแรก: จะใช้โทเค็นอุปกรณ์ที่แคชไว้แล้วเมื่อมีอยู่ แต่จะไม่สร้างตัวตนอุปกรณ์ CLI ใหม่หรือระเบียนการจับคู่อุปกรณ์แบบอ่านอย่างเดียวเพียงเพื่อเช็กสถานะ
gateway statusจะแก้ SecretRefs การยืนยันตัวตนที่กำหนดค่าไว้สำหรับการยืนยันตัวตนของการตรวจสอบเมื่อเป็นไปได้- หาก SecretRef การยืนยันตัวตนที่จำเป็นไม่ถูกแก้ในพาธคำสั่งนี้
gateway status --jsonจะรายงานrpc.authWarningเมื่อการเชื่อมต่อ/การยืนยันตัวตนของการตรวจสอบล้มเหลว ให้ส่ง--token/--passwordอย่างชัดเจนหรือแก้แหล่งที่มาของความลับก่อน - หากการตรวจสอบสำเร็จ คำเตือน auth-ref ที่ยังไม่ถูกแก้จะถูกระงับเพื่อหลีกเลี่ยงผลบวกเท็จ
- เมื่อเปิดใช้การตรวจสอบ เอาต์พุต JSON จะรวม
gateway.versionเมื่อ Gateway ที่กำลังทำงานรายงานค่าไว้;--require-rpcสามารถถอยกลับไปใช้ payload RPCstatus.runtimeVersionได้หากการตรวจสอบการจับมือติดตามผลไม่สามารถให้เมทาดาทาเวอร์ชันได้ - ใช้
--require-rpcในสคริปต์และระบบอัตโนมัติเมื่อบริการที่กำลังฟังอยู่ยังไม่พอ และคุณต้องการให้การเรียก RPC ขอบเขตการอ่านมีสถานภาพดีด้วย --deepเพิ่มการสแกนแบบพยายามเต็มที่สำหรับการติดตั้ง launchd/systemd/schtasks เพิ่มเติม เมื่อพบบริการที่คล้าย gateway หลายรายการ เอาต์พุตสำหรับมนุษย์จะพิมพ์คำแนะนำการล้างข้อมูลและเตือนว่าการตั้งค่าส่วนใหญ่ควรรันหนึ่ง gateway ต่อเครื่อง--deepยังรายงานการส่งต่อการรีสตาร์ตของตัวกำกับดูแล Gateway ล่าสุดเมื่อโพรเซสบริการออกอย่างสะอาดสำหรับการรีสตาร์ตของตัวกำกับดูแลภายนอก--deepรันการตรวจสอบคอนฟิกในโหมดที่รับรู้ plugin (pluginValidation: "full") และแสดงคำเตือนแมนิเฟสต์ plugin ที่กำหนดค่าไว้ (เช่น เมทาดาทาคอนฟิกช่องทางหายไป) เพื่อให้การตรวจ smoke ของการติดตั้งและอัปเดตตรวจพบได้gateway statusเริ่มต้นคงพาธอ่านอย่างเดียวที่เร็วไว้ซึ่งข้ามการตรวจสอบ plugin- เอาต์พุตสำหรับมนุษย์รวมพาธบันทึกไฟล์ที่แก้ได้ พร้อมสแนปช็อตพาธ/ความถูกต้องของคอนฟิก CLI-เทียบกับ-บริการ เพื่อช่วยวินิจฉัยการเบี่ยงเบนของโปรไฟล์หรือ state-dir
การตรวจ auth-drift ของ Linux systemd
- บนการติดตั้ง Linux systemd การตรวจ auth drift ของบริการจะอ่านค่าทั้ง
Environment=และEnvironmentFile=จาก unit (รวมถึง%h, พาธที่อ้างอิง, หลายไฟล์ และไฟล์-แบบไม่บังคับ) - การตรวจ drift จะแก้ SecretRefs ของ
gateway.auth.tokenโดยใช้ runtime env ที่ผสานแล้ว (env คำสั่งบริการก่อน จากนั้น fallback เป็น env ของโพรเซส) - หากการยืนยันตัวตนด้วยโทเค็นไม่ได้เปิดใช้งานจริง (มี
gateway.auth.modeอย่างชัดเจนเป็นpassword/none/trusted-proxyหรือไม่ได้ตั้งค่าโหมดที่รหัสผ่านสามารถชนะได้และไม่มีตัวเลือกโทเค็นใดชนะได้) การตรวจ token-drift จะข้ามการแก้โทเค็นคอนฟิก
gateway probe
gateway probe คือคำสั่ง "ดีบักทุกอย่าง" โดยจะตรวจสอบเสมอ:
- gateway รีโมตที่คุณกำหนดค่าไว้ (ถ้าตั้งค่าไว้) และ
- localhost (loopback) แม้จะกำหนดค่ารีโมตไว้แล้ว
หากคุณส่ง --url เป้าหมายที่ระบุอย่างชัดเจนนั้นจะถูกเพิ่มไว้ก่อนทั้งสองรายการ เอาต์พุตสำหรับมนุษย์ติดป้ายเป้าหมายเป็น:
URL (explicit)Remote (configured)หรือRemote (configured, inactive)Local loopback
openclaw gateway probeopenclaw gateway probe --jsonopenclaw gateway probe --port 18789OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tcG9ydCA8cG9ydA
" type="number">
ใช้พอร์ตนี้สำหรับเป้าหมายการตรวจสอบ local loopback และพอร์ตรีโมตของอุโมงค์ SSH หากไม่มี --url ค่านี้จะเลือกเป้าหมาย local loopback แทน URL สภาพแวดล้อม gateway ที่กำหนดค่าไว้ พอร์ตสภาพแวดล้อม หรือเป้าหมายรีโมต
การตีความ
Reachable: yesหมายความว่าอย่างน้อยหนึ่งเป้าหมายยอมรับการเชื่อมต่อ WebSocketCapability: read-only|write-capable|admin-capable|pairing-pending|connect-onlyรายงานสิ่งที่การตรวจสอบพิสูจน์ได้เกี่ยวกับการยืนยันตัวตน ซึ่งแยกจากการเข้าถึงได้Read probe: okหมายความว่าการเรียก RPC รายละเอียดขอบเขตการอ่าน (health/status/system-presence/config.get) สำเร็จด้วยRead probe: limited - missing scope: operator.readหมายความว่าเชื่อมต่อสำเร็จ แต่ RPC ขอบเขตการอ่านถูกจำกัด รายงานเป็นการเข้าถึงได้แบบ เสื่อมคุณภาพ ไม่ใช่ความล้มเหลวเต็มรูปแบบRead probe: failedหลังConnect: okหมายความว่า Gateway ยอมรับการเชื่อมต่อ WebSocket แต่การวินิจฉัยการอ่านติดตามผลหมดเวลาหรือล้มเหลว นี่ก็เป็นการเข้าถึงได้แบบ เสื่อมคุณภาพ ไม่ใช่ Gateway ที่เข้าถึงไม่ได้- เช่นเดียวกับ
gateway statusการตรวจสอบจะใช้การยืนยันตัวตนอุปกรณ์ที่แคชไว้แล้ว แต่จะไม่สร้างตัวตนอุปกรณ์ครั้งแรกหรือสถานะการจับคู่ - รหัสออกจะไม่เป็นศูนย์เฉพาะเมื่อไม่มีเป้าหมายที่ตรวจสอบใดเข้าถึงได้
เอาต์พุต JSON
ระดับบนสุด:
ok: มีอย่างน้อยหนึ่งเป้าหมายที่เข้าถึงได้degraded: มีอย่างน้อยหนึ่งเป้าหมายที่ยอมรับการเชื่อมต่อ แต่ไม่ได้ทำการวินิจฉัย RPC รายละเอียดครบถ้วนcapability: ความสามารถที่ดีที่สุดที่เห็นในเป้าหมายที่เข้าถึงได้ (read_only,write_capable,admin_capable,pairing_pending,connected_no_operator_scopeหรือunknown)primaryTargetId: เป้าหมายที่ดีที่สุดให้ถือว่าเป็นผู้ชนะที่ใช้งานอยู่ตามลำดับนี้: URL ชัดเจน, อุโมงค์ SSH, รีโมตที่กำหนดค่าไว้ จากนั้น local loopbackwarnings[]: ระเบียนคำเตือนแบบพยายามเต็มที่พร้อมcode,messageและtargetIdsแบบไม่บังคับnetwork: คำใบ้ URL local loopback/tailnet ที่ได้จากคอนฟิกปัจจุบันและเครือข่ายโฮสต์discovery.timeoutMsและdiscovery.count: งบประมาณ/จำนวนผลลัพธ์ discovery จริงที่ใช้สำหรับรอบการตรวจสอบนี้
ต่อเป้าหมาย (targets[].connect):
ok: การเข้าถึงได้หลังการเชื่อมต่อ + การจัดประเภทแบบเสื่อมคุณภาพrpcOk: ความสำเร็จของ RPC รายละเอียดครบถ้วนscopeLimited: RPC รายละเอียดล้มเหลวเนื่องจากขอบเขต operator หายไป
ต่อเป้าหมาย (targets[].auth):
role: บทบาทการยืนยันตัวตนที่รายงานในhello-okเมื่อมีscopes: ขอบเขตที่ได้รับอนุญาตซึ่งรายงานในhello-okเมื่อมีcapability: การจัดประเภทความสามารถการยืนยันตัวตนที่แสดงสำหรับเป้าหมายนั้น
รหัสคำเตือนทั่วไป
ssh_tunnel_failed: การตั้งค่าอุโมงค์ SSH ล้มเหลว; คำสั่งถอยกลับไปใช้การตรวจสอบโดยตรงmultiple_gateways: ตัวตน gateway ที่แตกต่างกันเข้าถึงได้ หรือ OpenClaw ไม่สามารถพิสูจน์ว่าเป้าหมายที่เข้าถึงได้เป็น gateway เดียวกัน อุโมงค์ SSH, URL proxy หรือ URL รีโมตที่กำหนดค่าไว้ไปยัง gateway เดียวกันจะไม่ทำให้เกิดคำเตือนนี้auth_secretref_unresolved: ไม่สามารถแก้ SecretRef การยืนยันตัวตนที่กำหนดค่าไว้สำหรับเป้าหมายที่ล้มเหลวprobe_scope_limited: การเชื่อมต่อ WebSocket สำเร็จ แต่การตรวจสอบการอ่านถูกจำกัดเพราะไม่มีoperator.read
รีโมตผ่าน SSH (เทียบเท่าแอป Mac)
โหมด "Remote over SSH" ของแอป macOS ใช้การส่งต่อพอร์ตภายในเครื่อง เพื่อให้ gateway รีโมต (ซึ่งอาจผูกกับ loopback เท่านั้น) เข้าถึงได้ที่ ws://127.0.0.1:<port>
เทียบเท่าใน CLI:
openclaw gateway probe --ssh user@gateway-hostOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tc3NoIDx0YXJnZXQ
" type="string">
user@host หรือ user@host:port (ค่าเริ่มต้นของพอร์ตคือ 22)
--ssh-autobooleanเลือกโฮสต์ gateway แรกที่ค้นพบเป็นเป้าหมาย SSH จาก endpoint discovery ที่แก้ได้ (local. บวกโดเมน wide-area ที่กำหนดค่าไว้ ถ้ามี) คำใบ้แบบ TXT-only จะถูกละเว้น
คอนฟิก (ไม่บังคับ ใช้เป็นค่าเริ่มต้น):
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
ตัวช่วย RPC ระดับต่ำ
openclaw gateway call statusopenclaw gateway call logs.tail --params '{"sinceMs": 60000}'"--params"--url"--token"--password"--timeout--expect-finalbooleanใช้เป็นหลักสำหรับ RPC แบบ agent ที่สตรีมเหตุการณ์ระหว่างทางก่อน payload สุดท้าย
--jsonbooleanเอาต์พุต JSON ที่เครื่องอ่านได้
จัดการบริการ Gateway
openclaw gateway installopenclaw gateway startopenclaw gateway stopopenclaw gateway restartopenclaw gateway uninstallติดตั้งด้วย wrapper
ใช้ --wrapper เมื่อบริการที่จัดการต้องเริ่มผ่านไฟล์ปฏิบัติการอื่น เช่น ชิมของตัวจัดการความลับหรือตัวช่วย run-as wrapper จะได้รับอาร์กิวเมนต์ Gateway ปกติ และมีหน้าที่ exec openclaw หรือ Node พร้อมอาร์กิวเมนต์เหล่านั้นในท้ายที่สุด
cat > ~/.local/bin/openclaw-doppler <<'EOF'#!/usr/bin/env bashset -euo pipefailexec doppler run --project my-project --config production -- openclaw "$@"EOFchmod +x ~/.local/bin/openclaw-doppler openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --forceopenclaw gateway restartคุณยังสามารถตั้งค่า wrapper ผ่านสภาพแวดล้อมได้ gateway install จะตรวจสอบว่าเส้นทางเป็นไฟล์ปฏิบัติการได้ เขียน wrapper ลงใน ProgramArguments ของบริการ และคงค่า OPENCLAW_WRAPPER ไว้ในสภาพแวดล้อมของบริการสำหรับการติดตั้งใหม่แบบบังคับ การอัปเดต และการซ่อมแซมด้วย doctor ในภายหลัง
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --forceopenclaw doctorหากต้องการลบ wrapper ที่คงค่าไว้ ให้ล้าง OPENCLAW_WRAPPER ขณะติดตั้งใหม่:
OPENCLAW_WRAPPER= openclaw gateway install --forceopenclaw gateway restartตัวเลือกคำสั่ง
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--wrapper <path>,--force,--jsongateway restart:--safe,--skip-deferral,--force,--wait <duration>,--jsongateway uninstall|start:--jsongateway stop:--disable,--json
พฤติกรรมวงจรชีวิต
- ใช้
gateway restartเพื่อรีสตาร์ตบริการที่จัดการ อย่าต่อคำสั่งgateway stopกับgateway startเพื่อใช้แทนการรีสตาร์ต - บน macOS ค่าเริ่มต้นของ
gateway stopจะใช้launchctl bootoutซึ่งนำ LaunchAgent ออกจากเซสชันการบูตปัจจุบันโดยไม่คงการปิดใช้งานไว้ — การกู้คืนอัตโนมัติของ KeepAlive ยังคงทำงานสำหรับการแครชในอนาคต และgateway startจะเปิดใช้งานใหม่ได้อย่างเรียบร้อยโดยไม่ต้องสั่งlaunchctl enableเอง ส่ง--disableเพื่อระงับ KeepAlive และ RunAtLoad อย่างถาวร เพื่อไม่ให้ Gateway เกิดใหม่จนกว่าจะมีการสั่งgateway startอย่างชัดเจนครั้งถัดไป ใช้ตัวเลือกนี้เมื่อการหยุดด้วยตนเองควรคงอยู่หลังรีบูตหรือรีสตาร์ตระบบ gateway restart --safeจะขอให้ Gateway ที่กำลังทำงานตรวจสอบงาน OpenClaw ที่ทำงานอยู่ล่วงหน้า และเลื่อนการรีสตาร์ตจนกว่าการส่งคำตอบ การรันแบบฝัง และการรันงานจะระบายหมด--safeไม่สามารถใช้ร่วมกับ--forceหรือ--waitได้gateway restart --wait 30sจะแทนที่งบเวลาระบายก่อนรีสตาร์ตที่กำหนดไว้สำหรับการรีสตาร์ตครั้งนั้น ตัวเลขล้วนคือมิลลิวินาที ยอมรับหน่วยเช่นs,mและhได้--wait 0จะรอแบบไม่มีกำหนดgateway restart --safe --skip-deferralจะรันการรีสตาร์ตแบบปลอดภัยที่รับรู้ OpenClaw แต่ข้ามประตูการเลื่อนเวลา เพื่อให้ Gateway ส่งการรีสตาร์ตทันทีแม้มีการรายงานตัวขัดขวาง เป็นทางออกฉุกเฉินสำหรับผู้ปฏิบัติการเมื่อการเลื่อนเวลาจากการรันงานค้าง ต้องใช้--safegateway restart --forceจะข้ามการระบายงานที่ทำงานอยู่และรีสตาร์ตทันที ใช้เมื่อผู้ปฏิบัติการตรวจสอบตัวขัดขวางงานที่แสดงรายการแล้ว และต้องการให้ Gateway กลับมาทำงานตอนนี้- คำสั่งวงจรชีวิตรองรับ
--jsonสำหรับการเขียนสคริปต์
Auth และ SecretRefs ระหว่างติดตั้ง
- เมื่อ token auth ต้องใช้โทเค็นและ
gateway.auth.tokenถูกจัดการด้วย SecretRef,gateway installจะตรวจสอบว่า SecretRef แก้ค่าได้ แต่จะไม่คงโทเค็นที่แก้ค่าแล้วไว้ในเมตาดาต้าสภาพแวดล้อมของบริการ - หาก token auth ต้องใช้โทเค็นและ SecretRef โทเค็นที่กำหนดค่าไว้ยังแก้ค่าไม่ได้ การติดตั้งจะล้มเหลวแบบปิดแทนที่จะคง fallback แบบข้อความธรรมดาไว้
- สำหรับ password auth บน
gateway runให้เลือกใช้OPENCLAW_GATEWAY_PASSWORD,--password-fileหรือgateway.auth.passwordที่อิง SecretRef แทน--passwordแบบอินไลน์ - ในโหมด auth ที่อนุมาน ค่า
OPENCLAW_GATEWAY_PASSWORDที่อยู่เฉพาะในเชลล์จะไม่ผ่อนปรนข้อกำหนดโทเค็นของการติดตั้ง ใช้การกำหนดค่าที่คงทน (gateway.auth.passwordหรือ configenv) เมื่อติดตั้งบริการที่จัดการ - หากมีการกำหนดค่าทั้ง
gateway.auth.tokenและgateway.auth.passwordและไม่ได้ตั้งค่าgateway.auth.modeการติดตั้งจะถูกบล็อกจนกว่าจะตั้งค่าโหมดอย่างชัดเจน
ค้นหา Gateway (Bonjour)
gateway discover จะสแกนหา beacon ของ Gateway (_openclaw-gw._tcp)
- Multicast DNS-SD:
local. - Unicast DNS-SD (Wide-Area Bonjour): เลือกโดเมน (ตัวอย่าง:
openclaw.internal.) แล้วตั้งค่า split DNS + เซิร์ฟเวอร์ DNS ดู Bonjour
เฉพาะ Gateway ที่เปิดใช้การค้นพบด้วย Bonjour (ค่าเริ่มต้น) เท่านั้นที่ประกาศ beacon
ระเบียนการค้นหาแบบ wide-area สามารถมีคำใบ้ TXT เหล่านี้ได้:
role(คำใบ้บทบาทของ Gateway)transport(คำใบ้การขนส่ง เช่นgateway)gatewayPort(พอร์ต WebSocket โดยปกติคือ18789)sshPort(เฉพาะโหมดค้นหาแบบเต็มเท่านั้น ไคลเอนต์จะใช้เป้าหมาย SSH เริ่มต้นเป็น22เมื่อไม่มีค่านี้)tailnetDns(ชื่อโฮสต์ MagicDNS เมื่อมี)gatewayTls/gatewayTlsSha256(เปิดใช้ TLS + ลายนิ้วมือใบรับรอง)cliPath(เฉพาะโหมดค้นหาแบบเต็มเท่านั้น)
gateway discover
openclaw gateway discover"--timeout--jsonbooleanเอาต์พุตที่เครื่องอ่านได้ (และปิดการจัดรูปแบบ/สปินเนอร์ด้วย)
ตัวอย่าง:
openclaw gateway discover --timeout 4000openclaw gateway discover --json | jq '.beacons[].wsUrl'