CLI backends (وقت تشغيل الرجوع الاحتياطي)
يمكن لـ OpenClaw تشغيل AI CLIs محلية كـ رجوع احتياطي نصي فقط عندما تكون مزودات API متوقفة، أو خاضعة لحدود المعدل، أو تتصرف بشكل غير صحيح مؤقتًا. هذا السلوك محافظ عمدًا:- لا يتم حقن أدوات OpenClaw مباشرة، لكن يمكن للـ backends التي تحتوي على
bundleMcp: true(وهو الإعداد الافتراضي لـ Claude CLI) أن تتلقى أدوات gateway عبر جسر MCP loopback. - بث JSONL (يستخدم Claude CLI القيمة
--output-format stream-jsonمع--include-partial-messages؛ وتُرسل المطالبات عبر stdin). - الجلسات مدعومة (بحيث تبقى الأدوار اللاحقة مترابطة).
- يمكن تمرير الصور إذا كان CLI يقبل مسارات الصور.
بدء سريع مناسب للمبتدئين
يمكنك استخدام Claude CLI من دون أي تكوين (فـ plugin المضمّن الخاص بـ Anthropic يسجّل backend افتراضيًا):agents.defaults.cliBackends.
استخدامها كرجوع احتياطي
أضف CLI backend إلى قائمة fallback بحيث تعمل فقط عند فشل النماذج الأساسية:- إذا كنت تستخدم
agents.defaults.models(قائمة السماح)، فيجب أن تتضمنclaude-cli/.... - إذا فشل المزوّد الأساسي (المصادقة، حدود المعدل، المهلات)، فسيحاول OpenClaw CLI backend بعده.
- لا يزال Claude CLI backend المضمّن يقبل الأسماء المستعارة الأقصر مثل
claude-cli/opusأوclaude-cli/opus-4.6أوclaude-cli/sonnet، لكن تستخدم الوثائق وأمثلة التكوين المراجع الأساسيةclaude-cli/claude-*.
نظرة عامة على التكوين
توجد جميع CLI backends تحت:claude-cli أو my-cli).
ويصبح معرّف المزوّد هو الطرف الأيسر من مرجع النموذج لديك:
مثال على التكوين
كيف يعمل
- يحدد backend بناءً على بادئة المزوّد (
claude-cli/...). - يبني مطالبة نظام باستخدام مطالبة OpenClaw نفسها + سياق مساحة العمل.
- ينفّذ CLI باستخدام معرّف جلسة (إذا كان مدعومًا) حتى يبقى السجل متسقًا.
- يحلل الإخراج (JSON أو نص عادي) ويعيد النص النهائي.
- يحفظ معرّفات الجلسات لكل backend، بحيث تعيد الأدوار اللاحقة استخدام جلسة CLI نفسها.
الجلسات
- إذا كانت CLI تدعم الجلسات، فاضبط
sessionArg(مثل--session-id) أوsessionArgs(العنصر النائب{sessionId}) عندما يلزم إدراج المعرّف في عدة علامات. - إذا كانت CLI تستخدم أمرًا فرعيًا للاستئناف مع علامات مختلفة، فاضبط
resumeArgs(ويحل محلargsعند الاستئناف) واختياريًاresumeOutput(لعمليات الاستئناف غير المعتمدة على JSON). sessionMode:always: أرسل دائمًا معرّف جلسة (UUID جديد إذا لم يكن هناك معرّف مخزّن).existing: أرسل معرّف جلسة فقط إذا كان مخزنًا من قبل.none: لا ترسل معرّف جلسة أبدًا.
- يحافظ
serialize: trueعلى ترتيب التشغيلات في المسار نفسه. - تسلسل معظم CLIs يكون على مسار مزوّد واحد.
claude-cliأضيق من ذلك: تُسلسل التشغيلات المستأنفة لكل معرّف جلسة Claude، وتُسلسل التشغيلات الجديدة لكل مسار مساحة عمل. ويمكن لمساحات العمل المستقلة أن تعمل بالتوازي.- يتخلى OpenClaw عن إعادة استخدام جلسة CLI المخزنة عندما تتغير حالة مصادقة backend، بما في ذلك إعادة تسجيل الدخول، أو تدوير الرموز، أو تغيير بيانات اعتماد ملف تعريف المصادقة.
الصور (تمرير مباشر)
إذا كانت CLI لديك تقبل مسارات الصور، فاضبطimageArg:
imageArg، فسيتم
تمرير هذه المسارات كوسائط CLI. وإذا كان imageArg غير موجود، فإن OpenClaw
يُلحق مسارات الملفات بالمطالبة (حقن مسار)، وهو ما يكفي للـ CLIs التي
تحمّل الملفات المحلية تلقائيًا من المسارات النصية العادية (سلوك Claude CLI).
الإدخالات / المخرجات
output: "json"(الافتراضي) يحاول تحليل JSON واستخراج النص + معرّف الجلسة.- بالنسبة إلى مخرجات JSON الخاصة بـ Gemini CLI، يقرأ OpenClaw نص الرد من
responseوالاستخدام منstatsعندما تكونusageمفقودة أو فارغة. - يحلل
output: "jsonl"تدفقات JSONL (مثل Claude CLIstream-jsonوCodex CLI--json) ويستخرج رسالة الوكيل النهائية بالإضافة إلى معرّفات الجلسة عند وجودها. output: "text"يعامل stdout على أنه الاستجابة النهائية.
input: "arg"(الافتراضي) يمرر المطالبة باعتبارها آخر وسيطة CLI.input: "stdin"يرسل المطالبة عبر stdin.- إذا كانت المطالبة طويلة جدًا وكان
maxPromptArgCharsمضبوطًا، فسيُستخدم stdin.
الإعدادات الافتراضية (مملوكة لـ plugin)
يسجل plugin المضمّن الخاص بـ Anthropic إعدادًا افتراضيًا لـclaude-cli:
command: "claude"args: ["-p", "--output-format", "stream-json", "--include-partial-messages", "--verbose", "--permission-mode", "bypassPermissions"]resumeArgs: ["-p", "--output-format", "stream-json", "--include-partial-messages", "--verbose", "--permission-mode", "bypassPermissions", "--resume", "{sessionId}"]output: "jsonl"input: "stdin"modelArg: "--model"systemPromptArg: "--append-system-prompt"sessionArg: "--session-id"systemPromptWhen: "first"sessionMode: "always"
codex-cli:
command: "codex"args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]output: "jsonl"resumeOutput: "text"modelArg: "--model"imageArg: "--image"sessionMode: "existing"
google-gemini-cli:
command: "gemini"args: ["--prompt", "--output-format", "json"]resumeArgs: ["--resume", "{sessionId}", "--prompt", "--output-format", "json"]modelArg: "--model"sessionMode: "existing"sessionIdFields: ["session_id", "sessionId"]
gemini على PATH (brew install gemini-cli أو
npm install -g @google/gemini-cli).
ملاحظات JSON الخاصة بـ Gemini CLI:
- يُقرأ نص الرد من الحقل
responseفي JSON. - يعود الاستخدام إلى
statsعندما تكونusageغائبة أو فارغة. - تُطبّع
stats.cachedإلى OpenClawcacheRead. - إذا كانت
stats.inputمفقودة، يشتق OpenClaw رموز الإدخال منstats.input_tokens - stats.cached.
command مطلق).
الإعدادات الافتراضية المملوكة لـ plugin
أصبحت الإعدادات الافتراضية لـ CLI backend الآن جزءًا من سطح plugin:- تسجلها plugins باستخدام
api.registerCliBackend(...). - يصبح
idالخاص بـ backend هو بادئة المزوّد في مراجع النموذج. - يظل تكوين المستخدم في
agents.defaults.cliBackends.<id>متقدمًا على الإعداد الافتراضي للـ plugin. - يظل تنظيف التكوين الخاص بـ backend مملوكًا للـ plugin عبر الخطاف الاختياري
normalizeConfig.
تراكبات Bundle MCP
لا تتلقى CLI backends استدعاءات أدوات OpenClaw مباشرة، لكن يمكن لـ backend الاشتراك في تراكب MCP مكوّن مولّد باستخدامbundleMcp: true.
السلوك المضمّن الحالي:
claude-cli: bundleMcp: true(الافتراضي)codex-cli: لا يوجد تراكب bundle MCPgoogle-gemini-cli: لا يوجد تراكب bundle MCP
- يشغّل خادم MCP محليًا عبر HTTP loopback يكشف أدوات gateway لعملية CLI
- يصادق الجسر باستخدام رمز لكل جلسة (
OPENCLAW_MCP_TOKEN) - يقيّد الوصول إلى الأدوات بسياق الجلسة والحساب والقناة الحالية
- يحمّل خوادم bundle-MCP الممكّنة لمساحة العمل الحالية
- يدمجها مع أي
--mcp-configموجودة مسبقًا في backend - يعيد كتابة وسائط CLI لتمرير
--strict-mcp-config --mcp-config <generated-file>
--strict-mcp-config Claude CLI من وراثة خوادم MCP
الموجودة على مستوى المستخدم أو المستوى العام. وإذا لم تكن هناك خوادم MCP ممكّنة، فإن OpenClaw
يحقن مع ذلك تكوينًا صارمًا فارغًا حتى تبقى التشغيلات الخلفية معزولة.
القيود
- لا توجد استدعاءات مباشرة لأدوات OpenClaw. لا يحقن OpenClaw استدعاءات الأدوات ضمن
بروتوكول CLI backend. ومع ذلك، فإن backends التي تحتوي على
bundleMcp: true(وهو الإعداد الافتراضي لـ Claude CLI) تتلقى أدوات gateway عبر جسر MCP loopback، لذلك يستطيع Claude CLI استدعاء أدوات OpenClaw عبر دعم MCP الأصلي لديه. - يعتمد البث على backend. يستخدم Claude CLI بث JSONL
(
stream-jsonمع--include-partial-messages)؛ وقد تظل CLI backends الأخرى مخزنة مؤقتًا حتى الخروج. - المخرجات المهيكلة تعتمد على تنسيق JSON الخاص بـ CLI.
- جلسات Codex CLI تُستأنف عبر مخرجات نصية (وليس JSONL)، وهو ما يجعلها
أقل هيكلةً من التشغيل الأولي باستخدام
--json. ومع ذلك، تظل جلسات OpenClaw تعمل بشكل طبيعي.
استكشاف الأخطاء وإصلاحها
- تعذر العثور على CLI: اضبط
commandعلى مسار كامل. - اسم نموذج خاطئ: استخدم
modelAliasesلربطprovider/model→ نموذج CLI. - لا يوجد استمرارية للجلسة: تأكد من ضبط
sessionArgوأنsessionModeليستnone(لا يستطيع Codex CLI حاليًا الاستئناف مع مخرجات JSON). - يتم تجاهل الصور: اضبط
imageArg(وتأكد من أن CLI تدعم مسارات الملفات).