Skip to main content

openclaw policy

يوفّر Plugin السياسة المضمّن الأمر openclaw policy. وهو طبقة امتثال مؤسسية تعمل فوق إعدادات OpenClaw الحالية، وليس نظام تهيئة ثانٍ. تكتب المتطلبات في policy.jsonc؛ ويراقب OpenClaw مساحة العمل النشطة بوصفها أدلة؛ وتُبلغ السياسة عن الانحراف عبر doctor --lint. لا تفرض السياسة استدعاءات الأدوات ولا تعيد كتابة سلوك وقت التشغيل عند معالجة الطلب، كما أنها لا تصادق على مخازن بيانات الاعتماد الخاصة بكل وكيل مثل auth-profiles.json. تتحقق السياسة من القنوات المهيأة، وخوادم MCP، وموفّري النماذج، ووضع حماية الشبكة من SSRF، والوصول الوارد/الوصول إلى القنوات، وتعرّض Gateway ووضع أوامر Node، ووصول الوكلاء إلى مساحة العمل، ووضع العزل، ووضع معالجة البيانات، ووضع موفّري الأسرار/ملفات تعريف المصادقة، والبيانات الوصفية للأدوات الخاضعة للحوكمة (TOOLS.md). استخدمها عندما تحتاج مساحة العمل إلى بيان دائم وقابل للتحقق، مثل «يجب ألّا يكون Telegram مفعّلًا» أو «يجب أن تصرّح الأدوات الخاضعة للحوكمة ببيانات وصفية للمخاطر والمالك». إذا كنت تحتاج فقط إلى سلوك محلي دون مصادقة أو اكتشاف للانحراف، فتكفي التهيئة العادية.

البدء السريع

يظل Plugin مفعّلًا حتى عند غياب policy.jsonc، لكي يتمكن أمر doctor من الإبلاغ عن العنصر المفقود بدلًا من تخطي عمليات التحقق بصمت. أنشئ policy.jsonc يدويًا؛ فهو لا يُولّد من الإعدادات الحالية. يمثّل كل قسم من المستوى الأعلى نطاق أسماء للقواعد: لا يعمل التحقق إلا عند وجود قاعدة محددة تحته (تفشل الأقسام أو المفاتيح غير المدعومة بالرمز policy/policy-jsonc-invalid بدلًا من تجاهلها بصمت). فيما يلي مثال أدنى يغطي كل قسم مدعوم:
ملاحظات شاملة لا تتضح من جداول القواعد أدناه:
  • يعني حذف gateway.bind مع منع عمليات الربط بغير local loopback أنك تقبل القيمة الافتراضية لوقت التشغيل؛ اضبط gateway.bind: "loopback" لتحقيق امتثال صارم.
  • بالنسبة إلى وكيل للقراءة فقط، اضبط mode للعزل على all أو non-main في الإعدادات الافتراضية/الوكيل المعني، واضبط workspaceAccess على none أو ro. لا يحقق وضع العزل المفقود أو المضبوط على off سياسة القراءة فقط.
  • يقبل agents.workspace.denyTools القيم exec وprocess وwrite وedit وapply_patch. وتحقق مجموعتا منع الأدوات في التهيئة group:fs (تعديل الملفات) وgroup:runtime (الصدفة/العمليات) الوضع المكافئ.
  • لا تقرأ عمليات التحقق من موافقات التنفيذ العنصر الفعلي exec-approvals.json إلا عند وجود قاعدة execApprovals؛ ويُعد العنصر المفقود أو غير الصالح دليلًا غير قابل للرصد، وليس اجتيازًا مصطنعًا.
  • لا تسجل أدلة الأسرار وملفات تعريف المصادقة سوى وضع الموفّر/المصدر والبيانات الوصفية لـ SecretRef، ولا تسجل القيم الخام أبدًا. لا تقرأ السياسة مخازن بيانات الاعتماد الخاصة بكل وكيل مثل auth-profiles.json ولا تصادق عليها.
  • تقتصر أدلة معالجة البيانات على الوضع في مستوى التهيئة (وضع التنقيح، ومفتاح تبديل التقاط بيانات القياس عن بُعد، ووضع صيانة الجلسات، وإعداد فهرسة النصوص المنسوخة). وهي لا تفحص السجلات أو صادرات بيانات القياس عن بُعد أو النصوص المنسوخة أو ملفات الذاكرة، ولا تثبت النتيجة السليمة عدم وجود بيانات شخصية أو أسرار فيها.

مرجع قواعد السياسة

كل قاعدة أدناه اختيارية؛ ولا يعمل التحقق إلا عند وجود القاعدة. الحالة المرصودة هي تهيئة OpenClaw الحالية أو البيانات الوصفية لمساحة العمل.

