Tools

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

موافقات التنفيذ هي حاجز أمان التطبيق المرافق / مضيف Node للسماح لوكيل داخل صندوق حماية بتشغيل أوامر على مضيف حقيقي (gateway أو node). وهي قفل أمان: لا يُسمح بالأوامر إلا عندما تتوافق السياسة + قائمة السماح + موافقة المستخدم (اختياريًا) جميعًا. تُطبَّق موافقات التنفيذ فوق سياسة الأدوات وبوابة الرفع (إلا إذا ضُبط الرفع على full، إذ يتجاوز الموافقات).

فحص السياسة الفعالة

الأمر ما يعرضه
openclaw approvals get / --gateway / --node <id|name|ip> السياسة المطلوبة، ومصادر سياسة المضيف، والنتيجة الفعالة.
openclaw exec-policy show العرض المدمج للجهاز المحلي.
openclaw exec-policy set / preset مزامنة السياسة المحلية المطلوبة مع ملف موافقات المضيف المحلي في خطوة واحدة.

عندما يطلب نطاق محلي host=node، يبلّغ exec-policy show عن ذلك النطاق بوصفه مُدارًا بواسطة Node وقت التشغيل بدلًا من الادعاء بأن ملف الموافقات المحلي هو مصدر الحقيقة.

إذا كانت واجهة مستخدم التطبيق المرافق غير متاحة، فإن أي طلب كان سيطلب تأكيدًا عادةً يُحسم بواسطة احتياطي السؤال (الافتراضي: deny).

أين ينطبق ذلك

تُفرض موافقات التنفيذ محليًا على مضيف التنفيذ:

  • مضيف Gateway → عملية openclaw على جهاز Gateway.
  • مضيف Node → مشغّل Node (تطبيق macOS المرافق أو مضيف Node بلا واجهة).

نموذج الثقة

  • يُعد المتصلون المصادق عليهم عبر Gateway مشغلين موثوقين لذلك Gateway.
  • توسّع العقد المقترنة قدرة المشغل الموثوق هذه إلى مضيف Node.
  • تقلل موافقات التنفيذ خطر التنفيذ العرضي، لكنها ليست حدًا للمصادقة لكل مستخدم أو سياسة قراءة فقط لنظام الملفات.
  • بعد الموافقة، يمكن للأمر تعديل الملفات وفق أذونات نظام الملفات للمضيف أو صندوق الحماية المحدد.
  • تربط عمليات مضيف Node الموافق عليها سياق التنفيذ القياسي: دليل العمل القياسي، ووسيطات argv الدقيقة، وربط البيئة عند وجوده، ومسار الملف التنفيذي المثبّت عند انطباق ذلك.
  • بالنسبة إلى سكربتات الصدفة واستدعاءات ملفات المفسر/وقت التشغيل المباشرة، يحاول OpenClaw أيضًا ربط معامل ملف محلي ملموس واحد. إذا تغيّر ذلك الملف المربوط بعد الموافقة وقبل التنفيذ، تُرفض العملية بدلًا من تنفيذ محتوى تغيّر.
  • ربط الملفات مقصود أن يكون بأفضل جهد، وليس نموذجًا دلاليًا كاملًا لكل مسار تحميل لمفسر/وقت تشغيل. إذا لم يستطع وضع الموافقة تحديد ملف محلي ملموس واحد بالضبط لربطه، فإنه يرفض إنشاء تشغيل مدعوم بالموافقة بدلًا من الادعاء بتغطية كاملة.

فصل macOS

  • تمرر خدمة مضيف Node system.run إلى تطبيق macOS عبر IPC محلي.
  • يفرض تطبيق macOS الموافقات وينفذ الأمر في سياق واجهة المستخدم.

الإعدادات والتخزين

توجد الموافقات في ملف JSON محلي على مضيف التنفيذ:

text
~/.openclaw/exec-approvals.json

مثال على المخطط:

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"        }      ]    }  }}

عناصر ضبط السياسة

exec.security

security"deny" | "allowlist" | "full"
  • deny - حظر كل طلبات تنفيذ المضيف.
  • allowlist - السماح بالأوامر الموجودة في قائمة السماح فقط.
  • full - السماح بكل شيء (مكافئ للرفع).

exec.ask

ask"off" | "on-miss" | "always"
  • off - عدم طلب التأكيد أبدًا.
  • on-miss - طلب التأكيد فقط عندما لا تطابق قائمة السماح.
  • always - طلب التأكيد على كل أمر. الثقة الدائمة allow-always لا تلغي طلبات التأكيد عندما يكون وضع السؤال الفعال always.

askFallback

askFallback"deny" | "allowlist" | "full"

