Codex harness
مرجع بيئة Codex للاختبار
يوضّح هذا المرجع الإعدادات التفصيلية لإضافة codex الرسمية.
لإعداد النظام واتخاذ قرارات التوجيه، ابدأ بـ
أداة Codex.
سطح إعدادات الإضافة
توجد جميع إعدادات أداة Codex ضمن plugins.entries.codex.config.
{ plugins: { entries: { codex: { enabled: true, config: { discovery: { enabled: true, timeoutMs: 2500, }, appServer: { mode: "guardian", }, }, }, }, },}حقول المستوى الأعلى:
| الحقل | القيمة الافتراضية | المعنى |
|---|---|---|
discovery |
مفعّل | إعدادات اكتشاف النماذج لـ Codex app-server model/list. |
appServer |
app-server مُدار عبر stdio | إعدادات النقل والأوامر والمصادقة والموافقة والعزل والمهلة الزمنية. تستخدم الأداة العادية افتراضيًا حالة خاصة بالوكيل. |
codexDynamicToolsLoading |
"searchable" |
استخدم "direct" لوضع أدوات OpenClaw الديناميكية مباشرةً في سياق أدوات Codex الأولي. |
codexDynamicToolsExclude |
[] |
أسماء إضافية لأدوات OpenClaw الديناميكية المطلوب حذفها من دورات Codex app-server. |
codexPlugins |
معطّل | دعم إضافات/تطبيقات Codex الأصلي، بما في ذلك الوصول الاختياري إلى تطبيقات الحساب المتصل. راجع إضافات Codex الأصلية. |
computerUse |
معطّل | إعداد استخدام Codex للكمبيوتر. راجع استخدام Codex للكمبيوتر. |
sessionCatalog |
مفعّل | اكتشاف جلسات Codex الأصلية للشريط الجانبي. عيّن enabled: false لتعطيل الاكتشاف دون تعطيل المزوّد أو الأداة. |
supervision |
معطّل | سياسة نص جلسات Codex الأصلية الموجّهة للوكيل والتحكم في الكتابة. راجع الإشراف على Codex. |
الإشراف
يسرد اكتشاف الجلسات الأصلية افتراضيًا جلسات Codex غير المؤرشفة من حاسوب Gateway والعُقد المقترنة التي اختير تضمينها. عطّل ذلك الدليل وحده باستخدام:
{ plugins: { entries: { codex: { enabled: true, config: { sessionCatalog: { enabled: false, }, }, }, }, },}يتحكم supervision بصورة منفصلة في الأدوات الموجّهة للوكيل:
| الحقل | القيمة الافتراضية | المعنى |
|---|---|---|
enabled |
false |
تفعيل أدوات الإشراف على Codex الموجّهة للوكيل. لا يتحكم هذا في دليل جلسات المشغّل الذي تمت مصادقته. |
endpoints |
نقطة نهاية محلية مضمّنة | أهداف نقاط النهاية المتقدمة وأهداف التوافق لوكيل الإشراف على Codex المحتفَظ به وأدوات MCP المستقلة. يتجاهل الدليل البشري وتدفق الفروع هذه الأهداف ويستخدمان App Server الخاص بالإشراف والمحدّد من appServer. |
allowRawTranscripts |
false |
عند تفعيل الإشراف، السماح للوكيل المستقل أو MCP المستقل بقراءة النصوص وحقول القوائم المشتقة منها. تظل قراءات codex_threads الخاصة بالبيانات الوصفية فقط متاحة. لا يتحكم هذا في متابعة Control UI التي تمت مصادقتها. |
allowWriteControls |
false |
عند تفعيل الإشراف، السماح بعمليات codex_threads المستقلة لإنشاء الفروع وإعادة التسمية والأرشفة وإلغاء الأرشفة، إضافةً إلى عمليات الإرسال والتوجيه والمقاطعة في MCP المستقل. لا يتجاوز هذا فحوصات الربط أو المضيف أو الحالة أو التأكيد الأخرى. |
تقبل إدخالات نقاط النهاية الحقول التالية:
| الحقل | ينطبق على | المعنى |
|---|---|---|
id |
الجميع | معرّف ثابت لنقطة النهاية. |
label |
الجميع | تسمية عرض اختيارية. |
transport |
الجميع | "stdio-proxy" أو "websocket". |
command |
stdio-proxy |
أمر اختياري لـ App Server. |
args |
stdio-proxy |
وسائط أوامر اختيارية. |
cwd |
stdio-proxy |
دليل العمل الاختياري للعملية الفرعية. |
url |
websocket |
عنوان URL مطلوب لـ WebSocket أو لمقبس محلي مدعوم. |
authTokenEnv |
websocket |
متغير بيئة اختياري تصادق قيمته على نقطة النهاية. |
تستخدم صفحة جلسات Codex App Server الخاص بالإشراف في الإضافة وتعرض
الجلسات غير المؤرشفة فقط. من دون إعدادات اتصال appServer صريحة،
تتم إدارة ذلك الاتصال عبر stdio في المجلد الرئيسي للمستخدم. يمكن للصفوف المحلية المخزنة أو الخاملة إنشاء
محادثة مقفلة على نموذج، مع سجل محدود للمستخدم والمساعد وصولًا إلى آخر
دورة مصدر نهائية محفوظة. يحافظ ربطها الخاص على تفرّع اللقطة،
وفرع المصدر الأساسي appServer، وحقن السجل، والدورات اللاحقة ضمن ذلك
الاتصال. تستخدم البداية الأساسية الأولى الزوج الذي يعيده التفرّع. أما عمليات
الاستئناف اللاحقة فتحذف تجاوزات نموذج OpenClaw ومزوّده كي يستعيد Codex
الزوج المحفوظ للمحادثة الأساسية؛ ويمكن لتغيير أصلي منفصل تحديث ذلك
الزوج، لكن النموذج الخارجي وسلسلة البدائل لا يستبدلانه مطلقًا. يمكن أرشفة
الصفوف المخزنة والخاملة بعد التأكد من عدم وجود مشغّل آخر، ما لم يكن ربط OpenClaw
نشط آخر يملك الهدف نفسه تمامًا أو أحد العناصر التابعة التي أنشأها وغير المؤرشفة.
يتبع OpenClaw ترقيم Codex لصفحات العناصر التابعة، ويتوقف بأمان عند
أخطاء التعداد أو الدورات أو استنفاد حد الأمان. يظل التأكيد
يشمل عملاء Codex الأصليين غير المعروفين والتسابق بين الحالة والأرشفة. لا يمكن
حذف محادثة خاضعة للإشراف ومقفلة على نموذج ما دامت تحمي الربط الأصلي.
لا يمكن للمصادر النشطة إنشاء فرع أو أن تُؤرشف، لكن يظل من الممكن فتح محادثة
خاضعة للإشراف موجودة. يبقى كل صف لعقدة مقترنة للقراءة فقط؛ إذ لا يوفّر
نقل العقدة بعد دورة حياة البث التي تحتاج إليها الأداة.
يغيّر appServer.homeScope: "user" وحده مجلد Codex الرئيسي الذي تستخدمه عملية
أداة مُدارة؛ ولا ينشر دليل المجموعة. لا يؤدي تفعيل الإشراف
إلى تغيير الإعداد الافتراضي للأداة. بدلًا من ذلك، يستخدم اتصال الإشراف المنفصل
افتراضيًا stdio مُدارًا في المجلد الرئيسي للمستخدم عند عدم وجود إعدادات اتصال
appServer صريحة. تُحترم الإعدادات الصريحة لذلك الاتصال.
تحتفظ الارتباطات الخاضعة للإشراف المعلّقة والمثبتة بذلك الاتصال في كل دورة؛
ويؤدي تعطيل الإشراف أو انحراف الاتصال/دورة الحياة إلى التوقف بأمان بدلًا من
الرجوع إلى أداة المجلد الرئيسي للوكيل. يشارك الاتصال الافتراضي الجلسات المخزنة
مع عملاء Codex الأصليين، لا حالة نشاط عملياتهم المحلية.
أُوقفت إعدادات plugins.entries.codex-supervisor القديمة. شغّل
openclaw doctor --fix لترحيل الإدخال القديم وتعريفات نقاط النهاية وأعلام السياسة
ومراجع السماح/المنع الخاصة بالإضافة إلى هذه الكتلة. تتغلب قيم
codex.config.supervision الأساسية الصريحة عند وجود تعارضات.
نقل App-server
بالنسبة إلى دورات الأداة العادية، يشغّل OpenClaw ملف Codex التنفيذي المُدار والمضمّن
مع الإضافة الرسمية (حاليًا @openai/codex 0.144.3):
codex app-server --listen stdio://يُبقي ذلك إصدار app-server مرتبطًا بإضافة codex الرسمية بدلًا من
أي Codex CLI منفصل مثبّت محليًا. عيّن
appServer.command فقط عندما تريد عمدًا ملفًا تنفيذيًا مختلفًا.
تفضّل الدورات المُدارة العادية ذات المجلد الرئيسي المعزول الافتراضي للوكيل هذه
الحزمة المثبتة حتى عند تثبيت حزمة تطبيق سطح مكتب macOS. عند تفعيل
استخدام الكمبيوتر، أو عندما يكون homeScope
هو "user" ويمكنه تحميل حالة استخدام الكمبيوتر الأصلية، يفضّل بدء التشغيل المُدار بدلًا من ذلك
ملف تطبيق سطح المكتب التنفيذي الذي يملك أذونات macOS المطلوبة. تنطبق قاعدة
تفضيل سطح المكتب نفسها عندما تفعّل إعدادات Codex الفعلية في المجلد الرئيسي المعزول
للوكيل استخدام الكمبيوتر الأصلي. إذا لم تكن أي حزمة لتطبيق سطح المكتب مثبّتة، يعود OpenClaw
إلى ملف الحزمة المثبتة التنفيذي.
ينسّق تسليم الملف التنفيذي وعزل الإعدادات الأصلية بين العملاء داخل عملية Gateway واحدة قيد التشغيل. أعد تشغيل Gateway بعد أن تغيّر عملية أخرى إعدادات إضافة Codex الأصلية.
يحدّد الإشراف اتصالًا منفصلًا. عند عدم وجود إعدادات اتصال
appServer صريحة، يستخدم stdio مُدارًا مع homeScope: "user"؛
وتظل الأداة العادية تستخدم stdio مُدارًا مع homeScope: "agent". تُحترم
إعدادات الاتصال الصريحة في كلا المسارين. عيّن homeScope: "user"
صراحةً عندما ينبغي للأداة العادية مشاركة $CODEX_HOME (أو ~/.codex)
مع العملاء الأصليين. يستخدم الربط الخاص الخاضع للإشراف اتصال الإشراف
بغض النظر عن الإعداد الافتراضي للأداة العادية. تحتفظ عمليات App Server
المستقلة بحالة مباشرة وحالة موافقات منفصلتين.
بالنسبة إلى app-server قيد التشغيل بالفعل، استخدم نقل WebSocket:
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { transport: "websocket", url: "ws://gateway-host:39175", authToken: "${CODEX_APP_SERVER_TOKEN}", requestTimeoutMs: 60000, }, }, }, }, },}حقول appServer:
| الحقل | القيمة الافتراضية | المعنى |
|---|---|---|
transport |
"stdio" |
يُنشئ "stdio" عملية Codex؛ ويتصل "unix" الصريح بمقبس التحكم المحلي؛ ويتصل "websocket" بـ url. |
homeScope |
"agent" |
يعزل "agent" حالة إطار الاختبار العادية لكل وكيل OpenClaw. أما "user" فهو اشتراك صريح يشارك $CODEX_HOME أو ~/.codex الأصلي، ويستخدم المصادقة الأصلية، ويمكّن إدارة سلاسل المحادثات للمالك فقط. يدعم نطاق المستخدم الإدخال/الإخراج القياسي المحلي أو نقل Unix. بالنسبة إلى اتصال الإشراف المنفصل، تُحل القيمة غير المعيّنة إلى "user" للإدخال/الإخراج القياسي أو Unix، وإلى "agent" لـ WebSocket. |
command |
ملف Codex التنفيذي المُدار | الملف التنفيذي لنقل الإدخال/الإخراج القياسي. اتركه غير معيّن لاستخدام الملف التنفيذي المُدار. |
args |
["app-server", "--listen", "stdio://"] |
وسيطات نقل الإدخال/الإخراج القياسي. |
url |
غير معيّن | عنوان URL لخادم تطبيق WebSocket أو عنوان URL لـ unix://. يؤدي تحديد مسار Unix فارغ صراحةً إلى اختيار مقبس التحكم القياسي في الدليل الرئيسي للمستخدم. |
authToken |
غير معيّن | رمز Bearer المميز لنقل WebSocket. يقبل سلسلة حرفية أو SecretInput مثل ${CODEX_APP_SERVER_TOKEN}. |
headers |
{} |
ترويسات WebSocket إضافية. تقبل قيم الترويسات سلاسل حرفية أو قيم SecretInput، مثل x-codex-client-session-token: "${CODEX_CLIENT_SESSION_TOKEN}". |
clearEnv |
[] |
أسماء متغيرات بيئة إضافية تُزال من عملية خادم التطبيق المنبثقة للإدخال/الإخراج القياسي بعد أن ينشئ OpenClaw بيئتها الموروثة. |
remoteWorkspaceRoot |
غير معيّن | جذر مساحة عمل خادم تطبيق Codex البعيد. عند تعيينه، يستنتج OpenClaw جذر مساحة العمل المحلية من مساحة عمل OpenClaw المحلولة، ويحافظ على لاحقة دليل العمل الحالي تحت هذا الجذر البعيد، ولا يرسل إلى Codex سوى دليل العمل النهائي لخادم التطبيق. إذا كان دليل العمل خارج جذر مساحة عمل OpenClaw المحلولة، يفشل OpenClaw بشكل مغلق بدلًا من إرسال مسار محلي تابع لـ Gateway إلى خادم التطبيق البعيد. |
loopDetectionPreToolUseRelay |
true |
يثبّت عملية Codex الفرعية PreToolUse المستخدمة فقط لاكتشاف حلقات OpenClaw وعلامة عدم وجود سياسة الصريحة الخاصة بها. عيّن false لتقليل تشعب العمليات لكل أداة. تظل خطافات Plugin السابقة للأداة وسياسة الأدوات الموثوقة تثبّت المرحّل المطلوب. |
requestTimeoutMs |
60000 |
مهلة استدعاءات مستوى التحكم لخادم التطبيق. |
turnCompletionIdleTimeoutMs |
60000 |
نافذة السكون بعد قبول Codex لدورة أو بعد طلب إلى خادم التطبيق مقيّد بالدورة، بينما ينتظر OpenClaw turn/completed. |
postToolRawAssistantCompletionIdleTimeoutMs |
300000 |
حارس خمول الإكمال والتقدم المستخدم بعد تسليم إلى أداة، أو اكتمال أداة أصلية، أو تقدم خام للمساعد بعد الأداة، أو اكتمال الاستدلال الخام، أو تقدم الاستدلال بينما ينتظر OpenClaw turn/completed. استخدمه لأحمال العمل الموثوقة أو الثقيلة حيث يمكن أن يظل التركيب اللاحق للأداة صامتًا بصورة مشروعة مدة أطول من ميزانية الإصدار النهائي للمساعد. |
mode |
"yolo" ما لم تمنع متطلبات Codex المحلية وضع YOLO |
إعداد مسبق لتنفيذ YOLO أو التنفيذ الخاضع لمراجعة الحارس. |
approvalPolicy |
"never" أو سياسة موافقة مسموح بها للحارس |
سياسة موافقة Codex الأصلية المرسلة عند بدء سلسلة المحادثة واستئنافها والدورة. |
sandbox |
"danger-full-access" أو بيئة حماية مسموح بها للحارس |
وضع بيئة حماية Codex الأصلي المرسل عند بدء سلسلة المحادثة واستئنافها. تضيّق بيئات حماية OpenClaw النشطة نطاق دورات danger-full-access إلى workspace-write في Codex؛ وتتبع علامة شبكة الدورة خروج بيئة حماية OpenClaw. |
approvalsReviewer |
"user" أو مراجع مسموح به للحارس |
استخدم "auto_review" للسماح لـ Codex بمراجعة مطالبات الموافقة الأصلية عندما يكون ذلك مسموحًا. |
defaultWorkspaceDir |
دليل العملية الحالي | مساحة العمل التي يستخدمها /codex bind عند حذف --cwd. |
serviceTier |
غير معيّن | فئة خدمة اختيارية لخادم تطبيق Codex. يمكّن "priority" التوجيه في الوضع السريع، ويطلب "flex" المعالجة المرنة، ويمسح null التجاوز. يُقبل "fast" القديم على أنه "priority". |
networkProxy |
معطّل | الاشتراك في شبكات ملف تعريف أذونات Codex لأوامر خادم التطبيق. يعرّف OpenClaw إعداد permissions.<profile>.network المحدد ويختاره باستخدام default_permissions بدلًا من إرسال sandbox. |
experimental.sandboxExecServer |
false |
اشتراك تجريبي يسجّل بيئة Codex مدعومة ببيئة حماية OpenClaw لدى خادم تطبيق Codex المدعوم، حتى يتسنى تشغيل تنفيذ Codex الأصلي داخل بيئة حماية OpenClaw النشطة. |
يُعد appServer.networkProxy صريحًا لأنه يغيّر عقد وضع الحماية في Codex.
عند تمكينه، يضبط OpenClaw أيضًا features.network_proxy.enabled و
default_permissions في إعدادات سلسلة Codex كي يتمكن ملف تعريف الأذونات
المُنشأ من بدء الشبكات المُدارة بواسطة Codex. ينشئ OpenClaw افتراضيًا
اسم ملف تعريف openclaw-network-<fingerprint> مقاومًا للتصادم استنادًا إلى
محتوى ملف التعريف؛ ولا تستخدم profileName إلا عند الحاجة إلى اسم محلي ثابت.
export default { plugins: { entries: { codex: { config: { appServer: { sandbox: "workspace-write", networkProxy: { enabled: true, domains: { "api.openai.com": "allow", "blocked.example.com": "deny", }, allowUpstreamProxy: true, proxyUrl: "http://127.0.0.1:3128", }, }, }, }, }, },};إذا كان وقت تشغيل خادم التطبيق المعتاد سيكون danger-full-access، فإن تمكين
networkProxy يستخدم بدلًا منه وصولًا إلى نظام الملفات بنمط مساحة العمل
لملف تعريف الأذونات المُنشأ. يُعد فرض الشبكة المُدار بواسطة Codex شبكةً
ضمن وضع حماية، ولذلك لن يحمي ملف تعريف الوصول الكامل حركة البيانات الصادرة.
يحظر Plugin عمليات المصافحة لخادم التطبيق القديمة أو غير المرفقة بإصدار: يجب
أن يبلّغ خادم تطبيق Codex عن الإصدار المستقر 0.143.0 أو إصدار أحدث.
يتعامل OpenClaw مع عناوين URL لخادم التطبيق عبر WebSocket غير المرتبطة بواجهة
الاسترجاع على أنها بعيدة، ويتطلب مصادقة WebSocket حاملة للهوية من خلال
appServer.authToken أو ترويسة Authorization. يمكن أن يكون
appServer.authToken وكل قيمة appServer.headers.* من نوع SecretInput؛ ويحل وقت
تشغيل الأسرار مراجع SecretRef والصيغة المختصرة لمتغيرات البيئة قبل أن ينشئ
OpenClaw خيارات بدء خادم التطبيق، وتفشل مراجع SecretRef المنظمة غير المحلولة
قبل إرسال أي رمز مميز أو ترويسة. عند إعداد Plugins أصلية لـ Codex، يستخدم
OpenClaw مستوى التحكم في Plugins الخاص بخادم التطبيق المتصل لتثبيت تلك
Plugins أو تحديثها، ثم يحدّث مخزون التطبيقات كي تظهر التطبيقات المملوكة
لـ Plugin لسلسلة Codex. يظل app/list المصدر المعتمد للمخزون
والبيانات الوصفية، لكن سياسة OpenClaw تقرر ما إذا كان thread/start
يرسل config.apps[appId].enabled = true لتطبيق مُدرج يمكن الوصول إليه حتى إذا كان Codex
يميّزه حاليًا بأنه معطل. تظل معرّفات التطبيقات المجهولة أو المفقودة مغلقة
عند الفشل؛ ولا يفعّل هذا المسار إلا Plugins المتجر عبر plugin/install
ويحدّث المخزون. لا تربط OpenClaw إلا بخوادم تطبيق بعيدة موثوق بها لقبول
عمليات تثبيت Plugins وتحديث مخزون التطبيقات التي يديرها OpenClaw.
أوضاع الموافقة ووضع الحماية
تستخدم جلسات خادم التطبيق المحلية عبر stdio وضع YOLO افتراضيًا:
approvalPolicy: "never" وapprovalsReviewer: "user" و
sandbox: "danger-full-access". يتيح وضع المشغّل المحلي الموثوق هذا
لأدوار OpenClaw غير المراقبة وعمليات Heartbeat إحراز تقدم من دون مطالبات
موافقة أصلية لا يوجد من يجيب عنها.
إذا كان ملف متطلبات النظام المحلي في Codex يمنع قيم الموافقة الضمنية بوضع
YOLO أو قيم المراجع أو وضع الحماية، فإن OpenClaw يعامل القيمة الافتراضية
الضمنية بوصفها guardian بدلًا من ذلك ويختار أذونات guardian المسموح بها.
يفرض tools.exec.mode: "auto" أيضًا موافقات Codex التي يراجعها guardian، ولا يحتفظ
بالتجاوزات القديمة غير الآمنة approvalPolicy: "never" أو sandbox: "danger-full-access"؛
اضبط tools.exec.mode: "full" لاتخاذ وضع متعمد بلا موافقة. تُراعى إدخالات
[[remote_sandbox_config]] المطابقة لاسم المضيف في ملف المتطلبات نفسه عند اتخاذ
قرار القيمة الافتراضية لوضع الحماية.
اضبط appServer.mode: "guardian" لموافقات Codex التي يراجعها guardian:
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { mode: "guardian", serviceTier: "priority", }, }, }, }, },}يتوسع الإعداد المسبق guardian إلى approvalPolicy: "on-request"
وapprovalsReviewer: "auto_review" وsandbox: "workspace-write" عندما تكون هذه
القيم مسموحًا بها. تتجاوز حقول السياسة الفردية mode. تظل قيمة
المراجع الأقدم guardian_subagent مقبولة باعتبارها اسمًا مستعارًا للتوافق،
لكن ينبغي للإعدادات الجديدة استخدام auto_review.
عندما يكون وضع حماية OpenClaw نشطًا، تظل عملية خادم تطبيق Codex المحلية
تعمل على مضيف Gateway. لذلك يعطّل OpenClaw وضع Code Mode الأصلي في Codex
وخوادم MCP الخاصة بالمستخدم وتنفيذ Plugins المدعوم بالتطبيقات لذلك الدور،
بدلًا من اعتبار وضع حماية Codex على جانب المضيف مكافئًا للواجهة الخلفية
لوضع حماية OpenClaw. يُتاح الوصول إلى الصدفة من خلال الأدوات الديناميكية
المدعومة بوضع حماية OpenClaw مثل sandbox_exec وsandbox_process
عندما تكون أدوات exec/process العادية متاحة.
التنفيذ الأصلي ضمن وضع الحماية
القيمة الافتراضية المستقرة هي الإغلاق عند الفشل: يعطّل وضع حماية OpenClaw
النشط أسطح التنفيذ الأصلية في Codex التي كانت ستعمل لولا ذلك من مضيف خادم
تطبيق Codex. لا تستخدم appServer.experimental.sandboxExecServer: true إلا عندما تريد
تجربة دعم البيئة البعيدة في Codex مع الواجهة الخلفية لوضع حماية OpenClaw.
يعمل مسار المعاينة هذا مع كل إصدار مدعوم من خادم تطبيق Codex.
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { experimental: { sandboxExecServer: true, }, }, }, }, }, },}عندما تكون العلامة مفعّلة وتكون جلسة OpenClaw الحالية ضمن وضع الحماية، يبدأ OpenClaw خادم exec محليًا على واجهة الاسترجاع ومدعومًا بوضع الحماية النشط، ويسجله لدى خادم تطبيق Codex، ويبدأ سلسلة Codex والدور باستخدام تلك البيئة المملوكة لـ OpenClaw. إذا تعذر على خادم التطبيق تسجيل البيئة، يفشل التشغيل مغلقًا بدلًا من الرجوع بصمت إلى التنفيذ على المضيف.
مسار المعاينة هذا محلي فقط. لا يستطيع خادم تطبيق WebSocket بعيد الوصول إلى خادم exec على واجهة الاسترجاع ما لم يكن يعمل على المضيف نفسه، ولذلك يرفض OpenClaw هذه التركيبة.
عزل المصادقة والبيئة
في الدليل الرئيسي الافتراضي لكل وكيل، تُختار المصادقة بهذا الترتيب:
- ملف تعريف مصادقة OpenClaw Codex صريح للوكيل.
- حساب خادم التطبيق الحالي في دليل Codex الرئيسي لذلك الوكيل.
- لعمليات تشغيل خادم التطبيق المحلية عبر stdio فقط،
CODEX_API_KEY، ثمOPENAI_API_KEY، عندما لا يوجد حساب لخادم التطبيق وتظل مصادقة OpenAI مطلوبة.
عندما يرى OpenClaw ملف تعريف مصادقة Codex بنمط اشتراك ChatGPT، سواء كان من
نوع بيانات اعتماد OAuth أو الرمز المميز، فإنه يزيل CODEX_API_KEY
وOPENAI_API_KEY من عملية Codex الابنة التي يشغّلها. يُبقي ذلك مفاتيح API
على مستوى Gateway متاحة لعمليات التضمين أو نماذج OpenAI المباشرة من دون أن
تُفوّتَر أدوار خادم تطبيق Codex الأصلي عبر API عن طريق الخطأ.
تستخدم ملفات تعريف مفاتيح API الصريحة لـ Codex والإجراء الاحتياطي لمفتاح البيئة المحلي عبر stdio تسجيل الدخول إلى خادم التطبيق بدلًا من بيئة العملية الابنة الموروثة. لا تتلقى اتصالات خادم التطبيق عبر WebSocket الإجراء الاحتياطي لمفتاح API من بيئة Gateway؛ استخدم ملف تعريف مصادقة صريحًا أو حساب خادم التطبيق البعيد نفسه.
ترث عمليات تشغيل خادم التطبيق عبر stdio بيئة عملية OpenClaw افتراضيًا.
يمتلك OpenClaw جسر حساب خادم تطبيق Codex ويضبط CODEX_HOME على دليل
خاص بكل وكيل ضمن حالة OpenClaw لذلك الوكيل. يُبقي ذلك إعدادات Codex وحساباته
وذاكرة Plugins المؤقتة وبياناتها وحالة السلاسل ضمن نطاق وكيل OpenClaw بدلًا
من تسربها من دليل ~/.codex الرئيسي الشخصي للمشغّل.
اضبط appServer.homeScope: "user" لمشاركة حالة Codex الأصلية مع Codex
Desktop وCLI. يدعم وضع الدليل الرئيسي للمستخدم المحلي هذا stdio المُدار
ونقل Unix الصريح. ويستخدم $CODEX_HOME عند ضبطه و~/.codex
بخلاف ذلك، بما يشمل المصادقة والإعدادات وPlugins والسلاسل الأصلية.
يتجاوز OpenClaw جسر ملف تعريف المصادقة الخاص به لخادم التطبيق. يمكن لأدوار
المالك المتحقق منها استخدام codex_threads لسرد تلك السلاسل، مع مرشح
search اختياري، وقراءتها وتفريعها وإعادة تسميتها وأرشفتها وإلغاء
أرشفتها. فرّع السلسلة قبل متابعتها في OpenClaw؛ إذ لا تنسق عمليات Codex
المستقلة بين الكتّاب المتزامنين للسلسلة نفسها.
ينطبق اشتراك homeScope هذا على جلسات حزمة التشغيل العادية. أما Chat
المُنشأة من خلال Codex Sessions فتستخدم اتصال الإشراف الخاص بها بدلًا من ذلك،
ما يحافظ على إعدادات المصادقة والمزوّد الخاصة بالاتصال الأصلي للفرع المعتمد
وعمليات الاستئناف المستقبلية.
في Chat خاضعة للإشراف ومقيدة بنموذج، لا يمكن لـ codex_threads إرفاق
فرع مختلف أو أرشفة السلسلة الأصلية المرتبطة بـ Chat. يظل السرد وقراءة
البيانات الوصفية فقط متاحين. تتطلب قراءات النص الخام allowRawTranscripts؛
وعندما تكون معطلة، يُرفض أيضًا بحث القائمة لأن البحث الأصلي قد يطابق معاينات
النص. تتطلب إعادة تسمية سلسلة غير ذات صلة لا تملكها Chat أخرى في OpenClaw،
وإلغاء أرشفتها، وإنشاء فرع منفصل منها، وأرشفتها allowWriteControls. لا يتجاوز
أي من الخيارين ارتباطًا مقفلًا.
لا يعيد OpenClaw كتابة HOME لعمليات تشغيل خادم التطبيق المحلية
العادية. ترى العمليات الفرعية التي يشغلها Codex، مثل openclaw
وgh وgit وأدوات CLI السحابية وأوامر الصدفة،
الدليل الرئيسي العادي للعملية ويمكنها العثور على الإعدادات والرموز المميزة
في الدليل الرئيسي للمستخدم. قد يكتشف Codex أيضًا $HOME/.agents/skills
و$HOME/.agents/plugins/marketplace.json؛ وتتم مشاركة اكتشاف .agents هذا عمدًا مع
الدليل الرئيسي للمشغّل، وهو منفصل عن حالة ~/.codex المعزولة.
في نطاق الوكيل الافتراضي، تظل Plugins الخاصة بـ OpenClaw ولقطات Skills في
OpenClaw تتدفق عبر سجل Plugins ومحمّل Skills الخاصين بـ OpenClaw؛ أما أصول
Codex الشخصية في ~/.codex فلا تتدفق. إذا كانت لديك Skills أو
Plugins مفيدة لـ Codex CLI من دليل Codex رئيسي وينبغي أن تصبح جزءًا من وكيل
OpenClaw معزول، فاحصرها صراحةً:
openclaw migrate codex --dry-runopenclaw migrate apply codex --yesإذا كان النشر يحتاج إلى عزل إضافي للبيئة، فأضف تلك المتغيرات إلى
appServer.clearEnv:
{ plugins: { entries: { codex: { enabled: true, config: { appServer: { clearEnv: ["CODEX_API_KEY", "OPENAI_API_KEY"], }, }, }, }, },}لا يؤثر appServer.clearEnv إلا في عملية خادم تطبيق Codex الابنة التي تم
تشغيلها. يزيل OpenClaw CODEX_HOME وHOME من هذه القائمة
أثناء تسوية التشغيل المحلي: يظل CODEX_HOME موجّهًا إلى نطاق الوكيل
أو المستخدم المحدد، ويظل HOME موروثًا كي تتمكن العمليات
الفرعية من استخدام حالة الدليل الرئيسي العادية للمستخدم.
الأدوات الديناميكية
تستخدم أدوات Codex الديناميكية تحميل searchable افتراضيًا، وتُعرض
ضمن نطاق الأسماء openclaw باستخدام deferLoading: true. لا يعرض
OpenClaw عادةً الأدوات الديناميكية التي تكرر عمليات مساحة العمل الأصلية في
Codex أو سطح البحث عن الأدوات الخاص بـ Codex:
readwriteeditapply_patchexecprocessupdate_plantool_calltool_describetool_searchtool_search_code
عندما تعطل قائمة سماح محدودة لوقت التشغيل وضع Code Mode الأصلي، يرسل OpenClaw
تحديدًا فارغًا لبيئة التنفيذ. في تلك الحالة المباشرة غير الخاضعة لوضع
الحماية، يحتفظ OpenClaw بأداتَي exec وprocess
المرشحتين وفق سياسته باعتبارهما الإجراء الاحتياطي للصدفة. تظل قوائم السماح
لوقت التشغيل وcodexDynamicToolsExclude سارية.
تتوفر معظم أدوات تكامل OpenClaw المتبقية، مثل المراسلة والوسائط وCron
والمتصفح والعُقد وGateway وheartbeat_respond وweb_search،
من خلال بحث Codex عن الأدوات ضمن مساحة الاسم تلك. وهذا يُبقي سياق النموذج
الأولي أصغر. تظل مجموعة صغيرة من الأدوات قابلة للاستدعاء مباشرةً بصرف النظر عن
codexDynamicToolsLoading، لأن بحث Codex عن الأدوات قد لا يكون متاحًا أو قد
يقتصر على نطاق يضم الموصلات فقط: agents_list وsessions_spawn
وsessions_yield. وتظل تعليمات المطوّر توجّه الوكلاء الفرعيين العاديين في Codex
نحو spawn_agent الأصلي لأعمال الوكلاء الفرعيين الأصلية في Codex، بينما
يظل sessions_spawn متاحًا للتفويض الصريح عبر OpenClaw أو ACP.
وتظل أيضًا ردود المصدر التي تستخدم أداة الرسائل فقط مباشرةً، لأن ذلك يمثل
عقدًا للتحكم في الدور.
تُجمع الأدوات المعلَّمة بـ catalogMode: "direct-only"، بما فيها أداة OpenClaw
computer، ضمن openclaw_direct. يضيف OpenClaw مساحة الاسم تلك إلى
قائمة code_mode.direct_only_tool_namespaces في Codex دون استبدال
الإدخالات التي يوفّرها المشغّل. ولذلك يعرض Codex تلك الأدوات باعتبارها
DirectModelOnly في سلاسل المحادثات العادية والمقتصرة على وضع الشيفرة بدلًا من توجيهها
عبر استدعاءات Code Mode tools.* المتداخلة. هذا الحد الفاصل مطلوب
للنتائج التي تحتوي على صور: إذ يحوّل التسلسل المتداخل في Code Mode مخرجات الصور إلى
نص، ما يؤدي إلى فقدان لقطة الشاشة اللازمة لإجراء الحاسوب التالي.
عيّن codexDynamicToolsLoading: "direct" فقط عند الاتصال بخادم تطبيقات
Codex مخصّص لا يستطيع البحث عن الأدوات الديناميكية المؤجلة أو عند تصحيح
حمولة الأدوات الكاملة.
المُهَل الزمنية
تُحدَّد مدة استدعاءات الأدوات الديناميكية المملوكة لـ OpenClaw بصورة مستقلة عن
appServer.requestTimeoutMs. يستخدم كل طلب item/tool/call في Codex
أول مهلة متاحة بالترتيب التالي:
- وسيطة
timeoutMsموجبة لكل استدعاء. - بالنسبة إلى
image_generate، agents.defaults.imageGenerationModel.timeoutMs. - بالنسبة إلى
image_generateمن دون مهلة مضبوطة، القيمة الافتراضية لتوليد الصور وهي 120 ثانية. - بالنسبة إلى أداة فهم الوسائط
image، تُحوَّلtools.media.image.timeoutSecondsإلى ميلي ثانية، أو تُستخدم القيمة الافتراضية للوسائط وهي 60 ثانية. وبالنسبة إلى فهم الصور، ينطبق ذلك على الطلب نفسه ولا يُخفَّض بسبب أعمال التحضير السابقة. - بالنسبة إلى أداة
message، قيمة افتراضية ثابتة قدرها 120 ثانية. - القيمة الافتراضية للأداة الديناميكية وهي 90 ثانية.
تُعدّ آلية المراقبة هذه ميزانية item/tool/call الديناميكية الخارجية. تعمل المُهَل الخاصة
بطلبات مزوّد بعينه داخل ذلك الاستدعاء، وتحتفظ بدلالات المُهَل الخاصة بها.
تُحدَّد ميزانيات الأدوات الديناميكية بحد أقصى قدره 600000 ms. عند انقضاء المهلة، يُجهض OpenClaw
إشارة الأداة حيثما كان ذلك مدعومًا، ويُعيد إلى Codex استجابة فاشلة من الأداة الديناميكية
حتى يمكن للدور أن يستمر بدلًا من ترك الجلسة في
processing.
بعد أن يقبل Codex دورًا، وبعد أن يستجيب OpenClaw لطلب خادم تطبيقات
محدود بنطاق الدور، يتوقع إطار التشغيل من Codex إحراز تقدم في الدور الحالي
وإنهاء الدور الأصلي في النهاية باستخدام turn/completed. إذا ظل
خادم التطبيقات صامتًا طوال appServer.turnCompletionIdleTimeoutMs، يحاول OpenClaw
مقاطعة دور Codex بأفضل جهد ممكن، ويسجّل تشخيصًا لانقضاء المهلة،
ويحرّر مسار جلسة OpenClaw حتى لا توضع رسائل الدردشة اللاحقة في قائمة انتظار
خلف دور أصلي متقادم.
تلغي معظم الإشعارات غير النهائية للدور نفسه تسليح آلية المراقبة القصيرة
لأن Codex أثبت أن الدور لا يزال نشطًا. تستخدم عمليات تسليم الأدوات
ميزانية خمول أطول بعد الأداة: بعد أن يعيد OpenClaw استجابة item/tool/call،
وبعد اكتمال عناصر الأدوات الأصلية مثل commandExecution، وبعد اكتمالات
custom_tool_call_output الأولية، وبعد تقدم المساعد الأولي عقب الأداة،
أو اكتمالات الاستدلال الأولية، أو تقدم الاستدلال. يستخدم الحارس
appServer.postToolRawAssistantCompletionIdleTimeoutMs عند ضبطه،
وتكون قيمته الافتراضية خمس دقائق بخلاف ذلك. كما تمدد ميزانية ما بعد الأداة نفسها
آلية مراقبة التقدم خلال نافذة التوليف الصامتة قبل أن يصدر Codex
حدث الدور الحالي التالي. قد تتبع اكتمالات الاستدلال واكتمالات
agentMessage في التعليقات وتقدم الاستدلال أو المساعد الأولي قبل الأداة
إجابة نهائية تلقائية، لذا تستخدم حارس الرد بعد التقدم
بدلًا من تحرير مسار الجلسة فورًا. لا تُسلّح تحرير مخرجات المساعد إلا عناصر
agentMessage النهائية/المكتملة غير التعليقية واكتمالات المساعد الأولية قبل الأداة:
فإذا ظل Codex صامتًا بعد ذلك من دون turn/completed،
يحاول OpenClaw مقاطعة الدور الأصلي بأفضل جهد ممكن ويحرّر مسار
الجلسة. تُعاد محاولة حالات فشل خادم التطبيقات عبر stdio الآمنة لإعادة التشغيل،
بما فيها مُهَل خمول اكتمال الدور التي لا تتضمن دليلًا على وجود مساعد أو أداة
أو عنصر نشط أو أثر جانبي، مرة واحدة في محاولة جديدة لخادم التطبيقات.
أما المُهَل غير الآمنة فتؤدي مع ذلك إلى إنهاء عميل خادم التطبيقات العالق
وتحرير مسار جلسة OpenClaw. كما تمحو ارتباط سلسلة المحادثة الأصلية المتقادم
بدلًا من إعادة تشغيلها تلقائيًا. تعرض مُهَل مراقبة الاكتمال نصًا خاصًا بـ Codex:
فتشير الحالات الآمنة لإعادة التشغيل إلى أن الاستجابة قد تكون غير مكتملة،
بينما تطلب الحالات غير الآمنة من المستخدم التحقق من الحالة الحالية قبل إعادة المحاولة.
تتضمن تشخيصات المُهَل العامة حقولًا بنيوية مثل آخر طريقة إشعار من خادم التطبيقات،
ومعرّف/نوع/دور عنصر استجابة المساعد الأولي، وأعداد الطلبات/العناصر النشطة،
وحالة المراقبة المُسلَّحة. وعندما يكون آخر إشعار عنصر استجابة أولية من المساعد،
فإنها تتضمن أيضًا معاينة محدودة لنص المساعد. ولا تتضمن
محتوى المطالبة أو الأداة الأولي.
اكتشاف النماذج
افتراضيًا، يطلب Plugin الخاص بـ Codex من خادم التطبيقات النماذج المتاحة. تعود
ملكية إتاحة النماذج إلى خادم تطبيقات Codex، لذا قد تتغير القائمة عندما
يرقّي OpenClaw إصدار @openai/codex المضمّن أو عندما يشير نشرٌ ما
بواسطة appServer.command إلى ملف Codex تنفيذي مختلف. وقد تكون الإتاحة أيضًا
محددة بنطاق الحساب. استخدم /codex models على Gateway قيد التشغيل للاطلاع على
الفهرس المباشر لإطار التشغيل والحساب المعنيين.
إذا فشل الاكتشاف أو انتهت مهلته، يستخدم OpenClaw فهرسًا احتياطيًا مضمّنًا:
| معرّف النموذج | اسم العرض | مستويات جهد الاستدلال |
|---|---|---|
gpt-5.5 |
gpt-5.5 | منخفض، متوسط، مرتفع، مرتفع جدًا |
gpt-5.4-mini |
GPT-5.4-Mini | منخفض، متوسط، مرتفع، مرتفع جدًا |
اضبط الاكتشاف ضمن plugins.entries.codex.config.discovery:
{ plugins: { entries: { codex: { enabled: true, config: { discovery: { enabled: true, timeoutMs: 2500, }, }, }, }, },}عطّل الاكتشاف عندما تريد أن يتجنب بدء التشغيل فحص Codex وأن يستخدم فقط الفهرس الاحتياطي:
{ plugins: { entries: { codex: { enabled: true, config: { discovery: { enabled: false, }, }, }, }, },}ملفات تمهيد مساحة العمل
يتعامل Codex مع AGENTS.md بنفسه من خلال الاكتشاف الأصلي لوثائق المشروع.
لا يكتب OpenClaw ملفات اصطناعية لوثائق مشروع Codex ولا يعتمد على أسماء الملفات
الاحتياطية في Codex لملفات الشخصية، لأن بدائل Codex لا تُطبَّق إلا عند غياب
AGENTS.md.
لتحقيق التكافؤ مع مساحة عمل OpenClaw، يمرّر إطار تشغيل Codex ملفات التمهيد الأخرى باعتبارها تعليمات للمطوّر، ولكن ليس بالطريقة نفسها:
- يُمرَّر
TOOLS.mdباعتباره تعليمات مطوّر موروثة في Codex، بحيث يراه أيضًا الوكلاء الفرعيون الأصليون في Codex الذين يُنشؤون أثناء الدور. - تُمرَّر
SOUL.mdوIDENTITY.mdوUSER.mdباعتبارها تعليمات تعاون محدودة بنطاق الدور. لا يرثها الوكلاء الفرعيون الأصليون في Codex، ما يمنع أدوار الوكلاء الفرعيين من التقاط شخصية الوكيل الأصل وملف المستخدم الشخصي. - تُمرَّر أيضًا قائمة Skills المحمّلة والموجزة في OpenClaw باعتبارها تعليمات مطوّر للتعاون محدودة بنطاق الدور، ولذلك لا يرثها الوكلاء الفرعيون الأصليون في Codex أيضًا.
- لا يُحقن محتوى
HEARTBEAT.md؛ بل تحصل أدوار Heartbeat على مؤشر في وضع التعاون لقراءة الملف عندما يكون موجودًا وغير فارغ. - لا يُلصق محتوى
MEMORY.mdمن مساحة عمل الوكيل المضبوطة في إدخال الدور الأصلي في Codex عندما تكون أدوات الذاكرة متاحة لمساحة العمل تلك؛ وعندما يكون موجودًا، يضيف إطار التشغيل مؤشرًا صغيرًا لذاكرة مساحة العمل إلى تعليمات مطوّر التعاون محدودة نطاق الدور، وينبغي لـ Codex استخدامmemory_searchأوmemory_getعندما تكون الذاكرة الدائمة ذات صلة. وإذا كانت الأدوات معطلة، أو كان البحث في الذاكرة غير متاح، أو اختلفت مساحة العمل النشطة عن مساحة عمل ذاكرة الوكيل، يستخدمMEMORY.mdمسار سياق الدور المحدود المعتاد بدلًا من ذلك. - يُمرَّر
BOOTSTRAP.md، عند وجوده، باعتباره سياقًا مرجعيًا لإدخال دور OpenClaw.
تجاوزات البيئة
تظل تجاوزات البيئة متاحة للاختبار المحلي:
OPENCLAW_CODEX_APP_SERVER_BINOPENCLAW_CODEX_APP_SERVER_ARGSOPENCLAW_CODEX_APP_SERVER_MODE=yolo|guardianOPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICYOPENCLAW_CODEX_APP_SERVER_SANDBOX
يتجاوز OPENCLAW_CODEX_APP_SERVER_BIN الملف التنفيذي المُدار عندما
لا تكون appServer.command معيّنة.
أُزيل OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1. استخدم
plugins.entries.codex.config.appServer.mode: "guardian" بدلًا منه، أو
OPENCLAW_CODEX_APP_SERVER_MODE=guardian للاختبار المحلي لمرة واحدة. يُفضَّل
الإعداد لعمليات النشر القابلة للتكرار لأنه يُبقي سلوك Plugin في
الملف نفسه الخاضع للمراجعة مع بقية إعداد إطار تشغيل Codex.