Tools
Lobster
Lobster پایپلاینهای چندمرحلهای ابزار را بهصورت یک فراخوانی قطعی ابزار اجرا میکند، با
نقاط وارسی صریح تأیید و توکنهای ازسرگیری. این ابزار یک لایه بالاتر از
کار پسزمینه جداشده قرار دارد: برای هماهنگسازی جریانها میان چندین وظیفه جداشده،
به Task Flow (openclaw tasks flow) مراجعه کنید؛ برای دفتر ثبت
فعالیت وظایف، وظایف پسزمینه را ببینید.
چرا
بدون Lobster، یک کار چندمرحلهای به فراخوانیهای رفتوبرگشتی متعدد ابزار نیاز دارد و مدل باید هر مرحله را هماهنگ کند. Lobster این هماهنگسازی را به یک محیط اجرای نوعدار منتقل میکند:
- یک فراخوانی بهجای چند فراخوانی: یک فراخوانی ابزار Lobster، نتیجهای ساختیافته برای کل پایپلاین برمیگرداند.
- تأییدهای داخلی: اثرهای جانبی (ارسال، انتشار، حذف) جریان کار را تا زمان تأیید صریح متوقف میکنند.
- قابل ازسرگیری: جریان کار متوقفشده یک توکن برمیگرداند؛ بدون اجرای دوباره مراحل قبلی، آن را تأیید و از سر بگیرید.
Lobster بهجای یک زبان اسکریپتنویسی عمومی، یک DSL کوچک و محدود است:
تأیید/ازسرگیری یک سازوکار اولیه بادوام و داخلی است؛ پایپلاینها داده هستند (ثبت،
مقایسه تفاوتها، بازپخش و بازبینی آنها آسان است)؛ دستور زبان کوچک، مسیرهای کد «خلاقانه» را محدود میکند تا
اعتبارسنجی واقعبینانه بماند؛ مهلتهای زمانی، سقفهای خروجی، بررسیهای سندباکس و
فهرستهای مجاز را محیط اجرا اعمال میکند، نه هر اسکریپت. هر مرحله همچنان میتواند
هر CLI یا اسکریپتی را فراخوانی کند — اگر زبان نگارش غنیتری میخواهید، فایلهای
.lobster را با ابزارهای دیگر تولید کنید.
بدون Lobster، بررسی دورهای ایمیل به این شکل است:
کاربر: «ایمیلهایم را بررسی کن و پیشنویس پاسخها را بنویس»→ openclaw، gmail.list را فراخوانی میکند→ LLM خلاصه میکند→ کاربر: «برای شمارههای ۲ و ۵ پیشنویس پاسخ بنویس»→ LLM پیشنویسها را مینویسد→ کاربر: «شماره ۲ را ارسال کن»→ openclaw، gmail.send را فراخوانی میکند(هر روز تکرار میشود، بدون حافظهای از موارد بررسیشده)با Lobster، همان کار یک فراخوانی است که برای تأیید متوقف و سپس از سر گرفته میشود:
{ "action": "run", "pipeline": "email.triage --limit 20", "timeoutMs": 30000 }{ "ok": true, "status": "needs_approval", "output": [{ "summary": "۵ مورد به پاسخ و ۲ مورد به اقدام نیاز دارند" }], "requiresApproval": { "type": "approval_request", "prompt": "۲ پیشنویس پاسخ ارسال شوند؟", "items": [], "resumeToken": "..." }}نحوه کار
OpenClaw جریانهای کاری Lobster را با استفاده از بسته همراه
@clawdbot/lobster بهعنوان اجراکننده توکار، درونپردازهای اجرا میکند. هیچ زیرپردازه خارجی
lobster ایجاد نمیشود؛ فراخوانی ابزار مستقیماً یک پوشش JSON برمیگرداند. اگر
پایپلاین برای تأیید متوقف شود، پوشش دارای یک توکن ازسرگیری (یا شناسه کوتاه
تأیید) خواهد بود تا بعداً بتوانید ادامه دهید.
فعالسازی
Lobster یک ابزار Plugin اختیاری است و بهطور پیشفرض فعال نیست. این ابزار بهصورت همراه ارائه میشود، بنابراین به مرحله نصب جداگانه نیازی نیست — فقط ابزار را مجاز کنید:
{ "tools": { "alsoAllow": ["lobster"] }}یا برای هر عامل:
{ "agents": { "list": [ { "id": "main", "tools": { "alsoAllow": ["lobster"] } } ] }}این ابزار برای زمینههای ابزار سندباکسشده کاملاً غیرفعال است.
اگر برای توسعه یا پایپلاینهای خارجی به CLI مستقل Lobster نیاز دارید
(خارج از اجراکننده توکار Gateway)، آن را از
مخزن Lobster نصب کنید و lobster را در
PATH قرار دهید.
الگو: CLI کوچک + لولههای JSON + تأییدها
فرمانهای کوچکی بسازید که با JSON ارتباط برقرار کنند، سپس آنها را در یک فراخوانی Lobster زنجیره کنید. (نام فرمانهای زیر نمونه هستند — آنها را با فرمانهای خود جایگزین کنید.)
inbox list --jsoninbox categorize --jsoninbox apply --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 'تغییرات اعمال شوند؟'", "timeoutMs": 30000}اگر پایپلاین درخواست تأیید کرد، با توکن آن را از سر بگیرید:
{ "action": "resume", "token": "<resumeToken>", "approve": true}نمونه: نگاشت موارد ورودی به فراخوانیهای ابزار:
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 فراخوانی کنید:
{ "plugins": { "entries": { "llm-task": { "enabled": true } } }, "agents": { "list": [ { "id": "main", "tools": { "alsoAllow": ["llm-task"] } } ] }}محدودیت مهم: Lobster توکار در برابر openclaw.invoke
Plugin همراه Lobster جریانهای کاری را درونپردازهای در Gateway اجرا میکند.
در این حالت توکار، openclaw.invoke زمینه نشانی اینترنتی/احراز هویت Gateway را برای
فراخوانیهای تودرتوی ابزار CLI متعلق به OpenClaw بهطور خودکار به ارث نمیبرد.
یعنی این الگو در حال حاضر در اجراکننده توکار قابلاعتماد نیست:
openclaw.invoke --tool llm-task --action json --args-json '{ ... }'نمونه زیر را فقط هنگام اجرای CLI مستقل Lobster در محیطی استفاده کنید
که openclaw.invoke از قبل با زمینه صحیح Gateway/احراز هویت پیکربندی شده باشد.
openclaw.invoke --tool llm-task --action json --args-json '{ "prompt": "با توجه به ایمیل ورودی، قصد و پیشنویس را برگردان.", "thinking": "low", "input": { "subject": "سلام", "body": "میتوانید کمک کنید؟" }, "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 را روی مسیر فایل
تنظیم کنید.
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مشروط کند.
متغیرهای محیطی تزریقشده
پوسته هر مرحله، محیط والد را همراه با این متغیرهای تزریقشده توسط Lobster به ارث میبرد تا فرمانها بتوانند بدون قراردادن مقادیر خام در رشته فرمان، به آرگومانهای حلشده جریان کار ارجاع دهند:
LOBSTER_ARG_<NAME>— یکی برای هر آرگومان جریان کار. نام با تبدیل هر دنباله از نویسههای غیرالفباییعددی به_و با حروف بزرگ ساخته میشود؛ بنابراین آرگومانuser-idبهLOBSTER_ARG_USER_IDتبدیل میشود.LOBSTER_ARGS_JSON— همه آرگومانهای حلشده بهصورت یک رشته JSON واحد.
این، مجموعه کامل متغیرهای تزریقشده است. هیچ متغیر خروجی مختص مرحلهای
مانند LOBSTER_STEP_<id>_STDOUT یا LOBSTER_STEP_<id>_JSON_<field> وجود ندارد؛ پوستهها
این نامها را تنظیمنشده در نظر میگیرند، بنابراین مقادیر پیشفرض گسترش پارامتر میتوانند خطا را پنهان کنند.
در عوض، خروجی مرحله قبلی را از طریق ارجاعهای مرحله بخوانید — $step.stdout،
$step.json یا $step.json.<field> — در مقدار stdin:، env: یا condition:.
(LOBSTER_STATE_DIR یک تنظیم جداگانه محیط اجرا برای پوشه وضعیت است،
نه یک آرگومان مختص اجرا.)
پارامترهای ابزار
run
{ "action": "run", "pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage", "cwd": "workspace", "timeoutMs": 30000, "maxStdoutBytes": 512000}اجرای فایل جریان کار با آرگومانها:
{ "action": "run", "pipeline": "/path/to/inbox-triage.lobster", "argsJson": "{\"tag\":\"family\"}"}| فیلد | پیشفرض | توضیحات |
|---|---|---|
pipeline |
الزامی | رشته درونخطی پایپلاین، یا مسیری که برای یک فایل جریان کار به .lobster/.yaml/.yml/.json ختم میشود. |
cwd |
پوشه کاری Gateway | پوشه کاری نسبی؛ باید درون پوشه کاری Gateway حل شود (مسیرهای مطلق رد میشوند). |
timeoutMs |
20000 |
در صورت عبور از این مقدار، اجرا را متوقف میکند. |
maxStdoutBytes |
512000 |
اگر stdout یا stderr ضبطشده از این اندازه فراتر رود، اجرا را متوقف میکند. |
argsJson |
- | رشته JSON آرگومانها برای فایل جریان کار (برای پایپلاینهای درونخطی نادیده گرفته میشود). |
resume
{ "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 بههم زنجیر میکند که هرکدام دروازههای تأیید دارند. هوش مصنوعی در صورت دسترسبودن،
قضاوت (دستهبندی) را انجام میدهد و در غیر این صورت، به قواعد قطعی
بازمیگردد.
- رشته: https://x.com/plattenschieber/status/2014508656335770033
- مخزن: https://github.com/bloomedai/brain-cli
مرتبط
- خودکارسازی - همهٔ سازوکارهای خودکارسازی
- نمای کلی ابزارها - همهٔ ابزارهای عاملِ در دسترس