Plugin guides
Plugin สมุดบันทึก
Plugin Logbook เปลี่ยนกิจกรรมบนหน้าจอให้เป็นบันทึกการทำงานอัตโนมัติ โดยจะ บันทึกภาพหน้าจอเป็นระยะจาก Node ที่จับคู่ไว้ สรุปภาพเหล่านั้นเป็น ข้อสังเกตพร้อมการประทับเวลา และสร้างการ์ดไทม์ไลน์ใน Control UI นอกจากนี้ยังสามารถสร้างบันทึกสำหรับการประชุมอัปเดตประจำวันและ ตอบคำถามเกี่ยวกับวันที่ติดตามไว้ได้
สถานะที่ OpenClaw เป็นเจ้าของจะอยู่บน Gateway ภายใต้ <state-dir>/logbook/ แต่
การประมวลผลด้วยโมเดลอาจไม่ได้เกิดขึ้นภายในเครื่อง ภาพหน้าจอตัวอย่างจะถูกส่งไปยัง
เส้นทางโมเดลภาพที่กำหนดค่าไว้ ส่วนข้อสังเกตและข้อความไทม์ไลน์จะถูกส่งไปยังโมเดลเริ่มต้นของ
เอเจนต์ ใช้เส้นทางโมเดลภายในเครื่องสำหรับทั้งสองขั้นตอน หากเนื้อหาบนหน้าจอและ
ข้อความกิจกรรมที่ได้จากการประมวลผลต้องอยู่ภายในเครื่องเท่านั้น
Logbook รวมมาให้แล้วและปิดใช้งานโดยค่าเริ่มต้น การเปิดใช้ Plugin นี้จะอนุญาตให้
Gateway เริ่มจับภาพหน้าจอ เนื่องจาก captureEnabled มีค่าเริ่มต้นเป็น true
ก่อนเริ่มต้น
คุณต้องมี:
- Node ที่เชื่อมต่ออยู่และเปิดเผย
screen.snapshotหรือlogbook.snapshotNode ของแอป macOS ต้องได้รับสิทธิ์ Screen Recording ส่วนโฮสต์ Node ของ macOS แบบไม่มีส่วนติดต่อผู้ใช้ (openclaw node host run) จะได้รับคำสั่งlogbook.snapshotที่ Plugin จัดเตรียมให้ ซึ่งทำงานผ่านเครื่องมือscreencaptureของระบบ - เปิดใช้และยืนยันตัวตน Plugin Codex ที่รวมมาให้แล้ว ปัจจุบัน Codex จัดเตรียม
สัญญาการแยกข้อมูลจากรูปภาพแบบมีโครงสร้างที่ Logbook ต้องใช้ ลงชื่อเข้าใช้ด้วย
openclaw models auth login --provider openaiโปรดดู ชุดควบคุม Codex สำหรับวิธีการยืนยันตัวตนอื่น - โมเดลเริ่มต้นของเอเจนต์ที่ใช้งานได้ Logbook ใช้โมเดลนี้สังเคราะห์การ์ด บันทึก การประชุมอัปเดต และการถามตอบเกี่ยวกับวัน หลังจากผ่านขั้นตอนโมเดลภาพแล้ว
เริ่มต้นอย่างรวดเร็ว
เปิดใช้ Plugin Codex และ Logbook:
openclaw plugins enable codexopenclaw plugins enable logbookกำหนดค่าโมเดลภาพอย่างชัดเจนเพื่อให้การเริ่มต้นทำงานมีผลลัพธ์แน่นอน:
{ plugins: { entries: { codex: { enabled: true, }, logbook: { enabled: true, config: { visionModel: "codex/gpt-5.6-sol", }, }, }, },}หากคุณใช้ plugins.allow ให้รวมทั้ง codex และ logbook รีสตาร์ต
Gateway หลังจากเปลี่ยนการกำหนดค่า Plugin จากนั้นตรวจสอบการลงทะเบียน
และเปิดแดชบอร์ด:
openclaw gateway restartopenclaw plugins inspect logbook --runtime --jsonopenclaw nodes status --connectedopenclaw nodes describe --node <idOrNameOrIp>openclaw dashboardคำอธิบาย Node ต้องมี screen.snapshot หรือ logbook.snapshot
Node แบบไม่มีส่วนติดต่อผู้ใช้จะประกาศ logbook.snapshot หลังจากเปิดใช้งาน Plugin แล้วเท่านั้น
โปรดดูการแก้ไขปัญหา Node หากไม่มีคำสั่งดังกล่าว
แท็บ Logbook จะปรากฏเฉพาะเมื่อเปิดใช้ Plugin และเซสชัน Control UI มี
operator.write แถวสถานะควรแสดง กำลังจับภาพ โดยไม่มีข้อผิดพลาด
การ์ดไทม์ไลน์จะปรากฏเมื่อหน้าต่างการวิเคราะห์ปิดลง หรือคุณสามารถเลือก
วิเคราะห์ตอนนี้ หลังจากจับภาพกิจกรรมแล้ว
วิธีการทำงาน
- จับภาพ: ทุก ๆ
captureIntervalSeconds(ค่าเริ่มต้น 30 วินาที) Logbook จะเรียกใช้ คำสั่งจับภาพของ Node ที่เลือกและจัดเก็บเฟรม JPEG ที่ปรับขนาดแล้ว เฟรมที่เหมือนกันติดต่อกันจะถูกทำเครื่องหมายว่าไม่มีการใช้งานและไม่นำไปวิเคราะห์ - สังเกตการณ์: เมื่อผ่านหน้าต่างเวลาการวิเคราะห์ (ค่าเริ่มต้น 15 นาที) Plugin จะสุ่มเลือกเฟรมที่มีกิจกรรมสูงสุด 16 เฟรมและส่งไปยังโมเดลภาพ ซึ่งจะส่งคืนข้อสังเกตกิจกรรมพร้อมการประทับเวลา ("VS Code: กำลังแก้ไข store.ts และแก้ข้อผิดพลาดด้านชนิดข้อมูล") ช่วงว่างของการจับภาพที่นานกว่าสองนาทีหรือ เมื่อถึงเที่ยงคืนตามเวลาท้องถิ่นจะปิดหน้าต่างปัจจุบันด้วย
- สังเคราะห์: ข้อสังเกตพร้อมกับการ์ดที่มีอยู่จาก 45 นาทีล่าสุดจะถูก ปรับปรุงเป็นการ์ดไทม์ไลน์ (การ์ดละ 10-60 นาที) ซึ่งมีชื่อเรื่อง สรุป หมวดหมู่ แอปหลัก และสิ่งรบกวนช่วงสั้น ๆ หากมี
- ล้างข้อมูล: เฟรมที่เก่ากว่า
retentionDays(ค่าเริ่มต้น 14) จะถูกลบ โดยจะเก็บการ์ด ข้อสังเกต และบันทึกการประชุมอัปเดตที่แคชไว้ต่อไป
ขอบเขตของวันและนาฬิกาในไทม์ไลน์ใช้เขตเวลาท้องถิ่นของ Gateway ไม่ใช่
เขตเวลาของเบราว์เซอร์ เฟรมและฐานข้อมูลไทม์ไลน์ SQLite อยู่ภายใต้
<state-dir>/logbook/
การไหลของโมเดลและข้อมูล
Logbook ใช้เส้นทางโมเดลสองเส้นทางแยกกัน:
| ขั้นตอน | ข้อมูลที่ส่ง | เส้นทางโมเดล |
|---|---|---|
| สังเกตการณ์ | เฟรม JPEG ตัวอย่างสูงสุด 16 เฟรมพร้อมเวลาจับภาพ | visionModel หรือรายการ Codex tools.media ที่ยืมมาและเข้ากันได้ |
| สังเคราะห์การ์ด | ข้อสังเกตพร้อมการประทับเวลาและการ์ดไทม์ไลน์ล่าสุด | โมเดลเริ่มต้นของเอเจนต์ผ่านรันไทม์ LLM ของ Plugin |
| สร้างบันทึกการประชุมอัปเดต | การ์ดของวันที่เลือกและวันก่อนหน้า | โมเดลเริ่มต้นของเอเจนต์ผ่านรันไทม์ LLM ของ Plugin |
| ถามเกี่ยวกับวันของคุณ | คำถาม การ์ดของวันที่เลือก และข้อสังเกตล่าสุด | โมเดลเริ่มต้นของเอเจนต์ผ่านรันไทม์ LLM ของ Plugin |
ฐานข้อมูล SQLite ทั้งหมดจะไม่ถูกส่งไปยังโมเดลใด ๆ ภาพหน้าจอดิบจะถูกส่ง ไปยังขั้นตอนการสังเกตการณ์เท่านั้น ส่วนการสังเคราะห์การ์ด การสร้างบันทึกการประชุมอัปเดต และการถามตอบจะได้รับ เฉพาะข้อความที่ได้จากการประมวลผล
การกำหนดค่า
{ plugins: { entries: { codex: { enabled: true, }, logbook: { enabled: true, config: { captureEnabled: true, captureIntervalSeconds: 30, analysisIntervalMinutes: 15, nodeId: "my-mac", screenIndex: 0, maxWidth: 1440, visionModel: "codex/gpt-5.6-sol", retentionDays: 14, }, }, }, },}คีย์การกำหนดค่า Logbook ทั้งหมดเป็นตัวเลือก ค่าตัวเลขจะถูกปัดเป็นจำนวนเต็ม และจำกัดให้อยู่ในช่วงที่รองรับ
| คีย์ | ค่าเริ่มต้น | ช่วงหรือค่า | ลักษณะการทำงาน |
|---|---|---|---|
captureEnabled |
true |
ค่าบูลีน | สวิตช์หลักแบบถาวรสำหรับภาพบันทึกใหม่ ไทม์ไลน์ยังคงใช้งานได้เมื่อเป็น false |
captureIntervalSeconds |
30 |
5-600 |
ระยะเวลาระหว่างความพยายามจับภาพ |
analysisIntervalMinutes |
15 |
3-120 |
หน้าต่างเวลาการสังเกตการณ์เป้าหมาย โดยช่วงว่างและเวลาเที่ยงคืนอาจปิดหน้าต่างเร็วกว่านั้น |
nodeId |
ไม่ได้ตั้งค่า | รหัส Node หรือชื่อที่แสดง | ตรึงการจับภาพไว้กับ Node ที่เชื่อมต่อหนึ่งรายการ โดยไม่แยกตัวพิมพ์เล็กและใหญ่ในการจับคู่ |
screenIndex |
0 |
0-16 |
ดัชนีจอแสดงผลที่เริ่มนับจากศูนย์ |
maxWidth |
1440 |
480-3840 |
ขีดจำกัดขนาดการจับภาพที่ร้องขอ โดย macOS แบบไม่มีส่วนติดต่อผู้ใช้จะนำไปใช้กับมิติที่ใหญ่ที่สุด |
visionModel |
ไม่ได้ตั้งค่า | provider/model |
เส้นทางแบบมีโครงสร้างที่ระบุชัดเจน การอ้างอิงที่มีรูปแบบไม่ถูกต้องจะหยุดการวิเคราะห์ชั่วคราว และผู้ให้บริการที่ไม่รองรับจะทำให้ชุดงานล้มเหลว |
retentionDays |
14 |
1-365 |
ลบเฟรมเก่า แต่จะเก็บการ์ด ข้อสังเกต และบันทึกการประชุมอัปเดตไว้ |
เมื่อไม่มี nodeId Logbook จะเลือก Node ของแอปที่เชื่อมต่อและเปิดเผย
screen.snapshot ก่อน จากนั้นจึงใช้ Node แบบไม่มีส่วนติดต่อผู้ใช้ที่เปิดเผย
logbook.snapshot เป็นทางเลือก ในการตั้งค่าที่ไม่ได้ตรึง Node ไว้ Node ที่ล้มเหลวจะถูกหมุนไปไว้หลัง
Node อื่นที่มีคุณสมบัติเหมาะสม ปุ่มสลับหยุดชั่วคราวบนแดชบอร์ดมีผลเฉพาะเซสชันและจะรีเซ็ตเมื่อ
Gateway รีสตาร์ต ใช้ captureEnabled: false เพื่อหยุดแบบถาวร
การเลือกโมเดลภาพ
Logbook จะเลือกโมเดลการสังเกตการณ์ตามลำดับต่อไปนี้:
plugins.entries.logbook.config.visionModel- รายการ Codex รายการแรกที่รองรับรูปภาพภายใต้
tools.media.image.models - รายการ Codex รายการแรกที่รองรับรูปภาพภายใต้
tools.media.models
ผู้ให้บริการสื่ออื่นจะถูกข้าม เนื่องจากปัจจุบันยังไม่เปิดเผย
สัญญาการแยกข้อมูลแบบมีโครงสร้างที่ Logbook ต้องใช้ การตั้งค่า
tools.media.image.enabled: false จะปิดใช้งานค่าเริ่มต้นของโมเดลสื่อที่ยืมมา แต่
visionModel ของ Logbook ที่ระบุอย่างชัดเจนยังคงมีผล
แท็บแดชบอร์ด
- ไทม์ไลน์: การ์ดที่ขยายได้สำหรับแต่ละกิจกรรม พร้อมสีตามหมวดหมู่ แอปหลัก ป้ายสิ่งรบกวน และคีย์เฟรมจากภาพบันทึก
- ภาพรวมของวัน: อัตราส่วนการจดจ่อ การแบ่งตามหมวดหมู่ และแอปที่ใช้มากที่สุด
- การประชุมอัปเดตประจำวัน: เปลี่ยนข้อมูลของเมื่อวานและวันนี้เป็นข้อความอัปเดตที่พร้อมวาง
- ถามเกี่ยวกับวันของคุณ: คำถามภาษาธรรมชาติที่ตอบจากไทม์ไลน์ที่ติดตามไว้ ("ฉันตรวจสอบ PR ของ Gateway เมื่อใด")
- วิเคราะห์ตอนนี้: ปิดหน้าต่างการจับภาพปัจจุบันทันทีแทนการรอ ช่วงเวลาการวิเคราะห์
เมธอดของ Gateway
Logbook ลงทะเบียนเมธอด RPC ของ Gateway ต่อไปนี้:
| เมธอด | พารามิเตอร์ | ขอบเขต | ผลลัพธ์ |
|---|---|---|---|
logbook.status |
ไม่มี | operator.read |
สถานะการจับภาพ การวิเคราะห์ โมเดล Node วันของ Gateway และเขตเวลาของ Gateway |
logbook.days |
ไม่มี | operator.read |
วันที่มีจำนวนการ์ดไทม์ไลน์และขอบเขตเวลาของการ์ด |
logbook.timeline |
{ day?: "YYYY-MM-DD" } |
operator.read |
การ์ดและสถิติประจำวันที่ได้จากการประมวลผล โดยค่าเริ่มต้นเป็นวันปัจจุบันของ Gateway |
logbook.frames |
{ startMs, endMs } |
operator.write |
ข้อมูลเมตาของเฟรมในช่วงเวลาที่ร้องขอในหน่วยมิลลิวินาทีนับจากยุค |
logbook.frame |
{ frameId } |
operator.write |
เฟรม JPEG ดิบหนึ่งเฟรมในรูปแบบ base64 |
logbook.standup |
{ day?, refresh? } |
operator.write |
ข้อความการประชุมอัปเดตสำหรับวันที่ระบุจากแคชหรือสร้างใหม่ |
logbook.ask |
{ day?, question } |
operator.write |
คำตอบสำหรับวันที่ระบุซึ่งอ้างอิงจากไทม์ไลน์ |
logbook.capture.set |
{ paused } |
operator.write |
สถานะหยุดชั่วคราวเฉพาะเซสชันและสถานะที่อัปเดตแล้ว |
logbook.analyze.now |
ไม่มี | operator.write |
เริ่มการวิเคราะห์ที่รอดำเนินการ หรือส่งคืนเหตุผลที่ไม่สามารถเริ่มได้ |
เมธอดสำหรับอ่านจะส่งคืนสถานะการทำงานหรือข้อความที่ได้จากการประมวลผล พิกเซลภาพหน้าจอดิบ
การดำเนินการที่ใช้จ่ายกับโมเดล และการเปลี่ยนแปลงรันไทม์ต้องใช้
operator.write แท็บ Control UI ต้องใช้ operator.write เช่นกัน เนื่องจาก
เปิดให้ใช้การดำเนินการเหล่านั้นและแสดงตัวอย่างเฟรมดิบ ส่วนไคลเอนต์แบบอ่านอย่างเดียวยังคงเรียกใช้
เมธอดข้อความที่ได้จากการประมวลผลได้โดยตรง
หมายเหตุด้านความเป็นส่วนตัว
- ภาพบันทึกอาจมีทุกสิ่งที่ปรากฏบนหน้าจอ รวมถึงข้อมูลลับ เฟรมจะไม่ ออกจากเครื่อง ยกเว้นเมื่อถูกส่งเป็นข้อมูลเข้าตัวอย่างไปยังโมเดลการสังเกตการณ์ ที่กำหนดค่าไว้
- ข้อสังเกต การ์ดล่าสุด และคำถามอาจออกจากเครื่องผ่าน โมเดลเริ่มต้นของเอเจนต์ระหว่างการสังเคราะห์การ์ด การสร้างบันทึกการประชุมอัปเดต หรือการถามตอบ ให้ใช้ นโยบายการจัดการข้อมูลของผู้ให้บริการกับเส้นทางโมเดลทั้งสอง
- ใช้เส้นทางภายในเครื่องสำหรับทั้งโมเดลการสังเกตการณ์แบบมีโครงสร้างและโมเดลเริ่มต้นของเอเจนต์ เมื่อคุณต้องการกระบวนการที่ทำงานภายในเครื่องทั้งหมด
- เฟรม ฐานข้อมูลไทม์ไลน์ และข้อมูลจับภาพชั่วคราวจะถูกเขียนด้วย สิทธิ์ไฟล์สำหรับเจ้าของเท่านั้น
- การเพิ่ม
screen.snapshotลงในgateway.nodes.denyCommandsเป็น สวิตช์หยุดการจับภาพหน้าจอ โดยจะบล็อกทั้งการจับภาพจาก Node ของแอปและ คำสั่งlogbook.snapshotของ Logbook เอง - การตั้งค่า
tools.media.image.enabled: falseจะหยุด Logbook ไม่ให้ยืม โมเดลรูปภาพของสื่อมาใช้วิเคราะห์ด้วย จากนั้นระบบจะใช้เฉพาะvisionModelที่ระบุชัดเจนใน การกำหนดค่า Plugin เท่านั้น
การแก้ไขปัญหา
ไม่พบแท็บ Logbook
ตรวจสอบเงื่อนไขทั้งสามข้อ:
openclaw plugins list --enabledมีlogbook- Gateway รีสตาร์ตแล้วหลังจากเปลี่ยน Plugin หรือรายการอนุญาต
- การเชื่อมต่อ Control UI มี
operator.writeเซสชันแบบอ่านอย่างเดียวจะไม่ได้รับ ตัวอธิบายแท็บแบบโต้ตอบ
หากตั้งค่า plugins.allow จะต้องมีทั้ง logbook และ codex สำหรับการกำหนดค่าที่แนะนำ
การจับภาพรายงานข้อผิดพลาด
openclaw nodes status --connectedopenclaw nodes describe --node <idOrNameOrIp>openclaw logs --follow- ตรวจสอบว่า Node เปิดให้ใช้
screen.snapshotหรือlogbook.snapshot - อนุญาตสิทธิ์การบันทึกหน้าจอบน Mac ที่ใช้จับภาพ
- หากกำหนดค่า
nodeIdให้ตรวจสอบว่าตรงกับรหัส Node หรือชื่อที่แสดง - ตรวจสอบว่า
gateway.nodes.denyCommandsไม่มีscreen.snapshot
หลังจากล้มเหลวติดต่อกันสามครั้ง Logbook จะชะลอการทำงานเป็นเวลาสิบรอบการจับภาพ แล้วจึงลองใหม่ การตั้งค่าที่ไม่ได้ตรึง Node ไว้สามารถสลับไปใช้ Node อื่นที่มีคุณสมบัติเหมาะสมได้
จับภาพสำเร็จแต่ไม่มีการ์ดปรากฏ
- สถานะ ไม่พบโมเดล หมายความว่าไม่พบเส้นทางวิชันแบบมีโครงสร้างที่เข้ากันได้ เปิดใช้งานและยืนยันตัวตน Plugin Codex หรือตั้งค่า
visionModelที่ถูกต้องอย่างชัดเจน เฟรมที่จับภาพไว้จะยังคงรอการประมวลผลระหว่างที่ไม่มีโมเดล และสามารถนำมาวิเคราะห์ได้หลังจากแก้ไขการกำหนดค่าแล้ว - รอเป็นเวลา
analysisIntervalMinutesหรือเลือก วิเคราะห์ทันที หลังจากจับกิจกรรมแล้ว - เฟรมที่เหมือนกันติดต่อกันถือเป็นหลักฐานว่าไม่มีการใช้งาน และจะไม่รวมอยู่ในชุดการวิเคราะห์ ให้เปลี่ยนสิ่งที่แสดงบนหน้าจอก่อนทดสอบ
- หากชุดล่าสุดแสดงข้อผิดพลาด ให้แก้ไขปัญหาเกี่ยวกับโมเดลหรือการยืนยันตัวตน แล้วเลือก วิเคราะห์ทันที ระบบจะลองประมวลผลชุดที่ล้มเหลวอีกครั้งเฉพาะเมื่อสั่งการนี้อย่างชัดเจนเท่านั้น เพื่อหลีกเลี่ยงค่าใช้จ่ายในการใช้โมเดลซ้ำ