Skills

إعداد Skills

توجد معظم إعدادات Skills ضمن skills في ~/.openclaw/openclaw.json. أما إمكانية الظهور الخاصة بكل وكيل فتوجد ضمن agents.defaults.skills وagents.list[].skills.

json5
{  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.

json5
{  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:

json
{  "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"  }}

أمر سياسة بسيط:

js
#!/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 ظاهرة مختلفة لكل وكيل.

json5
{  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 إذا كانت وجهته خارج الجذر، مع تسجيل رسالة في السجل.

للسماح بتخطيط مقصود للروابط الرمزية، صرّح بالوجهة الموثوقة:

json5
{  skills: {    load: {      extraDirs: ["~/Projects/manager/skills"],      allowSymlinkTargets: ["~/Projects/manager/skills"],    },  },}

باستخدام هذا الإعداد، يُقبل <workspace>/skills/manager -> ~/Projects/manager/skills بعد حل المسار الفعلي. يفحص extraDirs المستودع الشقيق مباشرةً؛ ويحافظ allowSymlinkTargets على المسار المرتبط رمزيًا للتخطيطات الحالية.

لا يكتب تطبيق ورشة Skills عبر تلك الروابط الرمزية افتراضيًا. للسماح لتطبيق الورشة بتعديل Skills ضمن وجهات الروابط الرمزية الموثوقة بالفعل، فعّل ذلك بشكل منفصل:

json5
{  skills: {    load: {      allowSymlinkTargets: ["~/Projects/manager/skills"],    },    workshop: {      allowSymlinkTargetWrites: true,    },  },}

تقبل أدلة ~/.openclaw/skills المُدارة وأدلة ~/.agents/skills الشخصية بالفعل الروابط الرمزية لأدلة Skills دون شروط (مع استمرار تطبيق احتواء SKILL.md لكل Skill) — ولا يلزم allowSymlinkTargets إلا لجذور مساحة العمل والدليل الإضافي ووكيل المشروع (<workspace>/.agents/skills).

Skills المعزولة ومتغيرات البيئة

مرّر الأسرار إلى بيئة Docker معزولة باستخدام:

json5
{  agents: {    defaults: {      sandbox: {        docker: {          env: { GEMINI_API_KEY: "your-key-here" },        },      },    },  },}

تذكير بترتيب التحميل

text
workspace/skills      (الأعلى)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsSkills المضمّنةskills.load.extraDirs (الأدنى)

تسري التغييرات على Skills والإعدادات في الجلسة الجديدة التالية عندما تكون المراقبة مفعّلة، أو في منعطف الوكيل التالي عندما تكتشف المراقبة تغييرًا.

ذو صلة

Was this useful?
On this page

On this page