Tools

Lobster

Lobster پایپ‌لاین‌های چندمرحله‌ای ابزار را به‌صورت یک فراخوانی قطعی ابزار اجرا می‌کند، با نقاط وارسی صریح تأیید و توکن‌های ازسرگیری. این ابزار یک لایه بالاتر از کار پس‌زمینه جداشده قرار دارد: برای هماهنگ‌سازی جریان‌ها میان چندین وظیفه جداشده، به Task Flow (openclaw tasks flow) مراجعه کنید؛ برای دفتر ثبت فعالیت وظایف، وظایف پس‌زمینه را ببینید.

چرا

بدون Lobster، یک کار چندمرحله‌ای به فراخوانی‌های رفت‌وبرگشتی متعدد ابزار نیاز دارد و مدل باید هر مرحله را هماهنگ کند. Lobster این هماهنگ‌سازی را به یک محیط اجرای نوع‌دار منتقل می‌کند:

  • یک فراخوانی به‌جای چند فراخوانی: یک فراخوانی ابزار Lobster، نتیجه‌ای ساخت‌یافته برای کل پایپ‌لاین برمی‌گرداند.
  • تأییدهای داخلی: اثرهای جانبی (ارسال، انتشار، حذف) جریان کار را تا زمان تأیید صریح متوقف می‌کنند.
  • قابل ازسرگیری: جریان کار متوقف‌شده یک توکن برمی‌گرداند؛ بدون اجرای دوباره مراحل قبلی، آن را تأیید و از سر بگیرید.

Lobster به‌جای یک زبان اسکریپت‌نویسی عمومی، یک DSL کوچک و محدود است: تأیید/ازسرگیری یک سازوکار اولیه بادوام و داخلی است؛ پایپ‌لاین‌ها داده هستند (ثبت، مقایسه تفاوت‌ها، بازپخش و بازبینی آن‌ها آسان است)؛ دستور زبان کوچک، مسیرهای کد «خلاقانه» را محدود می‌کند تا اعتبارسنجی واقع‌بینانه بماند؛ مهلت‌های زمانی، سقف‌های خروجی، بررسی‌های سندباکس و فهرست‌های مجاز را محیط اجرا اعمال می‌کند، نه هر اسکریپت. هر مرحله همچنان می‌تواند هر CLI یا اسکریپتی را فراخوانی کند — اگر زبان نگارش غنی‌تری می‌خواهید، فایل‌های .lobster را با ابزارهای دیگر تولید کنید.

بدون Lobster، بررسی دوره‌ای ایمیل به این شکل است:

text
کاربر: «ایمیل‌هایم را بررسی کن و پیش‌نویس پاسخ‌ها را بنویس»→ openclaw، gmail.list را فراخوانی می‌کند→ LLM خلاصه می‌کند→ کاربر: «برای شماره‌های ۲ و ۵ پیش‌نویس پاسخ بنویس»→ LLM پیش‌نویس‌ها را می‌نویسد→ کاربر: «شماره ۲ را ارسال کن»→ openclaw، gmail.send را فراخوانی می‌کند(هر روز تکرار می‌شود، بدون حافظه‌ای از موارد بررسی‌شده)

با Lobster، همان کار یک فراخوانی است که برای تأیید متوقف و سپس از سر گرفته می‌شود:

json
{ "action": "run", "pipeline": "email.triage --limit 20", "timeoutMs": 30000 }
json
{  "ok": true,  "status": "needs_approval",  "output": [{ "summary": "۵ مورد به پاسخ و ۲ مورد به اقدام نیاز دارند" }],  "requiresApproval": {    "type": "approval_request",    "prompt": "۲ پیش‌نویس پاسخ ارسال شوند؟",    "items": [],    "resumeToken": "..."  }}

نحوه کار

OpenClaw جریان‌های کاری Lobster را با استفاده از بسته همراه @clawdbot/lobster به‌عنوان اجراکننده توکار، درون‌پردازه‌ای اجرا می‌کند. هیچ زیرپردازه خارجی lobster ایجاد نمی‌شود؛ فراخوانی ابزار مستقیماً یک پوشش JSON برمی‌گرداند. اگر پایپ‌لاین برای تأیید متوقف شود، پوشش دارای یک توکن ازسرگیری (یا شناسه کوتاه تأیید) خواهد بود تا بعداً بتوانید ادامه دهید.

فعال‌سازی

Lobster یک ابزار Plugin اختیاری است و به‌طور پیش‌فرض فعال نیست. این ابزار به‌صورت همراه ارائه می‌شود، بنابراین به مرحله نصب جداگانه نیازی نیست — فقط ابزار را مجاز کنید:

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

یا برای هر عامل:

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

این ابزار برای زمینه‌های ابزار سندباکس‌شده کاملاً غیرفعال است.

اگر برای توسعه یا پایپ‌لاین‌های خارجی به CLI مستقل Lobster نیاز دارید (خارج از اجراکننده توکار 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 'تغییرات اعمال شوند؟'",  "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 زمینه نشانی اینترنتی/احراز هویت Gateway را برای فراخوانی‌های تو‌در‌توی ابزار CLI متعلق به OpenClaw به‌طور خودکار به ارث نمی‌برد.

یعنی این الگو در حال حاضر در اجراکننده توکار قابل‌اعتماد نیست:

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

نمونه زیر را فقط هنگام اجرای CLI مستقل Lobster در محیطی استفاده کنید که openclaw.invoke از قبل با زمینه صحیح Gateway/احراز هویت پیکربندی شده باشد.

lobster
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 را روی مسیر فایل تنظیم کنید.

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 مشروط کند.

متغیرهای محیطی تزریق‌شده

پوسته هر مرحله، محیط والد را همراه با این متغیرهای تزریق‌شده توسط Lobster به ارث می‌برد تا فرمان‌ها بتوانند بدون قراردادن مقادیر خام در رشته فرمان، به آرگومان‌های حل‌شده جریان کار ارجاع دهند:

  • LOBSTER_ARG_&lt;NAME&gt; — یکی برای هر آرگومان جریان کار. نام با تبدیل هر دنباله از نویسه‌های غیرالفبایی‌عددی به _ و با حروف بزرگ ساخته می‌شود؛ بنابراین آرگومان 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

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 پوشه کاری 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 به‌هم زنجیر می‌کند که هرکدام دروازه‌های تأیید دارند. هوش مصنوعی در صورت دسترس‌بودن، قضاوت (دسته‌بندی) را انجام می‌دهد و در غیر این صورت، به قواعد قطعی بازمی‌گردد.

مرتبط

Was this useful?
On this page

On this page