Gateway
پشتاندهای CLI
OpenClaw میتواند CLIهای هوش مصنوعی محلی را بهعنوان یک جایگزین فقط متنی اجرا کند، زمانی که ارائهدهندگان API از دسترس خارج شدهاند، با محدودیت نرخ روبهرو هستند، یا موقتاً رفتار نادرست دارند. این قابلیت عمداً محافظهکارانه طراحی شده است:
- ابزارهای OpenClaw مستقیماً تزریق نمیشوند، اما backendهایی با
bundleMcp: trueمیتوانند ابزارهای Gateway را از طریق یک پل MCP loopback دریافت کنند. - جریاندهی JSONL برای CLIهایی که از آن پشتیبانی میکنند.
- نشستها پشتیبانی میشوند (بنابراین نوبتهای بعدی منسجم میمانند).
- تصاویر میتوانند عبور داده شوند اگر CLI مسیرهای تصویر را بپذیرد.
این قابلیت بهجای مسیر اصلی، بهعنوان یک تور ایمنی طراحی شده است. زمانی از آن استفاده کنید که پاسخهای متنی «همیشه کار میکند» میخواهید، بدون اتکا به APIهای خارجی.
اگر یک runtime کامل harness با کنترلهای نشست ACP، کارهای پسزمینه، اتصال thread/گفتوگو، و نشستهای کدنویسی خارجی پایدار میخواهید، بهجای آن از عاملهای ACP استفاده کنید. backendهای CLI، ACP نیستند.
شروع سریع مناسب تازهکارها
میتوانید از Claude Code CLI بدون هیچ پیکربندیای استفاده کنید (Plugin همراه Anthropic یک backend پیشفرض ثبت میکند):
openclaw agent --agent main --message "hi" --model claude-cli/claude-sonnet-4-6main وقتی هیچ فهرست عامل صریحی پیکربندی نشده باشد، شناسه عامل پیشفرض است. اگر
از چند عامل استفاده میکنید، آن را با شناسه عاملی که میخواهید اجرا شود جایگزین کنید.
اگر Gateway شما زیر launchd/systemd اجرا میشود و PATH حداقلی است، فقط مسیر فرمان را اضافه کنید:
{ agents: { defaults: { cliBackends: { "claude-cli": { command: "/opt/homebrew/bin/claude", }, }, }, },}همین کافی است. هیچ کلیدی و هیچ پیکربندی احراز هویت اضافیای، فراتر از خود CLI، لازم نیست.
اگر از یک backend CLI همراه بهعنوان ارائهدهنده پیام اصلی روی میزبان
Gateway استفاده میکنید، OpenClaw اکنون وقتی پیکربندی شما بهطور صریح در یک model ref یا زیر
agents.defaults.cliBackends به آن backend ارجاع دهد، Plugin همراه مالک آن را بهصورت خودکار بارگذاری میکند.
استفاده از آن بهعنوان جایگزین
یک backend CLI را به فهرست جایگزینهای خود اضافه کنید تا فقط زمانی اجرا شود که مدلهای اصلی شکست میخورند:
{ agents: { defaults: { model: { primary: "anthropic/claude-opus-4-6", fallbacks: ["claude-cli/claude-sonnet-4-6"], }, models: { "anthropic/claude-opus-4-6": { alias: "Opus" }, "claude-cli/claude-sonnet-4-6": {}, }, }, },}نکتهها:
- اگر از
agents.defaults.models(فهرست مجاز) استفاده میکنید، باید مدلهای backend CLI خود را هم در آن بگنجانید. - اگر ارائهدهنده اصلی شکست بخورد (احراز هویت، محدودیت نرخ، timeout)، OpenClaw در گام بعد backend CLI را امتحان میکند.
نمای کلی پیکربندی
همه backendهای CLI زیر این مسیر قرار میگیرند:
agents.defaults.cliBackendsهر ورودی با یک شناسه ارائهدهنده کلیدگذاری میشود (مثلاً claude-cli، my-cli).
شناسه ارائهدهنده سمت چپ model ref شما میشود:
<provider>/<model>نمونه پیکربندی
{ agents: { defaults: { cliBackends: { "my-cli": { command: "my-cli", args: ["--json"], output: "json", input: "arg", modelArg: "--model", modelAliases: { "claude-opus-4-6": "opus", "claude-sonnet-4-6": "sonnet", }, sessionArg: "--session", sessionMode: "existing", sessionIdFields: ["session_id", "conversation_id"], systemPromptArg: "--system", // For CLIs with a dedicated prompt-file flag: // systemPromptFileArg: "--system-file", // Codex-style CLIs can point at a prompt file instead: // systemPromptFileConfigArg: "-c", // systemPromptFileConfigKey: "model_instructions_file", systemPromptWhen: "first", imageArg: "--image", imageMode: "repeat", // Opt in only if this backend may reseed safe invalidated sessions // from bounded raw OpenClaw transcript history before compaction. reseedFromRawTranscriptWhenUncompacted: true, serialize: true, }, }, }, },}نحوه کارکرد
- یک backend انتخاب میکند بر اساس پیشوند ارائهدهنده (
claude-cli/...). - یک system prompt میسازد با استفاده از همان prompt و زمینه workspace در OpenClaw.
- CLI را اجرا میکند همراه با شناسه نشست (اگر پشتیبانی شود) تا تاریخچه سازگار بماند.
backend همراه
claude-cliبرای هر نشست OpenClaw یک فرایند stdio مربوط به Claude را زنده نگه میدارد و نوبتهای بعدی را از طریق stdin نوع stream-json ارسال میکند. - خروجی را parse میکند (JSON یا متن ساده) و متن نهایی را برمیگرداند.
- شناسههای نشست را پایدار نگه میدارد برای هر backend، تا نوبتهای بعدی از همان نشست CLI دوباره استفاده کنند.
backend همراه Anthropic با نام claude-cli برای Skills مربوط به OpenClaw، resolver بومی skill در Claude Code را ترجیح میدهد. وقتی snapshot فعلی skills شامل دستکم
یک skill انتخابشده با مسیر materialized باشد، OpenClaw یک Plugin موقت Claude
Code را با --plugin-dir ارسال میکند و کاتالوگ تکراری skills در OpenClaw را
از system prompt پیوستشده حذف میکند. اگر snapshot هیچ plugin
skill materialized نداشته باشد، OpenClaw کاتالوگ prompt را بهعنوان fallback نگه میدارد. overrideهای env/API key مربوط به skill
همچنان توسط OpenClaw روی محیط فرایند فرزند برای اجرا اعمال میشوند.
Claude CLI همچنین حالت مجوز غیرتعاملی خودش را دارد. OpenClaw آن را
به policy اجرایی موجود map میکند، بهجای اینکه پیکربندی policy ویژه Claude اضافه کند.
برای نشستهای زنده Claude که توسط OpenClaw مدیریت میشوند، policy اجرایی مؤثر OpenClaw
مرجع نهایی است: YOLO (tools.exec.security: "full" و
tools.exec.ask: "off") Claude را با
--permission-mode bypassPermissions اجرا میکند، در حالی که policy اجرایی مؤثر محدودکننده
Claude را با --permission-mode default اجرا میکند. تنظیمات هر عامل در
agents.list[].tools.exec تنظیمات سراسری tools.exec را برای همان
عامل override میکند. آرگومانهای خام backend مربوط به Claude همچنان ممکن است شامل --permission-mode باشند، اما اجراهای زنده
Claude این flag را normalize میکنند تا با policy اجرایی مؤثر OpenClaw مطابقت داشته باشد.
backend همراه Anthropic با نام claude-cli همچنین سطحهای /think در OpenClaw را
برای سطحهای غیر off به flag بومی --effort در Claude Code map میکند. minimal و
low به low، adaptive و medium به medium، و high،
xhigh، و max مستقیماً map میشوند. سایر backendهای CLI به Plugin مالک خود نیاز دارند تا
پیش از آنکه /think بتواند بر CLI اجراشده اثر بگذارد، یک mapper معادل argv
اعلام کند.
پیش از آنکه OpenClaw بتواند از backend همراه claude-cli استفاده کند، خود Claude Code
باید از قبل روی همان میزبان login شده باشد:
claude auth loginclaude auth status --textopenclaw models auth login --provider anthropic --method cli --set-defaultنصبهای Docker نیاز دارند Claude Code داخل home پایدارشده container نصب و login شده باشد، نه فقط روی میزبان. ببینید: backend Claude CLI در Docker.
از agents.defaults.cliBackends.claude-cli.command فقط زمانی استفاده کنید که باینری claude
از قبل روی PATH نباشد.
نشستها
- اگر CLI از نشستها پشتیبانی میکند،
sessionArg(مثلاً--session-id) یاsessionArgs(placeholder{sessionId}) را تنظیم کنید، وقتی لازم است شناسه در چند flag درج شود. - اگر CLI از یک زیرفرمان resume با flagهای متفاوت استفاده میکند،
resumeArgs(هنگام resume جایگزینargsمیشود) و در صورت نیازresumeOutput(برای resumeهای غیر JSON) را تنظیم کنید. sessionMode:always: همیشه یک شناسه نشست ارسال کن (اگر هیچکدام ذخیره نشده باشد، UUID جدید).existing: فقط اگر پیشتر شناسهای ذخیره شده بود، شناسه نشست ارسال کن.none: هرگز شناسه نشست ارسال نکن.
claude-cliبهصورت پیشفرض رویliveSession: "claude-stdio"،output: "jsonl"، وinput: "stdin"است تا نوبتهای بعدی تا وقتی فرایند زنده Claude فعال است، از همان فرایند دوباره استفاده کنند. stdio گرم اکنون پیشفرض است، از جمله برای configهای سفارشی که فیلدهای transport را حذف میکنند. اگر Gateway restart شود یا فرایند idle خارج شود، OpenClaw از شناسه نشست ذخیرهشده Claude resume میکند. شناسههای نشست ذخیرهشده پیش از resume در برابر یک transcript خواندنی موجود از project بررسی میشوند، بنابراین bindingهای خیالی باreason=transcript-missingپاک میشوند بهجای اینکه بیصدا یک نشست تازه Claude CLI زیر--resumeشروع شود.- نشستهای زنده Claude نگهبانهای محدودشده خروجی JSONL را نگه میدارند. پیشفرضها تا
8 MiB و 20,000 خط خام JSONL در هر نوبت را مجاز میکنند. نوبتهای Claude با ابزارهای زیاد میتوانند
آنها را برای هر backend با
agents.defaults.cliBackends.claude-cli.reliability.outputLimits.maxTurnRawCharsوmaxTurnLinesافزایش دهند؛ OpenClaw این تنظیمات را به 64 MiB و 100,000 خط clamp میکند. - نشستهای ذخیرهشده CLI تداوم متعلق به ارائهدهنده هستند. reset ضمنی روزانه نشست
آنها را قطع نمیکند؛
/resetو policyهای صریحsession.resetهمچنان این کار را انجام میدهند. - نشستهای تازه CLI معمولاً فقط از خلاصه Compaction در OpenClaw
بههمراه دنباله پس از Compaction reseed میشوند. برای بازیابی نشستهای کوتاهی که
پیش از Compaction نامعتبر شدهاند، یک backend میتواند با
reseedFromRawTranscriptWhenUncompacted: trueopt in کند. OpenClaw همچنان reseed از transcript خام را محدود نگه میدارد و آن را به invalidationهای امنی مثل نبود transcriptهای CLI، تغییرات system-prompt/MCP، یا retry بهعلت session-expired محدود میکند؛ تغییرات auth profile یا credential-epoch هرگز تاریخچه transcript خام را reseed نمیکنند.
نکتههای serialization:
serialize: trueاجراهای همان lane را مرتب نگه میدارد.- بیشتر CLIها روی یک lane ارائهدهنده serialize میشوند.
- OpenClaw وقتی هویت احراز هویت انتخابشده تغییر کند، استفاده مجدد از نشست ذخیرهشده CLI را کنار میگذارد، از جمله تغییر شناسه auth profile، static API key، static token، یا هویت حساب OAuth وقتی CLI آن را در معرض میگذارد. چرخش توکنهای access و refresh در OAuth نشست ذخیرهشده CLI را قطع نمیکند. اگر یک CLI شناسه حساب OAuth پایدار در معرض نگذارد، OpenClaw اجازه میدهد همان CLI مجوزهای resume را enforce کند.
پیشدرآمد fallback از نشستهای claude-cli
وقتی یک تلاش claude-cli به یک candidate غیر CLI در
agents.defaults.model.fallbacks fail over میکند، OpenClaw
تلاش بعدی را با یک پیشدرآمد زمینه که از transcript محلی JSONL مربوط به Claude Code
در ~/.claude/projects/ برداشت شده seed میکند. بدون این seed، ارائهدهنده fallback
سرد شروع میکرد، چون transcript نشست خود OpenClaw برای اجراهای claude-cli خالی است.
- پیشدرآمد آخرین خلاصه
/compactیا marker با نامcompact_boundaryرا ترجیح میدهد، سپس تازهترین نوبتهای پس از boundary را تا سقف بودجه char اضافه میکند. نوبتهای پیش از boundary حذف میشوند، چون خلاصه از قبل نماینده آنهاست. - بلوکهای ابزار به hintهای فشرده
(tool call: name)و(tool result: …)coalesce میشوند تا بودجه prompt واقعبینانه بماند. اگر خلاصه سرریز شود، با(truncated)برچسب میخورد. - fallbackهای همان ارائهدهنده از
claude-cliبهclaude-cliبه--resumeخود Claude تکیه میکنند و پیشدرآمد را رد میکنند. - این seed از همان اعتبارسنجی مسیر session-file در Claude استفاده میکند، بنابراین مسیرهای دلخواه نمیتوانند خوانده شوند.
تصاویر (عبور مستقیم)
اگر CLI شما مسیرهای تصویر را میپذیرد، imageArg را تنظیم کنید:
imageArg: "--image",imageMode: "repeat"OpenClaw تصاویر base64 را در فایلهای موقت مینویسد. اگر imageArg تنظیم شده باشد، آن
مسیرها بهعنوان آرگومانهای CLI ارسال میشوند. اگر imageArg وجود نداشته باشد، OpenClaw
مسیرهای فایل را به prompt اضافه میکند (تزریق مسیر)، که برای CLIهایی که فایلهای محلی را بهصورت خودکار
از مسیرهای ساده load میکنند کافی است.
ورودیها / خروجیها
output: "json"(پیشفرض) تلاش میکند JSON را parse کند و متن + شناسه نشست را استخراج کند.- برای خروجی JSON در Gemini CLI، OpenClaw متن پاسخ را از
responseو usage را ازstatsمیخواند، وقتیusageوجود ندارد یا خالی است. پیشفرض همراه Gemini CLI ازstream-jsonاستفاده میکند، اما overrideهای قدیمی--output-format jsonهمچنان از parser مربوط به JSON استفاده میکنند. output: "jsonl"جریانهای JSONL را parse میکند و پیام نهایی عامل بههمراه شناسههای نشست را در صورت وجود استخراج میکند.output: "text"stdout را بهعنوان پاسخ نهایی در نظر میگیرد.
حالتهای ورودی:
input: "arg"(پیشفرض) پرامپت را بهعنوان آخرین آرگومان CLI ارسال میکند.input: "stdin"پرامپت را از طریق stdin میفرستد.- اگر پرامپت بسیار طولانی باشد و
maxPromptArgCharsتنظیم شده باشد، از stdin استفاده میشود.
پیشفرضها (متعلق به plugin)
پیشفرضهای بکاند CLI همراه، نزد plugin مالک خود قرار دارند. برای مثال،
Anthropic مالک claude-cli است و Google مالک google-gemini-cli است. اجراهای عامل OpenAI Codex
از طریق openai/* از هارنس app-server مربوط به Codex استفاده میکنند؛ OpenClaw دیگر
یک بکاند همراه codex-cli ثبت نمیکند.
plugin همراه Anthropic یک پیشفرض برای claude-cli ثبت میکند:
command: "claude"args: ["-p","--output-format","stream-json","--include-partial-messages","--verbose", ...]output: "jsonl"input: "stdin"modelArg: "--model"sessionMode: "always"
plugin همراه Google نیز یک پیشفرض برای google-gemini-cli ثبت میکند:
command: "gemini"args: ["--skip-trust", "--approval-mode", "auto_edit", "--output-format", "stream-json", "--prompt", "{prompt}"]resumeArgs: ["--skip-trust", "--approval-mode", "auto_edit", "--resume", "{sessionId}", "--output-format", "stream-json", "--prompt", "{prompt}"]output: "jsonl"resumeOutput: "jsonl"jsonlDialect: "gemini-stream-json"imageArg: "@"imagePathScope: "workspace"modelArg: "--model"sessionMode: "existing"sessionIdFields: ["session_id", "sessionId"]
پیشنیاز: Gemini CLI محلی باید نصب شده و بهصورت
gemini در PATH در دسترس باشد (brew install gemini-cli یا
npm install -g @google/gemini-cli).
نکات خروجی Gemini CLI:
- تجزیهگر پیشفرض
stream-jsonرویدادهایmessageدستیار، رویدادهای ابزار، مصرف نهاییresult، و رویدادهای خطای مرگبار Gemini را میخواند. - اگر آرگومانهای Gemini را به
--output-format jsonبازنویسی کنید، OpenClaw آن بکاند را دوباره بهoutput: "json"نرمالسازی میکند و متن پاسخ را از فیلدresponseدر JSON میخواند. - وقتی
usageوجود ندارد یا خالی است، مصرف بهstatsبرمیگردد. stats.cachedبهcacheReadدر OpenClaw نرمالسازی میشود.- اگر
stats.inputوجود نداشته باشد، OpenClaw توکنهای ورودی را ازstats.input_tokens - stats.cachedاستخراج میکند.
فقط در صورت نیاز بازنویسی کنید (رایج: مسیر مطلق command).
پیشفرضهای متعلق به plugin
پیشفرضهای بکاند CLI اکنون بخشی از سطح plugin هستند:
- pluginها آنها را با
api.registerCliBackend(...)ثبت میکنند. idبکاند به پیشوند provider در ارجاعهای مدل تبدیل میشود.- پیکربندی کاربر در
agents.defaults.cliBackends.<id>همچنان پیشفرض plugin را بازنویسی میکند. - پاکسازی پیکربندی اختصاصی بکاند از طریق هوک اختیاری
normalizeConfigهمچنان متعلق به plugin میماند.
pluginهایی که به شیمهای کوچک سازگاری پرامپت/پیام نیاز دارند میتوانند تبدیلهای متنی دوسویه را بدون جایگزین کردن provider یا بکاند CLI اعلام کنند:
api.registerTextTransforms({ input: [ { from: /red basket/g, to: "blue basket" }, { from: /paper ticket/g, to: "digital ticket" }, { from: /left shelf/g, to: "right shelf" }, ], output: [ { from: /blue basket/g, to: "red basket" }, { from: /digital ticket/g, to: "paper ticket" }, { from: /right shelf/g, to: "left shelf" }, ],});input پرامپت سیستم و پرامپت کاربرِ ارسالشده به CLI را بازنویسی میکند. output
متن دستیارِ استریمشده و متن نهاییِ تجزیهشده را پیش از آنکه OpenClaw
نشانگرهای کنترلی خود و تحویل کانال را پردازش کند، بازنویسی میکند. برای فراخوانیهای مدلِ دارای پشتوانه provider،
output همچنین مقادیر رشتهای داخل آرگومانهای ساختاریافته فراخوانی ابزار را پس از
ترمیم استریم و پیش از اجرای ابزار بازیابی میکند. قطعههای JSON خام provider
بدون تغییر میمانند؛ مصرفکنندگان باید از payload ساختاریافته partial، end، یا result استفاده کنند.
برای CLIهایی که رویدادهای JSONL اختصاصی provider منتشر میکنند، jsonlDialect را روی پیکربندی همان
بکاند تنظیم کنید. dialectهای پشتیبانیشده عبارتاند از claude-stream-json برای استریمهای سازگار با Claude
Code و gemini-stream-json برای رویدادهای stream-json در Gemini CLI.
مالکیت Compaction بومی
برخی بکاندهای CLI عاملی را اجرا میکنند که رونوشت خودش را فشرده میکند، بنابراین OpenClaw نباید خلاصهساز حفاظتی خود را روی آنها اجرا کند - این کار با Compaction خود بکاند تداخل دارد و میتواند نوبت را با شکست قطعی مواجه کند.
claude-cli هیچ endpoint هارنسی ندارد - Claude Code درونخود فشردهسازی میکند - بنابراین
ownsNativeCompaction: true را اعلام میکند، و OpenClaw از مسیر Compaction یک no-op برمیگرداند.
جلسههای هارنس بومی مانند Codex در عوض همچنان به endpoint Compaction هارنس خود
مسیریابی میشوند.
چون بکاند مالک Compaction است، راهحل موقت قدیمیِ تنظیم
contextTokens: 1_000_000 صرفاً برای جلوگیری از فعال شدن حفاظت OpenClaw روی یک
جلسه claude-cli دیگر لازم نیست - opt-out جایگزین آن میشود.
api.registerCliBackend({ id: "my-cli", ownsNativeCompaction: true /* ... */ });فقط برای بکاندی ownsNativeCompaction را اعلام کنید که واقعاً مالک Compaction خود است: باید
هنگامی که به پنجره زمینه خود نزدیک میشود، رونوشت خود را بهطور قابل اتکا محدود کند و یک
جلسه قابل ازسرگیری را پایدار نگه دارد (مثلاً --resume / --session-id)؛ در غیر این صورت یک جلسه معوق میتواند
بالاتر از بودجه باقی بماند. جلسههای متناظر با agentHarnessId همچنان به endpoint هارنس مسیردهی میشوند.
همپوشانیهای MCP بسته
بکاندهای CLI فراخوانیهای ابزار OpenClaw را مستقیماً دریافت نمیکنند، اما یک بکاند میتواند
با bundleMcp: true به یک همپوشانی پیکربندی MCP تولیدشده opt in کند.
رفتار همراه فعلی:
claude-cli: فایل پیکربندی سختگیرانه MCP تولیدشدهgoogle-gemini-cli: فایل تنظیمات سیستمی Gemini تولیدشده
وقتی MCP بسته فعال باشد، OpenClaw:
- یک سرور HTTP MCP روی local loopback اجرا میکند که ابزارهای gateway را در اختیار فرایند CLI قرار میدهد
- پل را با یک توکن برای هر جلسه (
OPENCLAW_MCP_TOKEN) احراز هویت میکند - دسترسی ابزار را به زمینه جلسه، حساب، و کانال فعلی محدود میکند
- سرورهای bundle-MCP فعال را برای workspace فعلی بارگذاری میکند
- آنها را با هر شکل موجود پیکربندی/تنظیمات MCP بکاند ادغام میکند
- پیکربندی اجرا را با استفاده از حالت یکپارچهسازی متعلق به بکاند از extension مالک بازنویسی میکند
اگر هیچ سرور MCP فعال نباشد، OpenClaw همچنان وقتی یک بکاند به MCP بسته opt in کند، یک پیکربندی سختگیرانه تزریق میکند تا اجراهای پسزمینه ایزوله بمانند.
runtimeهای MCP همراهِ محدود به جلسه برای استفاده مجدد درون یک جلسه cache میشوند، سپس
پس از mcp.sessionIdleTtlMs میلیثانیه زمان بیکاری جمعآوری میشوند (پیشفرض 10
دقیقه؛ برای غیرفعالسازی 0 تنظیم کنید). اجراهای تعبیهشده یکباره مانند probeهای احراز هویت،
تولید slug، و درخواستهای بازیابی active-memory در پایان اجرا پاکسازی میشوند تا فرزندان stdio
و استریمهای Streamable HTTP/SSE بیشتر از اجرا زنده نمانند.
سقف بازکاشت تاریخچه
وقتی یک جلسه تازه CLI از روی رونوشت پیشین OpenClaw مقداردهی اولیه میشود (برای
مثال پس از تلاش مجدد session_expired)، بلوک رندرشده
<conversation_history> محدود میشود تا پرامپتهای بازکاشت بیش از حد بزرگ نشوند.
پیشفرض 12288 نویسه است (حدود 3000 توکن).
بکاندهای Claude CLI بهطور خودکار از سقف بزرگتری استفاده میکنند که از tier زمینه Claude حلشده مشتق میشود. اجراهای استاندارد Claude با 200K توکن برش بزرگتری از رونوشت را نگه میدارند، و اجراهای Claude با 1M توکن باز هم برش بزرگتری نگه میدارند، در حالی که سایر بکاندهای CLI پیشفرض محافظهکارانه را نگه میدارند.
- این سقف فقط بلوک تاریخچه قبلیِ پرامپت بازکاشت را کنترل میکند. محدودیتهای
خروجی جلسه زنده جداگانه در
reliability.outputLimitsتنظیم میشوند (نگاه کنید به جلسهها).
محدودیتها
- بدون فراخوانی مستقیم ابزار OpenClaw. OpenClaw فراخوانیهای ابزار را به
پروتکل بکاند CLI تزریق نمیکند. بکاندها فقط وقتی gateway tools را میبینند که به
bundleMcp: trueopt in کنند. - استریمینگ اختصاصی بکاند است. برخی بکاندها JSONL را استریم میکنند؛ برخی دیگر تا خروج صبر میکنند و سپس خروجی را یکجا میدهند.
- خروجیهای ساختاریافته به قالب JSON خود CLI وابستهاند.
عیبیابی
- CLI پیدا نشد:
commandرا روی یک مسیر کامل تنظیم کنید. - نام مدل نادرست: از
modelAliasesبرای نگاشتprovider/model→ مدل CLI استفاده کنید. - نبود پیوستگی جلسه: مطمئن شوید
sessionArgتنظیم شده وsessionModeبرابرnoneنیست. - تصاویر نادیده گرفته میشوند:
imageArgرا تنظیم کنید (و بررسی کنید CLI از مسیر فایلها پشتیبانی میکند).