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
همراه و Plugin). مسیرها با پشتیبانی از ~ بسط داده میشوند.
skills.load.allowSymlinkTargetsstring[]دایرکتوریهای مقصد واقعی و مورداعتمادی که پوشههای Skills دارای پیوند نمادین
میتوانند به آنها منتهی شوند، حتی زمانی که پیوند نمادین خارج از ریشهٔ
پیکربندیشده قرار دارد. از این گزینه برای چیدمانهای عمدی مخزنهای همسطح،
مانند <workspace>/skills/manager -> ~/Projects/manager/skills استفاده کنید.
این فهرست را محدود نگه دارید — آن را به ریشههای گستردهای مانند ~ یا
~/Projects اشاره ندهید.
skills.load.watchbooleandefault: trueپوشههای Skills را پایش میکند و هنگام تغییر فایلهای SKILL.md، تصویر لحظهای
Skills را تازهسازی میکند. فایلهای تودرتو در ریشههای گروهبندیشدهٔ Skills
را نیز پوشش میدهد.
skills.load.watchDebounceMsnumberdefault: 250بازهٔ حذف نوسان رویدادهای پایشگر Skills برحسب میلیثانیه.
نصب (skills.install)
skills.install.preferBrewbooleandefault: trueدر صورت در دسترس بودن brew، نصبکنندههای Homebrew را ترجیح میدهد.
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 را
میپذیرند؛ برای نصب Skills مبتنی بر Yarn، مقدار "yarn" را مستقیماً در
پیکربندی تنظیم کنید.
skills.install.allowUploadedArchivesbooleandefault: falseبه کلاینتهای مورداعتماد Gateway با سطح operator.admin اجازه میدهد
بایگانیهای خصوصی zip را که از طریق skills.upload.* آماده شدهاند نصب کنند.
نصبهای عادی ClawHub به این تنظیم نیاز ندارند.
سیاست نصب اپراتور (security.installPolicy)
هنگامی که اپراتورها برای تأیید یا مسدود کردن نصب Skills و Plugin براساس سیاست
مختص میزبان به یک فرمان محلی مورداعتماد نیاز دارند، از security.installPolicy
استفاده کنید. این سیاست پس از آمادهسازی محتوای منبع توسط 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 برای آن عامل. فهرستهای صریح، پیشفرضهای
بهارثرسیده را جایگزین میکنند — با آنها ادغام نمیشوند. برای در معرض
قرار ندادن هیچ Skill برای آن عامل، مقدار را روی [] تنظیم کنید.
کارگاه (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 بایت دارند، زیرا در خروجی کشف و فهرستبندی نمایش داده میشوند.
برای چرخه حیات پیشنهاد، فرمانهای CLI، پارامترهای ابزار عامل و روشهای Gateway که این پیکربندی کنترل میکند، به کارگاه Skills مراجعه کنید.
ریشههای 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 و پیکربندی در نشست جدید بعدی اعمال میشوند؛ یا وقتی پایشگر تغییری را تشخیص دهد، در نوبت بعدی عامل اعمال میشوند.