Codex harness

مرجع بيئة Codex للاختبار

يوضّح هذا المرجع الإعدادات التفصيلية لإضافة codex الرسمية. لإعداد النظام واتخاذ قرارات التوجيه، ابدأ بـ أداة Codex.

سطح إعدادات الإضافة

توجد جميع إعدادات أداة Codex ضمن plugins.entries.codex.config.

json5
{  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 والعُقد المقترنة التي اختير تضمينها. عطّل ذلك الدليل وحده باستخدام:

json5
{  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/codex0.144.3):

bash
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:

json5
{  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 إلا عند الحاجة إلى اسم محلي ثابت.

js
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:

json5
{  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.

json5
{  plugins: {    entries: {      codex: {        enabled: true,        config: {          appServer: {            experimental: {              sandboxExecServer: true,            },          },        },      },    },  },}

عندما تكون العلامة مفعّلة وتكون جلسة OpenClaw الحالية ضمن وضع الحماية، يبدأ OpenClaw خادم exec محليًا على واجهة الاسترجاع ومدعومًا بوضع الحماية النشط، ويسجله لدى خادم تطبيق Codex، ويبدأ سلسلة Codex والدور باستخدام تلك البيئة المملوكة لـ OpenClaw. إذا تعذر على خادم التطبيق تسجيل البيئة، يفشل التشغيل مغلقًا بدلًا من الرجوع بصمت إلى التنفيذ على المضيف.

مسار المعاينة هذا محلي فقط. لا يستطيع خادم تطبيق WebSocket بعيد الوصول إلى خادم exec على واجهة الاسترجاع ما لم يكن يعمل على المضيف نفسه، ولذلك يرفض OpenClaw هذه التركيبة.

عزل المصادقة والبيئة

في الدليل الرئيسي الافتراضي لكل وكيل، تُختار المصادقة بهذا الترتيب:

  1. ملف تعريف مصادقة OpenClaw Codex صريح للوكيل.
  2. حساب خادم التطبيق الحالي في دليل Codex الرئيسي لذلك الوكيل.
  3. لعمليات تشغيل خادم التطبيق المحلية عبر 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 معزول، فاحصرها صراحةً:

bash
openclaw migrate codex --dry-runopenclaw migrate apply codex --yes

إذا كان النشر يحتاج إلى عزل إضافي للبيئة، فأضف تلك المتغيرات إلى appServer.clearEnv:

json5
{  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:

  • read
  • write
  • edit
  • apply_patch
  • exec
  • process
  • update_plan
  • tool_call
  • tool_describe
  • tool_search
  • tool_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:

json5
{  plugins: {    entries: {      codex: {        enabled: true,        config: {          discovery: {            enabled: true,            timeoutMs: 2500,          },        },      },    },  },}

عطّل الاكتشاف عندما تريد أن يتجنب بدء التشغيل فحص Codex وأن يستخدم فقط الفهرس الاحتياطي:

json5
{  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_BIN
  • OPENCLAW_CODEX_APP_SERVER_ARGS
  • OPENCLAW_CODEX_APP_SERVER_MODE=yolo|guardian
  • OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY
  • OPENCLAW_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.

ذو صلة

Was this useful?
On this page

On this page