Web interfaces
UI ควบคุม
Control UI เป็นแอปหน้าเดียวขนาดเล็กที่ใช้ Vite + Lit และให้บริการโดย Gateway:
- ค่าเริ่มต้น:
http://<host>:18789/ - คำนำหน้าเพิ่มเติม: ตั้งค่า
gateway.controlUi.basePath(เช่น/openclaw)
แอปสื่อสาร โดยตรงกับ Gateway WebSocket บนพอร์ตเดียวกัน
เปิดอย่างรวดเร็ว (ภายในเครื่อง)
หาก Gateway ทำงานอยู่บนคอมพิวเตอร์เครื่องเดียวกัน ให้เปิด http://127.0.0.1:18789/ (หรือ http://localhost:18789/)
หากโหลดหน้าไม่ได้ ให้เริ่ม Gateway ก่อน: openclaw gateway
ข้อมูลรับรองความถูกต้องจะถูกส่งระหว่างการจับมือ WebSocket ผ่าน:
connect.params.auth.tokenconnect.params.auth.password- ส่วนหัวข้อมูลประจำตัว Tailscale Serve เมื่อ
gateway.auth.allowTailscale: true - ส่วนหัวข้อมูลประจำตัวพร็อกซีที่เชื่อถือได้เมื่อ
gateway.auth.mode: "trusted-proxy"
แผงการตั้งค่าแดชบอร์ดจะเก็บโทเค็นไว้สำหรับเซสชันแท็บเบราว์เซอร์ปัจจุบันและ URL ของ Gateway ที่เลือก แต่จะไม่จัดเก็บรหัสผ่าน โดยปกติการเริ่มต้นใช้งานจะสร้างโทเค็น Gateway สำหรับการยืนยันตัวตนด้วยข้อมูลลับที่ใช้ร่วมกันในการเชื่อมต่อครั้งแรก แต่การยืนยันตัวตนด้วยรหัสผ่านก็ใช้ได้เช่นกันเมื่อ gateway.auth.mode เป็น "password"
การจับคู่อุปกรณ์ (การเชื่อมต่อครั้งแรก)
โดยทั่วไป การเชื่อมต่อจากเบราว์เซอร์หรืออุปกรณ์ใหม่ต้องได้รับ การอนุมัติการจับคู่แบบครั้งเดียว ซึ่งแสดงเป็น disconnected (1008): pairing required
แสดงคำขอที่รอดำเนินการ
openclaw devices listอนุมัติด้วย ID คำขอ
openclaw devices approve <requestId>หากเบราว์เซอร์ลองจับคู่ใหม่โดยเปลี่ยนรายละเอียดการยืนยันตัวตน (บทบาท/ขอบเขต/กุญแจสาธารณะ) คำขอที่รอดำเนินการก่อนหน้าจะถูกแทนที่และสร้าง requestId ใหม่ ให้เรียกใช้ openclaw devices list อีกครั้งก่อนอนุมัติ
การเปลี่ยนเบราว์เซอร์ที่จับคู่แล้วจากสิทธิ์อ่านเป็นสิทธิ์เขียน/ผู้ดูแลระบบจะถือเป็นการยกระดับการอนุมัติ ไม่ใช่การเชื่อมต่อใหม่โดยไม่แจ้ง: OpenClaw จะคงการอนุมัติเดิมไว้ บล็อกการเชื่อมต่อใหม่ที่มีสิทธิ์กว้างกว่า และขอให้อนุมัติชุดขอบเขตใหม่อย่างชัดเจน
เมื่ออนุมัติแล้ว ระบบจะจดจำอุปกรณ์และไม่ต้องอนุมัติซ้ำ เว้นแต่จะเพิกถอนด้วย openclaw devices revoke --device <id> --role <role> ดูขั้นตอนการหมุนเวียนโทเค็น การเพิกถอน และการอนุมัติการเรียกใช้ครั้งแรกของ Paperclip / openclaw_gateway ได้ที่ CLI สำหรับอุปกรณ์
จับคู่อุปกรณ์เคลื่อนที่
ผู้ดูแลระบบที่จับคู่แล้วสามารถสร้าง QR สำหรับเชื่อมต่อ iOS/Android ได้โดยไม่ต้องเปิดเทอร์มินัล:
เปิดการจับคู่อุปกรณ์เคลื่อนที่
เลือก อุปกรณ์ แล้วคลิก จับคู่อุปกรณ์เคลื่อนที่ ในการ์ด อุปกรณ์
เชื่อมต่อโทรศัพท์
ในแอป OpenClaw บนอุปกรณ์เคลื่อนที่ ให้เปิด การตั้งค่า → Gateway แล้วสแกนรหัส QR หรือจะคัดลอกและวางรหัสตั้งค่าแทนก็ได้
ยืนยันการเชื่อมต่อ
แอป iOS/Android อย่างเป็นทางการจะเชื่อมต่อโดยอัตโนมัติ หาก รอการอนุมัติ แสดงคำขอ ให้ตรวจสอบบทบาทและขอบเขตก่อนอนุมัติ
การสร้างรหัสตั้งค่าต้องใช้ operator.admin และปุ่มจะถูกปิดใช้งานสำหรับเซสชันที่ไม่มีสิทธิ์ดังกล่าว รหัสตั้งค่ามีข้อมูลรับรองสำหรับเริ่มต้นระบบที่มีอายุสั้น ดังนั้นให้ปฏิบัติต่อ QR และรหัสที่คัดลอกเหมือนรหัสผ่านในช่วงที่ยังใช้ได้ สำหรับการจับคู่ระยะไกล Gateway ต้องแปลงชื่อเป็น wss:// ได้ (เช่น ผ่าน Tailscale Serve/Funnel) ส่วน ws:// แบบธรรมดาจะจำกัดเฉพาะลูปแบ็กและที่อยู่ LAN ส่วนตัว ดูรายละเอียดทั้งหมดเกี่ยวกับความปลอดภัยและทางเลือกสำรองได้ที่ การจับคู่
ข้อมูลประจำตัวส่วนบุคคล (เฉพาะเบราว์เซอร์)
Control UI รองรับข้อมูลประจำตัวส่วนบุคคลแยกตามเบราว์เซอร์ (ชื่อที่แสดงและอวาตาร์) ซึ่งแนบไปกับข้อความขาออกเพื่อระบุผู้ส่งในเซสชันที่ใช้ร่วมกัน ข้อมูลนี้อยู่ในพื้นที่จัดเก็บของเบราว์เซอร์ จำกัดขอบเขตไว้ที่โปรไฟล์เบราว์เซอร์ปัจจุบัน และไม่ซิงค์ไปยังอุปกรณ์อื่นหรือจัดเก็บฝั่งเซิร์ฟเวอร์ นอกเหนือจากข้อมูลเมตาผู้เขียนตามปกติในบันทึกข้อความที่ส่ง การล้างข้อมูลเว็บไซต์หรือเปลี่ยนเบราว์เซอร์จะรีเซ็ตข้อมูลนี้ให้ว่าง
การแทนที่อวาตาร์ของผู้ช่วยใช้รูปแบบเฉพาะเบราว์เซอร์เดียวกัน: การแทนที่ที่อัปโหลดจะซ้อนทับข้อมูลประจำตัวที่ Gateway แก้ไขไว้เฉพาะภายในเครื่อง และจะไม่ส่งไปกลับผ่าน config.patch ฟิลด์การกำหนดค่าที่ใช้ร่วมกัน ui.assistant.avatar ยังคงพร้อมใช้งานสำหรับไคลเอนต์ที่ไม่ใช่ UI ซึ่งเขียนฟิลด์นี้โดยตรง
ปลายทางการกำหนดค่ารันไทม์
Control UI ดึงการตั้งค่ารันไทม์จาก /control-ui-config.json โดยแก้ไขแบบสัมพัทธ์กับพาธฐาน Control UI ของ Gateway (เช่น /__openclaw__/control-ui-config.json ภายใต้พาธฐาน /__openclaw__/) ปลายทางนี้อยู่ภายใต้การยืนยันตัวตน Gateway แบบเดียวกับพื้นผิว HTTP ส่วนที่เหลือ: เบราว์เซอร์ที่ไม่ได้ยืนยันตัวตนจะดึงข้อมูลไม่ได้ และการดึงข้อมูลให้สำเร็จต้องใช้โทเค็น/รหัสผ่าน Gateway ที่ถูกต้อง ข้อมูลประจำตัว Tailscale Serve หรือข้อมูลประจำตัวพร็อกซีที่เชื่อถือได้
สถานะโฮสต์ Gateway
เปิด Settings → General เพื่อดูการ์ด Gateway Host ซึ่งแสดงเครื่อง Gateway, ที่อยู่ LAN, ระบบปฏิบัติการ, รันไทม์, ระยะเวลาทำงาน, โหลด CPU, หน่วยความจำ และพื้นที่ดิสก์ของวอลุ่มสถานะ การ์ดจะรีเฟรชทุก 10 วินาทีขณะแสดงอยู่ผ่าน Gateway RPC system.info ซึ่งต้องมีขอบเขต operator.read Gateway รุ่นเก่าและการเชื่อมต่อที่ไม่มีขอบเขตดังกล่าวจะไม่แสดงการ์ดนี้
การรองรับภาษา
Control UI จะปรับภาษาตามภาษาของเบราว์เซอร์เมื่อโหลดครั้งแรก หากต้องการแทนที่ในภายหลัง ให้เปิด Settings -> General -> Language (ตัวเลือกภาษาอยู่ในหน้า General ไม่ได้อยู่ใต้ Appearance)
- ภาษาที่รองรับ:
en,ar,de,es,fa,fr,hi,id,it,ja-JP,ko,nl,pl,pt-BR,ru,th,tr,uk,vi,zh-CN,zh-TW - คำแปลที่ไม่ใช่ภาษาอังกฤษจะโหลดแบบ Lazy Loading ในเบราว์เซอร์
- ภาษาที่เลือกจะถูกบันทึกในพื้นที่จัดเก็บของเบราว์เซอร์และนำกลับมาใช้ในการเข้าชมครั้งต่อไป
- คีย์คำแปลที่ไม่มีจะย้อนกลับไปใช้ภาษาอังกฤษ
คำแปลเอกสารจะถูกสร้างสำหรับชุดภาษาที่ไม่ใช่ภาษาอังกฤษเดียวกัน แต่ตัวเลือกภาษา Mintlify ในตัวของเว็บไซต์เอกสารจะแสดงเฉพาะรหัสภาษาที่ Mintlify ยอมรับ เอกสารภาษาไทย (th) และภาษาเปอร์เซีย (fa) ยังคงถูกสร้างใน repo สำหรับเผยแพร่ แต่อาจไม่ปรากฏในตัวเลือกดังกล่าวจนกว่า Mintlify จะรองรับรหัสเหล่านั้น
ธีมรูปลักษณ์
แผง Appearance มีธีม Claw, Knot และ Dash ในตัว (Claw เป็นค่าเริ่มต้น) พร้อมช่องนำเข้า tweakcn เฉพาะเบราว์เซอร์หนึ่งช่อง หากต้องการนำเข้าธีม ให้เปิด เครื่องมือแก้ไข tweakcn เลือกหรือสร้างธีม คลิก Share แล้ววางลิงก์ที่คัดลอกลงใน Appearance เครื่องมือนำเข้ายังรองรับ URL รีจิสทรี https://tweakcn.com/r/themes/<id>, URL เครื่องมือแก้ไข เช่น https://tweakcn.com/editor/theme?theme=amethyst-haze, พาธสัมพัทธ์ /themes/<id>, ID ธีมดิบ และชื่อธีมเริ่มต้น เช่น amethyst-haze
ธีมที่นำเข้าจะถูกจัดเก็บเฉพาะในโปรไฟล์เบราว์เซอร์ปัจจุบัน โดยจะไม่เขียนลงในการกำหนดค่า Gateway และไม่ซิงค์ข้ามอุปกรณ์ การแทนที่ธีมที่นำเข้าจะอัปเดตช่องภายในเครื่องเพียงช่องเดียว ส่วนการล้างธีมจะสลับกลับไปเป็น Claw หากธีมที่นำเข้าเปิดใช้งานอยู่
Appearance ยังมีการตั้งค่าขนาดข้อความ ซึ่งใช้กับข้อความแชต ข้อความในช่องเขียน การ์ดเครื่องมือ และแถบด้านข้างของแชต และคงขนาดช่องป้อนข้อความไว้อย่างน้อย 16px เพื่อไม่ให้ Safari บนอุปกรณ์เคลื่อนที่ซูมโดยอัตโนมัติเมื่อโฟกัส
ธีม โหมดธีม ขนาดข้อความ ภาษา และค่ากำหนดการแสดงผลแชตจะซิงค์ผ่านการกำหนดค่า Gateway (ui.prefs) จึงติดตามไปยังอุปกรณ์ต่าง ๆ และเอเจนต์สามารถเปลี่ยนค่าเหล่านี้ผ่านด่านการอนุมัติได้ โดยไคลเอนต์ที่เชื่อมต่อจะใช้การเปลี่ยนแปลงแบบสดผ่านประกาศ config.changed ของ Gateway แต่ละเบราว์เซอร์จะเก็บสำเนาภายในเครื่องเพื่อเริ่มทำงานทันที ส่วนไคลเอนต์ที่เขียนการกำหนดค่าไม่ได้ (ขอบเขตผู้ดู ออฟไลน์) จะเก็บการเปลี่ยนแปลงไว้เฉพาะอุปกรณ์ ดู ข้อมูลอ้างอิงการกำหนดค่า
การดูแลระบบ OpenClaw
เปิด Settings → Ask OpenClaw เพื่อสนทนากับเอเจนต์ตั้งค่าและซ่อมแซมระบบ นอกขั้นตอนการเริ่มต้นใช้งาน หน้านี้จะแสดงชิปเหตุการณ์ที่ปิดได้ไม่เกินหนึ่งรายการต่อการเข้าชม โดยจะไม่ตอบสนองต่อการรับส่งข้อมูลตามปกติของ Gateway และจะตอบสนองเฉพาะสแนปช็อตสถานภาพที่รายงานว่าตัวโหลดการกำหนดค่าใหม่ถูกปิดใช้งาน ช่องทางที่กำหนดค่าไว้ขาดการเชื่อมต่อ/ประสิทธิภาพลดลง การตรวจสอบช่องทางล้มเหลว หรือข้อมูลรับรองช่องทางไม่พร้อมใช้งาน เหตุการณ์ใหม่กว่าจะแทนที่ชิปที่รอดำเนินการเฉพาะเมื่อมีความรุนแรงมากกว่า การปิดหรือใช้ชิปจะระงับข้อความแจ้งเหตุการณ์สำหรับการเข้าชมนั้น การคลิกชิปจะส่งคำถามวินิจฉัยเป็นข้อความ openclaw.chat จริง บันทึกข้อความจึงเก็บคำขอไว้และ OpenClaw จะดำเนินการวินิจฉัย ขั้นตอนการเริ่มต้นใช้งานจะไม่แสดงชิปเหตุการณ์เหล่านี้
จัดการ Plugin
เปิด Plugin ในแถบด้านข้าง หรือใช้ /settings/plugins แบบสัมพัทธ์กับ
พาธฐาน Control UI ที่กำหนดค่าไว้ เพื่อเรียกดูและจัดการ Plugin โดยไม่ต้องออกจาก
Control UI ตัวอย่างเช่น พาธฐาน /openclaw จะใช้
/openclaw/settings/plugins หน้านี้พร้อมใช้งานเสมอ แม้ว่า
Plugin เสริมทั้งหมดจะถูกปิดใช้งาน
Plugin เป็นศูนย์รวมที่มีสี่แท็บ: ติดตั้งแล้ว และ ค้นหา ใช้จัดการโค้ด Plugin
ที่ /settings/plugins, Skills โฮสต์ตัวจัดการ Skills แยกตามเอเจนต์ที่
/skills และ เวิร์กช็อป โฮสต์การตรวจทานข้อเสนอ Skill Workshop ที่
/skills/workshop แต่ละแท็บมี URL ของตัวเอง และแถบด้านข้างจะแสดง
รายการ Plugin รายการเดียวสำหรับทั้งหมด
แท็บ ติดตั้งแล้ว แสดงรายการภายในเครื่องทั้งหมดโดยจัดกลุ่มตามหมวดหมู่ พร้อม
จำนวนภาพรวม แต่ละแถวเปิดมุมมองรายละเอียด เมนูรายการเพิ่มเติม (…) ของแถวนั้นใช้
เปิดหรือปิดใช้ Plugin และมีตัวเลือก นำออก สำหรับ Plugin ที่ติดตั้งจากภายนอก
นอกจากนี้ยังแสดงรายการ เซิร์ฟเวอร์ MCP ที่กำหนดค่าไว้ และรองรับการเพิ่ม การปิดใช้งาน
และการนำออกภายในหน้าเดียวกัน การควบคุมเซิร์ฟเวอร์แบบเดียวกันอยู่ที่ Settings → MCP
แท็บ ค้นหา คือร้านค้า ซึ่งมี Plugin เด่นที่รวมมากับ OpenClaw,
Plugin ภายนอกอย่างเป็นทางการ และตัวเชื่อมต่อ MCP แบบคลิกเดียวสำหรับบริการยอดนิยม
การพิมพ์ในช่องค้นหาจะค้นหา
ClawHub ภายในหน้า และเพิ่มส่วน จาก ClawHub
พร้อมจำนวนการดาวน์โหลดและป้ายยืนยันแหล่งที่มา Deep Link สามารถ
นำไปยังร้านค้าโดยตรงด้วย /settings/plugins?tab=discover
แท็บ Skills มีรายงานสถานะ Skills, สวิตช์เปิด/ปิด, ช่องป้อนคีย์ API และการค้นหา Skills ใน ClawHub ภายในหน้า โดยจำกัดขอบเขตตามเอเจนต์ที่เลือก แท็บ เวิร์กช็อป มีบอร์ด Skill Workshop และขั้นตอนการตรวจทานประจำวันนี้สำหรับ ข้อเสนอ Skills ค้นหาแนวคิด Skills จะตรวจทานเซสชันที่มีเนื้อหาสำคัญ ในช่วงที่จำกัด โดยเรียงจากใหม่ที่สุดไปเก่าที่สุด และเก็บผลลัพธ์ไว้เป็น ข้อเสนอที่รอดำเนินการ แผงจะแสดงความครอบคลุมสะสม ส่วน สแกนงานก่อนหน้า จะดำเนินการต่อจากเคอร์เซอร์ที่จัดเก็บไว้ แล้วเปลี่ยนเป็น สแกนงานใหม่ หลังจากประวัติ ที่เก่ากว่าหมดแล้ว การตรวจทานประวัติด้วยตนเองทำงานได้ขณะที่การเรียนรู้ด้วยตนเองแบบอัตโนมัติ ถูกปิดใช้งาน และใช้โมเดลที่กำหนดค่าไว้ของเอเจนต์ที่เลือก
Plugin ที่รวมมาให้อยู่บน Gateway แล้ว และจะแสดง เปิดใช้งาน หรือ ปิดใช้งาน แทน ติดตั้ง ตัวอย่างเช่น Workboard รวมมากับ OpenClaw แต่ปิดใช้งานโดยค่าเริ่มต้น ดังนั้นการดำเนินการจึงเป็น เปิดใช้งาน Plugin ที่รวมมา ไม่สามารถนำออกได้ ทำได้เพียงปิดใช้งานเท่านั้น
การอ่านแค็ตตาล็อกและการค้นหา ClawHub ต้องใช้ operator.read ส่วนการติดตั้ง
เปิดใช้ ปิดใช้ หรือลบ Plugin และการเปลี่ยนเซิร์ฟเวอร์ MCP ต้องใช้
operator.admin; การดำเนินการเหล่านั้นจะยังคงถูกปิดใช้งานสำหรับผู้ปฏิบัติงานที่มีสิทธิ์อ่านอย่างเดียว
การติดตั้งจาก ClawHub ดำเนินการผ่าน Gateway และใช้การตรวจสอบความน่าเชื่อถือ ความสมบูรณ์
และนโยบายการติดตั้ง Plugin เช่นเดียวกับการติดตั้งอื่นที่ดำเนินการผ่าน Gateway การติดตั้ง
หรือลบโค้ด Plugin ต้องรีสตาร์ท Gateway การเปิดใช้หรือปิดใช้
Plugin ที่ติดตั้งแล้วสามารถมีผลได้โดยไม่ต้องรีสตาร์ทเมื่อ Plugin และรันไทม์
Gateway ปัจจุบันรองรับ มิฉะนั้น UI จะแจ้งว่าจำเป็นต้อง
รีสตาร์ท ตัวเชื่อมต่อ MCP ที่ใช้ OAuth ต้องดำเนินการ
openclaw mcp login <name> จาก CLI หนึ่งครั้งหลังจากเพิ่มแล้ว
หน้านี้มุ่งเน้นที่รายการสิ่งที่มีอยู่ การค้นหา การติดตั้ง การเปิดใช้
และการลบโดยเจตนา ใช้ openclaw plugins สำหรับแหล่งที่มาแบบ npm, git หรือ
พาธภายในเครื่องที่กำหนดเอง การอัปเดต และการกำหนดค่า Plugin ขั้นสูง
แอปและส่วนขยาย
เปิด แอป จากเมนู เพิ่มเติม ในแถบด้านข้าง พาเล็ตคำสั่ง หรือเมนู
เอเจนต์ในแถบด้านข้าง (รับแอป) หรือใช้ /apps โดยอ้างอิงจาก
พาธฐานของ Control UI ที่กำหนดค่าไว้ หน้านี้รวบรวมลิงก์ติดตั้งสำหรับทุก
พื้นผิวเสริมของ OpenClaw ได้แก่ แอป iOS และ
Android, แอปเสริม Apple Watch และ Wear OS
ที่มาพร้อมกัน, แอปเดสก์ท็อป macOS, Windows
และ Linux, ส่วนขยาย Chrome,
ศูนย์รวม Plugin ภายในแอปพร้อม ClawHub ตลอดจนชุมชน Discord และเอกสาร
การนำทางด้วยแถบด้านข้าง
แถบด้านข้างจัดระเบียบทุกอย่างโดยมีเอเจนต์เป็นศูนย์กลาง แถวข้อมูลประจำตัวด้านบนคือเอเจนต์ที่ใช้งานอยู่ ด้านล่าง ส่วน หน้า เริ่มด้วย หน้าหลัก ซึ่งเป็นเซสชันหลักที่ดำเนินต่อเนื่องของเอเจนต์ โดยมีป้ายแสดงสถานะที่ยังไม่ได้อ่านหรือกำลังทำงาน ตามด้วยปลายทางที่ปักหมุดไว้ (การใช้งาน, ระบบอัตโนมัติ และ Plugin เป็นค่าเริ่มต้น) ตัวควบคุมปรับแต่งบนส่วนหัวของหน้าเปิดเมนูที่มีปลายทางอื่นทั้งหมด รวมถึงแท็บที่ Plugin จัดเตรียมให้ พร้อม แก้ไขรายการที่ปักหมุด; การคลิกขวาบริเวณการนำทางจะเปิดตัวแก้ไขการปักหมุดโดยตรง รายการเซสชันด้านล่างแบ่งเป็นโซน ได้แก่ เธรด สำหรับเซสชันแชตของเอเจนต์ (เซสชันหลักอยู่หลังหน้าหลัก เซสชันที่เซสชันนั้นสร้างขึ้นจะแสดงที่นี่เป็นเธรดระดับบน และเธรดที่ตั้งชื่อจะแสดงโดยไม่มีคำนำหน้าประเภท), กลุ่ม สำหรับการสนทนาแบบกลุ่มและห้อง และ การเขียนโค้ด สำหรับเซสชันที่ผูกกับเวิร์กทรีที่มีการจัดการหรือโหนด exec (แต่ละแถวแสดงบรรทัด repo ⎇ branch พร้อมโฮสต์ของโหนด), เซสชันชุดทดสอบที่ใช้ ACP และแค็ตตาล็อก CLI ของ Codex/Claude การเขียนโค้ดจะยุบไว้เมื่อเรียกใช้ครั้งแรกและจดจำตัวเลือกของคุณ ส่วนหัวที่ยุบไว้จะคงจำนวนจริงและแสดงตัวบ่งชี้การทำงานขณะที่เซสชันภายในกำลังทำงาน กลุ่มที่กำหนดเอง (category ของเซสชัน) และแถว ปักหมุดแล้ว อยู่เหนือเธรด และการกำหนดเซสชันให้กลุ่มที่กำหนดเองจะมีลำดับความสำคัญเหนือการจัดประเภทโซนอัตโนมัติเสมอ ส่วนหัวของเธรดมีตัวควบคุมการจัดเรียง (สร้างเมื่อ หรือ อัปเดตล่าสุด พร้อมสวิตช์จัดกลุ่มตาม) และ + ซึ่งเปิดหน้าสร้างเซสชันใหม่ การเปิดเซสชันจะย้ายไฮไลต์การเลือกโดยไม่จัดเรียงแถวใหม่ เซสชันแม่ที่มีการทำงานของเซสชันลูกเมื่อไม่นานมานี้จะแสดงตัวเปิดเผยข้อมูลและจำนวนเซสชันลูก ขยายเพื่อดูเซสชันลูกที่ซ้อนอยู่ สถานะแบบสดหรือสิ้นสุดแล้ว และรันไทม์ได้โดยไม่ต้องออกจากแถบด้านข้าง การเลือกเซสชันลูกจะเปิดแชตและแสดงพาธบรรพบุรุษโดยอัตโนมัติ แถวเซสชันลูกไม่อยู่ในการจัดกลุ่มระดับราก การปักหมุด การลาก การเลือกหลายรายการ และการแบ่งหน้า ส่วนโซนที่ยุบไว้จะไม่ใช้โควตาของหน้าที่มองเห็นได้ เซสชันที่มีกิจกรรมใหม่หลังจากอ่านครั้งล่าสุดจะแสดงจุดยังไม่ได้อ่าน และการเปิดเซสชันจะทำเครื่องหมายว่าอ่านแล้ว เอเจนต์ยังสามารถเผยแพร่บรรทัดสถานะสั้นที่หมดอายุได้ และเลือกขอให้สนใจด้วยไอคอนสีเหลืองอำพันที่คัดสรรไว้ได้ การประกาศนั้นจะถูกล้างเมื่อเปิดเซสชัน ส่งข้อความถัดไป ล้างอย่างชัดเจน หรือเมื่อ TTL หมดอายุ สถานะวงจรชีวิตของเวิร์กเกอร์บนคลาวด์ใช้ป้ายรูปลูกโลก ส่วนเซสชันภายในเครื่องและเซสชันที่เรียกคืนแล้วจะไม่มีป้ายตำแหน่ง เนื่องจากการดำเนินการภายในเครื่องเป็นค่าเริ่มต้น แถวเซสชันระดับรากแต่ละแถวมีเมนูบริบท (ปุ่มจุดสามจุดแนวตั้งหรือคลิกขวา) พร้อม ปักหมุด/เลิกปักหมุด, ทำเครื่องหมายว่ายังไม่ได้อ่าน/อ่านแล้ว, เปลี่ยนชื่อ, แยกแขนง, ย้ายไปยังกลุ่ม (รวมถึง กลุ่มใหม่ และ นำออกจากกลุ่ม), เก็บถาวร และ ลบ; เลย์เอาต์แบบสัมผัสจะแสดงตัวควบคุมการปักหมุดและเมนูโดยตรงไว้เสมอ การ Cmd/Ctrl-click จะสลับแถวระดับรากเข้าสู่การเลือกหลายรายการ และ Shift-click จะขยายการเลือกตามลำดับที่มองเห็นได้ จากนั้นการเปิดเมนูบนแถวที่เลือกจะแสดงการดำเนินการแบบกลุ่ม (ทำเครื่องหมาย N รายการว่ายังไม่ได้อ่าน/อ่านแล้ว, ย้าย N รายการไปยังกลุ่ม, เก็บถาวร N รายการ, ลบ N รายการ) ซึ่งใช้กับทุกเซสชันที่เลือก โดยยืนยันเพียงครั้งเดียวสำหรับการลบแบบกลุ่ม ลากเซสชันระดับรากไปยัง ปักหมุดแล้ว เพื่อปักหมุด หรือลากไปยังกลุ่มที่กำหนดเองเพื่อย้าย ส่วนหัวของกลุ่มที่กำหนดเองสามารถยุบ ขยาย หรือลากเพื่อจัดลำดับใหม่ได้ ชื่อกลุ่มและลำดับจะอยู่ใน Gateway (sessions.groups.*) จึงติดตามคุณไปในทุกเบราว์เซอร์ ส่วนสถานะการยุบจะอยู่ในโปรไฟล์เบราว์เซอร์ ส่วนหัวของกลุ่มยังมีเมนู (ปุ่มจุดสามจุดแนวตั้งหรือคลิกขวา) พร้อม เปลี่ยนชื่อกลุ่ม, กลุ่มใหม่ และ ลบกลุ่ม; การเปลี่ยนชื่อหรือลบกลุ่มจะอัปเดตเซสชันสมาชิกทั้งหมดที่ฝั่งเซิร์ฟเวอร์ รวมถึงเซสชันที่เก็บถาวร และการลบกลุ่มจะเก็บเซสชันไว้และย้ายกลับไปยังเธรด
หน้าสร้างเซสชันใหม่
เครื่องหมาย + ในส่วนหัวรายการเซสชันของแถบด้านข้างจะเปิดฉบับร่างแบบเต็มหน้าที่ /new: จะยังไม่มีการสร้างสิ่งใดจนกว่าจะส่งข้อความแรก แถวเป้าหมายเหนือกล่องข้อความใช้เลือกตำแหน่งที่เซสชันทำงาน ได้แก่ เอเจนต์ (การตั้งค่าแบบหลายเอเจนต์), ตำแหน่งที่ exec ทำงาน (Gateway · ภายในเครื่อง หรือโหนดที่จับคู่ซึ่งเปิดเผย system.run; ต้องใช้ operator.admin), โฟลเดอร์ (ค่าเริ่มต้นคือพื้นที่ทำงานของเอเจนต์; พาธ Gateway แบบสัมบูรณ์อื่นต้องใช้ operator.admin และเวิร์กทรี) และสวิตช์ เวิร์กทรี ที่เลือกใช้ได้ พร้อมตัวเลือกสาขาฐาน (รองรับโดย worktrees.branches จึงไม่มีการ fetch) และชื่อเวิร์กทรีที่เลือกใส่ได้ (สาขาจะกลายเป็น openclaw/<name>) ส่วนท้ายของตัวเขียนข้อความใช้เลือกโมเดลและระดับการใช้เหตุผลของเซสชันใหม่ และการเริ่มต้นบนคลาวด์จะบันทึกตัวเลือกทั้งสองก่อนส่งเซสชันไปยังเวิร์กเกอร์ ปุ่มเรียกดูของชิปโฟลเดอร์จะเปิดตัวเลือกไดเรกทอรีแบบอินไลน์ซึ่งรองรับโดยเมธอด fs.listDir ที่ใช้ได้เฉพาะผู้ดูแลระบบ ระดับบนสุดจะแสดง Gateway และโหนดที่รู้จักทั้งหมด โหนดออฟไลน์และโหนดที่ไม่รองรับการเรียกดูไดเรกทอรีจะยังคงแสดงอยู่แต่ถูกปิดใช้งาน การเลือก Gateway จะเริ่มจากโฟลเดอร์ปัจจุบันหรือโฮมของ Gateway การเลือกโหนดที่รองรับจะเรียกดูระบบไฟล์ของโฮสต์โหนดนั้น ผูก exec เข้ากับโหนด และใช้พาธสัมบูรณ์ของโหนดที่เลือกโดยตรง (เวิร์กทรีที่มีการจัดการยังคงใช้ได้เฉพาะ Gateway) การส่งจะเรียก sessions.create พร้อมข้อความแรก ทำให้การทำงานเริ่มภายในรอบการรับส่งเดียวกันและ UI ข้ามไปยังแชตของเซสชันใหม่ หาก Gateway สร้างเซสชันสำเร็จแต่ปฏิเสธการส่งครั้งแรก แชตจะเก็บพรอมต์และข้อผิดพลาดไว้แม้โหลดใหม่; ลองอีกครั้ง จะส่งผ่านเซสชันที่สร้างไว้แล้วแทนการสร้างเซสชันใหม่อีกเซสชัน
ภายใน การตั้งค่า แถบด้านข้างเฉพาะมี ถาม OpenClaw และเริ่มต้นด้วยช่อง ค้นหาการตั้งค่า เพื่อค้นหาส่วนต่าง ๆ ของการตั้งค่าอย่างรวดเร็ว
ช่อง ค้นหา ที่ด้านบนของแถบด้านข้างจะเปิดพาเล็ตคำสั่ง (⌘K) การคลิกแถวข้อมูลประจำตัวของเอเจนต์ที่ด้านบนของแถบด้านข้างจะเปิดเมนูเอเจนต์; หน้าหลัก จะเปิดเซสชันหลัก เมื่อมีบางสิ่งต้องดำเนินการ เช่น งาน cron ที่ล้มเหลวหรือเกินกำหนด หรือการยืนยันตัวตนของโมเดลที่กำลังจะหมดอายุหรือหมดอายุแล้ว ชิปแจ้งเตือนแบบกะทัดรัดจะปรากฏเหนือส่วนท้ายของแถบด้านข้างและคลิกผ่านไปยังหน้าที่เป็นเจ้าของได้ แถวข้อมูลประจำตัวจะแสดงอวาตาร์ของเอเจนต์ (รูปภาพหรืออีโมจิประจำตัว), ชื่อ, จุดแสดงการเชื่อมต่อ และคำบรรยายสด การคลิกจะเปิดเมนูเอเจนต์ ซึ่งประกอบด้วยตัวสลับเอเจนต์ (การตั้งค่าแบบหลายเอเจนต์), "เอเจนต์นี้ทำอะไรได้บ้าง?", การตั้งค่าเอเจนต์, การตั้งค่า, การจับคู่อุปกรณ์เคลื่อนที่, เอกสาร, ชิปบิลด์ และสวิตช์โหมดสี รายชื่อที่มีเอเจนต์มากกว่าสิบตัวจะมีช่องกรองและแสดงเอเจนต์ที่ปักหมุดก่อน ปักหมุดหรือเลิกปักหมุดเอเจนต์จากหน้าการตั้งค่าเอเจนต์ โดยชุดที่ปักหมุดจะถูกจัดเก็บในโปรไฟล์เบราว์เซอร์ การเลือกเอเจนต์จะจำกัดขอบเขตแชต รวมถึงการใช้งาน ระบบอัตโนมัติ งาน กระดานงาน และเซสชันให้เป็นของเอเจนต์นั้น หน้าที่มีขอบเขตแต่ละหน้ามีตัวควบคุม เอเจนต์ พร้อม เอเจนต์ทั้งหมด สำหรับออกจากขอบเขต ซึ่งจะขยายขอบเขตหน้าที่ใช้ร่วมกันโดยไม่เปลี่ยนเอเจนต์แชตที่ระบุไว้ ขณะที่ลิงก์เซสชันโดยตรงยังคงเปิดเป้าหมายของลิงก์ หน้าการตั้งค่าเอเจนต์จะเก็บการเลือก ?agent= ของตนเองและไม่เปลี่ยนตามขอบเขตหน้าที่ใช้ร่วมกัน แถบส่วนท้ายมีโลโก้ผลิตภัณฑ์ ชิปบิลด์ จุดแสดงการเชื่อมต่อ Gateway และทางลัดการตั้งค่า เมื่อ Gateway ทำงานจากการ checkout ซอร์สบนสาขาอื่นที่ไม่ใช่ main ส่วนท้ายจะแสดงชื่อสาขานั้นเป็นสีแดงด้วย เพื่อให้เห็นได้ทันทีว่าเป็น Gateway ที่ไม่ใช่รุ่นเผยแพร่ (การติดตั้งรุ่นเผยแพร่จะไม่แสดง) Shift-Command-Comma เปิด การตั้งค่า โดยไม่แทนที่ทางลัด Command-Comma ของเบราว์เซอร์ ส่วนหัวของแถบด้านข้างยังมีสวิตช์ยุบ (⌘B); การยุบจะซ่อนแถบด้านข้างทั้งหมดเพื่อให้ได้พื้นที่ทำงานเต็มความกว้าง และตัวควบคุมขยายแบบลอย (หรือ ⌘B) จะนำกลับมา; แอป macOS จะโฮสต์สวิตช์นั้นแบบเนทีฟในแถบชื่อเรื่องแทน แถบด้านข้างเป็นองค์ประกอบการนำทางเพียงอย่างเดียวบนเดสก์ท็อป โดยไม่มีแถบด้านบน วิวพอร์ตแคบจะแทนแถบด้านข้างด้วยลิ้นชักแบบเลื่อนทับหลังแถวส่วนหัวกะทัดรัดซึ่งมีสวิตช์ลิ้นชัก แบรนด์ และการค้นหาพาเล็ตคำสั่ง; บนโทรศัพท์ แชตจะรวมแถวการนำทางนั้นไว้ในแถบชื่อเรื่อง โดยมีตัวควบคุมเมนูและการค้นหาอยู่ข้างชื่อเซสชัน ในแอป macOS แถวส่วนหัวแยกจะรวมพื้นที่เผื่อแถบชื่อเรื่องไว้ในแถบกะทัดรัดแถบเดียวข้างตัวควบคุมหน้าต่าง การนำทางใช้ประวัติเบราว์เซอร์ตามปกติ ดังนั้นปุ่มย้อนกลับ/ไปข้างหน้าของเบราว์เซอร์จึงใช้เลื่อนผ่านการนำทางได้ แอป macOS เพิ่มสวิตช์แถบด้านข้างแบบเนทีฟข้างตัวควบคุมหน้าต่าง พร้อมท่าทางปัดบนแทร็กแพด โดยมีปุ่มย้อนกลับ/ไปข้างหน้าที่ขอบขวาของแถบด้านข้างขณะขยาย และมีปุ่มค้นหาแบบเนทีฟ (พาเล็ตคำสั่ง) กับปุ่มสร้างเซสชันใหม่ขณะยุบ
การอนุมัติที่รอดำเนินการจะเพิ่มชิปแจ้งเตือนเหนือส่วนท้ายของแถบด้านข้างด้วย; เลือกชิปเพื่อเปิดหน้าการอนุมัติที่เป็นเจ้าของรายการนั้น
สิ่งที่ทำได้ (วันนี้)
แชตและการสนทนา
- แชตกับโมเดลผ่าน Gateway WS (
chat.history,chat.send,chat.abort,chat.inject) - การรีเฟรชประวัติแชตจะร้องขอเฉพาะช่วงข้อความล่าสุดที่มีขอบเขตจำกัด พร้อมจำกัดปริมาณข้อความต่อรายการ เพื่อให้เซสชันขนาดใหญ่ไม่บังคับให้เบราว์เซอร์เรนเดอร์เพย์โหลดบทสนทนาทั้งหมดก่อนที่จะเริ่มใช้งานแชตได้
- เมื่อวางเมาส์เหนือหรือใช้แป้นพิมพ์โฟกัสลิงก์ issue หรือ pull request สาธารณะของ GitHub ระบบจะแสดงสถานะ ชื่อเรื่อง ผู้เขียน กิจกรรมล่าสุด ความคิดเห็น และสถิติการเปลี่ยนแปลง Gateway ที่เชื่อมต่อจะดึงและแคชข้อมูลเมตาสาธารณะโดยไม่เปลี่ยนปลายทางของลิงก์ รวมถึงเมื่อ UI ใช้ Gateway ระยะไกล Gateway จะใช้
GH_TOKENหรือGITHUB_TOKENหากพร้อมใช้งาน หลังจากยืนยันแล้วว่า repository เป็นสาธารณะ มิฉะนั้นจะใช้ API แบบไม่ระบุตัวตนของ GitHub พร้อมระยะเวลาแคชที่นานกว่า - สนทนาผ่านเซสชันเรียลไทม์ของเบราว์เซอร์ OpenAI ใช้ WebRTC โดยตรง, Google Live ใช้โทเค็นเบราว์เซอร์แบบใช้ครั้งเดียวที่มีสิทธิ์จำกัดผ่าน WebSocket และ Plugin เสียงเรียลไทม์ที่ทำงานเฉพาะแบ็กเอนด์ใช้การรับส่งผ่านรีเลย์ของ Gateway เซสชันเบราว์เซอร์ที่รองรับวิดีโอสามารถเลือกกล้องภายในอุปกรณ์ใน Settings หรือสลับกล้องจากภาพตัวอย่างสดได้ โดยเบราว์เซอร์จะจับภาพเฟรม JPEG สำหรับผู้ให้บริการเรียลไทม์โดยไม่สตรีมวิดีโอจากกล้องผ่าน Gateway เซสชันผู้ให้บริการที่ไคลเอนต์เป็นเจ้าของเริ่มต้นด้วย
talk.client.create; เซสชันรีเลย์ของ Gateway เริ่มต้นด้วยtalk.session.createรีเลย์จะเก็บข้อมูลประจำตัวของผู้ให้บริการไว้บน Gateway ขณะที่เบราว์เซอร์สตรีม PCM จากไมโครโฟนผ่านtalk.session.appendAudio, ส่งต่อการเรียกใช้เครื่องมือของผู้ให้บริการopenclaw_agent_consultผ่านtalk.client.toolCallเพื่อใช้นโยบายของ Gateway และโมเดล OpenClaw ที่มีขนาดใหญ่กว่าตามการกำหนดค่า และส่งการควบคุมทิศทางด้วยเสียงของการรันที่กำลังทำงานผ่านtalk.client.steerหรือtalk.session.steer - สตรีมการเรียกใช้เครื่องมือและการ์ดผลลัพธ์สดของเครื่องมือในแชต (เหตุการณ์ของเอเจนต์) กิจกรรมของเครื่องมือจะแสดงเป็นแถวตามประเภท: คำสั่งเชลล์แสดงคำสั่งพร้อมไฮไลต์ไวยากรณ์และผลลัพธ์แบบเทอร์มินัล; การเรียกแก้ไขและเขียนที่รองรับจะแสดง diff แบบอินไลน์ที่มีขอบเขตจำกัด หมายเลขบรรทัดเมื่อมี และสถิติ
+added -removed; ส่วนการเรียกต่อเนื่องจะยุบเป็นข้อมูลสรุป เช่น "เรียกใช้คำสั่ง 13 รายการ อ่านไฟล์ 6 ไฟล์ แก้ไขไฟล์ 9 ไฟล์" ระหว่างที่การรันยังทำงานอยู่ ชื่อการเรียกที่กำลังทำงานล่าสุดจะเป็นส่วนหัวของกลุ่ม ขยายแถวเพื่อตรวจสอบอาร์กิวเมนต์ที่เหลือและผลลัพธ์ดิบ - ชื่อวัตถุประสงค์ที่ AI สร้างให้สำหรับการเรียกใช้เครื่องมือที่ซับซ้อน (คำสั่งเชลล์ยาว เครื่องมือ Plugin ที่มีอาร์กิวเมนต์จำนวนมาก) ซึ่งเปิดใช้ได้ด้วย
gateway.controlUi.toolTitles: true(ค่าเริ่มต้นปิด) ชื่อมาจากเมธอดchat.toolTitlesแบบแบตช์ผ่านการกำหนดเส้นทางโมเดลอรรถประโยชน์มาตรฐาน โดยใช้utilityModelที่ระบุไว้อย่างชัดเจน (ผู้ให้บริการที่ผู้ดูแลระบบเลือก เช่นเดียวกับงานอรรถประโยชน์อื่น) หรือมิฉะนั้นใช้ค่าเริ่มต้นของโมเดลขนาดเล็กที่ผู้ให้บริการของเซสชันประกาศไว้ และแคชที่ฝั่ง Gateway แยกตามเอเจนต์ เมื่อไม่ได้เปิดใช้ตัวเลือกนี้หรือไม่มีโมเดลต้นทุนต่ำที่ใช้งานได้ แถวจะคงป้ายกำกับแบบกำหนดแน่นอน และจะไม่มีการเรียกใช้โมเดล - เริ่มหรือยกเลิกงานติดตามผลชั่วคราวที่โมเดลแนะนำ โดยคำแนะนำที่ยอมรับจะเปิดเซสชัน managed-worktree ใหม่พร้อมพรอมต์ที่เสนอ
- แท็บกิจกรรมที่มีข้อมูลสรุปกิจกรรมเครื่องมือสดจากการส่ง
session.tool/ เหตุการณ์เครื่องมือที่มีอยู่ โดยจัดเก็บภายในเบราว์เซอร์และให้ความสำคัญกับการปกปิดข้อมูล
ช่องทาง เซสชัน และหน่วยความจำ
- ช่องทาง: สถานะของช่องทางในตัวและช่องทางจาก Plugin ที่รวมมาด้วย/ภายนอก การเข้าสู่ระบบด้วย QR และการกำหนดค่าแยกตามช่องทาง (
channels.status,web.login.*,config.patch) - การรีเฟรชการตรวจสอบช่องทางจะคงสแนปช็อตก่อนหน้าให้มองเห็นขณะที่การตรวจสอบผู้ให้บริการที่ใช้เวลานานยังดำเนินอยู่ และติดป้ายกำกับสแนปช็อตที่ไม่สมบูรณ์เมื่อการตรวจสอบหรือการตรวจประเมินใช้เวลาเกินงบเวลาของ UI
- เธรด (หน้าพื้นที่ทำงานที่
/sessionsพร้อมแท็บ Worktrees อยู่ข้างกัน): แสดงรายการเซสชันของเอเจนต์ที่กำหนดค่าไว้โดยค่าเริ่มต้น ปักหมุดเซสชันที่ใช้บ่อย เปลี่ยนชื่อ เก็บถาวรหรือกู้คืนเซสชันที่ไม่ได้ใช้งาน ถอยกลับจากคีย์เซสชันของเอเจนต์ที่ไม่ได้กำหนดค่าและล้าสมัย และใช้ค่าปรับแต่งโมเดล/การคิด/ความเร็ว/ความละเอียด/การติดตาม/การใช้เหตุผลแยกตามเซสชัน (sessions.list,sessions.patch) เซสชันที่ปักหมุดจะเรียงเหนือเซสชันล่าสุดที่ไม่ได้ปักหมุด; เซสชันที่เก็บถาวรจะอยู่ในมุมมองรายการที่เก็บถาวรของหน้าเธรดและยังคงเก็บบทสนทนาไว้ แถวจะแสดงจุดยังไม่ได้อ่านสำหรับเซสชันที่มีกิจกรรมนับตั้งแต่อ่านครั้งล่าสุด พร้อมการดำเนินการทำเครื่องหมายว่ายังไม่ได้อ่าน/อ่านแล้ว (sessions.patch { unread }) และการดำเนินการแยกแขนงที่แยกบทสนทนาเป็นเซสชันใหม่ (sessions.create { parentSessionKey, fork: true }) ไทล์ภาพรวมเหนือตารางจะสรุปรายการที่โหลดมา (จำนวนเซสชัน การรันที่กำลังทำงาน เซสชันที่ยังไม่ได้อ่าน โทเค็นทั้งหมด) แต่ละแถวมีสัญลักษณ์ประเภทพร้อมจุดแสดงการรันที่กำลังทำงาน สถานะแสดงเป็นจุดธรรมดาพร้อมป้ายกำกับ และคอลัมน์โทเค็นจะแสดงมาตรวัดการใช้หน้าต่างบริบทเมื่อเซสชันรายงานขนาดโทเค็นและบริบท การดำเนินการจัดการแถวอยู่ในเมนูประจำแถว (ปุ่มจุดสามจุดหรือคลิกขวา) ซึ่งสอดคล้องกับเมนูเซสชันของแถบด้านข้าง และลิ้นชักแถวแสดงรันไทม์ของเอเจนต์และระยะเวลาการรันร่วมกับรายละเอียดอื่นของเซสชัน - แค็ตตาล็อก Claude และ Codex แบบเนทีฟในแถบด้านข้างจะสตรีมทีละโฮสต์ แล้วปรับข้อมูลให้สอดคล้องหลังการเชื่อมต่อ Node เปลี่ยนแปลง เมื่อหน้าได้รับโฟกัส และไม่เกินทุก 30 วินาทีขณะที่มองเห็น การเปลี่ยนแปลงแค็ตตาล็อกจะกระตุ้นการตรวจซ้ำที่เร็วขึ้น เพื่อให้เซสชันที่สร้างในเครื่องมือแบบเนทีฟปรากฏโดยไม่ต้องโหลด Control UI ใหม่ แถวของ Claude Desktop จะคงป้ายกำกับกลุ่มแบบกำหนดเองในเครื่องไว้ด้วยเมื่อมี; OpenClaw อ่านการแมปนั้นจากที่จัดเก็บภายในเครื่องของ Desktop และจะไม่เขียนข้อมูลลงไป
- การจัดกลุ่มเซสชัน: ตัวควบคุม Group by จัดตารางเซสชันออกเป็นส่วนตามกลุ่มแบบกำหนดเอง ช่องทาง ประเภท เอเจนต์ หรือวันที่ กลุ่มแบบกำหนดเองจะคงอยู่แยกตามเซสชันผ่าน
sessions.patch(category) ดังนั้นเซสชันที่เริ่มจากช่องทางข้อความ (Discord, Telegram, WhatsApp, ...) จึงสามารถจัดหมวดหมู่ได้ด้วย; กำหนดกลุ่มโดยลากแถวไปยังส่วน หรือใช้ตัวเลือกกลุ่มประจำแถว และสร้างกลุ่มด้วยการดำเนินการ New group - หน่วยความจำ (แท็บบนหน้าเอเจนต์ โดยจำกัดขอบเขตตามเอเจนต์ที่เลือก): สถานะ Dreaming สวิตช์เปิด/ปิด และโปรแกรมอ่าน Dream Diary (
doctor.memory.status,doctor.memory.dreamDiary,config.patch) - นำเข้าหน่วยความจำ (
/memory-import, เข้าถึงจากแท็บหน่วยความจำของหน้าเอเจนต์): แสดงตัวอย่างและคัดลอกหน่วยความจำอัตโนมัติของ Claude Code, หน่วยความจำแบบรวมของ Codex หรือไฟล์หน่วยความจำของ Hermes ภายในเครื่องไปยังพื้นที่ทำงานของเอเจนต์ที่เลือก (migrations.memory.plan,migrations.memory.apply) - ข้อเสนอให้นำเข้าหน่วยความจำระหว่างการเริ่มต้นใช้งาน: เมื่อ Control UI เปิดในโหมดเริ่มต้นใช้งาน (
?onboarding=1, ใช้โดยแอปคู่หู Linux หลังการติดตั้งครั้งแรก) กล่องโต้ตอบหน้าเดียวจะเสนอให้นำเข้าหน่วยความจำที่ตรวจพบด้วยขั้นตอนวางแผน/นำไปใช้แบบเดียวกัน; หากข้าม หน้าการตั้งค่าจะยังเป็นจุดเข้าสำหรับดำเนินการภายหลัง
Cron, งาน, Plugin, Skills, อุปกรณ์ และการอนุมัติ exec
- การทำงานอัตโนมัติ (งาน cron): การ์ดสถิติ (จำนวนการทำงานอัตโนมัติ จำนวนที่ล้มเหลว สถานะตัวจัดกำหนดการ การปลุกครั้งถัดไป) เหนือตัวสลับแท็บการทำงานอัตโนมัติ/ประวัติการรัน; แท็บการทำงานอัตโนมัติแสดงรายการงานในตารางที่กรองได้ (ทั้งหมด/ทำงานอยู่/หยุดชั่วคราว การค้นหา ตัวกรองกำหนดการและการรันล่าสุด เมนูการดำเนินการประจำแถว) พร้อมคำแนะนำสำหรับเริ่มต้นด้านล่าง และแท็บประวัติการรันจะแสดงการรันล่าสุดจากการทำงานอัตโนมัติทั้งหมด (
cron.*) - งาน: บัญชีรายการงานเบื้องหลังที่กำลังทำงานและล่าสุดแบบสด พร้อมเซสชันที่เชื่อมโยงและการยกเลิก (
tasks.*) แถบงานเบื้องหลังของแชตจะจัดกลุ่มงานที่กำลังทำและเสร็จแล้ว; เลือกแถวเพื่อตรวจสอบพรอมต์และผลลัพธ์ที่มีขอบเขตจำกัด หรือข้อมูลสรุปข้อผิดพลาด - Plugin: เรียกดูรายการที่ติดตั้งและร้านค้าที่คัดสรร ค้นหา ClawHub ติดตั้งและนำโค้ด Plugin ออก และเปิดหรือปิดใช้ Plugin ที่ติดตั้ง (
plugins.*); แถวเซิร์ฟเวอร์ MCP แก้ไขmcp.serversผ่านเมธอดการกำหนดค่า - Skills: สถานะ เปิด/ปิดใช้ ติดตั้ง อัปเดตคีย์ API (
skills.*) - อุปกรณ์: รายการเดียวรวมระเบียนอุปกรณ์ที่จับคู่ แค็ตตาล็อก Node และสถานะออนไลน์แบบสด (
device.pair.list,node.list,system-presence) โฮสต์ Gateway จะถูกปักหมุดไว้เป็นอันดับแรก; ไคลเอนต์ที่จับคู่จะแสดงสถานะการเชื่อมต่อ บทบาท โทเค็น ความสามารถ และคำสั่ง การจับคู่ที่ซ้ำกันจะยุบเป็นกลุ่มที่ขยายได้ และ Clean up N stale จะนำรายการซ้ำที่ออฟไลน์และผู้ดูแลระบบยืนยันออกเป็นกลุ่ม หากรายการเหล่านั้นได้รับการอนุมัติอัตโนมัติ (ภายในเครื่องแบบเงียบ, CIDR ที่เชื่อถือได้ หรือยืนยันผ่าน SSH) หรือมีอยู่ก่อนที่จะมีข้อมูลที่มาของการอนุมัติ สามารถนำรายการออกได้ (node.pair.remove,device.pair.remove), จัดการการจับคู่อุปกรณ์และการอนุมัติ Node ซ้ำแบบอินไลน์ (device.pair.*,node.pair.approve/reject) และสร้างรหัสตั้งค่าอุปกรณ์เคลื่อนที่จากการ์ดเดียวกัน - การอนุมัติ exec: แก้ไขรายการที่อนุญาตของ Gateway หรือ Node และนโยบายการสอบถามสำหรับ
exec host=gateway/node(exec.approvals.*)
การกำหนดค่า
- ดู/แก้ไข
~/.openclaw/openclaw.json(config.get,config.set) - การนำทางในการตั้งค่าเริ่มต้นด้วย Ask OpenClaw จากนั้นจัดกลุ่มหน้าตามลำดับความสำคัญ ได้แก่ General, Appearance และ Notifications ที่ด้านบน; Connections (Connection, Channels, Communications, Devices); Agents & Tools (Agents, AI & Agents, Model Providers, MCP, Automation, Labs); Privacy & Security (Security, Approvals); และ System (Infrastructure, Advanced, Debug, Logs, About) หน้า General เป็นศูนย์รวมขนาดย่อมที่มีค่าเริ่มต้นของโมเดล ภาษา และสถิติโฮสต์ Gateway ส่วนการตั้งค่าอื่นทั้งหมดจะอยู่ในหน้าใดหน้าหนึ่งเพียงหน้าเดียว
- Privacy & Security: แถวที่คัดสรรไว้สำหรับการยืนยันตัวตนของ Gateway, นโยบายการดำเนินการ, การเปิดใช้งานเบราว์เซอร์, โปรไฟล์เครื่องมือ, การยืนยันตัวตนของอุปกรณ์ และการจับคู่กับอุปกรณ์เคลื่อนที่ ซึ่งอยู่เหนือส่วน
security/approvalsที่อ้างอิงสคีมา - Approvals มีประวัติ 30 วันซึ่งเรียงจากใหม่ไปเก่า สำหรับคำขอดำเนินการ, Plugin และตัวแทนระบบที่ได้รับการจัดการแล้ว กรองตามประเภทหรือเลื่อนดูแถวเก่าเพื่อทบทวนคำตัดสิน เหตุผล เซสชันต้นทาง และข้อมูลระบุตัวผู้ดำเนินการแก้ไขที่ Gateway บันทึกไว้
- Labs แสดงสวิตช์ฟีเจอร์ทดลองที่เผยแพร่แล้ว Code Mode เป็นรายการปัจจุบันและบันทึก
tools.codeMode.enabledทันที ส่วนการทดลองที่ยังไม่เผยแพร่จะไม่ปรากฏและไม่เขียนคีย์การกำหนดค่าที่เป็นเพียงการคาดการณ์ - Notifications: สถานะเว็บพุชของเบราว์เซอร์ การสมัคร/ยกเลิกการสมัคร และการส่งทดสอบ
- Advanced: ทุกส่วนการกำหนดค่าที่ไม่มีหน้าหลักเฉพาะ รวมถึงตัวแก้ไข JSON5 แบบดิบ (เดิมคือโหมด Advanced ของหน้า General)
- Model Setup (
/settings/model-setup) เป็นหน้าย่อยของ Model Providers ซึ่งเปิดจากส่วนหัวของหน้า - Agents: หน้าการตั้งค่า (Settings → Agents,
/settings/agents) ที่มีแท็บแยกตามตัวแทน (Overview, Files, Tools, Skills, Channels, Automations, Memory) แท็บ Overview ใช้แก้ไขอัตลักษณ์ของตัวแทน ได้แก่ ชื่อที่แสดง อีโมจิ และรูปอวตารที่เบราว์เซอร์จะลดขนาดและจำกัดขนาดก่อนagents.updateการบันทึกจะจัดเก็บฟิลด์อัตลักษณ์ที่กำหนดค่าไว้และทำสำเนาไปยังIDENTITY.mdของพื้นที่ทำงาน โดยค่าที่กำหนดค่าไว้จะมีลำดับความสำคัญเหนือการแก้ไขฟิลด์เดียวกันในไฟล์ด้วยตนเอง - Profile: หน้าการตั้งค่าที่แสดงอัตลักษณ์ของตัวแทนเริ่มต้นพร้อมสถิติการใช้งานตลอดช่วงเวลาทั้งหมด ได้แก่ จำนวนโทเค็นตลอดอายุการใช้งาน วันที่มีการใช้งานสูงสุด เซสชันที่ยาวนานที่สุด ช่วงการใช้งานต่อเนื่อง แผนที่ความร้อนของโทเค็นตลอดหนึ่งปี เครื่องมือที่ใช้มากที่สุด และข้อมูลเด่นของช่องทาง (
usage.cost,sessions.usage) - MCP มีหน้าการตั้งค่าเฉพาะพร้อมแถวเซิร์ฟเวอร์ (การรับส่งข้อมูล การเปิดใช้งาน สรุป OAuth/ตัวกรอง/การทำงานขนาน) ตัวควบคุมสำหรับเพิ่ม/เปิดใช้/ปิดใช้/นำออกโดยตรง คำสั่งทั่วไปสำหรับผู้ดูแลระบบ และตัวแก้ไขการกำหนดค่า
mcpที่จำกัดขอบเขตไว้ หน้า Plugins ยังคงเป็นหน้าหลักสำหรับตัวเชื่อมต่อแบบคลิกเดียวและการค้นหา - Model Providers: หน้าการตั้งค่าที่แสดงรายชื่อผู้ให้บริการโมเดลทุกแห่งที่กำหนดค่าไว้ พร้อมไอคอนแบรนด์ สถานะการยืนยันตัวตน (
models.authStatus) ความพร้อมใช้งานของโมเดล (models.list) ข้อมูลแผน/โควตา/การเรียกเก็บเงินแบบสดในกรณีที่ผู้ให้บริการรายงานข้อมูลดังกล่าว (usage.status) และค่าใช้จ่ายของเซสชันภายในเครื่องในช่วง 30 วันที่ผ่านมา (sessions.usage) การดำเนินการ Refresh จะอ่านสถานะข้อมูลประจำตัวและการใช้งานของผู้ให้บริการอีกครั้ง - Connection: หน้าการตั้งค่า (ภายใต้ Connections) ที่จัดการลิงก์ Gateway ของแดชบอร์ดเอง ได้แก่ URL ของ WebSocket, โทเค็น Gateway, รหัสผ่าน และคีย์เซสชันเริ่มต้น รวมถึงสแนปช็อตการจับมือล่าสุด (สถานะ ระยะเวลาทำงาน ช่วงเวลาทิก และการรีเฟรชช่องทางครั้งล่าสุด) ด่านเข้าสู่ระบบแบบออฟไลน์รองรับกรณีที่ขาดการเชื่อมต่อ ส่วนหน้านี้ใช้แก้ไขการเชื่อมต่อขณะที่เชื่อมต่ออยู่
- นำไปใช้และรีสตาร์ตพร้อมการตรวจสอบความถูกต้อง (
config.apply) จากนั้นปลุกเซสชันที่ใช้งานล่าสุด - การเขียนมีตัวป้องกันด้วยแฮชฐานเพื่อไม่ให้เขียนทับการแก้ไขที่เกิดขึ้นพร้อมกัน
- การเขียน (
config.set/config.apply/config.patch) จะตรวจสอบล่วงหน้าว่าสามารถแก้ไข SecretRef ที่ใช้งานอยู่สำหรับการอ้างอิงในเพย์โหลดการกำหนดค่าที่ส่งมาได้หรือไม่ การอ้างอิงที่ส่งมาซึ่งใช้งานอยู่แต่แก้ไขไม่ได้จะถูกปฏิเสธก่อนเขียน - การบันทึกฟอร์มจะทิ้งตัวยึดตำแหน่งที่ปกปิดแล้วและล้าสมัยซึ่งไม่สามารถกู้คืนจากการกำหนดค่าที่บันทึกไว้ พร้อมคงค่าที่ปกปิดแล้วซึ่งยังเชื่อมโยงกับข้อมูลลับที่บันทึกไว้
- การแสดงผลสคีมาและฟอร์มมาจาก
config.schema/config.schema.lookupซึ่งรวมถึงtitle/descriptionของฟิลด์ คำแนะนำ UI ที่ตรงกัน สรุปองค์ประกอบลูกโดยตรง ข้อมูลเมตาของเอกสารในโหนดออบเจ็กต์ซ้อน/ไวลด์การ์ด/อาร์เรย์/องค์ประกอบ รวมถึงสคีมาของ Plugin และช่องทางเมื่อพร้อมใช้งาน ตัวแก้ไข JSON แบบดิบจะใช้ได้เฉพาะเมื่อสแนปช็อตสามารถแปลงไปกลับแบบดิบได้อย่างปลอดภัย มิฉะนั้น Control UI จะบังคับใช้โหมด Form - คำสั่ง "Reset to saved" ของตัวแก้ไข JSON แบบดิบจะรักษารูปแบบที่เขียนแบบดิบไว้ (การจัดรูปแบบ ความคิดเห็น และเค้าโครง
$include) แทนการแสดงผลสแนปช็อตแบบแบนอีกครั้ง เพื่อให้การแก้ไขจากภายนอกยังคงอยู่หลังรีเซ็ตเมื่อสแนปช็อตสามารถแปลงไปกลับได้อย่างปลอดภัย - ค่าออบเจ็กต์ SecretRef แบบมีโครงสร้างจะแสดงเป็นอ่านอย่างเดียวในช่องป้อนข้อความของฟอร์ม เพื่อป้องกันไม่ให้ออบเจ็กต์เสียหายจากการแปลงเป็นสตริงโดยไม่ตั้งใจ
การใช้งาน
- การวิเคราะห์โทเค็นและค่าใช้จ่ายโดยประมาณที่ได้จากเซสชันจะแยกออกจากการเรียกเก็บเงินของผู้ให้บริการ
- การ์ดผู้ให้บริการเรียก
usage.statusและแสดงชื่อแผนแบบสด ช่วงโควตา ยอดคงเหลือ ค่าใช้จ่าย และงบประมาณที่ Plugin ของผู้ให้บริการซึ่งกำหนดค่าไว้รายงาน - ความล้มเหลวในการดึงข้อมูลการใช้งานของผู้ให้บริการจะไม่ขัดขวางแดชบอร์ดเซสชัน/ค่าใช้จ่าย การ์ดผู้ให้บริการที่ไม่พร้อมใช้งานจะแสดงสถานะข้อผิดพลาดของตนเอง
การดีบัก บันทึก และอัปเดต
- Debug: สแนปช็อตสถานะ/สุขภาพ/โมเดล บันทึกเหตุการณ์ และการเรียก RPC ด้วยตนเอง (
status,health,models.list) - บันทึกเหตุการณ์ประกอบด้วยเวลาการรีเฟรช/RPC ของ Control UI เวลาการแสดงผลแชต/การกำหนดค่าที่ช้า และรายการการตอบสนองของเบราว์เซอร์สำหรับเฟรมแอนิเมชันที่ยาวหรืองานที่ใช้เวลานาน เมื่อเบราว์เซอร์เปิดเผยประเภทรายการ PerformanceObserver เหล่านั้น
- Logs: การติดตามบันทึกไฟล์ของ Gateway แบบสดพร้อมการกรอง/ส่งออก (
logs.tail) - Update: ดำเนินการอัปเดตแพ็กเกจ/git พร้อมรีสตาร์ต (
update.run) และรายงานการรีสตาร์ต จากนั้นสำรวจupdate.statusหลังเชื่อมต่อใหม่เพื่อตรวจสอบเวอร์ชันของ Gateway ที่กำลังทำงาน
หมายเหตุเกี่ยวกับแผงการทำงานอัตโนมัติ
- การเลือกแถวจะเปิดมุมมองรายละเอียดแบบเต็มหน้า โดยมีสวิตช์ Active/Paused และ Run now ในส่วนหัว (ตัวเลือกเรียกใช้เมื่อถึงกำหนด โคลน และนำออกอยู่ในเมนู) แท็บ Settings ใช้แก้ไขการทำงานอัตโนมัติในหน้าโดยตรง (พรอมต์ รายละเอียด ความถี่ และการแทนที่ขั้นสูง) ส่วนแท็บ Run history แสดงประวัติการทำงานของระบบอัตโนมัตินั้น
- การทำงานอัตโนมัติเริ่มต้นใต้ตารางจะกรอกฟอร์มสร้างล่วงหน้าด้วยพรอมต์และกำหนดการที่แก้ไขได้
- สำหรับงานที่แยกออกมา ค่าเริ่มต้นของการส่งมอบคือการประกาศสรุป ให้เปลี่ยนเป็นไม่มีสำหรับการทำงานภายในเท่านั้น
- ฟิลด์ช่องทาง/เป้าหมายจะปรากฏเมื่อเลือกการประกาศ
- โหมด Webhook ใช้
delivery.mode = "webhook"โดยตั้งค่าdelivery.toเป็น URL ของ Webhook HTTP(S) ที่ถูกต้อง - สำหรับงานในเซสชันหลัก สามารถใช้โหมดการส่งมอบแบบ Webhook และแบบไม่มีได้
- ตัวควบคุมการแก้ไขขั้นสูงประกอบด้วยการลบหลังทำงาน การล้างการแทนที่ตัวแทน ตัวเลือกเวลาที่แน่นอน/การกระจายเวลาของ Cron การแทนที่โมเดล/การคิดของตัวแทน และสวิตช์การส่งมอบแบบพยายามให้ดีที่สุด
- การตรวจสอบความถูกต้องของฟอร์มจะแสดงในหน้าโดยตรงพร้อมข้อผิดพลาดระดับฟิลด์ ค่าที่ไม่ถูกต้องจะปิดใช้งานปุ่มบันทึกจนกว่าจะแก้ไข
- ตั้งค่า
cron.webhookTokenเพื่อส่งโทเค็น bearer เฉพาะ หากละไว้ Webhook จะถูกส่งโดยไม่มีส่วนหัวการยืนยันตัวตน cron.webhookเป็นกลไกสำรองแบบเดิมที่เลิกใช้แล้วและถูกการตรวจสอบการกำหนดค่าปัจจุบันปฏิเสธ เรียกใช้openclaw doctor --fixเพื่อย้ายงานที่จัดเก็บไว้ซึ่งยังใช้notify: trueไปเป็นการส่งมอบผ่าน Webhook หรือเมื่อเสร็จสิ้นแบบระบุต่องานอย่างชัดเจน และนำคีย์เก่าออก
นำเข้าหน่วยความจำของผู้ช่วย
เปิด Settings → Import Memory เพื่อนำเข้าหน่วยความจำภายในเครื่องของ Codex หรือ Claude Code ไปยังตัวแทน OpenClaw Gateway จะค้นหาหน่วยความจำภายในเครื่องที่รองรับบนโฮสต์ของตนเอง ดังนั้น Control UI ระยะไกลจึงนำเข้าจากคอมพิวเตอร์ของ Gateway แทนคอมพิวเตอร์ ที่ใช้เบราว์เซอร์
- เลือกตัวแทนปลายทาง
- ตรวจสอบคอลเลกชันต้นทางและชื่อไฟล์ Markdown ที่ตรวจพบ เนื้อหาไฟล์ จะไม่ถูกส่งในการตอบกลับแผนหรือแสดงในหน้า
- เลือกคอลเลกชันที่จะนำเข้าและยืนยัน การนำไปใช้จะสร้างแผนใหม่ก่อน เขียน เพื่อให้การเลือกที่ล้าสมัยล้มเหลวอย่างปลอดภัย
- หากมีไฟล์อยู่แล้ว ให้เปิดใช้ Replace existing imports รีเฟรช ตัวอย่าง แล้วจึงยืนยันการแทนที่
Codex นำเข้าเฉพาะ MEMORY.md และ memory_summary.md ที่รวมไว้แล้ว ส่วน Claude
Code นำเข้า Markdown จากไดเรกทอรีหน่วยความจำอัตโนมัติของโปรเจกต์และ
autoMemoryDirectory ที่กำหนดค่าไว้ โดยจะไม่นำเข้าเซสชัน การตั้งค่า คำสั่ง หรือ
ข้อมูลประจำตัวผ่านหน้านี้ ไฟล์จะถูกคัดลอกไว้ใต้ memory/imports/ ในพื้นที่ทำงาน
ที่เลือก ซึ่ง Plugin หน่วยความจำที่ใช้งานอยู่สามารถจัดทำดัชนีไฟล์เหล่านั้นได้ แหล่งข้อมูล
จะไม่ถูกเปลี่ยนแปลง
การวางแผนและการนำไปใช้ต้องใช้ operator.admin การนำไปใช้ทุกครั้งจะสร้างข้อมูลสำรอง
OpenClaw ที่ผ่านการตรวจสอบเมื่อมีสถานะอยู่ เขียนรายงานการย้ายข้อมูลที่ปกปิดข้อมูลแล้ว และเก็บ
ข้อมูลสำรองระดับรายการก่อนแทนที่ไฟล์ปลายทางที่มีอยู่ ดูเส้นทางและ
พฤติกรรมการเรียกคืนได้ที่ ภาพรวมหน่วยความจำ
หน้า MCP
หน้า MCP โดยเฉพาะเป็นมุมมองสำหรับผู้ดูแลระบบของเซิร์ฟเวอร์ MCP ที่ OpenClaw จัดการภายใต้ mcp.servers หน้านี้ไม่เริ่มการรับส่งข้อมูล MCP ด้วยตนเอง ให้ใช้เพื่อตรวจสอบและแก้ไขการกำหนดค่าที่บันทึกไว้ จากนั้นใช้ openclaw mcp doctor --probe เมื่อต้องการพิสูจน์เซิร์ฟเวอร์แบบสด
ขั้นตอนการทำงานทั่วไป:
- เปิด MCP จากแถบด้านข้าง
- ตรวจสอบการ์ดสรุปสำหรับจำนวนเซิร์ฟเวอร์ทั้งหมด ที่เปิดใช้งาน ที่ใช้ OAuth และที่กรองแล้ว
- ตรวจสอบแต่ละแถวของเซิร์ฟเวอร์เกี่ยวกับการรับส่งข้อมูล การเปิดใช้งาน การยืนยันตัวตน ตัวกรอง การหมดเวลา และคำแนะนำคำสั่ง
- เพิ่ม เปิดใช้ ปิดใช้ หรือนำเซิร์ฟเวอร์ออกโดยตรงบนหน้า MCP เลือก Streamable HTTP, SSE หรือ stdio อย่างชัดเจน บรรทัดคำสั่ง stdio รองรับอาร์กิวเมนต์ที่ใส่เครื่องหมายคำพูด เช่น เส้นทางที่มีช่องว่าง ใช้หน้า Plugins สำหรับตัวเชื่อมต่อแบบคลิกเดียวและการค้นหา
- แก้ไขส่วนการกำหนดค่า
mcpที่จำกัดขอบเขตไว้ สำหรับฟิลด์เซิร์ฟเวอร์ขั้นสูง เช่น ตัวแปรสภาพแวดล้อม ไดเรกทอรีทำงาน ส่วนหัว เส้นทาง TLS/mTLS ข้อมูลเมตา OAuth ตัวกรองเครื่องมือ และข้อมูลเมตาการฉายภาพ Codex - ใช้ Save สำหรับเขียนการกำหนดค่า หรือ Save & Publish เมื่อ Gateway ที่กำลังทำงานควรนำการกำหนดค่าที่เปลี่ยนแปลงไปใช้
- เรียกใช้
openclaw mcp status --verbose,openclaw mcp doctor --probeหรือopenclaw mcp reloadจากเทอร์มินัลสำหรับการวินิจฉัยแบบคงที่ การพิสูจน์แบบสด หรือการล้างรันไทม์ที่แคชไว้
หน้าจะปกปิดค่าที่มีข้อมูลประจำตัวและมีลักษณะคล้าย URL ก่อนแสดงผล และใส่ชื่อเซิร์ฟเวอร์ไว้ในเครื่องหมายคำพูดในส่วนย่อยคำสั่ง เพื่อให้คำสั่งที่คัดลอกมายังคงทำงานได้กับชื่อที่มีช่องว่างหรืออักขระพิเศษของเชลล์ ข้อมูลอ้างอิง CLI และการกำหนดค่าฉบับเต็ม: MCP
แท็บกิจกรรม
แท็บ Activity อยู่ใน Settings › System ถัดจาก Logs และ Debug โดยเป็นเครื่องมือสังเกตการณ์ชั่วคราวภายในเบราว์เซอร์สำหรับกิจกรรมเครื่องมือแบบสด ซึ่งได้มาจากสตรีมเหตุการณ์ session.tool / เครื่องมือของ Gateway เดียวกับที่ขับเคลื่อนการ์ดเครื่องมือใน Chat โดยไม่เพิ่มกลุ่มเหตุการณ์ Endpoint พื้นที่เก็บกิจกรรมแบบถาวร ฟีดเมตริก หรือสตรีมสำหรับผู้สังเกตการณ์ภายนอกของ Gateway เพิ่มเติม
รายการกิจกรรมจะเก็บเฉพาะสรุปที่ผ่านการทำให้ปลอดภัยและตัวอย่างผลลัพธ์ที่ปกปิดและตัดทอนแล้ว ค่าของอาร์กิวเมนต์เครื่องมือจะไม่ถูกเก็บไว้ในสถานะ Activity โดย UI จะแสดงว่าอาร์กิวเมนต์ถูกซ่อนและบันทึกเฉพาะจำนวนฟิลด์อาร์กิวเมนต์ รายการในหน่วยความจำจะผูกกับแท็บเบราว์เซอร์ปัจจุบัน คงอยู่ระหว่างการนำทางภายใน Control UI และรีเซ็ตเมื่อโหลดหน้าใหม่ สลับเซสชัน หรือเลือก Clear
เทอร์มินัลสำหรับผู้ดูแลระบบ
เทอร์มินัลสำหรับผู้ดูแลระบบแบบวางเทียบได้จะถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้ตั้งค่า gateway.terminal.enabled: true และรีสตาร์ต Gateway เทอร์มินัลต้องใช้การเชื่อมต่อ operator.admin และเปิด PTY ของโฮสต์ในพื้นที่ทำงานของตัวแทนที่ใช้งานอยู่ แท็บใหม่จะใช้ตัวแทนแชตที่เลือกอยู่ในปัจจุบัน
ใช้ Ctrl + backtick เพื่อสลับแสดงหรือซ่อนแผงเทียบท่า เลย์เอาต์รองรับการเทียบท่าด้านล่างและด้านขวา ปรับขนาดตามวิวพอร์ตของเบราว์เซอร์ และเก็บแท็บเชลล์ไว้ได้หลายแท็บ ดู gateway.terminal.enabled และการแทนที่ด้วย gateway.terminal.shell ซึ่งเป็นตัวเลือกได้ที่ การกำหนดค่า Gateway
เอเจนต์ที่ได้รับอนุญาตจากเจ้าของและไม่ได้อยู่ในแซนด์บ็อกซ์สามารถใช้เครื่องมือ terminal สำหรับงานที่ใช้เวลานานหรืองานแบบโต้ตอบซึ่งผู้ควบคุมควรเฝ้าดู การเรียกใช้เครื่องมือแต่ละครั้งสามารถเปิด อ่าน เขียน ปรับขนาด ปิด หรือแสดงรายการ PTY ของ Gateway ที่เป็นของเอเจนต์เอง เซสชันใหม่จะเปิดแท็บ Control UI ที่เชื่อมต่อร่วมกันตามค่าเริ่มต้น เพื่อให้เอเจนต์และผู้ควบคุมใช้เอาต์พุตร่วมกัน และทั้งสองฝ่ายสามารถพิมพ์หรือปรับขนาดได้ การเข้าถึงของเอเจนต์จำกัดขอบเขตตามเซสชันอย่างเคร่งครัด: เอเจนต์ไม่สามารถอ่านหรือควบคุมเทอร์มินัลที่ผู้ควบคุมสร้างขึ้นหรือเทอร์มินัลที่เปิดโดยเซสชันเอเจนต์อื่น
ลากไฟล์อย่างน้อยหนึ่งไฟล์ไปยังเทอร์มินัลที่ใช้งานอยู่ หรือใช้ปุ่มคลิปหนีบกระดาษเพื่อเลือกไฟล์ OpenClaw จะจัดเตรียมแต่ละไฟล์บนเครื่องที่เป็นเจ้าของ PTY และวางพาธสัมบูรณ์ที่ใส่เครื่องหมายคำพูดสำหรับเชลล์แล้ว ณ ตำแหน่งเคอร์เซอร์ โดยจะไม่กด Enter หรือเรียกใช้อินพุต ตัวบ่งชี้ชุดงานแบบกะทัดรัดจะแสดงไฟล์ปัจจุบันและจำนวนที่เสร็จสมบูรณ์ การยกเลิกจะหยุดชุดงานที่เหลือโดยไม่วางพาธ ส่วนการถ่ายโอนที่ล้มเหลวจะยังคงแสดงอยู่เพื่อให้ลองใหม่จากไฟล์นั้นได้โดยไม่ต้องอัปโหลดไฟล์ที่เสร็จสมบูรณ์แล้วซ้ำ รองรับรูปภาพ PDF ไฟล์เก็บถาวร และไฟล์ประเภทอื่นๆ ขนาดสูงสุด 16 MiB ต่อไฟล์ ไฟล์ที่จัดเตรียมไว้จะใช้ไดเรกทอรีชั่วคราวของระบบแบบส่วนตัวบนโฮสต์ POSIX (โหมดไดเรกทอรี 0700, โหมดไฟล์ 0600) หรือไดเรกทอรีภายในขอบเขต ACL ของโปรไฟล์ผู้ใช้บน Windows พร้อมตัวจับเวลาล้างข้อมูล 24 ชั่วโมง ดังนั้นให้ย้ายหรือคัดลอกสิ่งที่ต้องการเก็บไว้
การแทรกพาธรองรับ PowerShell, cmd.exe และเชลล์ POSIX ที่ระบบรู้จัก (sh, Bash, Dash, Ash, Ksh, Zsh และ Fish) รวมถึง Git Bash บน Windows ระบบจะปฏิเสธการแทนที่ด้วยเชลล์อื่น เนื่องจากไม่สามารถอนุมานกฎการใส่เครื่องหมายคำพูดของเชลล์เหล่านั้นได้อย่างปลอดภัย ให้เรียกใช้ Gateway ภายใน WSL เพื่อใช้เทอร์มินัล WSL แบบเนทีฟและพาธอัปโหลดของ Linux ระบบจะปฏิเสธพาธ cmd.exe ที่มี % หรือ ! ด้วยเช่นกัน เนื่องจากเชลล์ดังกล่าวจะขยายอักขระเหล่านั้นแม้อยู่ภายในเครื่องหมายคำพูดคู่
เซสชัน Codex และ Claude Code ที่ค้นพบในแถบด้านข้างของเซสชันสามารถเปิดใน CLI แบบเนทีฟภายในแผงเทอร์มินัลเดียวกันได้ ใน Settings › Chat ให้ตั้งค่า Open Codex/Claude threads in เป็น Terminal เพื่อให้การคลิกแถวตามปกติเปิด codex resume หรือ claude --resume; ค่าเริ่มต้นยังคงเป็นโปรแกรมดู OpenClaw แบบอ่านอย่างเดียว เมนูคลิกขวาหรือเมนูจุดสามจุดของแต่ละแถวมีทั้งสองตัวเลือกเสมอ และส่วนหัวของโปรแกรมดูจะแสดง Open in terminal เมื่อเซสชันนั้นมีคุณสมบัติเหมาะสม
คุณสมบัติการใช้งานจะพิจารณาแยกตามเซสชันและโฮสต์ เซสชันภายใน Gateway จะเริ่มคำสั่งดำเนินการต่อที่ผู้ให้บริการเป็นเจ้าของบนโฮสต์ Gateway เซสชันของโหนดที่จับคู่แล้วจะเริ่มคำสั่งของผู้ให้บริการที่อยู่ในรายการอนุญาตบนโหนดเจ้าของ และส่งต่อเฉพาะเอาต์พุต อินพุต และเหตุการณ์การปรับขนาดของ PTY นั้น การดำเนินการนี้จะไม่เปิดเผยเชลล์ทั่วไปของโหนดหรือยอมรับคำสั่งที่เบราว์เซอร์ส่งมา การอัปโหลดไฟล์ใช้คำสั่งโหนด terminal.upload ที่แยกต่างหากและมีขนาดจำกัด และยังคงผูกอยู่กับเซสชันเทอร์มินัลที่เปิดไว้แล้ว อนุมัติการอัปเกรดการจับคู่โหนดเมื่อคำสั่งดังกล่าวปรากฏขึ้นครั้งแรก โหนดที่ไม่ได้ประกาศคำสั่งดำเนินการต่อของเทอร์มินัลที่ตรงกัน รวมถึงบริดจ์เวิร์กเกอร์แบบฝังที่ไม่มีการสตรีมสองทิศทาง จะยังคงใช้โปรแกรมดูได้และแสดงว่าไม่สามารถเปิดเทอร์มินัลได้ ส่วนโหนดรุ่นเก่ายังคงเรียกใช้เทอร์มินัลได้แต่ไม่สามารถรับไฟล์ที่ลากมาวาง
เซสชันที่เป็นของการเชื่อมต่อจะยังคงอยู่เมื่อการเชื่อมต่อขาดหาย: การโหลดหน้าใหม่ แล็ปท็อปเข้าสู่โหมดสลีป หรือเครือข่ายสะดุด จะทำให้เซสชันถูกแยกออกบน Gateway แทนที่จะถูกยุติ และแท็บเบราว์เซอร์เดิมจะเชื่อมต่อกลับเมื่อเชื่อมต่อใหม่ พร้อมเล่นเอาต์พุตล่าสุดซ้ำ เซสชันที่เป็นของการเชื่อมต่อซึ่งถูกแยกออกจะถูกยุติหลังจาก gateway.terminal.detachedSessionTimeoutSeconds (ค่าเริ่มต้น 300 วินาที; 0 จะคืนค่าการยุติเมื่อขาดการเชื่อมต่อ) การเชื่อมต่อกับเซสชันเหล่านี้ยังคงเป็นการเข้าควบคุมแบบ tmux
เซสชันที่เป็นของเอเจนต์ไม่ได้ผูกกับการเชื่อมต่อของเบราว์เซอร์ terminal.attach จะเพิ่มแต่ละเบราว์เซอร์เป็นผู้ดูโดยไม่รับความเป็นเจ้าของ และการปิดแท็บผู้ดูจะแยกเฉพาะเบราว์เซอร์นั้น PTY จะยังคงอยู่จนกว่าเอเจนต์เจ้าของจะปิด โพรเซสของ PTY จะสิ้นสุด นโยบายจะปิดใช้งาน หรือ Gateway จะปิดตัวลง terminal.list ระบุแต่ละรายการว่าเป็นของการเชื่อมต่อหรือของเอเจนต์ และ terminal.text อนุญาตให้การเชื่อมต่อของผู้ดูแลระบบอ่านเอาต์พุตข้อความธรรมดาล่าสุดได้โดยไม่ต้องเชื่อมต่อกับเซสชัน
เทอร์มินัลยังพร้อมใช้งานในรูปแบบเอกสารเต็มหน้าจอที่มีเฉพาะเทอร์มินัล ณ /?view=terminal แอป iOS และ Android ฝังหน้านี้ไว้ในหน้าจอ Terminal โดยใช้ข้อมูลประจำตัว Gateway ที่จัดเก็บไว้ซ้ำ ความพร้อมใช้งานเป็นไปตามเงื่อนไข gateway.terminal.enabled และ operator.admin เดียวกัน และหน้าจะแสดงประกาศเมื่อ Gateway ที่เชื่อมต่อไม่ให้บริการเทอร์มินัล
แผงเบราว์เซอร์
Control UI มาพร้อมแผงเบราว์เซอร์แบบเทียบท่าได้ ซึ่งแสดงผลเบราว์เซอร์ที่ Gateway ควบคุม (ตัวเดียวกับที่เอเจนต์ควบคุมผ่าน เครื่องมือเบราว์เซอร์) ในเว็บเบราว์เซอร์ทั่วไปโดยไม่ต้องใช้ webview แบบเนทีฟ แผงนี้จะปรากฏเมื่อ Gateway ที่เชื่อมต่อประกาศ browser.request ให้กับการเชื่อมต่อ operator.admin; ปุ่มรูปลูกโลกในแถบพื้นที่ทำงานของเธรดใช้สลับการแสดงแผง แผงจะแสดงสแนปช็อตหน้าเว็บแบบสดพร้อมแท็บ แถบ URL ที่แก้ไขได้ ย้อนกลับ/ไปข้างหน้า/โหลดใหม่ และเปิดในเบราว์เซอร์ของคุณ สามารถเทียบท่าด้านขวาหรือด้านล่าง และส่งต่อการคลิก การเลื่อนด้วยล้อเมาส์ และการพิมพ์พื้นฐานไปยังหน้าเว็บระยะไกล
โหมดบันทึกภาพสองโหมดจะรวมบริบทของหน้าเว็บสำหรับเอเจนต์:
- ใส่คำอธิบายประกอบ (ดินสอ): วาดเครื่องหมายด้วยมือเปล่าทับบนหน้าเว็บ Send to chat จะรวมเส้นที่วาดลงในภาพหน้าจอ แนบภาพกับช่องเขียนแชตที่ใช้งานอยู่ และกรอกพรอมต์ล่วงหน้าที่อธิบาย URL ของหน้า ชื่อ และแต่ละบริเวณที่ทำเครื่องหมายไว้ เพื่อให้เอเจนต์ทราบอย่างแม่นยำว่ามีการวงส่วนใดไว้
- ตรวจสอบ (ตัวชี้): วางเมาส์เหนือเพื่อดูองค์ประกอบใต้เคอร์เซอร์ (ตัวเลือก ชื่อสำหรับการช่วยการเข้าถึง บทบาท ขนาด) คลิกเพื่อส่งรายละเอียดขององค์ประกอบนั้นพร้อมภาพหน้าจอที่ไฮไลต์ผ่านขั้นตอนช่องเขียนเดียวกัน การตรวจสอบ การเลื่อนด้วยล้อเมาส์ และการย้อนกลับ/ไปข้างหน้าต้องใช้
browser.evaluateEnabled(เปิดอยู่ตามค่าเริ่มต้น)
แอป macOS ยังคงใช้แถบด้านข้างเบราว์เซอร์ลิงก์แบบเนทีฟสำหรับลิงก์ที่คลิกในแดชบอร์ด แผงเบราว์เซอร์ใช้งานได้ในแอปนี้ด้วย และเป็นวิธีใส่คำอธิบายประกอบบนหน้าเว็บในแพลตฟอร์มอื่นทั้งหมด
ลักษณะการทำงานของแชต
Send and history semantics
chat.sendเป็นแบบ ไม่ปิดกั้น: ระบบจะตอบรับทันทีด้วย{ runId, status: "started" }และสตรีมการตอบกลับผ่านเหตุการณ์chatไคลเอ็นต์ Control UI ที่เชื่อถือได้อาจได้รับข้อมูลเมตาเวลา ACK เพิ่มเติมสำหรับการวินิจฉัยภายในเครื่องด้วย- การอัปโหลดในแชตรองรับรูปภาพและไฟล์ที่ไม่ใช่วิดีโอ รูปภาพยังคงใช้เส้นทางรูปภาพแบบเนทีฟ ส่วนไฟล์อื่นจะถูกจัดเก็บเป็นสื่อที่มีการจัดการและแสดงในประวัติเป็นลิงก์ไฟล์แนบ
- การส่งซ้ำด้วย
idempotencyKeyเดิมจะคืนค่า{ status: "in_flight" }ระหว่างที่กำลังทำงาน และคืนค่า{ status: "ok" }หลังเสร็จสิ้น - การตอบกลับของ
chat.historyถูกจำกัดขนาดเพื่อความปลอดภัยของ UI เมื่อรายการบทสนทนามีขนาดใหญ่เกินไป Gateway อาจตัดทอนฟิลด์ข้อความยาว ละเว้นบล็อกข้อมูลเมตาขนาดใหญ่ และแทนที่ข้อความที่ใหญ่เกินด้วยตัวยึดตำแหน่ง ([chat.history omitted: message too large]) - เมื่อข้อความผู้ช่วยที่มองเห็นถูกตัดทอนใน
chat.historyตัวอ่านด้านข้างสามารถดึงรายการบทสนทนาฉบับเต็มที่ปรับรูปแบบสำหรับการแสดงผลแล้วได้ตามต้องการผ่านchat.message.getโดยใช้sessionKey,agentIdที่ใช้งานอยู่เมื่อจำเป็น และmessageIdของบทสนทนา หาก Gateway ยังไม่สามารถส่งคืนข้อมูลเพิ่มเติมได้ ตัวอ่านจะแสดงสถานะว่าไม่พร้อมใช้งานอย่างชัดเจนแทนการแสดงตัวอย่างที่ถูกตัดทอนซ้ำโดยไม่แจ้ง - รูปภาพจากผู้ช่วยหรือที่สร้างขึ้นจะถูกเก็บถาวรเป็นการอ้างอิงสื่อที่มีการจัดการ และส่งกลับผ่าน URL สื่อของ Gateway ที่ผ่านการรับรองความถูกต้อง เพื่อให้การโหลดซ้ำไม่ต้องพึ่งพาเพย์โหลดรูปภาพ base64 ดิบที่คงอยู่ในการตอบกลับประวัติแชต
- เมื่อเรนเดอร์
chat.historyControl UI จะลบแท็กคำสั่งอินไลน์ที่ใช้เพื่อการแสดงผลเท่านั้นออกจากข้อความผู้ช่วยที่มองเห็น (เช่น[[reply_to_*]]และ[[audio_as_voice]]), เพย์โหลด XML ของการเรียกใช้เครื่องมือแบบข้อความล้วน (รวมถึง<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>และบล็อกการเรียกใช้เครื่องมือที่ถูกตัดทอน) รวมถึงโทเค็นควบคุมโมเดลแบบ ASCII/เต็มความกว้างที่รั่วไหล ระบบจะละเว้นรายการผู้ช่วยที่ข้อความทั้งหมดซึ่งมองเห็นได้มีเพียงโทเค็นเงียบNO_REPLY/no_replyที่ตรงกันทุกประการ หรือโทเค็นตอบรับ HeartbeatHEARTBEAT_OK - ระหว่างการส่งที่กำลังดำเนินอยู่และการรีเฟรชประวัติครั้งสุดท้าย มุมมองแชตจะยังแสดงข้อความผู้ใช้/ผู้ช่วยแบบคาดการณ์ล่วงหน้าภายในเครื่อง หาก
chat.historyส่งคืนสแนปช็อตเก่ากว่าชั่วครู่ บทสนทนามาตรฐานจะแทนที่ข้อความภายในเครื่องเหล่านั้นเมื่อประวัติของ Gateway ตามทัน - เหตุการณ์
chatแบบสดคือสถานะการส่งมอบ ขณะที่chat.historyถูกสร้างขึ้นใหม่จากบทสนทนาเซสชันแบบถาวร หลังเหตุการณ์สิ้นสุดของเครื่องมือ Control UI จะโหลดประวัติซ้ำและผสานเฉพาะส่วนท้ายแบบคาดการณ์ล่วงหน้าขนาดเล็ก ขอบเขตบทสนทนามีการบันทึกไว้ใน WebChat chat.injectจะเพิ่มบันทึกของผู้ช่วยต่อท้ายบทสนทนาเซสชันและกระจายเหตุการณ์chatสำหรับการอัปเดตเฉพาะ UI (ไม่มีการเรียกใช้เอเจนต์และไม่มีการส่งไปยังช่องทาง)- แถบด้านข้างแสดงทุกเซสชันที่โหลดและใช้งานอยู่ โดยแบ่งตามส่วนของเอเจนต์และกลุ่ม ปักหมุด/ช่องทาง/งาน/กำหนดเอง/แชต พร้อมการดำเนินการ New Session รายการเดียวที่เปิดกล่องโต้ตอบฉบับร่าง การเปิดแถวที่มองเห็นจะย้ายเฉพาะไฮไลต์ สามารถลากเซสชันไปวางบน Pinned เพื่อปักหมุด หรือวางบนกลุ่มกำหนดเองหรือ Chats เพื่อย้ายได้ กลุ่มกำหนดเองสามารถยุบและจัดลำดับใหม่ด้วยการลาก ชื่อและลำดับกลุ่มซิงค์ผ่าน Gateway ส่วนสถานะการยุบจะคงอยู่ในเบราว์เซอร์ เซสชันแดชบอร์ดใหม่จะได้รับชื่อเรื่องสั้นกระชับที่สร้างขึ้นแบบอะซิงโครนัสจากข้อความแรกที่ไม่ใช่คำสั่ง ชื่อที่ระบุไว้อย่างชัดเจนและข้อมูลประจำตัวผู้ส่งที่ผ่านการรับรองความถูกต้องจะยังคงแยกจากกัน ดังนั้นชื่อบัญชีจะไม่ถูกใช้เป็นชื่อเรื่องที่สร้างขึ้น ตั้งค่า
agents.defaults.utilityModel(หรือagents.list[].utilityModel) เพื่อกำหนดเส้นทางการเรียกโมเดลแยกนี้ไปยังโมเดลที่มีต้นทุนต่ำกว่า หากโมเดลแยกดังกล่าวล้มเหลว การสร้างชื่อเรื่องจะลองอีกครั้งหนึ่งด้วยโมเดลหลัก การขยายส่วนของเอเจนต์อื่นช่วยให้เรียกดูเซสชันของเอเจนต์นั้นได้โดยไม่ออกจากแชตที่เปิดอยู่ - การค้นหาเธรดอยู่ในชุดคำสั่ง (⌘K หรือช่อง Search ที่ด้านบนของแถบด้านข้าง): การพิมพ์คำค้นหาจะไล่ดูหน้าที่ตรงกันในจำนวนที่จำกัดจากทุกเอเจนต์ กรองแถวลูกภายใน/Cron และแสดงรายการผลลัพธ์ที่มองเห็นถัดจากคำสั่งนำทาง หน้า Threads ยังคงเป็นรายการทั้งหมดที่ค้นหาและกรองได้
- แต่ละแถวในแถบด้านข้างมีสิทธิ์เข้าถึงการปักหมุดโดยตรงและเมนูบริบทแบบเต็มสำหรับสถานะยังไม่ได้อ่าน การเปลี่ยนชื่อ การแยกสาขา การจัดกลุ่ม การเก็บถาวร และการลบ แถวที่เลือกหลายรายการ (Cmd/Ctrl-click, Shift-click สำหรับช่วง) จะมีเมนูแบบกลุ่มซึ่งครอบคลุมสถานะยังไม่ได้อ่าน การจัดกลุ่ม การเก็บถาวร และการลบ การเก็บถาวร/ลบแบบกลุ่มจะยังปิดใช้งาน เว้นแต่ทุกเซสชันที่เลือกสามารถเก็บถาวรได้ ไม่สามารถเก็บถาวรการทำงานที่กำลังดำเนินอยู่และเซสชันหลักของเอเจนต์ได้ การเก็บถาวรหรือลบเซสชันที่เลือกอยู่ในปัจจุบันจะสลับ Chat กลับไปยังเซสชันหลักของเอเจนต์นั้น
- ในแอป macOS เครื่องหมาย OpenClaw จะใช้แถบหัวเรื่องแบบเนทีฟซึ่งว่างอยู่ถัดจากตัวควบคุมหน้าต่าง แทนการใช้พื้นที่หนึ่งแถวในแถบด้านข้าง
- บนความกว้างแบบเดสก์ท็อป ตัวควบคุมแชตจะอยู่ในแถวกะทัดรัดแถวเดียวและยุบเมื่อเลื่อนลงในบทสนทนา การเลื่อนขึ้น การกลับไปด้านบน หรือการเลื่อนถึงด้านล่างจะคืนตัวควบคุม
- ข้อความแบบข้อความล้วนที่ซ้ำกันต่อเนื่องจะแสดงเป็นบับเบิลเดียวพร้อมป้ายจำนวน ข้อความที่มีรูปภาพ ไฟล์แนบ เอาต์พุตเครื่องมือ หรือตัวอย่าง Canvas จะไม่ถูกยุบรวม
- บับเบิลข้อความผู้ใช้มีการดำเนินการสำหรับบทสนทนา ได้แก่ ปุ่มย้อนกลับเมื่อวางเมาส์เหนือ (ป๊อปโอเวอร์ยืนยันพร้อมตัวเลือก "Don't ask again") และเมนูคลิกขวา Rewind to here กับ Fork from here การย้อนกลับจะชี้เซสชันไปยังสถานะก่อนข้อความนั้นทันที และส่งข้อความกลับไปยังช่องเขียนเพื่อแก้ไขและส่งใหม่ (
sessions.rewind,operator.admin) ส่วนการแยกสาขาจะสร้างเซสชันใหม่จากคำนำหน้าของเส้นทางที่ใช้งานอยู่ก่อนข้อความ เปิดเซสชันนั้น และเติมข้อความเดียวกันไว้ในช่องเขียน (sessions.fork,operator.write) การดำเนินการทั้งสองจะปิดใช้งานพร้อมคำแนะนำเครื่องมือที่อธิบายสาเหตุขณะที่เอเจนต์กำลังทำงาน ใช้ได้เฉพาะกับข้อความผู้ใช้ที่เก็บถาวรแล้ว และจะถูกปฏิเสธสำหรับเซสชันที่บทสนทนาอยู่ภายใต้การควบคุมของชุดควบคุมเอเจนต์ภายนอก การย้อนกลับจะย้ายเฉพาะบริบทแชตเท่านั้น โดยไฟล์และผลข้างเคียงอื่นจากเครื่องมือจะไม่ถูกย้อนกลับ และบทสนทนาก่อนย้อนกลับจะยังคงเก็บรักษาไว้ในที่จัดเก็บเซสชันแบบเพิ่มต่อท้ายเท่านั้น เมื่อที่จัดเก็บดังกล่าวมีบทสนทนาหลายสาขา แถบชื่อเรื่องแชตจะแสดงเมนูสาขาพร้อมข้อความล่าสุด จำนวนข้อความ และความใหม่ของแต่ละสาขา การเลือกสาขาที่ไม่ได้ใช้งานจะสลับเซสชันปัจจุบันกลับไปยังเส้นทางที่เก็บรักษาไว้นั้น (sessions.branches.list,operator.read;sessions.branches.switch,operator.admin) การสลับสาขาจะไม่พร้อมใช้งานขณะที่เอเจนต์กำลังทำงานเช่นกัน และการเลือกสาขาที่ใช้งานอยู่แล้วจะเป็นข้อผิดพลาดแบบไม่มีการดำเนินการที่มีชนิดกำกับ ณ ขอบเขต RPC การดำเนินการซ่อนที่แยกต่างหากบนบับเบิลผู้ใช้จะซ่อนข้อความเฉพาะในเบราว์เซอร์ปัจจุบัน ข้อความยังคงอยู่ในบทสนทนาและเอเจนต์ยังมองเห็นข้อความนั้น - เมื่อ checkout ของเซสชันอยู่บนสาขาที่ไม่ใช่ค่าเริ่มต้นของรีโพซิทอรี GitHub มุมมองแชตจะปักหมุดชิป pull request ไว้เหนือช่องเขียน ได้แก่ หมายเลข PR, รีโพซิทอรี, สาขา, จำนวน diff, ป้าย CI และสถานะฉบับร่าง/ผสานแล้ว/ปิด โดยแต่ละรายการลิงก์ไปยัง PR แถวดังกล่าวแสดงชิปได้สูงสุดสองรายการ โดย PR ที่ใช้งานอยู่ (เปิด/ฉบับร่าง) แสดงก่อน และปุ่ม "Show more" จะแสดงประวัติที่ผสานแล้ว/ปิดซึ่งถูกยุบไว้ ป้าย CI จะเปิดป๊อปโอเวอร์ตรวจสอบ CI ขนาดเล็ก ซึ่งมีจำนวนการตรวจสอบที่ผ่าน/ล้มเหลว/กำลังทำงาน/ข้าม และลิงก์ไปยังหน้าการตรวจสอบของ PR การตรวจจับทำงานฝั่งเซิร์ฟเวอร์ผ่าน
controlUi.sessionPullRequestsซึ่งนำGH_TOKEN/GITHUB_TOKENของ Gateway กลับมาใช้เมื่อมีการตั้งค่า เมื่อถึงขีดจำกัดอัตราของ GitHub API ชิปจะคงสถานะล่าสุดที่ทราบและแสดงคำเตือนว่าสถานะอาจล้าสมัย การปิดชิปจะซ่อนชิปสำหรับเซสชันนั้นในโปรไฟล์เบราว์เซอร์ปัจจุบัน ก่อนที่จะมี PR แถวจะแสดงตัวสาขาเอง ได้แก่ รีโพซิทอรี ชื่อสาขา และขนาด +/− ของ diff เทียบกับ merge base ของสาขาเริ่มต้น (งานที่ commit แล้วและยังไม่ได้ commit) เมื่อสาขาที่ push แล้วมี commit สำหรับเปรียบเทียบ แถวจะเพิ่มปุ่ม Create PR ซึ่งเปิดหน้าสร้าง pull request ใหม่ของ GitHub ก่อนถึงจุดนั้น เซสชันที่มีไฟล์เปลี่ยนแปลง (commit แล้ว, ยังไม่ได้ commit หรือไม่ได้ติดตาม) จะยังมีแถวดังกล่าวแต่ไม่มีปุ่ม แถวจะซ่อนตัวเองขณะที่มี PR ที่เปิดอยู่หรือเป็นฉบับร่าง แถวสาขามาจาก git ภายในเครื่องเท่านั้น จึงยังพร้อมใช้งานเมื่อ GitHub ถูกจำกัดอัตรา และแสดงคำเตือนสถานะล้าสมัยแบบเดียวกัน เนื่องจากยังไม่สามารถเชื่อถือข้อความ "ไม่พบ PR" ได้จนกว่าจะรีเซ็ตขีดจำกัด - แผง diff ของเซสชันแสดงสิ่งที่ checkout ของเซสชันเปลี่ยนแปลงจริง ปุ่มสาขาในรางพื้นที่ทำงานหรือแถบชื่อเรื่องแชตจะเปิดแผงรายละเอียดพร้อม diff รายไฟล์ของงานบนสาขา งานที่ยังไม่ได้ commit และงานที่ไม่ได้ติดตาม เทียบกับ merge base ของสาขาเริ่มต้นของ checkout ซึ่งประกอบด้วยจุดสถานะ ลูกศรเปลี่ยนชื่อ จำนวน +/− รายไฟล์ ไฟล์ที่ยุบได้ และเครื่องหมาย "N unmodified lines" ระหว่าง hunk ระบบคำนวณ diff ฝั่งเซิร์ฟเวอร์ผ่านเมธอด Gateway
sessions.diff(ขอบเขตoperator.read) ไฟล์ไบนารีและไฟล์ที่ใหญ่เกินจะลดรูปเป็นรายการสถิติเท่านั้น และปุ่มจะแสดงเฉพาะเมื่อ Gateway ที่เชื่อมต่อประกาศsessions.diff - ทุกบานหน้าต่าง Chat มีแถบชื่อเรื่อง คลิกชื่อเซสชันเพื่อเปลี่ยนชื่อ ชิปพื้นที่ทำงานจะคัดลอกเส้นทาง checkout หรือสาขา และสามารถแสดงพื้นที่ทำงานของ Gateway ภายในเครื่องในตัวจัดการไฟล์ของโฮสต์ เซสชันระยะไกลและเซสชัน exec-node ยังคงมีการดำเนินการคัดลอก แต่ซ่อนการแสดงตำแหน่ง
- รางพื้นที่ทำงานของเธรดในแต่ละบานหน้าต่าง Chat แสดงไฟล์เธรด ไฟล์โปรเจกต์ และอาร์ติแฟกต์ โดยค่าเริ่มต้นจะเทียบชิดขอบขวาของบานหน้าต่าง ลากส่วนหัว (หรือใช้ปุ่มเทียบชิด) เพื่อย้ายไปด้านล่าง และตัวเลือกนี้จะถูกจัดเก็บในโปรไฟล์เบราว์เซอร์ปัจจุบัน รางที่ยุบจะไม่ใช้พื้นที่เลย เปิดใหม่ด้วย ⇧⌘B หรือปุ่มสลับไฟล์ในแถบชื่อเรื่อง ซึ่งมีป้ายจำนวนไฟล์ที่เปลี่ยนแปลง แผงรายละเอียดไฟล์ เครื่องมือ และ Canvas ที่แยกต่างหากจะไม่ได้รับผลกระทบ
- การคลิกการอ้างอิงไฟล์ในแชต เส้นทางไฟล์ในการ์ดเครื่องมืออ่าน/แก้ไข/เขียนที่ขยายอยู่ หรือแถวไฟล์ในรางพื้นที่ทำงาน จะเปิดแผงรายละเอียดไฟล์ ซึ่งเป็นมุมมองโค้ดที่ใช้ CodeMirror พร้อมการไฮไลต์ไวยากรณ์ หมายเลขบรรทัด การข้ามไปยังบรรทัด การค้นหาภายในไฟล์ การดำเนินการคัดลอก และเมนูเปิดในโปรแกรมแก้ไขภายนอก เมื่อ Gateway ประกาศ
sessions.files.setให้กับการเชื่อมต่อoperator.adminแผงจะเพิ่มโหมด Edit พร้อมการติดตามสถานะที่ยังไม่ได้บันทึกและการบันทึกด้วย Cmd/Ctrl-S ฉบับร่างที่ยังไม่ได้บันทึกจะคงอยู่ระหว่างการนำทางไฟล์ แผง และเซสชันในแท็บเบราว์เซอร์ปัจจุบัน จนกว่าจะบันทึกหรือยกเลิกอย่างชัดเจน การบันทึกใช้ compare-and-swap บนแฮชเนื้อหาที่sessions.files.getส่งคืน หากไฟล์บนดิสก์เปลี่ยนไปหลังจากโหลด (เช่น เพราะเอเจนต์ยังทำงานต่อ) แผงจะแสดงการแจ้งเตือนข้อขัดแย้งพร้อมการดำเนินการ Reload (ใช้เนื้อหาล่าสุด) และ Overwrite (คงการแก้ไขภายในเครื่อง) การเขียนใช้ตัวป้องกันพื้นที่ทำงานที่ปลอดภัยต่อระบบไฟล์ชุดเดียวกับการอ่าน ได้แก่ การจำกัดเส้นทาง การปฏิเสธ symlink/hardlink และขีดจำกัด UTF-8 ที่ 256 KB และเขียนทับได้เฉพาะไฟล์ที่มีอยู่ โปรแกรมแก้ไขจะไม่สร้างหรือลบไฟล์ - รางงานเบื้องหลังในแต่ละบานหน้าต่าง Chat แสดงงานเบื้องหลังและเอเจนต์ย่อยของเอเจนต์ปัจจุบัน (
tasks.listที่กำหนดขอบเขตตามเอเจนต์ และอัปเดตสดด้วยเหตุการณ์task) งานที่กำลังทำงานจะแสดงตัวจับเวลาที่ผ่านไปแบบสด จำนวนการใช้เครื่องมือ เครื่องมือที่กำลังใช้อยู่ และตัวควบคุมหยุด ส่วนที่เสร็จสิ้นซึ่งยุบได้จะเพิ่มระยะเวลาการทำงาน และลิงก์ View transcript จะเปิดเซสชันลูกของงานในบานหน้าต่าง เปิดรางด้วยปุ่มสลับกิจกรรมบนแถบชื่อเรื่อง สแนปช็อตงานจะโหลดล่วงหน้า จึงแสดงป้ายจำนวนงานที่กำลังทำงานโดยไม่ต้องเปิดรางก่อน หน้า Tasks ยังคงเป็นบัญชีรายการแบบเต็มที่ครอบคลุมทุกเอเจนต์ - แถบพื้นที่ทำงาน แถบงานเบื้องหลัง และแผงรายละเอียดจะปรับตามความกว้างของแต่ละบานหน้าต่างแทนความกว้างของหน้าต่างหลัก: ในบานหน้าต่างแคบหรือหน้าต่างแบบกะทัดรัด แถบทั้งสองจะแสดงเป็นแถบด้านล่าง (ตัวควบคุมการเทียบท่าด้านข้างจะซ่อนอยู่จนกว่าบานหน้าต่างจะกว้างขึ้น โดยแถบพื้นที่ทำงานมีสิทธิ์ใช้ช่องด้านข้างก่อนเมื่อมีพื้นที่พอดีเพียงหนึ่งคอลัมน์) และแผงรายละเอียดจะเรียงซ้อนใต้เธรดพร้อมจุดจับปรับขนาดแนวนอน แทนการวางร่วมแถวเดียวกัน วิวพอร์ตขนาดโทรศัพท์ยังคงเปิดแผงรายละเอียดแบบเต็มหน้าจอ
- ตัวเลือกโมเดลและการคิดในส่วนหัวแชตจะแพตช์เซสชันที่ใช้งานอยู่ทันทีผ่าน
sessions.patch; ตัวเลือกเหล่านี้เป็นค่าที่เขียนทับสำหรับเซสชันแบบถาวร ไม่ใช่ตัวเลือกการส่งที่ใช้ได้เพียงรอบเดียว - มุมมองแยก: เปิดจากแถบชื่อแชต (ข้างปุ่มสลับ diff ของเธรด งานเบื้องหลัง และไฟล์ของเธรด) จากนั้นแยกบานหน้าต่างที่ใช้งานอยู่ไปทางขวาหรือด้านล่างได้มากเท่าที่พื้นที่จะรองรับ แต่ละบานหน้าต่างมีเธรด บันทึกการสนทนา ช่องเขียนข้อความ และสตรีมเครื่องมือของตนเอง
- เอเจนต์ที่มีเครื่องมือ
screenสามารถขอเปลี่ยนแปลงบานหน้าต่าง แถบด้านข้าง เทอร์มินัล เบราว์เซอร์ โฟกัส และการนำทางแบบเดียวกันได้ ขณะที่มี Control UI ที่รองรับเชื่อมต่ออยู่ โปรโตคอล v1 จะใช้คำสั่งกับ Control UI ที่เชื่อมต่อและรองรับทั้งหมด โปรดดู หน้าจอ - ลากเซสชันจากแถบด้านข้างมายังแชตเพื่อเปิดในบานหน้าต่าง ตัวอย่างตำแหน่งวางแบบเคลื่อนไหวจะเลื่อนไประหว่างโซนต่าง ๆ พร้อมแสดงผลลัพธ์ — "แยก" เหนือพื้นที่ครึ่งหนึ่งที่บานหน้าต่างใหม่จะใช้พอดี และ "เปิดที่นี่" เหนือบานหน้าต่างทั้งบาน — และยังสามารถวางจากโหมดบานหน้าต่างเดียวได้ด้วย
- บานหน้าต่างแยกที่ใช้งานอยู่จะควบคุมการเลือกในแถบด้านข้างและ URL แถบชื่อของบานหน้าต่างจะเพิ่มตัวควบคุมสำหรับแยกและปิด เส้นแบ่งใช้ปรับขนาดคอลัมน์และบานหน้าต่างที่เรียงซ้อนกัน และเบราว์เซอร์จะจัดเก็บเค้าโครงไว้ในเครื่องเพื่อคงอยู่หลังการโหลดซ้ำ
- บนหน้าจอแคบ มุมมองแยกจะคงเค้าโครงไว้แต่แสดงผลเฉพาะบานหน้าต่างที่ใช้งานอยู่ รวมถึงส่วนหัวที่มีตัวควบคุมปิด
- หากส่งข้อความขณะที่การเปลี่ยนแปลงตัวเลือกโมเดลสำหรับเซสชันเดียวกันยังอยู่ระหว่างการบันทึก ช่องเขียนข้อความจะรอให้การแพตช์เซสชันนั้นเสร็จสิ้นก่อนเรียก
chat.sendเพื่อให้การส่งใช้โมเดลที่เลือก - การพิมพ์
/newจะสร้างและสลับไปยังเซสชันแดชบอร์ดใหม่แบบเดียวกับ New Chat ยกเว้นเมื่อมีการกำหนดค่าsession.dmScope: "main"และเซสชันแม่ปัจจุบันเป็นเซสชันหลักของเอเจนต์ ในกรณีนั้นระบบจะรีเซ็ตเซสชันหลัก ณ ตำแหน่งเดิม การพิมพ์/resetจะคงการรีเซ็ตเซสชันปัจจุบัน ณ ตำแหน่งเดิมตามที่ Gateway ระบุไว้อย่างชัดเจน - ตัวเลือกโมเดลของแชตจะขอมุมมองโมเดลที่กำหนดค่าไว้ของ Gateway หาก
agents.defaults.modelPolicy.allowไม่ว่าง นโยบายนั้นจะควบคุมตัวเลือก รวมถึงรายการprovider/*ที่ทำให้แค็ตตาล็อกซึ่งจำกัดขอบเขตตามผู้ให้บริการยังคงเป็นแบบไดนามิก มิฉะนั้น ตัวเลือกจะแสดงรายการที่กำหนดค่าไว้พร้อมกับผู้ให้บริการที่มีการตรวจสอบสิทธิ์ซึ่งใช้งานได้ โดยนามแฝงและการตั้งค่าภายใต้agents.defaults.modelsจะไม่จำกัดตัวเลือกดังกล่าว แค็ตตาล็อกฉบับเต็มยังคงเข้าถึงได้ผ่าน RPC สำหรับดีบักmodels.listโดยใช้view: "all" - เมื่อรายงานการใช้งานเซสชันล่าสุดจาก Gateway มีจำนวนโทเค็นบริบทปัจจุบัน แถบเครื่องมือของช่องเขียนข้อความในแชตจะแสดงวงแหวนขนาดเล็กพร้อมเปอร์เซ็นต์การใช้บริบท เปิดวงแหวนเพื่อดูหน้าต่างบริบทปัจจุบัน จำนวนโทเค็นของการทำงานล่าสุดและค่าใช้จ่ายรวมโดยประมาณ ข้อมูลระบุตัวตนของผู้ให้บริการ/โมเดล และรายละเอียดค่าใช้จ่ายอินพุต/เอาต์พุต/แคชของการตอบกลับล่าสุดจากผู้ให้บริการเมื่อมีการรายงาน วงแหวนจะเปลี่ยนเป็นรูปแบบคำเตือนเมื่อบริบทมีความหนาแน่นสูง และเมื่อถึงระดับ Compaction ที่แนะนำ จะแสดงปุ่มขนาดกะทัดรัดซึ่งเรียกใช้เส้นทาง Compaction ตามปกติของเซสชัน สแนปช็อตโทเค็นที่ล้าสมัยจะถูกซ่อนจนกว่า Gateway จะรายงานการใช้งานล่าสุดอีกครั้ง
โหมดสนทนา (เรียลไทม์ผ่านเบราว์เซอร์)
โหมดสนทนาใช้ผู้ให้บริการเสียงแบบเรียลไทม์ที่ลงทะเบียนไว้ กำหนดค่า OpenAI ด้วย talk.realtime.provider: "openai" พร้อมโปรไฟล์คีย์ API openai, talk.realtime.providers.openai.apiKey หรือ OPENAI_API_KEY OpenAI Realtime ใช้ Platform API สาธารณะและต้องใช้คีย์ Platform API การเข้าสู่ระบบด้วย Codex OAuth ไม่สามารถใช้กับส่วนนี้ได้ กำหนดค่า Google ด้วย talk.realtime.provider: "google" พร้อม talk.realtime.providers.google.apiKey เบราว์เซอร์จะไม่ได้รับคีย์ API มาตรฐานของผู้ให้บริการ: OpenAI จะได้รับข้อมูลลับไคลเอนต์ Realtime แบบชั่วคราวสำหรับ WebRTC และ Google Live จะได้รับโทเค็นการตรวจสอบสิทธิ์ Live API แบบจำกัดและใช้ครั้งเดียวสำหรับเซสชัน WebSocket ของเบราว์เซอร์ โดย Gateway จะล็อกคำสั่งและการประกาศเครื่องมือไว้ในโทเค็น ผู้ให้บริการที่เปิดให้ใช้เฉพาะบริดจ์เรียลไทม์ฝั่งแบ็กเอนด์จะทำงานผ่านการส่งต่อของ Gateway ดังนั้นข้อมูลประจำตัวและซ็อกเก็ตของผู้ให้บริการจะอยู่ที่ฝั่งเซิร์ฟเวอร์ ขณะที่เสียงจากเบราว์เซอร์ส่งผ่าน RPC ของ Gateway ที่ผ่านการตรวจสอบสิทธิ์ Gateway จะประกอบพรอมต์ของเซสชัน Realtime ส่วน talk.client.create ไม่ยอมรับการแทนที่คำสั่งที่ผู้เรียกกำหนด
ค่าเริ่มต้นถาวรสำหรับผู้ให้บริการ โมเดล เสียง การรับส่งข้อมูล ระดับการใช้เหตุผล ค่าเกณฑ์ VAD ที่แน่นอน ระยะเวลาเงียบ และระยะเสริมส่วนต้น อยู่ใน Settings → Communications → Talk การเปลี่ยนค่าเหล่านี้ต้องมีสิทธิ์เข้าถึง operator.admin การกำหนดค่าการส่งต่อของ Gateway จะบังคับใช้เส้นทางส่งต่อผ่านแบ็กเอนด์ ส่วนการกำหนดค่า WebRTC จะให้ไคลเอนต์เป็นเจ้าของเซสชัน และจะล้มเหลวแทนการสลับไปใช้การส่งต่อโดยไม่แจ้ง หากผู้ให้บริการไม่สามารถสร้างเซสชันเบราว์เซอร์ได้
ตัวควบคุมการสนทนาคือปุ่มไมโครโฟนในแถบเครื่องมือของช่องเขียนข้อความ เครื่องหมายลูกศรของปุ่มจะแสดง System default และไมโครโฟนทุกตัวที่เบราว์เซอร์ตรวจพบ รวมถึงอินพุต USB, Bluetooth และอินพุตเสมือน ID อุปกรณ์ที่เลือกจะเก็บไว้เฉพาะในเบราว์เซอร์และไม่ส่งไปยัง Gateway หากอุปกรณ์นั้นหายไป โหมดสนทนาจะขอให้เลือกอินพุตอื่นแทนการบันทึกจากไมโครโฟนตัวอื่นโดยไม่แจ้ง ขณะที่โหมดสนทนาทำงาน ปุ่มไมโครโฟนจะเปลี่ยนเป็นปุ่มทรงแคปซูลที่แสดงมาตรวัดระดับอินพุตสด การคลิกจะหยุดอินพุตเสียง และการวางเมาส์เหนือปุ่มจะแสดงสัญลักษณ์หยุด โปรแกรมอ่านหน้าจอจะประกาศ Connecting voice input..., Listening... หรือ Asking OpenClaw... ขณะที่การเรียกใช้เครื่องมือแบบเรียลไทม์กำลังปรึกษาโมเดลขนาดใหญ่กว่าที่กำหนดค่าผ่าน talk.client.toolCall การหยุดการตอบกลับของเอเจนต์ที่กำลังทำงานยังคงใช้ตัวควบคุม Stop รูปสี่เหลี่ยมแยกต่างหากถัดจากปุ่มทรงแคปซูล
การสนทนาด้วยวิดีโอ ใช้งานได้กับเซสชัน OpenAI Realtime WebRTC และ Google Live บนเบราว์เซอร์ คลิกปุ่มกล้อง อนุญาตการเข้าถึงกล้องและไมโครโฟน แล้วตรวจสอบภาพตัวอย่างในเครื่อง OpenAI จะส่งเฟรม JPEG ที่จำกัดขนาดหนึ่งเฟรมผ่านช่องข้อมูลของเบราว์เซอร์เมื่อ describe_view ขอข้อมูลบริบทภาพ Google Live จะส่งเฟรม JPEG ที่จำกัดขนาดจากเบราว์เซอร์ไปยังผู้ให้บริการโดยตรง ด้วยอัตราสูงสุดที่รองรับคือหนึ่งเฟรมต่อวินาที และตอบการเรียกใช้ฟังก์ชัน describe_view ด้วยสถานะสตรีมกล้อง เฟรมจากกล้องจะไม่ผ่าน Gateway การหยุดโหมดสนทนาจะปิดภาพตัวอย่างและปล่อยแทร็กสื่อทั้งสอง ดูสัญญาการรับส่งข้อมูลของผู้ให้บริการได้ที่ ความสามารถของ Live API และ คู่มือการเรียกใช้ฟังก์ชัน ของ Google
การทดสอบควันแบบสดสำหรับผู้ดูแล: OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts ตรวจสอบบริดจ์ WebSocket แบ็กเอนด์ของ OpenAI, การแลกเปลี่ยน SDP ของ OpenAI WebRTC บนเบราว์เซอร์, การตั้งค่า Google Live บนเบราว์เซอร์ด้วยโทเค็นแบบจำกัด พร้อมเฟรม JPEG และการรับส่งฟังก์ชัน describe_view แบบไปกลับ รวมถึงอะแดปเตอร์การส่งต่อ Gateway สำหรับเบราว์เซอร์ที่ใช้สื่อไมโครโฟนจำลอง คำสั่งจะแสดงเฉพาะสถานะของผู้ให้บริการและไม่บันทึกข้อมูลลับ
หยุดและยกเลิก
- คลิก Stop (เรียก
chat.abort) - ขณะที่การทำงานยังดำเนินอยู่ ข้อความติดตามปกติจะใช้โหมด
messages.queueที่มีผลของ Gatewaysteerจะแทรกข้อความเข้าไปในรอบที่กำลังทำงาน ส่วนโหมดอื่นจะคงการส่งแบบเข้าคิวถาวรของเบราว์เซอร์ไว้ หากการกำกับทิศทางถูกปฏิเสธ ระบบจะกลับไปใช้คิวนั้นเช่นกัน คลิก Steer บนข้อความที่เข้าคิวเพื่อแทรกข้อความด้วยตนเอง - Settings → Appearance → Chat → Follow-ups while the agent is working สามารถแทนที่ค่าเริ่มต้นของเซิร์ฟเวอร์สำหรับเบราว์เซอร์ปัจจุบันได้ หน้าจะแสดงการแทนที่อย่างชัดเจนและมีตัวเลือก Reset to server default
Steer into the active runจะส่งข้อความติดตามทันที ส่วนQueue until the run endsจะพักข้อความไว้จนกว่าการทำงานจะเสร็จสิ้น - พิมพ์
/stop(หรือวลีสั่งยกเลิกแบบเดี่ยว เช่นstop,stop action,stop run,stop openclaw,please stop) เพื่อยกเลิกนอกแบนด์ chat.abortรองรับ{ sessionKey }(ไม่มีrunId) เพื่อยกเลิกการทำงานที่ยังดำเนินอยู่ทั้งหมดสำหรับเซสชันนั้น
การเก็บส่วนที่ไม่สมบูรณ์เมื่อยกเลิก
- เมื่อยกเลิกการทำงาน ข้อความบางส่วนจากผู้ช่วยยังคงแสดงใน UI ได้
- Gateway จะเก็บข้อความบางส่วนจากผู้ช่วยที่ถูกยกเลิกไว้ในประวัติทรานสคริปต์เมื่อมีเอาต์พุตในบัฟเฟอร์
- รายการที่เก็บไว้จะมีเมทาดาทาการยกเลิก เพื่อให้ผู้ใช้ทรานสคริปต์แยกข้อความบางส่วนจากการยกเลิกออกจากเอาต์พุตที่เสร็จสมบูรณ์ตามปกติได้
การเชื่อมต่อขาดหายและการเชื่อมต่อใหม่
เมื่อสร้างเซสชันแล้ว การเชื่อมต่อ Gateway ที่ขาดหายจะไม่ทำให้ออกจากระบบ แดชบอร์ดยังคง แสดงอยู่ โดยมีป้ายทรงแคปซูลสีเหลืองอำพันแบบลอย "การเชื่อมต่อ Gateway ขาดหาย — กำลังเชื่อมต่อใหม่…" ใต้แถบ ด้านบน ขณะที่ไคลเอนต์ลองใหม่โดยอัตโนมัติด้วยระยะหน่วงที่เพิ่มขึ้น (800 ms ถึง 15 s) การอัปเดตสดและ การดำเนินการแบบเรียลไทม์/เซสชันจะหยุดชั่วคราวจนกว่าการเชื่อมต่อจะกลับมา Retry now ในป้ายจะบังคับให้ ลองเชื่อมต่อทันที แชตยังคงแก้ไขได้: การส่งข้อความธรรมดาและไฟล์แนบจะถูกเก็บไว้ใน พื้นที่จัดเก็บของเบราว์เซอร์ในแท็บปัจจุบันซึ่งจำกัดขอบเขตตาม Gateway/เซสชัน แสดงว่ากำลังรอการเชื่อมต่อใหม่ และส่ง โดยอัตโนมัติเมื่อ Gateway กลับมา ส่วนตัวควบคุมสดและคำสั่งสแลชยังคงใช้งานไม่ได้ขณะ ออฟไลน์
เมื่อเบราว์เซอร์นี้มีข้อมูลประจำตัวอยู่แล้ว (โทเค็น/รหัสผ่านที่กำหนดค่าไว้ หรือโทเค็นอุปกรณ์ ที่อนุมัติแล้ว) การเปิดครั้งแรกและการโหลดใหม่จะแสดงสัญลักษณ์ OpenClaw แบบเคลื่อนไหวขนาดเล็กขณะที่กำลัง สร้างการเชื่อมต่อ แทนการกะพริบหน้าจอเข้าสู่ระบบ หน้าจอเข้าสู่ระบบจะแสดงเฉพาะเมื่อยังไม่มีการจัดเก็บข้อมูลประจำตัว หรือเมื่อ Gateway ปฏิเสธข้อมูลดังกล่าวโดยตรง (โทเค็น/รหัสผ่านไม่ถูกต้อง การจับคู่ถูกเพิกถอน) — ซึ่งเป็นสถานะที่ต้องให้ป้อนข้อมูลแทนการรอ
การติดตั้ง PWA และ Web Push
Control UI มาพร้อม manifest.webmanifest และ service worker เพื่อให้เบราว์เซอร์สมัยใหม่ติดตั้งเป็น PWA แบบสแตนด์อโลนได้ Web Push ช่วยให้ Gateway ปลุก PWA ที่ติดตั้งไว้พร้อมการแจ้งเตือนได้ แม้แท็บหรือหน้าต่างเบราว์เซอร์จะไม่ได้เปิดอยู่
ภายในแอป macOS หน้าการตั้งค่า Notifications จะแสดงสิทธิ์การแจ้งเตือนแบบเนทีฟของแอปแทน browser push เนื่องจากแอปส่งการแจ้งเตือนแบบเนทีฟ
หากหน้าแสดง Protocol mismatch ทันทีหลังอัปเดต OpenClaw ให้เปิดแดชบอร์ดอีกครั้งด้วย openclaw dashboard และทำการรีเฟรชแบบล้างแคชก่อน หากยังล้มเหลว ให้ล้างข้อมูลไซต์สำหรับต้นทางของแดชบอร์ดหรือทดสอบในหน้าต่างเบราว์เซอร์ส่วนตัว แท็บเก่าหรือแคช service worker ของเบราว์เซอร์อาจยังคงเรียกใช้บันเดิล Control UI ก่อนอัปเดตกับ Gateway เวอร์ชันใหม่กว่า
| ส่วนติดต่อ | หน้าที่ |
|---|---|
ui/public/manifest.webmanifest |
แมนิเฟสต์ PWA เบราว์เซอร์จะแสดงตัวเลือก "Install app" เมื่อเข้าถึงได้ |
ui/public/sw.js |
Service worker ที่จัดการเหตุการณ์ push และการคลิกการแจ้งเตือน |
state/openclaw.sqlite → web_push_vapid_keys |
คู่คีย์ VAPID ที่สร้างอัตโนมัติและใช้ลงนามเพย์โหลด Web Push |
state/openclaw.sqlite → web_push_subscriptions |
เอนด์พอยต์การสมัครใช้งานของเบราว์เซอร์ คีย์ และเวลาประทับการลงทะเบียนที่เก็บไว้อย่างถาวร |
ข้อมูลจากพื้นที่จัดเก็บ push/vapid-keys.json และ push/web-push-subscriptions.json ที่เลิกใช้แล้วจะถูกนำเข้าโดย openclaw doctor --fix หยุด Gateway ก่อนเรียกใช้การซ่อมแซมนี้ เพื่อไม่ให้กระบวนการรุ่นเก่าสร้างสถานะที่เลิกใช้แล้วขึ้นมาใหม่ระหว่างการนำเข้า เรียกใช้การซ่อมแซมก่อนใช้ Web Push หลังอัปเกรด การลงทะเบียน การส่ง การลบ และการค้นหาคีย์จะปฏิเสธการดำเนินการตราบใดที่ยังมีแหล่งข้อมูลที่เลิกใช้แล้วหรือการอ้างสิทธิ์ของ Doctor ที่ถูกขัดจังหวะเหลืออยู่ รันไทม์ Gateway อ่านและเขียนเฉพาะ SQLite
แทนที่คู่คีย์ VAPID ผ่านตัวแปรสภาพแวดล้อมในกระบวนการ Gateway เมื่อต้องการตรึงคีย์ (การปรับใช้หลายโฮสต์ การหมุนเวียนข้อมูลลับ หรือการทดสอบ):
OPENCLAW_VAPID_PUBLIC_KEYOPENCLAW_VAPID_PRIVATE_KEYOPENCLAW_VAPID_SUBJECT(ค่าเริ่มต้นคือhttps://openclaw.ai)
Control UI ใช้เมธอด Gateway ที่จำกัดขอบเขตเหล่านี้เพื่อลงทะเบียนและทดสอบการสมัครใช้งานของเบราว์เซอร์:
push.web.vapidPublicKeyดึงคีย์สาธารณะ VAPID ที่ใช้งานอยู่push.web.subscribeลงทะเบียนendpointพร้อมkeys.p256dh/keys.authpush.web.unsubscribeลบเอนด์พอยต์ที่ลงทะเบียนไว้push.web.testส่งการแจ้งเตือนทดสอบไปยังการสมัครใช้งานของผู้เรียก
การฝังเนื้อหาที่โฮสต์
ข้อความของผู้ช่วยสามารถแสดงเนื้อหาเว็บที่โฮสต์ไว้แบบอินไลน์ด้วยชอร์ตโค้ด [embed ...] นโยบายแซนด์บ็อกซ์ของ iframe ควบคุมโดย gateway.controlUi.embedSandbox:
เครื่องมือหลัก show_widget แสดง SVG หรือ HTML ที่สมบูรณ์ในตัวโดยตรงจากการเรียกใช้เครื่องมือ เบราว์เซอร์และไคลเอนต์แชตแบบเนทีฟที่รองรับจะประกาศความสามารถ Gateway inline-widgets และเอกสาร Canvas ที่ได้จะยังคงพร้อมใช้งานเมื่อโหลดประวัติแชตใหม่ Discord Activities ใช้ชื่อเครื่องมือเดียวกันบน Discord ส่วนการทำงานที่เริ่มจากช่องทางอื่นจะไม่ได้รับเครื่องมือนี้
เข้มงวด
ปิดการเรียกใช้สคริปต์ภายในเนื้อหาฝังที่โฮสต์
สคริปต์ (ค่าเริ่มต้น)
อนุญาตเนื้อหาฝังแบบโต้ตอบพร้อมคงการแยกต้นทาง โดยปกติเพียงพอสำหรับเกม/วิดเจ็ตบนเบราว์เซอร์ที่สมบูรณ์ในตัว
เชื่อถือได้
เพิ่ม allow-same-origin บน allow-scripts สำหรับเอกสารในไซต์เดียวกันที่ตั้งใจต้องใช้สิทธิ์ที่สูงขึ้น
{ gateway: { controlUi: { embedSandbox: "scripts", }, },}URL ฝัง http(s) ภายนอกแบบสัมบูรณ์จะยังคงถูกบล็อกตามค่าเริ่มต้น หากต้องการให้ [embed url="https://..."] โหลดหน้าจากบุคคลที่สาม ให้ตั้งค่า gateway.controlUi.allowExternalEmbedUrls: true
ความกว้างของข้อความแชต
ทรานสคริปต์แชตใช้กรอบสำหรับการอ่านที่จัดกึ่งกลางและอยู่ในแนวเดียวกับช่องเขียนข้อความ เอาต์พุตของผู้ช่วยและเครื่องมือจะจัดชิดซ้าย ส่วนกล่องข้อความผู้ใช้จะจัดชิดขวาภายในกรอบนั้น การปรับใช้บนจอกว้างสามารถแทนที่ความกว้างของทรานสคริปต์โดยไม่ต้องแก้ไข CSS ที่รวมมา ด้วยการตั้งค่า gateway.controlUi.chatMessageMaxWidth:
{ gateway: { controlUi: { chatMessageMaxWidth: "min(1280px, 82%)", }, },}ค่าจะผ่านการตรวจสอบก่อนส่งถึงเบราว์เซอร์ รูปแบบที่รองรับประกอบด้วยค่าความยาวและเปอร์เซ็นต์ธรรมดา เช่น 960px หรือ 82% รวมถึงนิพจน์ความกว้างแบบมีข้อจำกัด min(...), max(...), clamp(...), calc(...) และ fit-content(...)
การเข้าถึงผ่าน Tailnet (แนะนำ)
Tailscale Serve แบบผสานรวม (แนะนำ)
ให้ Gateway ทำงานบนลูปแบ็กและให้ Tailscale Serve ทำหน้าที่พร็อกซีผ่าน HTTPS:
openclaw gateway --tailscale serveเปิด https://<magicdns>/ (หรือ gateway.controlUi.basePath ที่กำหนดค่าไว้)
โดยค่าเริ่มต้น คำขอของ Control UI/WebSocket Serve สามารถยืนยันตัวตนผ่านส่วนหัวข้อมูลประจำตัวของ Tailscale (tailscale-user-login) เมื่อ gateway.auth.allowTailscale เป็น true ได้ OpenClaw ตรวจสอบข้อมูลประจำตัวโดยแก้ไขที่อยู่ x-forwarded-for ด้วย tailscale whois และจับคู่กับส่วนหัว โดยจะยอมรับเฉพาะเมื่อคำขอเข้าถึง loopback พร้อมส่วนหัว x-forwarded-* ของ Tailscale เท่านั้น สำหรับเซสชันผู้ดำเนินการ Control UI ที่มีข้อมูลประจำตัวอุปกรณ์ของเบราว์เซอร์ เส้นทาง Serve ที่ผ่านการตรวจสอบนี้จะข้ามขั้นตอนการจับคู่อุปกรณ์แบบไปกลับด้วย ส่วนเบราว์เซอร์ที่ไม่มีข้อมูลประจำตัวอุปกรณ์และการเชื่อมต่อบทบาท Node ยังคงผ่านการตรวจสอบอุปกรณ์ตามปกติ ตั้งค่า gateway.auth.allowTailscale: false หากต้องการบังคับใช้ข้อมูลประจำตัวแบบความลับร่วมอย่างชัดเจนแม้แต่กับทราฟฟิก Serve จากนั้นใช้ gateway.auth.mode: "token" หรือ "password"
สำหรับเส้นทางข้อมูลประจำตัว Serve แบบอะซิงโครนัสนั้น ความพยายามยืนยันตัวตนที่ล้มเหลวสำหรับ IP ไคลเอนต์และขอบเขตการยืนยันตัวตนเดียวกันจะถูกจัดลำดับก่อนเขียนข้อมูลการจำกัดอัตรา ดังนั้นการลองซ้ำที่ไม่ถูกต้องพร้อมกันจากเบราว์เซอร์เดียวกันจึงอาจแสดง retry later ในคำขอที่สอง แทนที่จะเกิดข้อผิดพลาดไม่ตรงกันแบบธรรมดาสองรายการที่แข่งขันกันแบบขนาน
ผูกกับ tailnet + โทเค็น
openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"เปิด http://<tailscale-ip>:18789/ (หรือ gateway.controlUi.basePath ที่กำหนดค่าไว้)
วางความลับร่วมที่ตรงกันลงในการตั้งค่า UI (ส่งเป็น connect.params.auth.token หรือ connect.params.auth.password)
HTTP ที่ไม่ปลอดภัย
หากเปิดแดชบอร์ดผ่าน HTTP ธรรมดา (http://<lan-ip> หรือ http://<tailscale-ip>) เบราว์เซอร์จะทำงานใน บริบทที่ไม่ปลอดภัย และบล็อก WebCrypto โดยค่าเริ่มต้น OpenClaw จะ บล็อก การเชื่อมต่อ Control UI ที่ไม่มีข้อมูลประจำตัวอุปกรณ์
ข้อยกเว้นที่ระบุไว้ในเอกสาร:
- ความเข้ากันได้ของ HTTP ที่ไม่ปลอดภัยเฉพาะ localhost กับ
gateway.controlUi.allowInsecureAuth=true - การยืนยันตัวตน Control UI ของผู้ดำเนินการที่สำเร็จผ่าน
gateway.auth.mode: "trusted-proxy" gateway.controlUi.dangerouslyDisableDeviceAuth=trueสำหรับกรณีฉุกเฉิน
วิธีแก้ที่แนะนำ: ใช้ HTTPS (Tailscale Serve) หรือเปิด UI ภายในเครื่องที่ https://<magicdns>/ (Serve) หรือ http://127.0.0.1:18789/ (บนโฮสต์ Gateway)
ลักษณะการทำงานของตัวสลับการยืนยันตัวตนแบบไม่ปลอดภัย
{ gateway: { controlUi: { allowInsecureAuth: true }, bind: "tailnet", auth: { mode: "token", token: "replace-me" }, },}allowInsecureAuth เป็นเพียงตัวสลับความเข้ากันได้ภายในเครื่อง:
- ทำให้เซสชัน Control UI บน localhost ดำเนินต่อได้โดยไม่มีข้อมูลประจำตัวอุปกรณ์ในบริบท HTTP ที่ไม่ปลอดภัย
- ไม่ได้ข้ามการตรวจสอบการจับคู่
- ไม่ได้ผ่อนคลายข้อกำหนดข้อมูลประจำตัวอุปกรณ์จากระยะไกล (ที่ไม่ใช่ localhost)
สำหรับกรณีฉุกเฉินเท่านั้น
{ gateway: { controlUi: { dangerouslyDisableDeviceAuth: true }, bind: "tailnet", auth: { mode: "token", token: "replace-me" }, },}หมายเหตุเกี่ยวกับพร็อกซีที่เชื่อถือได้
- การยืนยันตัวตนผ่านพร็อกซีที่เชื่อถือได้ซึ่งสำเร็จสามารถอนุญาตเซสชัน Control UI ของ ผู้ดำเนินการ ที่ไม่มีข้อมูลประจำตัวอุปกรณ์ได้
- สิ่งนี้ ไม่ ครอบคลุมถึงเซสชัน Control UI ที่มีบทบาท Node
- พร็อกซีย้อนกลับผ่าน loopback บนโฮสต์เดียวกันยังคงไม่ผ่านการยืนยันตัวตนด้วยพร็อกซีที่เชื่อถือได้ โปรดดู การยืนยันตัวตนด้วยพร็อกซีที่เชื่อถือได้
โปรดดู Tailscale สำหรับคำแนะนำในการตั้งค่า HTTPS
นโยบายความปลอดภัยของเนื้อหา
Control UI มาพร้อมนโยบาย img-src ที่เข้มงวด โดยอนุญาตเฉพาะทรัพยากรจาก ต้นทางเดียวกัน, URL แบบ data: และ URL แบบ blob: ที่สร้างขึ้นภายในเครื่อง เบราว์เซอร์จะปฏิเสธ URL รูปภาพระยะไกลแบบ http(s) และแบบสัมพันธ์กับโปรโตคอล โดยจะไม่ส่งคำขอดึงข้อมูลผ่านเครือข่ายเลย
ในทางปฏิบัติ:
- อวาตาร์และรูปภาพที่ให้บริการผ่านพาธสัมพัทธ์ (เช่น
/avatars/<id>) ยังคงแสดงผลได้ รวมถึงเส้นทางอวาตาร์ที่ต้องยืนยันตัวตนซึ่ง UI ดึงข้อมูลและแปลงเป็น URL แบบblob:ภายในเครื่อง - URL แบบ
data:image/...ที่ฝังในบรรทัดยังคงแสดงผลได้ - URL แบบ
blob:ภายในเครื่องที่ Control UI สร้างขึ้นยังคงแสดงผลได้ - Gateway จะดึงอวาตาร์ตัวอย่างลิงก์ GitHub จากโฮสต์อวาตาร์แบบตายตัวของ GitHub และส่งคืนเป็น URL แบบ
data:ที่มีขอบเขตจำกัด เบราว์เซอร์ของผู้ดำเนินการจะไม่ติดต่อโฮสต์อวาตาร์ระยะไกล - URL อวาตาร์ระยะไกลที่เมทาดาทาของช่องทางส่งออกมาจะถูกนำออกโดยตัวช่วยอวาตาร์ของ Control UI และแทนที่ด้วยโลโก้/ป้ายในตัว เพื่อไม่ให้ช่องทางที่ถูกเจาะระบบหรือเป็นอันตรายบังคับให้เบราว์เซอร์ของผู้ดำเนินการดึงรูปภาพระยะไกลตามอำเภอใจได้
คุณลักษณะนี้เปิดใช้งานตลอดเวลาและไม่สามารถกำหนดค่าได้
การยืนยันตัวตนของเส้นทางอวาตาร์
เมื่อกำหนดค่าการยืนยันตัวตนของ Gateway ปลายทางอวาตาร์ของ Control UI จะต้องใช้โทเค็น Gateway เดียวกับส่วนอื่นของ API:
GET /avatar/<agentId>ส่งคืนรูปภาพอวาตาร์ให้เฉพาะผู้เรียกที่ยืนยันตัวตนแล้ว ส่วนGET /avatar/<agentId>?meta=1ส่งคืนเมทาดาทาอวาตาร์ภายใต้กฎเดียวกัน- คำขอที่ไม่ยืนยันตัวตนไปยังเส้นทางใดเส้นทางหนึ่งจะถูกปฏิเสธ (สอดคล้องกับเส้นทางสื่อของผู้ช่วยที่อยู่ข้างเคียง) ดังนั้นเส้นทางอวาตาร์จึงไม่สามารถเปิดเผยข้อมูลประจำตัวของเอเจนต์บนโฮสต์ที่ส่วนอื่นได้รับการป้องกันอยู่แล้ว
- Control UI ส่งต่อโทเค็น Gateway เป็นส่วนหัว bearer เมื่อดึงอวาตาร์ และใช้ URL แบบ blob ที่ผ่านการยืนยันตัวตนเพื่อให้รูปภาพยังคงแสดงผลในแดชบอร์ดได้
หากปิดใช้งานการยืนยันตัวตนของ Gateway (ไม่แนะนำบนโฮสต์ที่ใช้ร่วมกัน) เส้นทางอวาตาร์จะไม่ต้องยืนยันตัวตนเช่นกัน ซึ่งสอดคล้องกับส่วนอื่นของ Gateway
การยืนยันตัวตนของเส้นทางสื่อผู้ช่วย
เมื่อกำหนดค่าการยืนยันตัวตนของ Gateway ตัวอย่างสื่อภายในเครื่องของผู้ช่วยจะใช้เส้นทางสองขั้นตอน:
GET /__openclaw__/assistant-media?meta=1&source=<path>ต้องใช้การยืนยันตัวตนของผู้ดำเนินการ Control UI ตามปกติ โดยเบราว์เซอร์จะส่งโทเค็น Gateway เป็นส่วนหัว bearer เมื่อตรวจสอบความพร้อมใช้งาน- การตอบกลับเมทาดาทาที่สำเร็จจะมี
mediaTicketอายุสั้น ซึ่งจำกัดขอบเขตไว้เฉพาะพาธต้นทางนั้น - URL รูปภาพ เสียง วิดีโอ และเอกสารที่เบราว์เซอร์แสดงผลจะใช้
mediaTicket=<ticket>แทนโทเค็นหรือรหัสผ่าน Gateway ที่ใช้งานอยู่ ตั๋วนี้หมดอายุอย่างรวดเร็วและไม่สามารถให้สิทธิ์แก่ต้นทางอื่นได้
วิธีนี้ช่วยให้การแสดงผลสื่อเข้ากันได้กับองค์ประกอบสื่อแบบเนทีฟของเบราว์เซอร์ โดยไม่ใส่ข้อมูลประจำตัว Gateway ที่นำกลับมาใช้ซ้ำได้ลงใน URL สื่อที่มองเห็นได้
ลิงก์การอนุมัติ
การแจ้งเตือนการอนุมัติของผู้ดำเนินการสามารถลิงก์โดยตรงไปยังเอกสารการอนุมัติแบบสแตนด์อโลนที่ให้บริการภายใต้เนมสเปซ ${controlUiBasePath}/approve/{approvalId} ที่สงวนไว้ (เช่น /approve/<approvalId> หรือ /openclaw/approve/<approvalId> เมื่อกำหนดค่าพาธฐาน) URL จะคงที่ตลอดอายุของการอนุมัติและสามารถส่งต่อระหว่างอุปกรณ์ของคุณเองได้อย่างปลอดภัย โดย URL นี้ระบุการอนุมัติเท่านั้นและไม่เคยให้สิทธิ์อนุมัติ
- Gateway สงวนเนมสเปซ
/approve/<approvalId>แบบหนึ่งเซกเมนต์ไว้ก่อนเส้นทาง HTTP ของ Plugin สำหรับเมธอด HTTP ทั้งหมด ดังนั้นเส้นทาง Plugin จึงไม่สามารถบดบังหรือสกัดกั้นเอกสารการอนุมัติได้ - การเปิดเอกสารการอนุมัติต้องใช้การยืนยันตัวตน Gateway แบบเดียวกับส่วนอื่นของ Control UI (โทเค็น/รหัสผ่าน, ข้อมูลประจำตัว Tailscale Serve หรือข้อมูลประจำตัวจากพร็อกซีที่เชื่อถือได้) โดยข้อมูลประจำตัวจะไม่เป็นส่วนหนึ่งของ URL การอนุมัติ
- เมื่อปิดใช้งานการให้บริการ Control UI คำขอไปยังเนมสเปซนี้จะส่งคืน
404แทนที่จะส่งต่อไปยังตัวจัดการ Plugin - การลงชื่อเข้าใช้ในเอกสารการอนุมัติมีผลชั่วคราวเฉพาะหน้านั้น โดยจะไม่เขียนทับการเลือกหรือการตั้งค่า Gateway ที่ Control UI แบบเต็มบันทึกไว้ในเบราว์เซอร์เดียวกัน
Gateway ให้บริการไฟล์แบบคงที่จาก dist/control-ui:
pnpm ui:buildพาธฐานแบบสัมบูรณ์ที่ไม่บังคับ (URL ทรัพยากรแบบตายตัว):
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:buildการพัฒนาภายในเครื่อง (เซิร์ฟเวอร์สำหรับพัฒนาแยกต่างหาก):
pnpm ui:devจากนั้นกำหนดให้ UI ชี้ไปยัง URL WS ของ Gateway (เช่น ws://127.0.0.1:18789)
หน้า Control UI ว่างเปล่า
หากเบราว์เซอร์โหลดแดชบอร์ดว่างเปล่าและ DevTools ไม่แสดงข้อผิดพลาดที่เป็นประโยชน์ ส่วนขยายหรือสคริปต์เนื้อหาที่ทำงานช่วงต้นอาจขัดขวางไม่ให้แอปโมดูล JavaScript ประมวลผล หน้าคงที่มีแผงกู้คืน HTML ธรรมดาที่จะปรากฏเมื่อ <openclaw-app> ไม่ได้ลงทะเบียนหลังเริ่มต้นระบบ
ใช้การดำเนินการ Try again ของแผงหลังเปลี่ยนสภาพแวดล้อมของเบราว์เซอร์ หรือโหลดใหม่ด้วยตนเองหลังตรวจสอบรายการต่อไปนี้:
- ปิดใช้งานส่วนขยายที่แทรกโค้ดลงในทุกหน้า โดยเฉพาะส่วนขยายที่มีสคริปต์เนื้อหา
<all_urls> - ลองใช้หน้าต่างส่วนตัว โปรไฟล์เบราว์เซอร์ใหม่ หรือเบราว์เซอร์อื่น
- ให้ Gateway ทำงานต่อไปและตรวจสอบ URL แดชบอร์ดเดิมหลังเปลี่ยนเบราว์เซอร์
การดีบัก/การทดสอบ: เซิร์ฟเวอร์สำหรับพัฒนา + Gateway ระยะไกล
Control UI ประกอบด้วยไฟล์แบบคงที่ ส่วนเป้าหมาย WebSocket สามารถกำหนดค่าได้และอาจต่างจากต้นทาง HTTP คุณลักษณะนี้มีประโยชน์เมื่อต้องการใช้เซิร์ฟเวอร์สำหรับพัฒนา Vite ภายในเครื่อง แต่ Gateway ทำงานที่อื่น
เริ่มเซิร์ฟเวอร์สำหรับพัฒนา UI
pnpm ui:devเปิดด้วย gatewayUrl
http://localhost:5173/?gatewayUrl=ws%3A%2F%2F<gateway-host>%3A18789การยืนยันตัวตนครั้งเดียวที่ไม่บังคับ (หากจำเป็น):
http://localhost:5173/?gatewayUrl=wss%3A%2F%2F<gateway-host>%3A18789#token=<gateway-token>หมายเหตุ
gatewayUrlจะถูกจัดเก็บใน localStorage หลังโหลด และนำออกจาก URL- หากส่งปลายทาง
ws://หรือwss://แบบเต็มผ่านgatewayUrlให้เข้ารหัสค่าเป็น URL เพื่อให้เบราว์เซอร์แยกวิเคราะห์สตริงคำขอได้อย่างถูกต้อง - ควรส่ง
tokenผ่านส่วน fragment ของ URL (#token=...) ทุกครั้งที่เป็นไปได้ ระบบจะไม่ส่ง fragment ไปยังเซิร์ฟเวอร์ จึงหลีกเลี่ยงการรั่วไหลผ่านบันทึกคำขอและ Referer พารามิเตอร์คำขอ?token=แบบเดิมยังคงถูกนำเข้าหนึ่งครั้งเพื่อความเข้ากันได้ แต่ใช้เป็นทางเลือกสำรองเท่านั้น และจะถูกนำออกทันทีหลังเริ่มต้นระบบ passwordจะเก็บไว้ในหน่วยความจำเท่านั้น- เมื่อตั้งค่า
gatewayUrlแล้ว UI จะไม่ย้อนกลับไปใช้ข้อมูลประจำตัวจากการกำหนดค่าหรือสภาพแวดล้อม ให้ระบุtoken(หรือpassword) อย่างชัดเจน การไม่มีข้อมูลประจำตัวที่ระบุอย่างชัดเจนถือเป็นข้อผิดพลาด - ใช้
wss://เมื่อ Gateway อยู่หลัง TLS (Tailscale Serve, พร็อกซี HTTPS เป็นต้น) gatewayUrlจะได้รับการยอมรับเฉพาะในหน้าต่างระดับบนสุด (ไม่ใช่แบบฝัง) เพื่อป้องกัน clickjacking- การติดตั้งใช้งาน Control UI สาธารณะที่ไม่ใช่ loopback ต้องตั้งค่า
gateway.controlUi.allowedOriginsอย่างชัดเจน (ต้นทางแบบเต็ม) การโหลดจาก LAN/Tailnet ส่วนตัวที่มีต้นทางเดียวกันผ่าน loopback, RFC1918/link-local,.local,.ts.netหรือโฮสต์ Tailscale CGNAT จะได้รับการยอมรับโดยไม่ต้องเปิดใช้การย้อนกลับไปใช้ส่วนหัว Host - การเริ่มต้น Gateway อาจเพิ่มต้นทางภายในเครื่อง เช่น
http://localhost:<port>และhttp://127.0.0.1:<port>จากการผูกและพอร์ตที่มีผล ณ รันไทม์ แต่ต้นทางของเบราว์เซอร์ระยะไกลยังคงต้องมีรายการอย่างชัดเจน - ห้ามใช้
gateway.controlUi.allowedOrigins: ["*"]ยกเว้นสำหรับการทดสอบภายในเครื่องที่ควบคุมอย่างเข้มงวด ซึ่งหมายถึงการอนุญาตต้นทางเบราว์เซอร์ใดก็ได้ ไม่ใช่ "จับคู่กับโฮสต์ที่ฉันกำลังใช้งานอยู่" gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueเปิดใช้โหมดการย้อนกลับไปใช้ต้นทางจากส่วนหัว Host แต่เป็นโหมดความปลอดภัยที่อันตราย
{ gateway: { controlUi: { allowedOrigins: ["http://localhost:5173"], }, },}รายละเอียดการตั้งค่าการเข้าถึงระยะไกล: การเข้าถึงระยะไกล
ที่เกี่ยวข้อง
- แดชบอร์ด — แดชบอร์ด Gateway
- การตรวจสอบสถานะ — การเฝ้าติดตามสถานะ Gateway
- TUI — ส่วนติดต่อผู้ใช้ผ่านเทอร์มินัล
- WebChat — ส่วนติดต่อแชตผ่านเบราว์เซอร์