Tools

ล็อบสเตอร์

Lobster รันไปป์ไลน์เครื่องมือหลายขั้นตอนเป็นการเรียกเครื่องมือแบบกำหนดแน่นอนเพียงครั้งเดียว พร้อม จุดตรวจสอบการอนุมัติที่ระบุชัดเจนและโทเค็นสำหรับดำเนินการต่อ โดยอยู่เหนือ งานเบื้องหลังแบบแยกออกมาหนึ่งระดับ: สำหรับการประสานโฟลว์ที่ครอบคลุมงานแบบแยกออกมาหลายงาน โปรดดู Task Flow (openclaw tasks flow); สำหรับบัญชีแยกประเภท กิจกรรมของงาน โปรดดู งานเบื้องหลัง

เหตุผล

หากไม่มี Lobster งานหลายขั้นตอนจะต้องเรียกเครื่องมือไปกลับหลายครั้ง โดยมี โมเดลคอยประสานทุกขั้นตอน Lobster ย้ายการประสานนั้นเข้าสู่รันไทม์ที่มีชนิดข้อมูลกำกับ:

  • เรียกครั้งเดียวแทนหลายครั้ง: การเรียกเครื่องมือ Lobster เพียงครั้งเดียวจะส่งคืนผลลัพธ์ แบบมีโครงสร้างสำหรับทั้งไปป์ไลน์
  • มีการอนุมัติในตัว: ผลข้างเคียง (ส่ง, โพสต์, ลบ) จะหยุดเวิร์กโฟลว์ จนกว่าจะได้รับการอนุมัติอย่างชัดเจน
  • ดำเนินการต่อได้: เวิร์กโฟลว์ที่หยุดจะส่งคืนโทเค็น ให้อนุมัติและดำเนินการต่อได้โดยไม่ต้อง รันขั้นตอนก่อนหน้าใหม่

Lobster เป็น DSL ขนาดเล็กที่มีข้อจำกัด ไม่ใช่ภาษาสคริปต์อเนกประสงค์: การอนุมัติ/ดำเนินการต่อเป็นองค์ประกอบพื้นฐานที่คงทนและมีมาในตัว; ไปป์ไลน์เป็นข้อมูล (จึงง่ายต่อการ บันทึก เปรียบเทียบความแตกต่าง เล่นซ้ำ และตรวจทาน); ไวยากรณ์ขนาดเล็กจำกัดเส้นทางโค้ดแบบ "สร้างสรรค์" เพื่อให้ การตรวจสอบความถูกต้องยังคงสมจริง; การหมดเวลา ขีดจำกัดเอาต์พุต การตรวจสอบแซนด์บ็อกซ์ และ รายการอนุญาตถูกบังคับใช้โดยรันไทม์ ไม่ใช่โดยแต่ละสคริปต์ แต่ละขั้นตอนยังคง เรียก CLI หรือสคริปต์ใดก็ได้—คุณสามารถสร้างไฟล์ .lobster จากเครื่องมืออื่นได้ หาก ต้องการภาษาสำหรับเขียนเวิร์กโฟลว์ที่มีความสามารถมากขึ้น

หากไม่มี Lobster การคัดแยกอีเมลที่ทำซ้ำเป็นประจำจะมีลักษณะดังนี้:

text
ผู้ใช้: "ตรวจสอบอีเมลของฉันและร่างคำตอบ"→ openclaw เรียก gmail.list→ LLM สรุป→ ผู้ใช้: "ร่างคำตอบสำหรับ #2 และ #5"→ LLM ร่างคำตอบ→ ผู้ใช้: "ส่ง #2"→ openclaw เรียก gmail.send(ทำซ้ำทุกวัน โดยไม่มีหน่วยความจำว่าได้คัดแยกอะไรไปแล้ว)

เมื่อใช้ Lobster งานเดียวกันจะเป็นการเรียกเพียงครั้งเดียวที่หยุดเพื่อรอการอนุมัติและดำเนินการต่อได้:

json
{ "action": "run", "pipeline": "email.triage --limit 20", "timeoutMs": 30000 }
json
{  "ok": true,  "status": "needs_approval",  "output": [{ "summary": "5 need replies, 2 need action" }],  "requiresApproval": {    "type": "approval_request",    "prompt": "Send 2 draft replies?",    "items": [],    "resumeToken": "..."  }}

วิธีการทำงาน

OpenClaw รันเวิร์กโฟลว์ Lobster ภายในโพรเซส โดยใช้แพ็กเกจ @clawdbot/lobster ที่รวมมาให้เป็นตัวรันแบบฝังตัว ไม่มีการสร้างซับโพรเซส lobster ภายนอก; การเรียกเครื่องมือจะส่งคืนเอนเวโลป JSON โดยตรง หาก ไปป์ไลน์หยุดเพื่อรอการอนุมัติ เอนเวโลปจะมีโทเค็นสำหรับดำเนินการต่อ (หรือรหัส การอนุมัติแบบสั้น) เพื่อให้ดำเนินการต่อภายหลังได้

