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