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 همراه و 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 اعمال می‌شود.

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 برای آن عامل. فهرست‌های صریح، پیش‌فرض‌های به‌ارث‌رسیده را جایگزین می‌کنند — با آن‌ها ادغام نمی‌شوند. برای در معرض قرار ندادن هیچ 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 که به بیرون از ریشه حل شود، همراه با یک پیام گزارش نادیده گرفته می‌شود.

برای مجاز کردن یک چیدمان عمدی پیوند نمادین، مقصد مورد اعتماد را اعلام کنید:

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