Skills
إعدادات Skills
توجد معظم إعدادات skills ضمن skills في
~/.openclaw/openclaw.json. وتوجد الرؤية الخاصة بالوكيل ضمن
agents.defaults.skills وagents.list[].skills.
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, watchDebounceMs: 250, }, install: { preferBrew: true, nodeManager: "npm", allowUploadedArchives: false, }, workshop: { autonomous: { enabled: false }, allowSymlinkTargetWrites: false, approvalPolicy: "pending", maxPending: 50, maxSkillBytes: 40000, }, entries: { "image-lab": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}التحميل (skills.load)
skills.load.extraDirsstring[]أدلة skills إضافية لفحصها، بأدنى أسبقية (بعد skills المدمجة
وskills الخاصة بـ Plugin). يتم توسيع المسارات مع دعم ~.
skills.load.allowSymlinkTargetsstring[]أدلة أهداف حقيقية موثوقة يمكن أن تُحل إليها مجلدات skills الرمزية،
حتى عندما يكون الرابط الرمزي خارج الجذر المكوّن. استخدم هذا
لتخطيطات مستودعات شقيقة مقصودة مثل
<workspace>/skills/manager -> ~/Projects/manager/skills. أبق هذه القائمة
ضيقة — لا توجهها إلى جذور واسعة مثل ~ أو ~/Projects.
skills.load.watchbooleandefault: trueراقب مجلدات skills وحدّث لقطة skills عندما تتغير ملفات SKILL.md.
يغطي ذلك الملفات المتداخلة ضمن جذور skills المجمعة.
skills.load.watchDebounceMsnumberdefault: 250نافذة إزالة الارتداد لأحداث مراقب skills بالميلي ثانية.
التثبيت (skills.install)
skills.install.preferBrewbooleandefault: trueفضّل مثبّتات Homebrew عندما يكون brew متاحا.
skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"تفضيل مدير حزم Node لتثبيتات skills. يؤثر هذا فقط في تثبيتات skills
— يجب أن يظل وقت تشغيل Gateway يستخدم Node (لا يوصى بـ Bun
لـ WhatsApp/Telegram). استخدم openclaw setup --node-manager لـ npm أو pnpm
أو bun؛ عيّن "yarn" يدويا لتثبيتات skills المدعومة بـ Yarn.
skills.install.allowUploadedArchivesbooleandefault: falseاسمح لعملاء Gateway الموثوقين ذوي operator.admin بتثبيت أرشيفات zip
خاصة تم تجهيزها عبر skills.upload.*. لا تحتاج تثبيتات ClawHub العادية
إلى هذا الإعداد.
سياسة تثبيت المشغّل (security.installPolicy)
استخدم security.installPolicy عندما يحتاج المشغّلون إلى أمر محلي موثوق
للموافقة على تثبيتات skills وPlugin أو حظرها بسياسة خاصة بالمضيف. تعمل السياسة
بعد أن يجهّز OpenClaw مواد المصدر وقبل متابعة التثبيت أو التحديث.
تنطبق على skills في ClawHub، وskills المرفوعة، وskills من Git/محلية،
ومثبّتات اعتماديات skills، ومصادر تثبيت/تحديث Plugin.
{ security: { installPolicy: { enabled: true, // Omit targets to cover every supported target. targets: ["skill", "plugin"], exec: { source: "exec", command: "/usr/local/bin/openclaw-install-policy", args: ["--json"], timeoutMs: 10000, noOutputTimeoutMs: 10000, maxOutputBytes: 1048576, passEnv: ["OPENCLAW_STATE_DIR", "PATH"], env: { POLICY_MODE: "strict" }, trustedDirs: ["/usr/local/bin"], }, }, },}security.installPolicy.enabledbooleandefault: falseيفعّل سياسة التثبيت المملوكة للمشغّل. عند تفعيلها من دون أمر exec
صالح، تفشل التثبيتات بإغلاق آمن.
security.installPolicy.targets("skill" | "plugin")[]مرشّح هدف اختياري. عند حذفه، تنطبق السياسة على كل هدف مدعوم حتى لا تفشل التثبيتات الجديدة بشكل مفتوح على نحو غير متوقع.
security.installPolicy.exec.commandstringمسار مطلق إلى ملف السياسة التنفيذي الموثوق. يشغّله OpenClaw من دون صدفة ويتحقق من المسار قبل الاستخدام.
security.installPolicy.exec.argsstring[]وسيطات ثابتة تُمرر بعد command.
security.installPolicy.exec.timeoutMsnumberdefault: 10000أقصى زمن تشغيل فعلي لقرار سياسة واحد.
security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMsأقصى مدة من دون مخرجات stdout أو stderr قبل أن تفشل السياسة بإغلاق آمن.
security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576أقصى عدد مقبول من بايتات stdout وstderr مجتمعة من عملية السياسة.
security.installPolicy.exec.env"Record<string,security.installPolicy.exec.passEnvstring[]أسماء متغيرات البيئة المنسوخة من عملية OpenClaw إلى عملية السياسة. تُمرر المتغيرات المسماة فقط.
security.installPolicy.exec.trustedDirsstring[]قائمة سماح اختيارية بالأدلة التي قد تحتوي ملف السياسة التنفيذي.
security.installPolicy.exec.allowInsecurePathbooleandefault: falseيتجاوز فحوص ملكية مسار الأمر وأذوناته. استخدمه فقط عندما يكون المسار محميا بآلية أخرى.
security.installPolicy.exec.allowSymlinkCommandbooleandefault: falseيسمح لمسار الأمر المكوّن بأن يكون رابطا رمزيا. يجب أن يظل الهدف المحلول مستوفيا فحوص المسار الأخرى. يجب أن تكون وسيطات سكربت المفسّر ملفات عادية مباشرة، لا روابط رمزية.
تتلقى السياسة كائن JSON واحدا على stdin مع protocolVersion: 1،
وopenclawVersion، وtargetType، وtargetName، وsourcePath، وsourcePathKind،
وsource منظّم اختياري، وorigin منظّم، وrequest. ويجب أن تكتب
كائن JSON واحدا على stdout: { "protocolVersion": 1, "decision": "allow" } أو
{ "protocolVersion": 1, "decision": "block", "reason": "..." }. تؤدي حالة
خروج غير صفرية، أو انتهاء مهلة، أو JSON مشوّه، أو حقول مفقودة، أو إصدارات
بروتوكول غير مدعومة إلى فشل بإغلاق آمن.
لا ينفذ OpenClaw سياسة التثبيت أثناء بدء تشغيل Gateway العادي. تفشل
التثبيتات والتحديثات بإغلاق آمن عندما تكون السياسة مفعّلة ولكن غير متاحة.
يجري openclaw doctor تحققا ثابتا، وينفذ openclaw doctor --deep مسبارا
اصطناعيا للتثبيت مقابل الأمر المكوّن.
تطبق التحديثات المجمعة السياسة لكل هدف: يؤدي حظر تحديث skill أو Plugin إلى فشل ذلك الهدف من دون تعطيل السياسة أو تخطي الأهداف اللاحقة في الدفعة.
مثال stdin:
{ "protocolVersion": 1, "openclawVersion": "2026.6.1", "targetType": "skill", "targetName": "weather", "sourcePath": "/var/folders/.../openclaw-skill-clawhub/root", "sourcePathKind": "directory", "source": { "kind": "clawhub", "authority": "openclaw", "mutable": false, "network": true }, "origin": { "type": "clawhub", "registry": "https://clawhub.openclaw.ai", "slug": "weather", "version": "1.0.0" }, "request": { "kind": "skill-install", "mode": "install", "requestedSpecifier": "clawhub:weather@1.0.0" }, "skill": { "installId": "clawhub" }}أمر سياسة بسيط:
#!/usr/bin/env node let input = "";process.stdin.setEncoding("utf8");process.stdin.on("data", (chunk) => { input += chunk;});process.stdin.on("end", () => { const request = JSON.parse(input); if (request.targetType === "plugin" && request.source?.kind === "local-path") { process.stdout.write( JSON.stringify({ protocolVersion: 1, decision: "block", reason: "local plugin paths are not approved on this host", }), ); return; } process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});قائمة سماح skills المدمجة
skills.allowBundledstring[]قائمة سماح اختيارية لـ skills المدمجة فقط. عند تعيينها، تكون skills المدمجة في القائمة فقط مؤهلة. لا تتأثر skills المُدارة، وعلى مستوى الوكيل، وعلى مستوى مساحة العمل.
إدخالات كل skill (skills.entries)
تطابق المفاتيح ضمن entries اسم skill name افتراضيا. إذا عرّفت skill
metadata.openclaw.skillKey، فاستخدم ذلك المفتاح بدلا منه. ضع الأسماء
الموصولة بشرطات بين علامتي اقتباس (يسمح JSON5 بالمفاتيح المقتبسة).
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
يعطّل false هذه skill حتى عندما تكون مدمجة أو مثبتة. إن skill المدمجة
coding-agent اختيارية — عيّنها إلى true وتأكد من تثبيت ومصادقة أحد
claude أو codex أو opencode أو CLI آخر مدعوم.
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
حقل ملاءمة لـ skills التي تعلن metadata.openclaw.primaryEnv.
يدعم سلسلة نصية صريحة أو SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }.
"skills.entries.<key�����r�"skills.entries.<key�w₫��ܩقوائم سماح الوكلاء (agents)
استخدم إعدادات الوكيل عندما تريد جذور skills نفسها على الجهاز/مساحة العمل ولكن مجموعة skills مرئية مختلفة لكل وكيل.
{ agents: { defaults: { skills: ["github", "weather"], // shared baseline }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults entirely { id: "locked-down", skills: [] }, // no skills ], },}agents.defaults.skillsstring[]قائمة سماح أساسية مشتركة ترثها الوكلاء التي تحذف agents.list[].skills.
احذفها بالكامل لترك skills غير مقيدة افتراضيا.
agents.list[].skillsstring[]مجموعة skills نهائية صريحة لذلك الوكيل. القوائم الصريحة تستبدل
الافتراضات الموروثة — ولا تدمج معها. عيّنها إلى [] لعدم كشف أي skills
لذلك الوكيل.
ورشة العمل (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseعندما تكون true، يمكن للوكلاء إنشاء مقترحات معلّقة من إشارات محادثة
دائمة بعد أدوار ناجحة. يمر إنشاء skills الذي يطلبه المستخدم دائما عبر
Skill Workshop بغض النظر عن هذا الإعداد.
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"يتطلب pending موافقة المشغّل قبل التطبيق أو الرفض أو العزل بمبادرة من الوكيل.
يتيح auto هذه الإجراءات دون موافقة.
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseاسمح لتطبيق Skill Workshop بالكتابة عبر الروابط الرمزية لـ Skills في مساحة العمل التي يكون
هدفها الحقيقي موثوقًا به بالفعل بواسطة skills.load.allowSymlinkTargets. أبقِ هذا
معطّلًا ما لم يكن من المفترض أن تعدّل تطبيقات المقترحات المولّدة جذر Skill المشترك
ذاك.
skills.workshop.maxPendingnumberdefault: 50الحد الأقصى للمقترحات المعلّقة والمعزولة المحتفَظ بها لكل مساحة عمل.
skills.workshop.maxSkillBytesnumberdefault: 40000الحد الأقصى لحجم نص المقترح بالبايت. أوصاف المقترحات محددة بحد صارم قدره 160 بايت لأنها تظهر في مخرجات الاكتشاف والقوائم.
جذور Skills المرتبطة رمزيًا
افتراضيًا، تكون جذور Skills الخاصة بمساحة العمل ووكيل المشروع والدليل الإضافي
والمضمّنة حدود احتواء. يتم تخطي مجلد Skill المرتبط رمزيًا ضمن <workspace>/skills
إذا كان يحل إلى خارج الجذر، مع رسالة سجل.
للسماح بتخطيط رابط رمزي مقصود، صرّح بالهدف الموثوق:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}باستخدام هذا التكوين، يتم قبول <workspace>/skills/manager -> ~/Projects/manager/skills
بعد حل المسار الحقيقي. يفحص extraDirs المستودع الشقيق مباشرة؛ ويحافظ
allowSymlinkTargets على المسار المرتبط رمزيًا للتخطيطات الحالية.
لا يكتب تطبيق Skill Workshop عبر تلك الروابط الرمزية افتراضيًا. للسماح لتطبيق Workshop بتعديل Skills ضمن أهداف روابط رمزية موثوق بها بالفعل، اشترك بشكل منفصل:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}تقبل أدلة ~/.openclaw/skills المُدارة و~/.agents/skills الشخصية
بالفعل الروابط الرمزية لأدلة Skills (لا يزال احتواء SKILL.md لكل Skill
مطبقًا).
Skills المعزولة ومتغيرات البيئة
مرّر الأسرار إلى صندوق عزل Docker باستخدام:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}تذكير ترتيب التحميل
workspace/skills (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)تسري تغييرات Skills والتكوين في الجلسة الجديدة التالية عندما يكون المراقب ممكّنًا، أو في دور الوكيل التالي عندما يكتشف المراقب تغييرًا.