ACP هو مسار البيئة الخارجية، وليس مسار Codex الافتراضي. يمتلك Plugin
خادم تطبيق Codex الأصلي عناصر التحكم
/codex ... وبيئة التشغيل المضمنة
الافتراضية openai/gpt-* لأدوار الوكيل؛ بينما يمتلك ACP عناصر التحكم /acp ...
وجلسات sessions_spawn({ runtime: "acp" }).للسماح لـ Codex أو Claude Code بالاتصال مباشرةً كعميل MCP خارجي
بمحادثات قنوات OpenClaw الحالية، استخدم
openclaw mcp serve بدلًا من ACP.ما الصفحة التي أريدها؟
هل يعمل هذا مباشرةً دون إعداد إضافي؟
نعم، بعد تثبيت Plugin الرسمي لبيئة تشغيل ACP:extensions/acpx بعد
pnpm install. شغّل /acp doctor لإجراء فحص الجاهزية.
لا يعرّف OpenClaw الوكلاء بإمكانية إنشاء جلسات ACP إلا عندما يكون ACP قابلًا للاستخدام فعليًا:
يجب تمكين ACP، وألا يكون الإرسال معطلًا، وألا تكون الجلسة الحالية
محظورة بواسطة وضع الحماية، ويجب تحميل واجهة خلفية لبيئة التشغيل وأن تكون سليمة. إذا
فشل أي شرط، تظل إرشادات Skills الخاصة بـ ACP وsessions_spawn مخفية
حتى لا يقترح الوكيل واجهة خلفية غير متاحة.
مشكلات التشغيل الأول الشائعة
مشكلات التشغيل الأول الشائعة
- إذا ضُبط
plugins.allow، فإنه يمثل قائمة Plugins تقييدية ويجب أن تتضمنacpx، وإلا فستُحظر واجهة ACP الخلفية المثبتة عمدًا (يُبلغ/acp doctorعن إدخال قائمة السماح المفقود). - يأتي محول Codex ACP مع Plugin
acpxويعمل محليًا متى أمكن. - يعمل Codex ACP باستخدام
CODEX_HOMEمعزول. ينسخ OpenClaw إدخالات الثقة الموثوقة للمشروع، بالإضافة إلى إعدادات توجيه النموذج/المزوّد الآمنة (modelوmodel_providerوmodel_reasoning_effortوsandbox_modeوحقولmodel_providers.<name>الآمنة) من إعدادات Codex للمضيف؛ بينما تبقى المصادقة والإشعارات والخطافات في إعدادات المضيف فقط. - قد تُجلب محولات البيئات المستهدفة الأخرى عند الطلب باستخدام
npxعند أول استخدام. - يجب أن تكون مصادقة المورّد موجودة مسبقًا على المضيف لتلك البيئة.
- إذا لم يتوفر npm أو اتصال بالشبكة على المضيف، تفشل عمليات جلب المحولات عند التشغيل الأول حتى تُجهّز ذاكرات التخزين المؤقت مسبقًا أو يُثبّت المحول بطريقة أخرى.
متطلبات بيئة التشغيل
متطلبات بيئة التشغيل
يشغّل ACP عملية بيئة خارجية حقيقية. يمتلك OpenClaw التوجيه،
وحالة مهام الخلفية، والتسليم، والارتباطات، والسياسات؛ بينما تمتلك البيئة
تسجيل الدخول إلى مزوّدها، ودليل نماذجها، وسلوك نظام الملفات، وأدواتها الأصلية.قبل إلقاء اللوم على OpenClaw، تحقّق مما يلي:
- يُبلغ
/acp doctorعن واجهة خلفية ممكّنة وسليمة. - أن المعرّف المستهدف مسموح به في
acp.allowedAgentsعند ضبط قائمة السماح هذه. - إمكانية بدء أمر البيئة على مضيف Gateway.
- توفر مصادقة المزوّد لتلك البيئة (
claudeوcodexوgeminiوopencodeوdroidوغيرها). - وجود النموذج المحدد لتلك البيئة — معرّفات النماذج غير قابلة للنقل بين البيئات.
- وجود
cwdالمطلوب وإمكانية الوصول إليه، أو احذفcwdودع الواجهة الخلفية تستخدم قيمتها الافتراضية. - توافق وضع الأذونات مع العمل. لا تستطيع الجلسات غير التفاعلية النقر على مطالبات الأذونات الأصلية، لذلك تحتاج عمليات البرمجة كثيفة الكتابة/التنفيذ عادةً إلى ملف تعريف أذونات ACPX يمكنه المتابعة دون واجهة تفاعلية.
أهداف البيئات المدعومة
مع الواجهة الخلفيةacpx، استخدم هذه المعرّفات كأهداف لـ /acp spawn <id> أو
sessions_spawn({ runtime: "acp", agentId: "<id>" }):
يُسجَّل
pi (pi-acp) أيضًا في الواجهة الخلفية acpx، لكنه ليس بيئة
برمجة بالمعنى نفسه للبيئات الأخرى المذكورة أعلاه.
يمكن إعداد أسماء مستعارة مخصصة لوكلاء acpx داخل acpx نفسه، لكن سياسة OpenClaw
تظل تتحقق من acp.allowedAgents ومن أي تعيين
agents.list[].runtime.acp.agent قبل الإرسال.
دليل تشغيل المشغّل
مسار/acp سريع من الدردشة:
1
الإنشاء
/acp spawn claude --bind here،
أو /acp spawn gemini --mode persistent --thread auto، أو صراحةً
/acp spawn codex --bind here.2
العمل
تابع في المحادثة أو سلسلة الرسائل المرتبطة (أو استهدف مفتاح الجلسة
صراحةً).
3
فحص الحالة
/acp status4
الضبط
/acp model <provider/model>، و/acp permissions <profile>،
و/acp timeout <seconds>.5
التوجيه
دون استبدال السياق:
/acp steer tighten logging and continue.6
الإيقاف
/acp cancel (الدور الحالي) أو /acp close (الجلسة + الارتباطات).تفاصيل دورة الحياة
تفاصيل دورة الحياة
- ينشئ التشغيل جلسة بيئة ACP أو يستأنفها، ويسجل بيانات ACP الوصفية في مخزن جلسات OpenClaw، وقد ينشئ مهمة في الخلفية عندما يكون التشغيل مملوكًا للأصل.
- تُعامل جلسات ACP المملوكة للأصل كعمل في الخلفية حتى عندما تكون جلسة بيئة التشغيل دائمة؛ إذ يمر الإكمال والتسليم عبر الأسطح المختلفة من خلال مُشعِر المهمة الأصلية بدلًا من التصرف كجلسة دردشة عادية ظاهرة للمستخدم.
- تغلق صيانة المهام جلسات ACP أحادية التشغيل النهائية أو اليتيمة المملوكة للأصل. يُحتفظ بجلسات ACP الدائمة ما دام ارتباط محادثة نشط قائمًا؛ وتُغلق الجلسات الدائمة القديمة التي لا تملك ارتباطًا نشطًا حتى لا يمكن استئنافها بصمت بعد انتهاء المهمة المالكة أو فقدان سجل مهمتها.
- تنتقل رسائل المتابعة المرتبطة مباشرةً إلى جلسة ACP حتى يُغلق الارتباط أو يُلغى تركيزه أو يُعاد ضبطه أو تنتهي صلاحيته.
- تبقى أوامر Gateway محلية. لا تُرسل
/acp ...و/statusو/unfocusمطلقًا كنص مطالبة عادي إلى بيئة ACP مرتبطة. - يُجهض
cancelالدور النشط عندما تدعم الواجهة الخلفية الإلغاء؛ ولا يحذف الارتباط أو البيانات الوصفية للجلسة. - ينهي
closeجلسة ACP من منظور OpenClaw ويزيل الارتباط. وقد تظل البيئة تحتفظ بسجلها الخاص في المنبع إذا كانت تدعم الاستئناف. - ينظف Plugin acpx أشجار عمليات الأغلفة والمحولات المملوكة لـ OpenClaw بعد
close، ويحصد عمليات ACPX اليتيمة القديمة المملوكة لـ OpenClaw أثناء بدء تشغيل Gateway. - تصبح عمليات بيئة التشغيل الخاملة مؤهلة للتنظيف بعد
acp.runtime.ttlMinutes؛ وتظل البيانات الوصفية المخزنة للجلسة متاحة عبر/acp sessions.
قواعد توجيه Codex الأصلية
قواعد توجيه Codex الأصلية
مشغلات اللغة الطبيعية التي ينبغي توجيهها إلى Plugin Codex الأصلي
عند تمكينه:
- “اربط قناة Discord هذه بـ Codex.”
- “أرفق هذه الدردشة بسلسلة Codex ذات المعرّف
<id>.” - “اعرض سلاسل Codex، ثم اربط هذه السلسلة.”
before_tool_call، ومراقبة after_tool_call، وتوجيه
أحداث PermissionRequest الخاصة بـ Codex عبر موافقات OpenClaw. وتُرحَّل
خطافات Stop في Codex إلى before_agent_finalize في OpenClaw، حيث يمكن
للإضافات طلب تمريرة أخرى للنموذج قبل أن يُنهي Codex إجابته. ويظل المُرحِّل
محافظًا عن قصد: فهو لا يُعدِّل وسائط أدوات Codex الأصلية ولا يعيد كتابة
سجلات سلاسل Codex. استخدم ACP الصريح فقط عندما تريد نموذج وقت التشغيل/الجلسة
الخاص بـ ACP. وقد وُثِّق نطاق دعم Codex المضمَّن في
عقد دعم حاضنة Codex بالإصدار v1.دليل سريع لاختيار النموذج / المزوّد / وقت التشغيل
دليل سريع لاختيار النموذج / المزوّد / وقت التشغيل
- مراجع نماذج Codex القديمة - مسار نموذج OAuth/الاشتراك القديم في Codex الذي تُصلحه أداة doctor.
openai/*- وقت تشغيل خادم تطبيق Codex الأصلي المضمَّن لأدوار وكيل OpenAI./codex ...- التحكم الأصلي في محادثات Codex./acp ...أوruntime: "acp"- التحكم الصريح عبر ACP/acpx.
مشغّلات اللغة الطبيعية للتوجيه عبر ACP
مشغّلات اللغة الطبيعية للتوجيه عبر ACP
المشغّلات التي ينبغي توجيهها إلى وقت تشغيل ACP:
- “شغّل هذا كجلسة Claude Code ACP لمرة واحدة ولخّص النتيجة.”
- “استخدم Gemini CLI لهذه المهمة في سلسلة، ثم أبقِ المتابعات في السلسلة نفسها.”
- “شغّل Codex عبر ACP في سلسلة تعمل في الخلفية.”
runtime: "acp"، ويحلّ agentId الخاص بالحاضنة،
ويربطه بالمحادثة أو السلسلة الحالية عند دعم ذلك، ويوجّه المتابعات إلى تلك
الجلسة حتى الإغلاق/انتهاء الصلاحية. ولا يتبع Codex هذا المسار إلا عندما يكون
ACP/acpx صريحًا أو عندما لا يتوفر Plugin Codex الأصلي للعملية المطلوبة.بالنسبة إلى sessions_spawn، لا يُعلَن عن runtime: "acp" إلا عندما يكون ACP
مفعّلًا، وألا يكون الطالب داخل بيئة معزولة، وأن تكون خلفية وقت تشغيل ACP
محمّلة. يوقف acp.dispatch.enabled=false الإرسال التلقائي لسلاسل ACP مؤقتًا،
لكنه لا يخفي أو يحظر استدعاءات sessions_spawn({ runtime: "acp" })
الصريحة. وهو يستهدف معرّفات حاضنات ACP مثل codex أو claude أو droid
أو gemini أو opencode. لا تمرّر معرّف وكيل إعداد OpenClaw عاديًا من
agents_list ما لم يكن ذلك الإدخال مُعدًّا صراحةً باستخدام
agents.list[].runtime.type="acp"؛ وإلا فاستخدم وقت تشغيل الوكيل الفرعي
الافتراضي. عندما يكون وكيل OpenClaw مُعدًّا باستخدام
runtime.type="acp"، يستخدم OpenClaw القيمة runtime.acp.agent بصفتها
معرّف الحاضنة الأساسي.ACP مقابل الوكلاء الفرعيين
استخدم ACP عندما تريد وقت تشغيل حاضنة خارجية. استخدم خادم تطبيق Codex الأصلي لربط محادثات Codex والتحكم فيها عندما يكون Plugincodex
مفعّلًا. استخدم الوكلاء الفرعيين عندما تريد عمليات تنفيذ مفوّضة أصلية في OpenClaw.
راجع أيضًا الوكلاء الفرعيين.
كيفية تشغيل ACP لـ Claude Code
بالنسبة إلى Claude Code عبر ACP، تتكوّن المكدّسة من:- مستوى التحكم في جلسات ACP لدى OpenClaw.
- Plugin وقت التشغيل الرسمي
@openclaw/acpx. - محوّل Claude ACP.
- آليات وقت التشغيل/الجلسة لدى Claude.
- هل تريد
/acp spawn، أو جلسات قابلة للربط، أو عناصر تحكم في وقت التشغيل، أو عملًا مستمرًا في الحاضنة؟ استخدم ACP. - هل تريد بديلًا نصيًا محليًا بسيطًا عبر CLI الخام؟ استخدم خلفيات CLI.
الجلسات المرتبطة
النموذج الذهني
- سطح الدردشة - المكان الذي يواصل فيه الأشخاص الحديث (قناة Discord، أو موضوع Telegram، أو دردشة iMessage).
- جلسة ACP - حالة وقت تشغيل Codex/Claude/Gemini الدائمة التي يوجّه OpenClaw الرسائل إليها.
- سلسلة/موضوع فرعي - سطح مراسلة إضافي اختياري لا يُنشأ إلا بواسطة
--thread .... - مساحة عمل وقت التشغيل - موقع نظام الملفات (
cwd، أو نسخة مستودع العمل، أو مساحة عمل الخلفية) الذي تعمل فيه الحاضنة. وهي مستقلة عن سطح الدردشة.
روابط المحادثة الحالية
يثبّت/acp spawn <harness> --bind here المحادثة الحالية على جلسة ACP
المنشأة - بلا سلسلة فرعية، وعلى سطح الدردشة نفسه. يظل OpenClaw مسؤولًا
عن النقل، والمصادقة، والسلامة، والتسليم. تُوجَّه رسائل المتابعة في تلك
المحادثة إلى الجلسة نفسها؛ ويعيد /new و/reset ضبط الجلسة في مكانها؛
ويزيل /acp close الربط.
أمثلة:
قواعد الربط والحصرية
قواعد الربط والحصرية
- الخياران
--bind hereو--thread ...متنافيان. - لا يعمل
--bind hereإلا على القنوات التي تعلن دعم ربط المحادثة الحالية؛ وإلا يعيد OpenClaw رسالة واضحة تفيد بعدم الدعم. تستمر الروابط عبر عمليات إعادة تشغيل Gateway. - في Discord، يتحكم
spawnSessionsفي إنشاء سلسلة فرعية للخيار--thread auto|here- وليس للخيار--bind here. - إذا أنشأت جلسة لوكيل ACP مختلف من دون
--cwd، يرث OpenClaw مساحة عمل الوكيل المستهدف افتراضيًا. تتراجع المسارات الموروثة المفقودة (ENOENT/ENOTDIR) إلى الإعداد الافتراضي للخلفية؛ أما أخطاء الوصول الأخرى (مثلEACCES) فتظهر كأخطاء إنشاء. - تظل أوامر إدارة Gateway محلية في المحادثات المرتبطة - إذ يتعامل OpenClaw مع أوامر
/acp ...حتى عندما يُوجَّه نص المتابعة العادي إلى جلسة ACP المرتبطة؛ كما يظل/statusو/unfocusمحليين متى كانت معالجة الأوامر مفعّلة لذلك السطح.
الجلسات المرتبطة بسلسلة
الجلسات المرتبطة بسلسلة
عندما تكون روابط السلاسل مفعّلة لمحوّل قناة:
- يربط OpenClaw سلسلة بجلسة ACP مستهدفة.
- تُوجَّه رسائل المتابعة في تلك السلسلة إلى جلسة ACP المرتبطة.
- يُسلَّم إخراج ACP إلى السلسلة نفسها.
- تؤدي إزالة التركيز/الإغلاق/الأرشفة/انتهاء مهلة الخمول أو انتهاء العمر الأقصى إلى إزالة الربط.
- تُعد
/acp closeو/acp cancelو/acp statusو/statusو/unfocusأوامر Gateway، وليست مطالبات إلى حاضنة ACP.
acp.enabled=true- يكون
acp.dispatch.enabledمفعّلًا افتراضيًا (اضبطه علىfalseلإيقاف الإرسال التلقائي لسلاسل ACP مؤقتًا؛ وتظل استدعاءاتsessions_spawn({ runtime: "acp" })الصريحة تعمل). - تفعيل إنشاء جلسات سلاسل محوّل القناة (الافتراضي:
true):- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
القنوات الداعمة للسلاسل
القنوات الداعمة للسلاسل
- أي محوّل قناة يوفّر إمكانية ربط الجلسة/السلسلة.
- الدعم المضمّن حاليًا: سلاسل/قنوات Discord، وموضوعات Telegram (موضوعات المنتديات في المجموعات/المجموعات الفائقة وموضوعات الرسائل المباشرة).
- يمكن لقنوات Plugin إضافة الدعم عبر واجهة الربط نفسها.
روابط القنوات الدائمة
بالنسبة إلى مسارات العمل غير المؤقتة، اضبط روابط ACP الدائمة في إدخالاتbindings[] ذات المستوى الأعلى.
نموذج الربط
"acp"
يحدد ربط محادثة ACP دائمًا.
object
يحدد المحادثة المستهدفة. الأشكال الخاصة بكل قناة:
- قناة/سلسلة Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - قناة/رسالة مباشرة في Slack:
match.channel="slack"+match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>". يُفضّل استخدام معرّفات Slack الثابتة؛ كما تطابق روابط القنوات الردود داخل سلاسل تلك القناة. - موضوع منتدى Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - رسالة مباشرة/مجموعة في WhatsApp:
match.channel="whatsapp"+match.peer.id="<E.164|group JID>". استخدم أرقام E.164 مثل+15555550123للدردشات المباشرة، ومعرّفات JID لمجموعات WhatsApp مثل120363424282127706@g.usللمجموعات. - رسالة مباشرة/مجموعة في iMessage:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>". يُفضّل استخدامchat_id:*للحصول على روابط مجموعات ثابتة.
string
معرّف وكيل OpenClaw المالك.
"persistent" | "oneshot"
تجاوز ACP اختياري.
string
تسمية اختيارية موجّهة للمشغّل.
string
دليل عمل اختياري لوقت التشغيل.
string
تجاوز اختياري للخلفية.
الإعدادات الافتراضية لوقت التشغيل لكل وكيل
استخدمagents.list[].runtime لتعريف إعدادات ACP الافتراضية مرة واحدة لكل وكيل:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(معرّف الحاضنة، مثلcodexأوclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
bindings[].acp.*agents.list[].runtime.acp.*- إعدادات ACP العامة الافتراضية (مثل
acp.backend)
مثال
السلوك
- يضمن OpenClaw وجود جلسة ACP المُعدّة بعد قبول القناة المحددة وقبل الاستخدام.
- تُوجَّه الرسائل في تلك القناة أو الموضوع أو المحادثة إلى جلسة ACP المُعدّة.
- تمتلك ارتباطات ACP المُعدّة مسار جلستها. ولا يحل توزيع بث القناة محل جلسة ACP المُعدّة للارتباط المطابق.
- في المحادثات المرتبطة، يعيد
/newو/resetتعيين مفتاح جلسة ACP نفسه في موضعه. - تظل ارتباطات وقت التشغيل المؤقتة (مثل التي تُنشئها تدفقات التركيز على سلسلة المحادثة) سارية عند وجودها.
- عند إنشاء جلسات ACP عبر الوكلاء من دون
cwdصريح، يرث OpenClaw مساحة عمل الوكيل المستهدف من إعدادات الوكيل. - تعود مسارات مساحة العمل الموروثة المفقودة إلى دليل العمل الافتراضي للواجهة الخلفية؛ أما حالات فشل الوصول إلى المسارات الموجودة فتظهر بوصفها أخطاء إنشاء.
بدء جلسات ACP
توجد طريقتان لبدء جلسة ACP:- من sessions_spawn
- من أمر /acp
استخدم
runtime: "acp" لبدء جلسة ACP من دور وكيل أو استدعاء
أداة.القيمة الافتراضية لـ
runtime هي subagent، لذا عيّن runtime: "acp" صراحةً
لجلسات ACP. إذا حُذف agentId، يستخدم OpenClaw القيمة acp.defaultAgent
عند إعدادها. يتطلب mode: "session" ضبط thread: true للاحتفاظ
بمحادثة مرتبطة ودائمة.معاملات sessions_spawn
string
مطلوب
المطالبة الأولية المُرسلة إلى جلسة ACP.
"acp"
مطلوب
يجب أن تكون
"acp" لجلسات ACP.string
معرّف بيئة تشغيل ACP المستهدفة. يعود إلى
acp.defaultAgent إذا كان مضبوطًا.boolean
افتراضي:"false"
يطلب تدفق ربط سلسلة المحادثة حيثما كان مدعومًا.
"run" | "session"
افتراضي:"run"
"run" للتنفيذ مرة واحدة؛ و"session" للتنفيذ الدائم. إذا كان thread: true
وحُذف mode، فقد يعتمد OpenClaw السلوك الدائم افتراضيًا وفقًا
لمسار وقت التشغيل. يتطلب mode: "session" ضبط thread: true.string
دليل العمل المطلوب لوقت التشغيل (يخضع للتحقق وفق سياسة الواجهة الخلفية/وقت التشغيل).
إذا حُذف، يرث إنشاء ACP مساحة عمل الوكيل المستهدف عند إعدادها؛
وتعود المسارات الموروثة المفقودة إلى إعدادات الواجهة الخلفية الافتراضية، بينما تُعاد
أخطاء الوصول الفعلية.
string
تسمية موجّهة إلى المشغّل تُستخدم في نص الجلسة/الشعار.
string
يستأنف جلسة ACP موجودة بدلًا من إنشاء جلسة جديدة. يعيد الوكيل
تشغيل سجل محادثتها عبر
session/load. يتطلب
runtime: "acp"."parent"
تبث
"parent" ملخصات تقدم تشغيل ACP الأولي إلى جلسة الطالب
في صورة أحداث نظام. تتضمن الاستجابات المقبولة streamLogPath
الذي يشير إلى سجل JSONL ضمن نطاق الجلسة (<sessionId>.acp-stream.jsonl) يمكنك
متابعته للاطلاع على سجل الترحيل الكامل. تعرض تدفقات تقدم الجلسة الأم تعليقات
المساعد وتقدم حالة ACP افتراضيًا ما لم تكن
streaming.progress.commentary=false. كما يستخدم Discord افتراضيًا وضع
التقدم لمعاينات الجلسة الأم عند عدم إعداد وضع بث. يظل تقدم
الحالة ملتزمًا بـacp.stream.tagVisibility، لذلك تبقى وسوم مثل plan
مخفية ما لم تُفعّل صراحةً.sessions_spawn الخاصة بـACP القيمة
agents.defaults.subagents.runTimeoutSeconds حدًا افتراضيًا لدور الجلسة الفرعية. لا تقبل الأداة
تجاوزات المهلة لكل استدعاء (تُرفض runTimeoutSeconds/timeoutSeconds مع
خطأ يطلب إعداد القيمة الافتراضية).
string
تجاوز صريح للنموذج في جلسة ACP الفرعية. تطبّع عمليات إنشاء Codex ACP
مراجع OpenAI مثل
openai/gpt-5.4 إلى إعدادات بدء Codex ACP
قبل session/new؛ كما تضبط الصيغ ذات الشرطة المائلة مثل openai/gpt-5.4/high
مستوى جهد الاستدلال في Codex ACP. عند حذفها، تستخدم
sessions_spawn({ runtime: "acp" }) الإعدادات الافتراضية الحالية لنموذج الوكيل الفرعي
(agents.defaults.subagents.model أو agents.list[].subagents.model)
عند إعدادها؛ وإلا فتسمح لبيئة تشغيل ACP باستخدام نموذجها الافتراضي.
يجب على بيئات التشغيل الأخرى الإعلان عن models في ACP ودعم
session/set_model؛ وإلا يفشل OpenClaw/acpx بوضوح
بدلًا من العودة بصمت إلى النموذج الافتراضي للوكيل المستهدف.string
مستوى صريح للتفكير/الاستدلال. في Codex ACP، تتوافق
minimal مع جهد منخفض،
وتتوافق low/medium/high/xhigh مباشرةً، بينما تحذف off
تجاوز جهد الاستدلال عند بدء التشغيل. عند حذفها، تستخدم عمليات إنشاء ACP
الإعدادات الافتراضية الحالية لتفكير الوكيل الفرعي، إضافةً إلى
agents.defaults.models["provider/model"].params.thinking لكل نموذج
بالنسبة إلى النموذج المحدد.أوضاع ربط الإنشاء وسلسلة المحادثة
- --bind here|off
- --thread auto|here|off
ملاحظات:
- يُعد
--bind hereأبسط مسار للمشغّل لجعل هذه القناة أو المحادثة مدعومة بـCodex. - لا ينشئ
--bind hereسلسلة محادثة فرعية. - لا يتوفر
--bind hereإلا في القنوات التي توفر دعم ربط المحادثة الحالية. - لا يمكن الجمع بين
--bindو--threadفي استدعاء/acp spawnنفسه.
نموذج التسليم
يمكن أن تكون جلسات ACP مساحات عمل تفاعلية أو أعمالًا خلفية تملكها الجلسة الأم. يعتمد مسار التسليم على هذا الشكل.جلسات ACP التفاعلية
جلسات ACP التفاعلية
تهدف الجلسات التفاعلية إلى مواصلة المحادثة على سطح محادثة ظاهر:
- يربط
/acp spawn ... --bind hereالمحادثة الحالية بجلسة ACP. - يربط
/acp spawn ... --thread ...سلسلة محادثة/موضوع القناة بجلسة ACP. - توجّه الارتباطات الدائمة المُعدّة من النوع
bindings[].type="acp"المحادثات المطابقة إلى جلسة ACP نفسها.
- تُرسل المتابعات المرتبطة العادية كنص مطالبة، مع المرفقات فقط عندما تدعمها بيئة التشغيل/الواجهة الخلفية.
- تُعترض أوامر إدارة
/acpوأوامر Gateway المحلية قبل الإرسال إلى ACP. - تُنشأ أحداث الإكمال الناتجة عن وقت التشغيل لكل هدف. تحصل وكلاء OpenClaw على غلاف سياق وقت التشغيل الداخلي الخاص بـOpenClaw؛ بينما تحصل بيئات تشغيل ACP الخارجية على مطالبة عادية تتضمن نتيجة الجلسة الفرعية وتعليماتها. يجب ألا يُرسل غلاف
<<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>الخام مطلقًا إلى بيئات التشغيل الخارجية، وألا يُحفظ كنص صادر عن المستخدم في سجل ACP. - تستخدم إدخالات سجل ACP نص التشغيل الظاهر للمستخدم أو مطالبة الإكمال العادية. وتظل بيانات الحدث الوصفية الداخلية منظَّمة داخل OpenClaw حيثما أمكن، ولا تُعامل كمحتوى محادثة أنشأه المستخدم.
جلسات ACP لمرة واحدة المملوكة للجلسة الأم
جلسات ACP لمرة واحدة المملوكة للجلسة الأم
جلسات ACP لمرة واحدة التي ينشئها تشغيل وكيل آخر هي جلسات فرعية
تعمل في الخلفية، على غرار الوكلاء الفرعيين:
- تطلب الجلسة الأم تنفيذ العمل باستخدام
sessions_spawn({ runtime: "acp", mode: "run" }). - تعمل الجلسة الفرعية ضمن جلسة مستقلة في بيئة تشغيل ACP الخاصة بها.
- تعمل أدوار الجلسة الفرعية في مسار الخلفية نفسه المستخدم لإنشاء الوكلاء الفرعيين الأصليين، لذلك لا تحجب بيئة تشغيل ACP البطيئة أعمال الجلسة الرئيسية غير المرتبطة.
- يُبلَّغ عن الإكمال عبر مسار إعلان اكتمال المهمة. يحوّل OpenClaw بيانات الإكمال الوصفية الداخلية إلى مطالبة ACP عادية قبل إرسالها إلى بيئة تشغيل خارجية، لذلك لا ترى بيئات التشغيل علامات سياق وقت التشغيل الخاصة بـOpenClaw.
- تعيد الجلسة الأم صياغة نتيجة الجلسة الفرعية بصوت المساعد المعتاد عندما يكون الرد الموجّه للمستخدم مفيدًا.
تسليم sessions_send والتسليم بين الوكلاء
تسليم sessions_send والتسليم بين الوكلاء
يمكن لـ
sessions_send استهداف جلسة أخرى بعد الإنشاء. بالنسبة إلى جلسات النظراء
العادية، يستخدم OpenClaw مسار متابعة بين الوكلاء (A2A) بعد
إدخال الرسالة:- ينتظر رد الجلسة المستهدفة.
- يسمح اختياريًا للطالب والهدف بتبادل عدد محدود من أدوار المتابعة.
- يطلب من الهدف إنشاء رسالة إعلان.
- يسلّم ذلك الإعلان إلى القناة أو سلسلة المحادثة الظاهرة.
tools.sessions.visibility الواسعة.لا يتخطى OpenClaw متابعة A2A إلا عندما يكون مقدّم الطلب هو والد
جلسة ACP فرعية أحادية التنفيذ يملكها والده. في هذه الحالة، قد يؤدي تشغيل A2A
فوق إكمال المهمة إلى تنبيه الوالد بنتيجة الجلسة الفرعية، وإعادة توجيه رد
الوالد إلى الجلسة الفرعية، وإنشاء حلقة صدى بين الوالد والجلسة الفرعية.
تُبلغ نتيجة sessions_send عن delivery.status="skipped" في حالة
الجلسة الفرعية المملوكة هذه لأن مسار الإكمال مسؤول بالفعل عن النتيجة.استئناف جلسة موجودة
استئناف جلسة موجودة
استخدم حالات الاستخدام الشائعة:
resumeSessionId لمتابعة جلسة ACP سابقة بدلًا من
البدء من جديد. يعيد الوكيل تشغيل سجل محادثتها عبر
session/load، لذا يتابع العمل بالسياق الكامل لما سبق.- انقل جلسة Codex من حاسوبك المحمول إلى هاتفك، واطلب من وكيلك المتابعة من حيث توقفت.
- تابع جلسة برمجة بدأتها تفاعليًا في CLI، ولكن الآن دون واجهة تفاعلية عبر وكيلك.
- استأنف عملًا انقطع بسبب إعادة تشغيل Gateway أو انتهاء مهلة الخمول.
- لا ينطبق
resumeSessionIdإلا عند استخدامruntime: "acp"؛ ويتجاهل وقت تشغيل الوكيل الفرعي الافتراضي هذا الحقل الخاص بـ ACP. - لا ينطبق
streamToإلا عند استخدامruntime: "acp"؛ ويتجاهل وقت تشغيل الوكيل الفرعي الافتراضي هذا الحقل الخاص بـ ACP. - يُعد
resumeSessionIdمعرّف استئناف محليًا للمضيف خاصًا بـ ACP/أداة التشغيل، وليس مفتاح جلسة قناة في OpenClaw؛ ويظل OpenClaw يتحقق من سياسة إنشاء ACP وسياسة الوكيل المستهدف قبل الإرسال، بينما تتولى الواجهة الخلفية لـ ACP أو أداة التشغيل صلاحية تحميل ذلك المعرّف الخارجي. - يستعيد
resumeSessionIdسجل محادثة ACP الخارجي؛ ويظلthreadوmodeمطبّقين كالمعتاد على جلسة OpenClaw الجديدة التي تنشئها، لذا يظلmode: "session"يتطلبthread: true. - يجب أن يدعم الوكيل المستهدف
session/load(يدعمه Codex وClaude Code). - إذا لم يُعثر على معرّف الجلسة، تفشل عملية الإنشاء بخطأ واضح، من دون رجوع صامت إلى جلسة جديدة.
اختبار تحقق سريع بعد النشر
اختبار تحقق سريع بعد النشر
بعد نشر Gateway، شغّل فحصًا حيًا متكاملًا بدلًا من الاعتماد على
اختبارات الوحدات:
- تحقّق من إصدار Gateway المنشور وتثبيته على المضيف المستهدف.
- افتح جلسة جسر ACPX مؤقتة إلى وكيل حي.
- اطلب من ذلك الوكيل استدعاء
sessions_spawnباستخدامruntime: "acp"وagentId: "codex"وmode: "run"والمهمةReply with exactly LIVE-ACP-SPAWN-OK. - تحقّق من
accepted=yesووجودchildSessionKeyحقيقي وعدم وجود خطأ تحقق. - نظّف جلسة الجسر المؤقتة.
mode: "run" وتخطَّ streamTo: "parent"؛
فالمسارات المرتبطة بسلسلة المحادثة باستخدام mode: "session" ومسارات ترحيل
البث هي اختبارات تكامل منفصلة وأكثر شمولًا.التوافق مع بيئة العزل
تعمل جلسات ACP حاليًا على وقت تشغيل المضيف، وليس داخل بيئة عزل OpenClaw. القيود الحالية:- إذا كانت جلسة مقدّم الطلب معزولة، تُحظر عمليات إنشاء ACP لكل من
sessions_spawn({ runtime: "acp" })و/acp spawn. - لا يدعم
sessions_spawnمعruntime: "acp"الخيارsandbox: "require".
تحديد هدف الجلسة
تقبل معظم إجراءات/acp هدف جلسة اختياريًا (session-key أو
session-id أو session-label).
ترتيب التحديد:
- وسيطة الهدف الصريحة (أو
--sessionللأمر/acp steer)- يحاول المفتاح
- ثم معرّف جلسة بصيغة UUID
- ثم التسمية
- ارتباط سلسلة المحادثة الحالية (إذا كانت هذه المحادثة/سلسلة المحادثة مرتبطة بجلسة ACP).
- الرجوع إلى جلسة مقدّم الطلب الحالية.
Unable to resolve session target: ...).
عناصر التحكم في ACP
تتطلب عناصر التحكم في وقت التشغيل (
spawn وcancel وsteer وclose وstatus وset-mode
وset وcwd وpermissions وtimeout وmodel وreset-options)
هوية المالك من القنوات الخارجية وoperator.admin من عملاء
Gateway الداخليين. ويظل بإمكان المرسلين المصرح لهم من غير المالكين استخدام sessions
وdoctor وinstall وhelp.
يعرض /acp status خيارات وقت التشغيل الفعلية بالإضافة إلى معرّفات الجلسة
على مستوى وقت التشغيل والواجهة الخلفية. وتظهر أخطاء عناصر التحكم غير المدعومة
بوضوح عندما تفتقر الواجهة الخلفية إلى إحدى الإمكانات. يقرأ /acp sessions المخزن
للجلسة المرتبطة حاليًا أو جلسة مقدّم الطلب؛ وتُحدَّد رموز الهدف (session-key
أو session-id أو session-label) عبر اكتشاف جلسات Gateway،
بما في ذلك جذور session.store المخصصة لكل وكيل.
تعيين خيارات وقت التشغيل
يوفر/acp أوامر مختصرة وأداة تعيين عامة. العمليات المكافئة:
أداة تشغيل acpx وإعداد Plugin والصلاحيات
لإعداد أداة تشغيل acpx (الأسماء البديلة لـ Claude Code وCodex وGemini CLI)، وجسور MCP الخاصة بأدوات Plugin وأدوات OpenClaw، وأوضاع صلاحيات ACP، راجع إعداد وكلاء ACP.استكشاف الأخطاء وإصلاحها
ينتمي
Command blocked by PreToolUse hook: Native hook relay unavailable إلى
مرحل خطافات Codex الأصلي، وليس إلى ACP/acpx. في دردشة Codex مرتبطة، ابدأ
جلسة جديدة باستخدام /new أو /reset؛ إذا نجح مرة واحدة ثم عاد عند
استدعاء الأداة الأصلية التالي، فأعد تشغيل خادم تطبيق Codex أو Gateway الخاص بـ OpenClaw
بدلًا من تكرار /new. راجع
استكشاف أخطاء أداة تشغيل Codex وإصلاحها.