التراكبات محددة النطاق

استخدم scopes.<scopeName> عندما تحتاج وكلاء أو قنوات محددة إلى سياسة أكثر صرامة من خط الأساس في المستوى الأعلى. اسم النطاق مجرد تسمية؛ وتستخدم المطابقة المحدد الموجود داخل النطاق. التراكبات تراكمية: تظل القاعدة العامة قيد التشغيل، ويمكن للقاعدة محددة النطاق إضافة نتيجة خاصة بها استنادًا إلى الأدلة نفسها. إذا لم يكن أحد إدخالات agentIds موجودًا في agents.list[]، فسيقيّم OpenClaw القاعدة محددة النطاق وفق الوضع العام/الافتراضي الموروث لمعرّف وكيل وقت التشغيل ذاك بدلًا من تخطيها.
يمكن أن يظهر الوكيل نفسه في نطاقات متعددة إذا كان كل نطاق يحكم حقلًا مختلفًا، كما في المثال أعلاه. يجب أن يكون الحقل محدد النطاق المتكرر للوكيل نفسه مساويًا في التقييد أو أشد تقييدًا؛ ويُرفض الادعاء المكرر الأضعف (تكون قوائم السماح مجموعات جزئية، وقوائم المنع مجموعات شاملة، وتكون القيم المنطقية المطلوبة ثابتة). لا تُفحص قواعد وضع الحاويات (sandbox.containers.*) إلا وفق الأدلة التي تستطيع الواجهة الخلفية لعزل الوكيل المطابق عرضها. إذا تعذر على واجهة خلفية رصد قاعدة فعّلتها لها، فستبلغ السياسة عن policy/sandbox-container-posture-unobservable بدلًا من اعتبارها ناجحة؛ حدّد نطاق قواعد الحاويات لمجموعات الوكلاء التي تستخدم واجهة خلفية قادرة على عرضها. يظل ingress.session.requireDmScope في المستوى الأعلى عامًا؛ فـsession.dmScope ليس دليلًا يمكن نسبه إلى قناة، ولذلك لا يمكن تحديد نطاقه باستخدام channelIds. يجب أن يكون كل نطاق موجود في policy.jsonc صالحًا وقابلًا للإنفاذ.

القنوات

خوادم MCP

موفّرو النماذج

الشبكة

الوصول الوارد والوصول إلى القنوات

Gateway

gateway.nodes.denyCommands قاعدة مجموعة منع شاملة دقيقة وحساسة لحالة الأحرف. استخدمها عندما يجب أن تثبت السياسة أن أوامر Node ذات الامتيازات ممنوعة صراحةً بواسطة إعداد OpenClaw. يجب على عملية النشر التي تسمح عمدًا بأمر Node ذي امتيازات تحديث policy.jsonc بعد المراجعة بدلًا من الاعتماد على gateway.nodes.allowCommands وحده.

مساحة عمل الوكيل

وضع صندوق العزل

تعامل السياسة غياب sandbox.mode باعتباره القيمة الافتراضية الضمنية off، ولذلك يُبلغ sandbox.requireMode عن صندوق عزل جديد أو غير مُهيأ بوصفه خارج قائمة سماح مثل ["all"].

معالجة البيانات

الأسرار

موافقات التنفيذ

تقرأ فحوصات موافقات التنفيذ ملف وقت التشغيل exec-approvals.json: ~/.openclaw/exec-approvals.json افتراضيًا، أو $OPENCLAW_STATE_DIR/exec-approvals.json عند ضبط OPENCLAW_STATE_DIR. تتطلب قواعد الوضع ضمن execApprovals.defaults.* أو execApprovals.agents.* دليلًا من ملف قابل للقراءة؛ ويُبلّغ عن الملف المفقود أو غير الصالح بوصفه دليلًا غير قابل للرصد بدلًا من اعتباره اجتيازًا بأفضل جهد. بعد أن يصبح قابلًا للقراءة، ترث الحقول المحذوفة قيم وقت التشغيل الافتراضية: تكون قيمة defaults.security المفقودة هي full، ويرث أمان الوكيل المفقود تلك القيمة الافتراضية. يشمل الدليل defaults وagents.* وagents.*.allowlist[].pattern وargPattern الاختياري ووضع autoAllowSkills الفعّال ومصدر الإدخال — ولا يشمل مطلقًا مسار المقبس/الرمز المميز أو commandText أو lastUsedCommand أو المسارات المحلولة أو الطوابع الزمنية. مثال: اشتراط ملف الموافقات، ومنع القيم الافتراضية المتساهلة، والسماح فقط بوضع موافقات التنفيذ المُراجَع للوكلاء المحددين.

ملفات تعريف المصادقة

البيانات الوصفية للأدوات

وضع الأدوات

