Tools
موافقات التنفيذ
موافقات تنفيذ الأوامر هي حاجز حماية تطبيق المرافق / مضيف العقدة للسماح
لوكيل داخل صندوق حماية بتشغيل أوامر على مضيف حقيقي (gateway أو node). وهي
قفل أمان: لا تُسمح الأوامر إلا عندما تتفق السياسة + قائمة السماح +
موافقة المستخدم (الاختيارية) كلها. تُطبَّق موافقات تنفيذ الأوامر فوق
سياسة الأدوات وبوابة الصلاحيات المرتفعة (ما لم تُضبط الصلاحيات المرتفعة على full، إذ
تتجاوز الموافقات).
للحصول على نظرة عامة مرتكزة على الأوضاع حول deny وallowlist وask وauto وfull،
وتخطيط Codex Guardian، وأذونات حاضنة ACPX، راجع
أوضاع الأذونات.
فحص السياسة الفعالة
| الأمر | ما يعرضه |
|---|---|
openclaw approvals get / --gateway / --node <id|name|ip> |
السياسة المطلوبة، ومصادر سياسة المضيف، والنتيجة الفعالة. |
openclaw exec-policy show |
العرض المدمج للجهاز المحلي. |
openclaw exec-policy set / preset |
مزامنة السياسة المحلية المطلوبة مع ملف موافقات المضيف المحلي في خطوة واحدة. |
عندما يطلب نطاق محلي host=node، يبلّغ exec-policy show عن ذلك
النطاق على أنه مُدار من العقدة وقت التشغيل بدلًا من الإيحاء بأن ملف
الموافقات المحلي هو مصدر الحقيقة.
إذا كانت واجهة مستخدم تطبيق المرافق غير متاحة، فإن أي طلب كان سيؤدي
عادةً إلى مطالبة يُحسم عبر بديل السؤال (الافتراضي: deny).
أين تُطبَّق
تُفرض موافقات تنفيذ الأوامر محليًا على مضيف التنفيذ:
- مضيف Gateway → عملية
openclawعلى جهاز Gateway. - مضيف العقدة → مشغّل العقدة (تطبيق مرافق macOS أو مضيف عقدة بلا واجهة).
نموذج الثقة
- يُعد المتصلون المصادق عليهم عبر Gateway مشغلين موثوقين لذلك Gateway.
- توسع العقد المقترنة قدرة المشغل الموثوق تلك إلى مضيف العقدة.
- تقلل موافقات تنفيذ الأوامر خطر التنفيذ العرضي، لكنها ليست حد مصادقة لكل مستخدم أو سياسة قراءة ملفات فقط.
- بعد الموافقة، يستطيع الأمر تعديل الملفات وفقًا لأذونات المضيف المحدد أو أذونات نظام ملفات صندوق الحماية.
- تربط عمليات مضيف العقدة الموافق عليها سياق التنفيذ القانوني: دليل العمل القانوني، وargv الدقيق، وربط البيئة عند وجوده، ومسار الملف التنفيذي المثبّت عند انطباق ذلك.
- بالنسبة إلى سكربتات shell واستدعاءات ملفات المفسرات/بيئات التشغيل المباشرة، يحاول OpenClaw أيضًا ربط مُعامل ملف محلي ملموس واحد. إذا تغيّر ذلك الملف المرتبط بعد الموافقة وقبل التنفيذ، تُرفض العملية بدلًا من تنفيذ محتوى انجرف.
- ربط الملفات مقصود أن يكون بأفضل جهد، وليس نموذجًا دلاليًا كاملًا لكل مسار تحميل لكل مفسر/بيئة تشغيل. إذا تعذر على وضع الموافقة تحديد ملف محلي ملموس واحد بالضبط لربطه، فإنه يرفض إصدار تشغيل مدعوم بالموافقة بدلًا من ادعاء تغطية كاملة.
فصل macOS
- يمرر خدمة مضيف العقدة
system.runإلى تطبيق macOS عبر IPC محلي. - يفرض تطبيق macOS الموافقات وينفذ الأمر في سياق واجهة المستخدم.
الإعدادات والتخزين
توجد الموافقات في ملف JSON محلي على مضيف التنفيذ. عند ضبط
OPENCLAW_STATE_DIR، يتبع الملف دليل الحالة ذلك؛
وإلا فإنه يستخدم دليل حالة OpenClaw الافتراضي:
$OPENCLAW_STATE_DIR/exec-approvals.json# otherwise~/.openclaw/exec-approvals.jsonيتبع مقبس الموافقة الافتراضي الجذر نفسه:
$OPENCLAW_STATE_DIR/exec-approvals.sock، أو
~/.openclaw/exec-approvals.sock عندما لا يكون المتغير مضبوطًا.
مثال مخطط:
{ "version": 1, "socket": { "path": "~/.openclaw/exec-approvals.sock", "token": "base64url-token" }, "defaults": { "security": "deny", "ask": "on-miss", "askFallback": "deny", "autoAllowSkills": false }, "agents": { "main": { "security": "allowlist", "ask": "on-miss", "askFallback": "deny", "autoAllowSkills": true, "allowlist": [ { "id": "B0C8C0B3-2C2D-4F8A-9A3C-5A4B3C2D1E0F", "pattern": "~/Projects/**/bin/rg", "source": "allow-always", "commandText": "rg -n TODO", "lastUsedAt": 1737150000000, "lastUsedCommand": "rg -n TODO", "lastResolvedPath": "/Users/user/Projects/.../bin/rg" } ] } }}عناصر التحكم في السياسة
tools.exec.mode
tools.exec.mode هو سطح السياسة المطبع المفضل لتنفيذ أوامر المضيف.
القيم هي:
deny- حظر تنفيذ أوامر المضيف.allowlist- تشغيل الأوامر الموجودة في قائمة السماح فقط من دون سؤال.ask- استخدام سياسة قائمة السماح والسؤال عند عدم التطابق.auto- استخدام سياسة قائمة السماح، وتشغيل التطابقات الحتمية مباشرة، وإرسال حالات عدم التطابق التي تحتاج موافقة عبر المراجع التلقائي الأصلي في OpenClaw قبل الرجوع إلى مسار موافقة بشري.full- تشغيل تنفيذ أوامر المضيف من دون مطالبات موافقة.
لا تزال tools.exec.security / tools.exec.ask القديمة مدعومة وتظل لها الأولوية
عند ضبطها في نطاق جلسة أو وكيل أضيق.
exec.security
security"deny" | "allowlist" | "full"deny- حظر جميع طلبات تنفيذ أوامر المضيف.allowlist- السماح بالأوامر الموجودة في قائمة السماح فقط.full- السماح بكل شيء (مكافئ للصلاحيات المرتفعة).
exec.ask
ask"off" | "on-miss" | "always"سياسة السؤال المضبوطة لتنفيذ أوامر المضيف. تتحكم في سلوك مطالبة الموافقة
الأساسي من tools.exec.ask والقيم الافتراضية لموافقات المضيف. لا يستطيع
وسيط الأداة ask لكل استدعاء (راجع أداة Exec)
إلا تشديد ذلك الأساس، وتتجاهله استدعاءات النموذج الناشئة من القنوات
عندما يكون سؤال المضيف الفعال off.
off- لا تطالب أبدًا.on-miss- المطالبة فقط عندما لا تطابق قائمة السماح.always- المطالبة عند كل أمر. الثقة الدائمةallow-alwaysلا تكبت المطالبات عندما يكون وضع السؤال الفعالalways.
askFallback
askFallback"deny" | "allowlist" | "full"الحسم عندما تكون المطالبة مطلوبة لكن لا توجد واجهة مستخدم يمكن الوصول إليها. إذا حُذف هذا
الحقل، يستخدم OpenClaw القيمة الافتراضية deny.
deny- الحظر.allowlist- السماح فقط إذا طابقت قائمة السماح.full- السماح.
tools.exec.strictInlineEval
strictInlineEvalbooleanعند true، يعامل OpenClaw صيغ تقييم الشيفرة المضمنة على أنها تتطلب الموافقة فقط
حتى إذا كان ملف المفسر التنفيذي نفسه موجودًا في قائمة السماح. هذا دفاع متعمق
لمحملات المفسرات التي لا تنطبق بوضوح على مُعامل ملف ثابت واحد.
أمثلة يلتقطها الوضع الصارم:
python -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -e
في الوضع الصارم، لا تزال هذه الأوامر تحتاج إلى موافقة صريحة، ولا
يُبقي allow-always إدخالات قائمة سماح جديدة لها تلقائيًا.
tools.exec.commandHighlighting
commandHighlightingbooleandefault: falseيتحكم في العرض فقط ضمن مطالبات الموافقة على تنفيذ الأوامر. عند تفعيله،
قد يرفق OpenClaw مقاطع أوامر مشتقة من المحلل حتى تتمكن مطالبات الموافقة عبر Web
من تمييز رموز الأوامر. اضبطه على true لتفعيل
تمييز نص الأمر.
لا يغير هذا الإعداد security أو ask أو مطابقة قائمة السماح أو
سلوك تقييم الشيفرة المضمنة الصارم أو تمرير الموافقات أو تنفيذ الأوامر.
يمكن ضبطه عموميًا تحت tools.exec.commandHighlighting أو لكل
وكيل تحت agents.list[].tools.exec.commandHighlighting.
وضع YOLO (بلا موافقة)
إذا أردت تشغيل تنفيذ أوامر المضيف من دون مطالبات موافقة، فيجب فتح
طبقتي السياسة معًا - سياسة تنفيذ الأوامر المطلوبة في إعدادات OpenClaw
(tools.exec.*) و سياسة الموافقات المحلية للمضيف في
ملف موافقات مضيف التنفيذ.
يضبط OpenClaw القيمة الافتراضية لـ askFallback المحذوفة على deny. اضبط
askFallback للمضيف على full صراحةً عندما ينبغي لمطالبة موافقة بلا واجهة مستخدم
أن ترجع إلى السماح.
| الطبقة | إعداد YOLO |
|---|---|
tools.exec.security |
full على gateway/node |
tools.exec.ask |
off |
askFallback للمضيف |
full |
يمكن للمزودين المدعومين بواجهة CLI الذين يعرضون وضع أذونات غير تفاعلي خاصًا بهم
اتباع هذه السياسة. تضيف Claude CLI
--permission-mode bypassPermissions عندما تكون سياسة تنفيذ الأوامر الفعالة في OpenClaw
هي YOLO. بالنسبة إلى جلسات Claude الحية المُدارة من OpenClaw، تكون
سياسة تنفيذ الأوامر الفعالة في OpenClaw هي المرجع على وضع أذونات Claude الأصلي:
يطبع YOLO عمليات الإطلاق الحية إلى --permission-mode bypassPermissions، وتطبع
سياسة تنفيذ الأوامر الفعالة المقيّدة عمليات الإطلاق الحية إلى
--permission-mode default، حتى إذا حددت وسائط Claude الخلفية الخام وضعًا آخر.
إذا أردت إعدادًا أكثر تحفظًا، شدد سياسة تنفيذ الأوامر في OpenClaw مجددًا إلى
allowlist / on-miss أو deny.
إعداد دائم "عدم المطالبة أبدًا" لمضيف Gateway
Set the requested config policy
openclaw config set tools.exec.host gatewayopenclaw config set tools.exec.security fullopenclaw config set tools.exec.ask offopenclaw gateway restartMatch the host approvals file
openclaw approvals set --stdin <<'EOF'{ version: 1, defaults: { security: "full", ask: "off", askFallback: "full" }}EOFاختصار محلي
openclaw exec-policy preset yoloيحدّث ذلك الاختصار المحلي كليهما:
tools.exec.host/security/askالمحلي.- القيم الافتراضية لملف الموافقات المحلي، بما في ذلك
askFallback: "full".
إنه محلي فقط عن قصد. لتغيير موافقات مضيف Gateway أو مضيف العقدة
عن بُعد، استخدم openclaw approvals set --gateway أو
openclaw approvals set --node <id|name|ip>.
مضيف العقدة
بالنسبة إلى مضيف العقدة، طبّق ملف الموافقات نفسه على تلك العقدة بدلًا من ذلك:
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'{ version: 1, defaults: { security: "full", ask: "off", askFallback: "full" }}EOFاختصار للجلسة فقط
- يغيّر
/exec security=full ask=offالجلسة الحالية فقط. - يُعدّ
/elevated fullاختصار طوارئ يتخطّى موافقات exec فقط عندما تُحلّ كل من السياسة المطلوبة وملف موافقات المضيف إلىsecurity: "full"وask: "off". أما ملف مضيف أشد صرامة، مثلask: "always"، فسيظل يعرض مطالبة.
إذا ظل ملف موافقات المضيف أشد صرامة من الإعداد، فستظل سياسة المضيف الأشد صرامة هي الفائزة.
قائمة السماح (لكل وكيل)
قوائم السماح لكل وكيل. إذا وُجد عدة وكلاء، فبدّل الوكيل الذي تحرّره في تطبيق macOS. الأنماط هي مطابقات glob.
يمكن أن تكون الأنماط مسارات ثنائية محلولة بصيغة glob أو أسماء أوامر مجردة بصيغة glob.
تطابق الأسماء المجردة الأوامر المستدعاة عبر PATH فقط، لذا يمكن أن يطابق rg
المسار /opt/homebrew/bin/rg عندما يكون الأمر هو rg، لكن ليس ./rg أو
/tmp/rg. استخدم glob لمسار عندما تريد الوثوق بموقع ثنائي محدد واحد.
تُرحّل إدخالات agents.default القديمة إلى agents.main عند التحميل.
ما تزال سلاسل shell مثل echo ok && pwd تحتاج إلى أن يفي كل مقطع علوي
بقواعد قائمة السماح.
أمثلة:
rg~/Projects/**/bin/peekaboo~/.local/bin/*/opt/homebrew/bin/rg
تقييد الوسائط باستخدام argPattern
أضف argPattern عندما يجب أن يطابق إدخال قائمة السماح ثنائياً وشكلاً
محدداً للوسائط. يقيّم OpenClaw التعبير النمطي
مقابل وسائط الأمر المحللة، مع استبعاد رمز الملف التنفيذي
(argv[0]). بالنسبة إلى الإدخالات المكتوبة يدوياً، تُدمج الوسائط باستخدام
مسافة واحدة، لذا ثبّت النمط عندما تحتاج إلى مطابقة دقيقة.
{ "version": 1, "agents": { "main": { "allowlist": [ { "pattern": "python3", "argPattern": "^safe\\.py$" } ] } }}يسمح ذلك الإدخال بـ python3 safe.py؛ أما python3 other.py فهو عدم
مطابقة لقائمة السماح. إذا كان هناك أيضاً إدخال يعتمد على المسار فقط للثنائي نفسه،
فيمكن للوسائط غير المطابقة أن تعود إلى ذلك الإدخال المعتمد على المسار فقط. احذف الإدخال
المعتمد على المسار فقط عندما يكون الهدف هو تقييد الثنائي بالوسائط المعلنة.
يمكن للإدخالات المحفوظة بواسطة تدفقات الموافقة استخدام تنسيق فاصل داخلي
لمطابقة argv بدقة. فضّل واجهة المستخدم أو تدفق الموافقة لإعادة توليد تلك
الإدخالات بدلاً من تحرير القيمة المشفرة يدوياً. إذا تعذر على OpenClaw
تحليل argv لمقطع أمر، فلن تطابق الإدخالات التي تحتوي على argPattern.
يدعم كل إدخال في قائمة السماح:
| الحقل | المعنى |
|---|---|
pattern |
glob لمسار ثنائي محلول أو glob لاسم أمر مجرد |
argPattern |
regex اختياري لـ argv؛ الإدخالات المحذوفة تكون معتمدة على المسار فقط |
id |
UUID ثابت مستخدم لهوية واجهة المستخدم |
source |
مصدر الإدخال، مثل allow-always |
commandText |
نص الأمر الملتقط عندما أنشأ تدفق موافقة الإدخال |
lastUsedAt |
الطابع الزمني لآخر استخدام |
lastUsedCommand |
آخر أمر طابق |
lastResolvedPath |
آخر مسار ثنائي محلول |
السماح التلقائي لواجهات CLI الخاصة بـ Skills
عند تفعيل السماح التلقائي لواجهات CLI الخاصة بـ Skills، تُعامل الملفات التنفيذية المشار إليها بواسطة
Skills المعروفة كأنها في قائمة السماح على العُقد (Node في macOS أو مضيف
Node بلا واجهة). يستخدم هذا skills.bins عبر Gateway RPC لجلب
قائمة ثنائيات Skills. عطّل هذا إذا كنت تريد قوائم سماح يدوية صارمة.
الثنائيات الآمنة وتمرير الموافقات
للاطلاع على الثنائيات الآمنة (المسار السريع المعتمد على stdin فقط)، وتفاصيل ربط المفسر، وكيفية تمرير مطالبات الموافقة إلى Slack/Discord/Telegram (أو تشغيلها كعملاء موافقة أصليين)، راجع الموافقات على Exec - متقدم.
التحرير في واجهة التحكم
استخدم بطاقة واجهة التحكم → العُقد → الموافقات على Exec لتحرير الافتراضيات، والتجاوزات لكل وكيل، وقوائم السماح. اختر نطاقاً (الافتراضيات أو وكيل)، وعدّل السياسة، وأضف/أزل أنماط قائمة السماح، ثم احفظ. تعرض واجهة المستخدم بيانات وصفية لآخر استخدام لكل نمط حتى تتمكن من إبقاء القائمة مرتبة.
يختار محدد الهدف Gateway (الموافقات المحلية) أو Node.
يجب أن تعلن العُقد عن system.execApprovals.get/set (تطبيق macOS أو
مضيف Node بلا واجهة). إذا لم تعلن عقدة عن موافقات exec بعد،
فحرّر ملف الموافقات المحلي الخاص بها مباشرة.
CLI: يدعم openclaw approvals تحرير Gateway أو Node - راجع
CLI للموافقات.
تدفق الموافقة
عندما تكون المطالبة مطلوبة، يبث Gateway
exec.approval.requested إلى عملاء المشغلين. تحلّه واجهة التحكم وتطبيق macOS
عبر exec.approval.resolve، ثم يمرر Gateway الطلب
الموافق عليه إلى مضيف Node.
بالنسبة إلى host=node، تتضمن طلبات الموافقة حمولة systemRunPlan
قياسية. يستخدم Gateway تلك الخطة باعتبارها سياق
command/cwd/session الرسمي عند تمرير طلبات system.run
الموافق عليها.
هذا مهم لزمن انتظار الموافقة غير المتزامنة:
- يجهّز مسار exec في Node خطة قياسية واحدة مقدماً.
- يخزن سجل الموافقة تلك الخطة وبيانات الربط الوصفية الخاصة بها.
- بعد الموافقة، تعيد استدعاءة
system.runالنهائية الممررة استخدام الخطة المخزنة بدلاً من الوثوق بتعديلات لاحقة من المستدعي. - إذا غيّر المستدعي
commandأوrawCommandأوcwdأوagentIdأوsessionKeyبعد إنشاء طلب الموافقة، يرفض Gateway التشغيل الممرر باعتباره عدم تطابق في الموافقة.
أحداث النظام
تظهر دورة حياة exec كرسائل نظام:
Exec running(فقط إذا تجاوز الأمر عتبة إشعار التشغيل).Exec finished.
تُنشر هذه إلى جلسة الوكيل بعد أن يبلّغ Node عن الحدث.
تُعد موافقات exec المرفوضة نهائية لأمر المضيف نفسه: لا يعمل الأمر.
بالنسبة إلى موافقات الوكيل الرئيسي غير المتزامنة ذات الجلسة الأصلية،
ينشر OpenClaw الرفض مرة أخرى داخل تلك الجلسة كمتابعة داخلية حتى يتمكن
الوكيل من التوقف عن انتظار الأمر غير المتزامن وتجنب إصلاح نتيجة مفقودة.
إذا لم تكن هناك جلسة أو تعذر استئناف الجلسة، فلا يزال بإمكان OpenClaw
الإبلاغ عن رفض موجز إلى المشغل أو مسار المحادثة المباشر. لا تُنشر الرفضات الخاصة
بجلسات الوكلاء الفرعيين مرة أخرى داخل الوكيل الفرعي.
تصدر موافقات exec المستضافة على Gateway أحداث دورة الحياة نفسها عندما
ينتهي الأمر (واختيارياً عندما يعمل لمدة أطول من العتبة).
تعيد أوامر exec المحكومة بالموافقة استخدام معرّف الموافقة بوصفه runId في هذه
الرسائل لتسهيل الربط.
سلوك الموافقة المرفوضة
عند رفض موافقة exec غير متزامنة، يتعامل OpenClaw مع أمر المضيف على أنه نهائي ومغلق عند الفشل. بالنسبة إلى جلسات الوكيل الرئيسي، يُسلّم الرفض كمتابعة جلسة داخلية تُخبر الوكيل بأن الأمر غير المتزامن لم يعمل. يحافظ ذلك على استمرارية النص دون كشف مخرجات أمر قديمة. إذا لم يكن تسليم الجلسة متاحاً، يعود OpenClaw إلى رفض موجز للمشغل أو للمحادثة المباشرة عندما يوجد مسار آمن.
الآثار
fullقوي؛ فضّل قوائم السماح عندما يكون ذلك ممكناً.askيبقيك ضمن الحلقة مع السماح بموافقات سريعة.- تمنع قوائم السماح لكل وكيل تسرّب موافقات وكيل إلى وكلاء آخرين.
- لا تنطبق الموافقات إلا على طلبات exec للمضيف الواردة من مرسلين مخولين. لا يستطيع المرسلون غير المخولين إصدار
/exec. - يُعد
/exec security=fullوسيلة تيسير على مستوى الجلسة للمشغلين المخولين ويتخطى الموافقات حسب التصميم. لحظر exec للمضيف حظراً صارماً، اضبط أمان الموافقات علىdenyأو ارفض أداةexecعبر سياسة الأدوات.
ذات صلة
الثنائيات الآمنة، وربط المفسر، وتمرير الموافقات إلى الدردشة.
أداة تنفيذ أوامر shell.
مسار طوارئ يتخطى الموافقات أيضاً.
أوضاع العزل والوصول إلى مساحة العمل.
نموذج الأمان والتقوية.
متى تستخدم كل عنصر تحكم.
سلوك السماح التلقائي المدعوم بـ Skills.