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 الافتراضي:

text
$OPENCLAW_STATE_DIR/exec-approvals.json# otherwise~/.openclaw/exec-approvals.json

يتبع مقبس الموافقة الافتراضي الجذر نفسه: $OPENCLAW_STATE_DIR/exec-approvals.sock، أو ~/.openclaw/exec-approvals.sock عندما لا يكون المتغير مضبوطًا.

مثال مخطط:

json
{  "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 -c
  • node -e, node --eval, node -p
  • ruby -e
  • perl -e, perl -E
  • php -r
  • lua -e
  • osascript -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

    bash
    openclaw config set tools.exec.host gatewayopenclaw config set tools.exec.security fullopenclaw config set tools.exec.ask offopenclaw gateway restart
  • Match the host approvals file

    bash
    openclaw approvals set --stdin <<'EOF'{  version: 1,  defaults: {    security: "full",    ask: "off",    askFallback: "full"  }}EOF
  • اختصار محلي

    bash
    openclaw exec-policy preset yolo

    يحدّث ذلك الاختصار المحلي كليهما:

    • tools.exec.host/security/ask المحلي.
    • القيم الافتراضية لملف الموافقات المحلي، بما في ذلك askFallback: "full".

    إنه محلي فقط عن قصد. لتغيير موافقات مضيف Gateway أو مضيف العقدة عن بُعد، استخدم openclaw approvals set --gateway أو openclaw approvals set --node <id|name|ip>.

    مضيف العقدة

    بالنسبة إلى مضيف العقدة، طبّق ملف الموافقات نفسه على تلك العقدة بدلًا من ذلك:

    bash
    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]). بالنسبة إلى الإدخالات المكتوبة يدوياً، تُدمج الوسائط باستخدام مسافة واحدة، لذا ثبّت النمط عندما تحتاج إلى مطابقة دقيقة.

    json
    {  "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 عبر سياسة الأدوات.

    ذات صلة

    Was this useful?
    On this page

    On this page