تشغيل الفحوصات

شغّل فحوصات السياسة فقط أثناء التأليف:
يشغّل policy check مجموعة فحوصات السياسة فقط ويصدر الأدلة والنتائج وتجزئات التصديق. تظهر النتائج نفسها أيضًا في openclaw doctor --lint عند تمكين Plugin السياسة. قارن ملف سياسة المشغّل بخط أساس مؤلَّف:
يتحقق policy compare من صياغة ملف السياسة مقابل صياغة ملف السياسة؛ وهو لا يفحص حالة وقت التشغيل أو الأدلة أو بيانات الاعتماد أو الأسرار. ويستخدم البيانات الوصفية نفسها للقواعد التي تحكم التراكبات محددة النطاق: يجب أن تبقى قوائم السماح مساوية أو أضيق، وأن تبقى قوائم المنع مساوية أو أوسع، وأن تحتفظ القيم المنطقية المطلوبة بقيمتها، ولا يجوز للسلاسل المرتبة الانتقال إلا نحو الطرف الأكثر صرامة من الترتيب المضبوط، ويجب أن تتطابق القوائم الدقيقة. يمكن أن يكون خط الأساس سياسة مؤلَّفة من المؤسسة؛ ويجوز للسياسة التي يجري فحصها إضافة قيم أكثر صرامة أو قواعد إضافية. يمكن لقاعدة مفحوصة من المستوى الأعلى استيفاء قاعدة خط أساس محددة النطاق عندما تكون مساوية أو أكثر تقييدًا. لا يلزم تطابق أسماء النطاقات بين الملفات؛ إذ تعتمد المقارنة على المحدد (agentIds/channelIds) والحقل. مقارنة سليمة (--json):
يتضمن ناتج policy check --json السليم تجزئات مستقرة يمكن للمشغّل أو المشرف تسجيلها:

ضبط السياسة

يوجد إعداد السياسة ضمن plugins.entries.policy.config.
اضبط plugins.entries.policy.config.enabled على false لتعطيل فحوصات السياسة لمساحة عمل مع إبقاء Plugin مثبتًا.

قبول حالة السياسة

مثال على ناتج JSON:
تحدّد attestation.policy.hash أثر القاعدة المؤلَّف. وتسجّل evidence حالة OpenClaw المرصودة التي استخدمتها الفحوصات، وتحدّد workspace.hash حمولة الأدلة تلك. وتحدّد findingsHash مجموعة النتائج الدقيقة. ويسجّل checkedAt وقت تشغيل الفحص. وتحدّد attestationHash الادعاء المستقر (تجزئة السياسة وتجزئة الأدلة وتجزئة النتائج وحالة السلامة أو وجود مشكلات)، وتستبعد checkedAt عمدًا، بحيث تنتج حالة السياسة نفسها دائمًا تجزئة التصديق نفسها. وتشكّل هذه القيم الأربع معًا رباعية التدقيق لفحص سياسة واحد. إذا كان Gateway أو المشرف يستخدم السياسة لحظر إجراء في وقت التشغيل أو الموافقة عليه أو إضافة تعليق توضيحي إليه، فينبغي له تسجيل تجزئة التصديق من آخر فحص سليم. تبقى checkedAt في ناتج JSON لسجلات التدقيق، لكنها ليست جزءًا من التجزئة المستقرة. دورة حياة قبول حالة السياسة:
  1. ألّف policy.jsonc أو راجعه.
  2. شغّل openclaw policy check --json.
  3. إذا كان سليمًا، فسجّل attestation.policy.hash بوصفه expectedHash.
  4. سجّل attestation.attestationHash بوصفه expectedAttestationHash.
  5. أعد تشغيل openclaw doctor --lint في CI أو بوابات الإصدار.
إذا تغيرت قواعد السياسة عمدًا، فحدّث التجزئتين المقبولتين استنادًا إلى فحص نظيف. إذا تغيرت إعدادات مساحة العمل فقط (وظلت السياسة كما هي)، فعادةً ما تتغير expectedAttestationHash فقط. يؤدي تمكين قواعد agents.workspace أو ترقيتها إلى إضافة دليل agentWorkspace إلى تجزئة مساحة العمل وتجزئة الإقرار؛ راجع الدليل الجديد وحدّث تجزئات الإقرار المقبولة بعد التمكين. ويؤدي تمكين قواعد وضع الأدوات أو ترقيتها إلى إضافة دليل toolPosture بالطريقة نفسها. يعيد openclaw policy watch تشغيل الفحص ويُبلغ عندما لا تعود الأدلة الحالية مطابقة لـ expectedAttestationHash:
استخدم --once في CI أو البرامج النصية التي تحتاج إلى تقييم واحد للانحراف. من دون --once، يجري الاستقصاء كل ثانيتين افتراضيًا؛ استخدم --interval-ms لتغيير الفاصل الزمني.

