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[]

دایرکتوری‌های مهارت اضافی برای پویش، با پایین‌ترین اولویت (پس از مهارت‌های داخلی و Plugin). مسیرها با پشتیبانی از ~ گسترش داده می‌شوند.

skills.load.allowSymlinkTargetsstring[]

دایرکتوری‌های هدف واقعی و مورد اعتماد که پوشه‌های مهارت symlinkشده می‌توانند به آن‌ها resolve شوند، حتی وقتی symlink بیرون از root پیکربندی‌شده قرار دارد. از این برای چیدمان‌های عمدی repoهای هم‌سطح مانند <workspace>/skills/manager -> ~/Projects/manager/skills استفاده کنید. این فهرست را محدود نگه دارید — به rootهای گسترده‌ای مثل ~ یا ~/Projects اشاره نکنید.

skills.load.watchbooleandefault: true

پوشه‌های مهارت را پایش کنید و وقتی فایل‌های SKILL.md تغییر می‌کنند، snapshot مهارت‌ها را تازه‌سازی کنید. فایل‌های تودرتو زیر rootهای مهارت گروه‌بندی‌شده را نیز پوشش می‌دهد.

skills.load.watchDebounceMsnumberdefault: 250

پنجره debounce برای رویدادهای watcher مهارت، برحسب میلی‌ثانیه.

نصب (skills.install)

skills.install.preferBrewbooleandefault: true

وقتی brew در دسترس است، نصب‌کننده‌های Homebrew را ترجیح دهید.

skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"

ترجیح مدیر بسته Node برای نصب مهارت‌ها. این فقط بر نصب مهارت‌ها اثر می‌گذارد — runtime مربوط به Gateway همچنان باید از Node استفاده کند (Bun برای WhatsApp/Telegram توصیه نمی‌شود). برای npm، pnpm، یا bun از openclaw setup --node-manager استفاده کنید؛ برای نصب مهارت‌های مبتنی بر Yarn، "yarn" را دستی تنظیم کنید.

skills.install.allowUploadedArchivesbooleandefault: false

به کلاینت‌های Gateway مورد اعتماد operator.admin اجازه دهید آرشیوهای zip خصوصی را که از طریق skills.upload.* آماده شده‌اند نصب کنند. نصب‌های معمول ClawHub به این تنظیم نیاز ندارند.

سیاست نصب اپراتور (security.installPolicy)

وقتی اپراتورها به یک فرمان محلی مورد اعتماد نیاز دارند تا نصب مهارت و Plugin را با سیاست ویژه میزبان تأیید یا مسدود کند، از security.installPolicy استفاده کنید. این سیاست پس از آن اجرا می‌شود که OpenClaw مواد منبع را آماده کرده و پیش از آنکه نصب یا به‌روزرسانی ادامه پیدا کند. این سیاست بر مهارت‌های ClawHub، مهارت‌های بارگذاری‌شده، مهارت‌های Git/محلی، نصب‌کننده‌های وابستگی مهارت، و منابع نصب/به‌روزرسانی 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

مسیر مطلق به executable سیاست مورد اعتماد. OpenClaw آن را بدون shell اجرا می‌کند و مسیر را پیش از استفاده اعتبارسنجی می‌کند.

security.installPolicy.exec.argsstring[]

آرگومان‌های ثابت که پس از command ارسال می‌شوند.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

حداکثر runtime زمان دیواری برای یک تصمیم سیاست.

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[]

allowlist اختیاری از دایرکتوری‌هایی که ممکن است executable سیاست را در خود داشته باشند.

security.installPolicy.exec.allowInsecurePathbooleandefault: false

بررسی‌های مالکیت و مجوز مسیر فرمان را دور می‌زند. فقط وقتی استفاده کنید که مسیر با سازوکار دیگری محافظت می‌شود.

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

اجازه می‌دهد مسیر فرمان پیکربندی‌شده یک symlink باشد. هدف resolveشده همچنان باید سایر بررسی‌های مسیر را برآورده کند. آرگومان‌های اسکریپت مفسر باید فایل‌های عادی مستقیم باشند، نه symlink.

این سیاست یک شیء JSON را روی stdin با protocolVersion: 1، openclawVersion، targetType، targetName، sourcePath، sourcePathKind، source ساختاریافته اختیاری، origin ساختاریافته، و request دریافت می‌کند. باید یک شیء JSON روی stdout بنویسد: { "protocolVersion": 1, "decision": "allow" } یا { "protocolVersion": 1, "decision": "block", "reason": "..." }. خروج غیرصفر، timeout، JSON بدشکل، فیلدهای گم‌شده، یا نسخه‌های protocol پشتیبانی‌نشده به‌صورت بسته شکست می‌خورند.

OpenClaw در زمان startup معمول Gateway سیاست نصب را اجرا نمی‌کند. وقتی سیاست فعال اما در دسترس نباشد، نصب‌ها و به‌روزرسانی‌ها به‌صورت بسته شکست می‌خورند. openclaw doctor اعتبارسنجی ایستا انجام می‌دهد، و openclaw doctor --deep یک پروب نصب ساختگی را در برابر فرمان پیکربندی‌شده اجرا می‌کند.

به‌روزرسانی‌های انبوه سیاست را برای هر هدف اعمال می‌کنند: به‌روزرسانی مسدودشده یک مهارت یا Plugin همان هدف را شکست می‌دهد، بدون اینکه سیاست را غیرفعال کند یا هدف‌های بعدی در batch را نادیده بگیرد.

نمونه 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" }));});

allowlist مهارت‌های داخلی

skills.allowBundledstring[]

