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 و
openclaw onboard --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 قيمة name الخاصة بالـ Skill افتراضيًا. إذا عرّفت 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 بطلب من المستخدم دائمًا
عبر ورشة Skills بغض النظر عن هذا الإعداد.
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"تتطلب pending موافقة المشغّل قبل أن ينفّذ الوكيل، من تلقاء نفسه، إجراء التطبيق
أو الرفض أو العزل. تسمح auto بهذه الإجراءات دون موافقة.
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseاسمح لتطبيق ورشة Skills بالكتابة عبر الروابط الرمزية لـ Skills في مساحة العمل التي
تكون وجهتها الفعلية موثوقة بالفعل بواسطة skills.load.allowSymlinkTargets. أبقِ
هذا الخيار معطّلًا ما لم يكن مطلوبًا أن تؤدي عمليات تطبيق المقترحات المُنشأة إلى
تعديل جذر Skills المشترك ذاك.
skills.workshop.maxPendingnumberdefault: 50الحد الأقصى للمقترحات المعلّقة والمعزولة المحتفَظ بها لكل مساحة عمل (النطاق المسموح: 1-200).
skills.workshop.maxSkillBytesnumberdefault: 40000الحد الأقصى لحجم نص المقترح بالبايت (النطاق المسموح: 1024-200000). تُقيَّد أوصاف المقترحات بشكل منفصل بحد صارم قدره 160 بايت، لأنها تظهر في مخرجات الاكتشاف والقوائم.
راجع ورشة Skills لمعرفة دورة حياة المقترح وأوامر CLI ومعاملات أدوات الوكيل وطرائق Gateway التي يتحكم فيها هذا الإعداد.
جذور Skills المرتبطة رمزيًا
افتراضيًا، تُعد جذور Skills الخاصة بمساحة العمل ووكيل المشروع والدليل الإضافي
والحزمة حدود احتواء. يُتخطى مجلد Skills مرتبط رمزيًا ضمن <workspace>/skills
إذا كانت وجهته خارج الجذر، مع تسجيل رسالة في السجل.
للسماح بتخطيط مقصود للروابط الرمزية، صرّح بالوجهة الموثوقة:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}باستخدام هذا الإعداد، يُقبل <workspace>/skills/manager -> ~/Projects/manager/skills
بعد حل المسار الفعلي. يفحص extraDirs المستودع الشقيق مباشرةً؛ ويحافظ
allowSymlinkTargets على المسار المرتبط رمزيًا للتخطيطات الحالية.
لا يكتب تطبيق ورشة Skills عبر تلك الروابط الرمزية افتراضيًا. للسماح لتطبيق الورشة بتعديل Skills ضمن وجهات الروابط الرمزية الموثوقة بالفعل، فعّل ذلك بشكل منفصل:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}تقبل أدلة ~/.openclaw/skills المُدارة وأدلة ~/.agents/skills الشخصية
بالفعل الروابط الرمزية لأدلة Skills دون شروط (مع استمرار تطبيق احتواء
SKILL.md لكل Skill) — ولا يلزم allowSymlinkTargets إلا لجذور مساحة العمل
والدليل الإضافي ووكيل المشروع (<workspace>/.agents/skills).
Skills المعزولة ومتغيرات البيئة
مرّر الأسرار إلى بيئة Docker معزولة باستخدام:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}تذكير بترتيب التحميل
workspace/skills (الأعلى)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsSkills المضمّنةskills.load.extraDirs (الأدنى)تسري التغييرات على Skills والإعدادات في الجلسة الجديدة التالية عندما تكون المراقبة مفعّلة، أو في منعطف الوكيل التالي عندما تكتشف المراقبة تغييرًا.