การเปิดใช้งาน

Lobster เป็นเครื่องมือ Plugin เสริม ซึ่งไม่ได้เปิดใช้งานโดยค่าเริ่มต้น และจัดส่ง รวมมาให้แล้ว จึงไม่ต้องติดตั้งแยก—เพียงอนุญาตเครื่องมือ:

json
{  "tools": {    "alsoAllow": ["lobster"]  }}

หรือกำหนดต่อเอเจนต์:

json
{  "agents": {    "list": [      {        "id": "main",        "tools": {          "alsoAllow": ["lobster"]        }      }    ]  }}

เครื่องมือนี้จะถูกปิดใช้งานทั้งหมดสำหรับบริบทเครื่องมือที่อยู่ในแซนด์บ็อกซ์

หากต้องการ Lobster CLI แบบสแตนด์อโลนสำหรับการพัฒนาหรือไปป์ไลน์ภายนอก (นอกตัวรัน Gateway แบบฝังตัว) ให้ติดตั้งจาก ที่เก็บ Lobster และเพิ่ม lobster ไว้ใน PATH

รูปแบบ: CLI ขนาดเล็ก + ไปป์ JSON + การอนุมัติ

สร้างคำสั่งขนาดเล็กที่สื่อสารด้วย JSON แล้วเชื่อมต่อเข้าด้วยกันเป็นการเรียก Lobster ครั้งเดียว (ชื่อคำสั่งด้านล่างเป็นเพียงตัวอย่าง—เปลี่ยนเป็นคำสั่งของคุณเอง)

bash
inbox list --jsoninbox categorize --jsoninbox apply --json
json
{  "action": "run",  "pipeline": "exec --json --shell 'inbox list --json' | exec --stdin json --shell 'inbox categorize --json' | exec --stdin json --shell 'inbox apply --json' | approve --preview-from-stdin --limit 5 --prompt 'Apply changes?'",  "timeoutMs": 30000}

หากไปป์ไลน์ร้องขอการอนุมัติ ให้ดำเนินการต่อด้วยโทเค็น:

json
{  "action": "resume",  "token": "<resumeToken>",  "approve": true}

ตัวอย่าง: แมปรายการอินพุตไปยังการเรียกเครื่องมือ:

bash
gog.gmail.search --query 'newer_than:1d' \  | openclaw.invoke --tool message --action send --each --item-key message --args-json '{"provider":"telegram","to":"..."}'

ขั้นตอน LLM ที่ใช้เฉพาะ JSON (llm-task)

สำหรับ ขั้นตอน LLM แบบมีโครงสร้าง ภายในเวิร์กโฟลว์ ให้เปิดใช้งานเครื่องมือ Plugin เสริม llm-task และเรียกใช้จาก Lobster:

json
{  "plugins": {    "entries": {      "llm-task": { "enabled": true }    }  },  "agents": {    "list": [      {        "id": "main",        "tools": { "alsoAllow": ["llm-task"] }      }    ]  }}

ข้อจำกัดสำคัญ: Lobster แบบฝังตัวเทียบกับ openclaw.invoke

Plugin Lobster ที่รวมมาให้จะรันเวิร์กโฟลว์ ภายในโพรเซส ภายใน Gateway ในโหมดฝังตัวนั้น openclaw.invoke จะ ไม่ สืบทอด บริบท URL/การยืนยันตัวตนของ Gateway โดยอัตโนมัติสำหรับการเรียกเครื่องมือ OpenClaw CLI แบบซ้อน

ซึ่งหมายความว่ารูปแบบนี้ ยังไม่น่าเชื่อถือในตัวรันแบบฝังตัวในขณะนี้:

lobster
openclaw.invoke --tool llm-task --action json --args-json '{ ... }'

ใช้ตัวอย่างด้านล่างเฉพาะเมื่อรัน Lobster CLI แบบสแตนด์อโลน ใน สภาพแวดล้อมที่กำหนดค่า openclaw.invoke ด้วยบริบท Gateway/การยืนยันตัวตนที่ถูกต้องไว้แล้ว

lobster
openclaw.invoke --tool llm-task --action json --args-json '{  "prompt": "Given the input email, return intent and draft.",  "thinking": "low",  "input": { "subject": "Hello", "body": "Can you help?" },  "schema": {    "type": "object",    "properties": {      "intent": { "type": "string" },      "draft": { "type": "string" }    },    "required": ["intent", "draft"],    "additionalProperties": false  }}'