الحسم عندما يكون طلب التأكيد مطلوبًا ولكن لا يمكن الوصول إلى واجهة مستخدم.

  • 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 نطاقات أوامر مشتقة من المحلل بحيث تستطيع مطالبات الموافقة عبر الويب تمييز رموز الأمر. اضبطه على true لتمكين تمييز نص الأمر.

لا يغير هذا الإعداد security أو ask أو مطابقة قائمة السماح أو سلوك التقييم المضمن الصارم أو تمرير الموافقات أو تنفيذ الأوامر. يمكن ضبطه عموميًا ضمن tools.exec.commandHighlighting أو لكل وكيل ضمن agents.list[].tools.exec.commandHighlighting.

وضع YOLO (بلا موافقة)

إذا أردت أن يعمل تنفيذ المضيف دون مطالبات موافقة، فيجب أن تفتح كلتا طبقتي السياسة - سياسة التنفيذ المطلوبة في إعدادات OpenClaw (tools.exec.*) و سياسة الموافقات المحلية للمضيف في ~/.openclaw/exec-approvals.json.

YOLO هو سلوك المضيف الافتراضي ما لم تشدده صراحةً:

الطبقة إعداد YOLO
tools.exec.security full على gateway/node
tools.exec.ask off
askFallback للمضيف full

يمكن للمزودين المدعومين بواجهة CLI الذين يعرّضون وضع أذونات غير تفاعلي خاصًا بهم اتباع هذه السياسة. تضيف Claude CLI --permission-mode bypassPermissions عندما تكون سياسة التنفيذ المطلوبة من OpenClaw هي YOLO. تجاوز سلوك الخلفية هذا باستخدام وسائط Claude صريحة ضمن agents.defaults.cliBackends.claude-cli.args / resumeArgs - مثل --permission-mode default أو acceptEdits أو bypassPermissions.

إذا أردت إعدادًا أكثر تحفظًا، فشدّد أيًا من الطبقتين مجددًا إلى allowlist / on-miss أو deny.