النتائج

يمكن أن تتضمن النتيجة كلًا من target (عنصر مساحة العمل المرصود الذي لا يمتثل) وrequirement (القاعدة المؤلفة التي جعلته نتيجة). كلاهما حاليًا سلسلتا عنوان oc://، لكن اسمي الحقلين يصفان الدور في السياسة بدلًا من تنسيق العنوان. أمثلة على النتائج:

الإصلاح

الخياران doctor --lint وpolicy check مخصّصان للقراءة فقط. لا يعدّل doctor --fix إعدادات مساحة العمل المُدارة بالسياسة إلا عند تمكين workspaceRepairs صراحةً؛ وإلا فستُبلغ عمليات التحقق عمّا كانت ستُصلحه وتترك الإعدادات دون تغيير. في هذا الإصدار، يمكن للإصلاح تعطيل القنوات المحظورة بواسطة channels.denyRules وتطبيق إصلاحات التضييق التلقائية المدرجة أدناه. لا تُمكّن workspaceRepairs إلا بعد مراجعة ملف السياسة، لأن القاعدة الصالحة قد تغيّر إعدادات مساحة العمل:
  • اضبط tools.elevated.enabled=false عندما تحظر سياسة عامة الأدوات ذات الصلاحيات المرتفعة
  • أضف معرّفات الأدوات المفقودة والمطلوب حظرها إلى tools.deny أو agents.list[].tools.deny عندما تتطلب السياسة حظر تلك الأدوات
  • اضبط مفاتيح التبديل غير الآمنة في gateway.controlUi.* على false
  • اضبط gateway.mode=local عندما تحظر السياسة وضع Gateway البعيد
  • اضبط مسارات gateway.http.endpoints.*.enabled المُبلّغ عنها على false عندما تحظر السياسة نقاط نهاية واجهة HTTP البرمجية لـ Gateway
  • اضبط مسارات groupPolicy المُبلّغ عنها لاستقبال القناة على allowlist عندما تحظر السياسة استقبال المجموعات المفتوح
  • اضبط مسارات requireMention المُبلّغ عنها لاستقبال القناة على true عندما تتطلب السياسة الإشارات في المجموعات
  • اضبط logging.redactSensitive=tools عندما تتطلب السياسة حجب البيانات الحساسة في السجلات
  • اضبط diagnostics.otel.captureContent=false، أو diagnostics.otel.captureContent.enabled=false لإعدادات التقاط بيانات القياس عن بُعد ذات صيغة الكائن، عندما تحظر السياسة التقاط محتوى بيانات القياس عن بُعد
تقتصر إصلاحات الأدوات ذات الصلاحيات المرتفعة المحددة النطاق على الاكتشاف فقط. كما تُتخطى إصلاحات معالجة البيانات المحددة النطاق عندما تُبلغ النتيجة عن إعدادات مشتركة للسجلات أو بيانات القياس عن بُعد، لأن تغيير الإعداد المشترك سيؤثر في نطاق أوسع من هدف السياسة المحدد النطاق. تُتخطى إصلاحات الحظر المطلوب المحددة النطاق عندما تُبلغ النتيجة عن tools.deny الجذرية الموروثة، لأن إضافة الأداة المطلوبة إلى إعدادات الجذر ستؤثر في نطاق أوسع من هدف السياسة المحدد النطاق. يمكن لإصلاحات الحظر المطلوب المحلية للوكيل تحديث مسار agents.list[].tools.deny المُبلّغ عنه. تُتخطى إصلاحات استقبال القناة المحددة النطاق عندما تُبلغ النتيجة عن channels.defaults.* الموروثة، لأن تغيير الإعداد الافتراضي المشترك للقناة سيؤثر في نطاق أوسع من هدف السياسة المحدد النطاق. تظل نتائج قائمة السماح لجلب عناوين URL عبر HTTP في Gateway يدوية، لأن الإصلاح التلقائي لا يستطيع اختيار قيم قائمة السماح الصحيحة لعناوين URL لنقاط النهاية. تظل نتائج ربط Gateway وأوامر Node بحاجة إلى المراجعة. عندما يمكن تعيين policy/gateway-non-loopback-bind أو policy/gateway-node-command-denied إلى مسار إعدادات، يُبلغ doctor --fix عن تغيير gateway.bind أو gateway.nodes.denyCommands المقترح بوصفه إرشادًا لمعاينة تم تخطيها. ولا يطبّق التغيير، ولا تُحتسب النتيجة على أنها أُصلحت حتى يراجع المشغّل الإعدادات أو السياسة ويحدّثها.

رموز الخروج

ذو صلة