หากคุณใช้ Plugin Lobster แบบฝังตัวในปัจจุบัน ให้เลือกอย่างใดอย่างหนึ่งต่อไปนี้:

  • เรียกเครื่องมือ llm-task โดยตรงภายนอก Lobster หรือ
  • ใช้ขั้นตอนที่ไม่ใช่ openclaw.invoke ภายในไปป์ไลน์ Lobster จนกว่าจะมีการเพิ่ม บริดจ์แบบฝังตัวที่รองรับ

โปรดดูรายละเอียดและตัวเลือกการกำหนดค่าที่ งาน LLM

ไฟล์เวิร์กโฟลว์ (.lobster)

Lobster สามารถรันไฟล์เวิร์กโฟลว์ YAML/JSON ที่มีฟิลด์ name, args, steps, env, condition และ approval ได้ โดยตั้งค่า pipeline เป็นเส้นทางไฟล์ในการเรียก เครื่องมือ

yaml
name: inbox-triageargs:  tag:    default: "family"steps:  - id: collect    command: inbox list --json  - id: categorize    command: inbox categorize --json    stdin: $collect.stdout  - id: approve    command: inbox apply --approve    stdin: $categorize.stdout    approval: required  - id: execute    command: inbox apply --execute    stdin: $categorize.stdout    condition: $approve.approved

หมายเหตุ:

  • stdin: $step.stdout และ stdin: $step.json ส่งเอาต์พุตจากขั้นตอนก่อนหน้า
  • condition (หรือ when) สามารถควบคุมการรันขั้นตอนตาม $step.approved

พารามิเตอร์เครื่องมือ

run

json
{  "action": "run",  "pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage",  "cwd": "workspace",  "timeoutMs": 30000,  "maxStdoutBytes": 512000}

รันไฟล์เวิร์กโฟลว์พร้อมอาร์กิวเมนต์:

json
{  "action": "run",  "pipeline": "/path/to/inbox-triage.lobster",  "argsJson": "{\"tag\":\"family\"}"}
ฟิลด์ ค่าเริ่มต้น หมายเหตุ
pipeline จำเป็น สตริงไปป์ไลน์แบบอินไลน์ หรือเส้นทางที่ลงท้ายด้วย .lobster/.yaml/.yml/.json สำหรับไฟล์เวิร์กโฟลว์
cwd cwd ของ Gateway ไดเรกทอรีทำงานแบบสัมพัทธ์; ต้องแปลงเป็นเส้นทางภายในไดเรกทอรีทำงานของ Gateway (เส้นทางสัมบูรณ์จะถูกปฏิเสธ)
timeoutMs 20000 ยกเลิกการรันหากเกินเวลานี้
maxStdoutBytes 512000 ยกเลิกการรันหาก stdout หรือ stderr ที่บันทึกไว้มีขนาดเกินค่านี้
argsJson - สตริง JSON ของอาร์กิวเมนต์สำหรับไฟล์เวิร์กโฟลว์ (ไม่ใช้กับไปป์ไลน์แบบอินไลน์)

resume

json
{  "action": "resume",  "token": "<resumeToken>",  "approve": true}

resume รับได้ทั้ง token (โทเค็นสำหรับดำเนินการต่อแบบเต็มจาก requiresApproval) หรือ approvalId (รหัสแบบสั้นจากออบเจ็กต์เดียวกัน)—ให้ใช้ค่าที่การรันซึ่งหยุดไว้ ส่งคืนมา ต้องระบุ approve

โหมด Task Flow ที่มีการจัดการ

การส่ง flowControllerId และ flowGoal ใน run (หรือ flowId และ flowExpectedRevision ใน resume) จะส่งการเรียกผ่าน API Task Flow แบบมีการจัดการของรันไทม์ Plugin แทนการส่งคืน เอนเวโลปเปล่า: OpenClaw จะสร้างหรือดำเนินการต่อระเบียนโฟลว์แบบคงทน นำ เอนเวโลป Lobster ไปใช้กับระเบียนนั้น (waiting เมื่อรอการอนุมัติ, succeeded/failed เมื่อ เสร็จสิ้น) และส่งคืน { ok, envelope, flow, mutation } โหมดนี้จำเป็นต้องมี รันไทม์ Task Flow ที่ผูกไว้ และมีไว้สำหรับโค้ด Plugin/ตัวควบคุมที่ต้องการ สถานะโฟลว์แบบคงทนข้ามการรีสตาร์ต Gateway ไม่ใช่สำหรับการใช้งานเฉพาะกิจทั่วไปของเอเจนต์

เอนเวโลปเอาต์พุต

Lobster ส่งคืนเอนเวโลป JSON ที่มีสถานะอย่างใดอย่างหนึ่งจากสามสถานะ:

  • ok - เสร็จสมบูรณ์สำเร็จ
  • needs_approval - หยุดชั่วคราว; requiresApproval มี resumeToken และ approvalId แบบสั้น ซึ่งใช้ค่าใดค่าหนึ่งเพื่อดำเนินการรันต่อได้
  • cancelled - ถูกปฏิเสธหรือยกเลิกอย่างชัดเจน