إعداد "عدم طلب التأكيد مطلقًا" دائم لمضيف Gateway

  • اضبط سياسة الإعدادات المطلوبة

    bash
    openclaw config set tools.exec.host gatewayopenclaw config set tools.exec.security fullopenclaw config set tools.exec.ask offopenclaw gateway restart
  • طابق ملف موافقات المضيف

    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 المحلي.
    • الإعدادات الافتراضية المحلية في ~/.openclaw/exec-approvals.json.

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

    مضيف Node

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

    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 هو اختصار لكسر الحاجز يتجاوز أيضًا موافقات التنفيذ لتلك الجلسة.

    إذا ظل ملف موافقات المضيف أكثر صرامة من الإعدادات، فستظل سياسة المضيف الأكثر صرامة هي الغالبة.

    قائمة السماح (لكل وكيل)

    قوائم السماح لكل وكيل. إذا وُجد عدة وكلاء، فبدّل الوكيل الذي تعدّله في تطبيق macOS. الأنماط هي مطابقات glob.

    يمكن أن تكون الأنماط مسارات ملفات ثنائية محلولة بصيغة glob أو أسماء أوامر مجردة بصيغة glob. الأسماء المجردة لا تطابق إلا الأوامر المستدعاة عبر PATH، لذلك يمكن أن يطابق rg المسار /opt/homebrew/bin/rg عندما يكون الأمر rg، لكنه لا يطابق ./rg أو /tmp/rg. استخدم نمط مسار glob عندما تريد الوثوق بموقع ملف ثنائي محدد واحد.

    تُرحّل إدخالات agents.default القديمة إلى agents.main عند التحميل. ما زالت سلاسل الصدفة مثل 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 تعبير argv نمطي اختياري؛ الإدخالات التي حُذف منها تكون للمسار فقط
    id UUID ثابت يُستخدم لهوية واجهة المستخدم
    source مصدر الإدخال، مثل allow-always
    commandText نص الأمر الذي تم التقاطه عندما أنشأ تدفق موافقة الإدخال
    lastUsedAt الطابع الزمني لآخر استخدام
    lastUsedCommand آخر أمر تطابق
    lastResolvedPath آخر مسار ملف تنفيذي محلول

    السماح التلقائي لواجهات CLI الخاصة بـ Skills

    عند تفعيل السماح التلقائي لواجهات CLI الخاصة بـ Skills، تُعامل الملفات التنفيذية المشار إليها بواسطة Skills المعروفة على أنها مدرجة في قائمة السماح على العقد (عقدة macOS أو مضيف عقدة بلا واجهة). يستخدم هذا skills.bins عبر Gateway RPC لجلب قائمة ملفات bin الخاصة بالمهارة. عطّل هذا إذا كنت تريد قوائم سماح يدوية صارمة.

    ملفات bin الآمنة وتمرير الموافقات

    لملفات bin الآمنة (المسار السريع الخاص بـ stdin فقط)، وتفاصيل ربط المفسّر، و كيفية تمرير مطالبات الموافقة إلى Slack/Discord/Telegram (أو تشغيلها كعملاء موافقة أصليين)، راجع موافقات التنفيذ - متقدم.

    تحرير واجهة التحكم

    استخدم بطاقة واجهة التحكم → العقد → موافقات التنفيذ لتحرير الإعدادات الافتراضية، والتجاوزات لكل وكيل، وقوائم السماح. اختر نطاقًا (الإعدادات الافتراضية أو وكيلًا)، وعدّل السياسة، وأضف/أزل أنماط قائمة السماح، ثم اضغط حفظ. تعرض واجهة المستخدم بيانات تعريف آخر استخدام لكل نمط حتى تتمكن من إبقاء القائمة مرتبة.

    يختار محدد الهدف Gateway (موافقات محلية) أو Node. يجب أن تعلن العقد عن system.execApprovals.get/set (تطبيق macOS أو مضيف عقدة بلا واجهة). إذا لم تكن عقدة ما تعلن موافقات التنفيذ بعد، فحرّر ملفها المحلي ~/.openclaw/exec-approvals.json مباشرةً.

    CLI: يدعم openclaw approvals تحرير Gateway أو العقدة - راجع CLI الموافقات.

    تدفق الموافقة

    عندما تكون المطالبة مطلوبة، يبث Gateway exec.approval.requested إلى عملاء المشغّل. تحلها واجهة التحكم وتطبيق macOS عبر exec.approval.resolve، ثم يمرر Gateway الطلب الموافق عليه إلى مضيف العقدة.

    بالنسبة إلى host=node، تتضمن طلبات الموافقة حمولة systemRunPlan معيارية. يستخدم Gateway تلك الخطة باعتبارها سياق الأمر/cwd/الجلسة المعتمد عند تمرير طلبات system.run الموافق عليها.

    وهذا مهم لزمن انتقال الموافقات غير المتزامنة:

    • يجهّز مسار تنفيذ العقدة خطة معيارية واحدة مقدمًا.
    • يخزن سجل الموافقة تلك الخطة وبيانات تعريف ربطها.
    • بعد الموافقة، تعيد استدعاءة system.run النهائية المُمرّرة استخدام الخطة المخزنة بدلًا من الوثوق بتعديلات لاحقة من المستدعي.
    • إذا غيّر المستدعي command أو rawCommand أو cwd أو agentId أو sessionKey بعد إنشاء طلب الموافقة، يرفض Gateway التشغيل المُمرّر باعتباره عدم تطابق في الموافقة.

    أحداث النظام

    تظهر دورة حياة التنفيذ كرسائل نظام:

    • Exec running (فقط إذا تجاوز الأمر حد إشعار التشغيل).
    • Exec finished.
    • Exec denied.

    تُنشر هذه إلى جلسة الوكيل بعد أن تبلغ العقدة عن الحدث. تصدر موافقات التنفيذ المستضافة على Gateway أحداث دورة الحياة نفسها عند انتهاء الأمر (واختياريًا عند استمرار التشغيل لفترة أطول من الحد). تعيد عمليات التنفيذ المحكومة بالموافقة استخدام معرف الموافقة باعتباره runId في هذه الرسائل لتسهيل الربط.

    سلوك الموافقة المرفوضة

    عند رفض موافقة تنفيذ غير متزامنة، يمنع OpenClaw الوكيل من إعادة استخدام خرج أي تشغيل سابق للأمر نفسه في الجلسة. يُمرر سبب الرفض مع إرشاد صريح بأنه لا يتوفر خرج للأمر، مما يمنع الوكيل من الادعاء بوجود خرج جديد أو تكرار الأمر المرفوض بنتائج قديمة من تشغيل سابق ناجح.

    الآثار

    • full قوي؛ فضّل قوائم السماح متى أمكن.
    • ask يبقيك ضمن الحلقة مع الاستمرار في إتاحة موافقات سريعة.
    • تمنع قوائم السماح لكل وكيل تسرب موافقات وكيل إلى وكلاء آخرين.
    • تنطبق الموافقات فقط على طلبات تنفيذ المضيف من المرسلين المصرح لهم. لا يستطيع المرسلون غير المصرح لهم إصدار /exec.
    • يُعد /exec security=full تيسيرًا على مستوى الجلسة للمشغّلين المصرح لهم ويتجاوز الموافقات بحكم التصميم. لحظر تنفيذ المضيف حظرًا صارمًا، اضبط أمان الموافقات على deny أو ارفض أداة exec عبر سياسة الأدوات.

    ذات صلة

    Was this useful?