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 المعتمدة سياق تنفيذ قانونيًا: cwd القانوني، و argv الدقيق، وربط env عند وجوده، ومسار الملف التنفيذي المثبت عند انطباقه.
  • بالنسبة إلى سكربتات shell واستدعاءات ملفات المفسر/وقت التشغيل المباشرة، يحاول OpenClaw أيضًا ربط معامل ملف محلي ملموس واحد. إذا تغير ذلك الملف المرتبط بعد الموافقة وقبل التنفيذ، تُرفض عملية التشغيل بدلًا من تنفيذ محتوى تغيّر.
  • ربط الملفات مقصود أن يكون بأفضل جهد، وليس نموذجًا دلاليًا كاملًا لكل مسار تحميل مفسر/وقت تشغيل. إذا تعذر على وضع الموافقة تحديد ملف محلي ملموس واحد بالضبط لربطه، فإنه يرفض إصدار تشغيل مدعوم بالموافقة بدلًا من الادعاء بتغطية كاملة.

فصل macOS

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

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

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

~/.openclaw/exec-approvals.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 إدخالات قائمة سماح جديدة لها تلقائيًا.

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

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

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

الطبقة إعداد YOLO
tools.exec.security full على gateway/node
tools.exec.ask off
Host 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-host دائم "لا تطالب أبدًا"

  • Set the requested config policy

    openclaw config set tools.exec.host gateway
    openclaw config set tools.exec.security full
    openclaw config set tools.exec.ask off
    openclaw gateway restart
    
  • Match 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 المحلي.
    • الإعدادات الافتراضية المحلية في ~/.openclaw/exec-approvals.json.

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

    مضيف Node

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

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

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

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

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

    للاطلاع على الملفات الثنائية الآمنة (المسار السريع المعتمد على 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 عبر سياسة الأدوات.

    ذات صلة