เครื่องมือแสดงเอนเวโลปทั้งใน content (JSON ที่จัดรูปแบบให้อ่านง่าย) และ details (ออบเจ็กต์ดิบ)

การอนุมัติ

หากมี requiresApproval ให้ตรวจสอบข้อความแจ้งและตัดสินใจ:

  • approve: true - ดำเนินการต่อและทำผลข้างเคียงต่อไป
  • approve: false - ยกเลิกและสิ้นสุดเวิร์กโฟลว์

ใช้ approve --preview-from-stdin --limit N เพื่อแนบตัวอย่าง JSON ไปกับ คำขออนุมัติ โดยไม่ต้องใช้โค้ดเชื่อม jq/heredoc ที่กำหนดเอง สถานะสำหรับดำเนินการต่อจะถูกจัดเก็บเป็น ไฟล์ JSON ขนาดเล็กภายใต้ไดเรกทอรีสถานะของ Lobster (ค่าเริ่มต้นคือ ~/.lobster/state และเขียนทับได้ด้วย LOBSTER_STATE_DIR); ตัวโทเค็นเข้ารหัสเพียงตัวชี้ไปยัง สถานะนั้น ไม่ใช่สถานะทั้งหมดของไปป์ไลน์

OpenProse

OpenProse ทำงานร่วมกับ Lobster ได้ดี: ใช้ /prose เพื่อประสาน การเตรียมงานแบบหลายเอเจนต์ แล้วรันไปป์ไลน์ Lobster เพื่อการอนุมัติแบบกำหนดแน่นอน หากโปรแกรม Prose ต้องใช้ Lobster ให้อนุญาตเครื่องมือ lobster สำหรับเอเจนต์ย่อยผ่าน tools.subagents.tools โปรดดู OpenProse

ความปลอดภัย

  • เฉพาะภายในโพรเซสในเครื่อง - เวิร์กโฟลว์ทำงานภายในโพรเซส Gateway; ไม่มี การเรียกเครือข่ายจากตัว Plugin เอง
  • ไม่มีข้อมูลลับ - Lobster ไม่ได้จัดการ OAuth; แต่จะเรียกเครื่องมือ OpenClaw ที่ จัดการแทน
  • รับรู้แซนด์บ็อกซ์ - ปิดใช้งานเมื่อบริบทเครื่องมืออยู่ในแซนด์บ็อกซ์
  • เสริมความแข็งแกร่ง - ตัวรันแบบฝังตัวบังคับใช้การหมดเวลาและขีดจำกัดเอาต์พุต

การแก้ไขปัญหา

ข้อผิดพลาด สาเหตุ / วิธีแก้ไข
lobster runtime timed out ไปป์ไลน์ใช้เวลาเกิน timeoutMs ให้เพิ่มค่า หรือแบ่งไปป์ไลน์
lobster stdout exceeded maxStdoutBytes (หรือ stderr) เอาต์พุตที่บันทึกไว้เกินขีดจำกัด ให้เพิ่ม maxStdoutBytes หรือลดเอาต์พุต
run --args-json must be valid JSON แยกวิเคราะห์ argsJson (สำหรับการรันไฟล์เวิร์กโฟลว์) ไม่สำเร็จ ให้แก้ไขสตริง JSON
lobster runtime failed (หรือข้อความ runtime_error อื่น) รันไทม์แบบฝังตัวส่งคืนเอนเวโลปข้อผิดพลาด ให้ตรวจสอบบันทึก Gateway เพื่อดูรายละเอียด

เรียนรู้เพิ่มเติม

กรณีศึกษา: เวิร์กโฟลว์ของชุมชน

ตัวอย่างสาธารณะหนึ่งรายการ: CLI สำหรับ "สมองที่สอง" + ไปป์ไลน์ Lobster ที่จัดการคลัง Markdown สามคลัง (ส่วนตัว คู่ชีวิต ใช้ร่วมกัน) CLI ส่งออก JSON สำหรับสถิติ รายการกล่องขาเข้า และการสแกนข้อมูลที่ล้าสมัย ส่วน Lobster เชื่อมคำสั่งเหล่านั้นเป็นเวิร์กโฟลว์ เช่น weekly-review, inbox-triage, memory-consolidation และ shared-task-sync โดยแต่ละเวิร์กโฟลว์มีจุดตรวจสอบเพื่อขออนุมัติ AI จะจัดการงานที่ต้องใช้วิจารณญาณ (การจัดหมวดหมู่) เมื่อพร้อมใช้งาน และจะเปลี่ยนไปใช้กฎแบบกำหนดผลลัพธ์แน่นอนเมื่อไม่พร้อมใช้งาน

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page