allowlist اختیاری فقط برای مهارت‌های داخلی. وقتی تنظیم شود، فقط مهارت‌های داخلی موجود در فهرست واجد شرایط هستند. مهارت‌های مدیریت‌شده، سطح عامل، و workspace تحت تأثیر قرار نمی‌گیرند.

ورودی‌های هر مهارت (skills.entries)

کلیدهای زیر entries به‌طور پیش‌فرض با name مهارت مطابقت دارند. اگر یک مهارت metadata.openclaw.skillKey را تعریف کند، به‌جای آن از همان کلید استفاده کنید. نام‌های دارای خط تیره را quote کنید (JSON5 کلیدهای quoteشده را مجاز می‌داند).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false مهارت را حتی وقتی داخلی یا نصب‌شده باشد غیرفعال می‌کند. مهارت داخلی coding-agent opt-in است — آن را روی true تنظیم کنید و مطمئن شوید یکی از claude، codex، opencode، یا CLI پشتیبانی‌شده دیگری نصب و احراز هویت شده است.

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .apiKey" type='string | { source, provider, id }'> فیلد کمکی برای مهارت‌هایی که metadata.openclaw.primaryEnv را اعلام می‌کنند. از یک رشته plaintext یا یک SecretRef پشتیبانی می‌کند: { source: "env", provider: "default", id: "VAR_NAME" }.

"skills.entries.<key�����r�
"skills.entries.<key�w₫��ܩ

allowlistهای عامل (agents)

وقتی rootهای مهارت یکسانی برای machine/workspace می‌خواهید اما مجموعه مهارت قابل مشاهده متفاوتی برای هر عامل نیاز دارید، از پیکربندی عامل استفاده کنید.

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[]

allowlist پایه مشترک که عامل‌هایی که agents.list[].skills را حذف کرده‌اند از آن ارث می‌برند. برای اینکه مهارت‌ها به‌طور پیش‌فرض نامحدود بمانند، کاملاً حذف کنید.

agents.list[].skillsstring[]

مجموعه مهارت نهایی صریح برای آن عامل. فهرست‌های صریح defaultهای ارث‌بری‌شده را جایگزین می‌کنند — merge نمی‌شوند. برای اینکه هیچ مهارتی برای آن عامل آشکار نشود، روی [] تنظیم کنید.

کارگاه (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

وقتی true باشد، عامل‌ها می‌توانند پس از turnهای موفق، از سیگنال‌های مکالمه ماندگار proposalهای pending ایجاد کنند. ایجاد مهارت با prompt کاربر، صرف‌نظر از این تنظیم، همیشه از کارگاه مهارت عبور می‌کند.

skills.workshop.approvalPolicy"pending" | "auto"default: "pending"

pending پیش از اعمال، رد کردن یا قرنطینه‌ای که توسط عامل آغاز شده باشد، تأیید اپراتور را الزامی می‌کند. auto این اقدامات را بدون تأیید مجاز می‌کند.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

به اعمال کارگاه مهارت اجازه دهید از طریق symlinkهای مهارت فضای کاری بنویسد که مقصد واقعی آن‌ها از پیش توسط skills.load.allowSymlinkTargets مورد اعتماد است. این گزینه را غیرفعال نگه دارید مگر آن‌که اعمال پیشنهادهای تولیدشده باید آن ریشه مهارت مشترک را تغییر دهد.

skills.workshop.maxPendingnumberdefault: 50

بیشترین تعداد پیشنهادهای در انتظار و قرنطینه‌شده که برای هر فضای کاری نگه داشته می‌شود.

skills.workshop.maxSkillBytesnumberdefault: 40000

بیشترین اندازه بدنه پیشنهاد بر حسب بایت. توضیحات پیشنهاد به‌طور سخت‌گیرانه در 160 بایت محدود شده‌اند، چون در خروجی کشف و فهرست‌گیری نمایش داده می‌شوند.

ریشه‌های مهارت symlinkشده

به‌طور پیش‌فرض، ریشه‌های مهارت فضای کاری، عامل پروژه، دایرکتوری اضافه و بسته‌شده مرزهای محصورسازی هستند. پوشه مهارت symlinkشده زیر <workspace>/skills که به بیرون از ریشه resolve شود، با یک پیام لاگ نادیده گرفته می‌شود.

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

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

با این پیکربندی، <workspace>/skills/manager -> ~/Projects/manager/skills پس از realpath resolution پذیرفته می‌شود. extraDirs مخزن هم‌سطح را مستقیماً اسکن می‌کند؛ allowSymlinkTargets مسیر symlinkشده را برای چیدمان‌های موجود حفظ می‌کند.

اعمال کارگاه مهارت به‌طور پیش‌فرض از طریق آن symlinkها نمی‌نویسد. برای این‌که Workshop apply بتواند مهارت‌های زیر مقصدهای symlink از پیش مورد اعتماد را تغییر دهد، جداگانه opt in کنید:

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

دایرکتوری‌های مدیریت‌شده ~/.openclaw/skills و شخصی ~/.agents/skills از پیش symlinkهای دایرکتوری مهارت را می‌پذیرند (محصورسازی SKILL.md برای هر مهارت همچنان اعمال می‌شود).

مهارت‌های سندباکس‌شده و متغیرهای محیطی

رازها را با این پیکربندی به یک سندباکس Docker بدهید:

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

یادآوری ترتیب بارگذاری

text
workspace/skills      (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)

تغییرات مهارت‌ها و پیکربندی در نشست جدید بعدی، وقتی watcher فعال باشد، یا در نوبت بعدی عامل، وقتی watcher تغییری را تشخیص دهد، اعمال می‌شوند.

مرتبط

Was this useful?
On this page

On this page