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 -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -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عبر سياسة الأدوات.
ذات صلة
الملفات الثنائية الآمنة، وربط المفسر، وتمرير الموافقات إلى الدردشة.
أداة تنفيذ أوامر الصدفة.
مسار كسر الزجاج الذي يتجاوز الموافقات أيضًا.
أوضاع العزل والوصول إلى مساحة العمل.
نموذج الأمان والتقوية.
متى تستخدم كل عنصر تحكم.
سلوك السماح التلقائي المدعوم بـ Skills.