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Вікно debounce для подій спостерігача 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 для 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, Git/local
Skills, інсталяторів залежностей 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[]Необов'язковий allowlist каталогів, які можуть містити виконуваний файл політики.
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 виконує синтетичну пробу встановлення з налаштованою
командою.
Масові оновлення застосовують політику до кожної цілі окремо: заблоковане оновлення Skills або 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" }));});Allowlist вбудованих Skills
skills.allowBundledstring[]Необов'язковий allowlist лише для вбудованих Skills. Коли задано, придатні лише вбудовані Skills зі списку. Керовані Skills, Skills рівня агента та Skills робочого простору не зачіпаються.
Записи окремих Skills (skills.entries)
Ключі в entries за замовчуванням відповідають name Skills. Якщо Skills
визначають metadata.openclaw.skillKey, використовуйте натомість цей ключ.
Беріть назви з дефісами в лапки (JSON5 дозволяє ключі в лапках).
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false вимикає Skills, навіть коли вони вбудовані або встановлені. Вбудовані
Skills 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₫��ܩAllowlist агентів (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[]Спільний базовий allowlist, успадкований агентами, які пропускають
agents.list[].skills. Пропустіть повністю, щоб за замовчуванням не
обмежувати Skills.
agents.list[].skillsstring[]Явний остаточний набір Skills для цього агента. Явні списки замінюють
успадковані значення за замовчуванням — вони не об'єднуються. Задайте [],
щоб не відкривати Skills для цього агента.
Workshop (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseКоли true, агенти можуть створювати очікувані пропозиції зі стійких сигналів
розмови після успішних ходів. Створення Skills за запитом користувача завжди
проходить через Skill Workshop незалежно від цього параметра.
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"pending вимагає схвалення оператора перед ініційованими агентом діями apply,
reject або quarantine. auto дозволяє ці дії без схвалення.
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseДозволити Skill Workshop apply записувати через симлінки Skills робочої області,
реальна ціль яких уже довірена через skills.load.allowSymlinkTargets.
Тримайте це вимкненим, якщо застосування згенерованих пропозицій не має змінювати
цей спільний корінь Skills.
skills.workshop.maxPendingnumberdefault: 50Максимальна кількість очікуваних і поміщених у quarantine пропозицій, що зберігаються для кожної робочої області.
skills.workshop.maxSkillBytesnumberdefault: 40000Максимальний розмір тіла пропозиції в байтах. Описи пропозицій жорстко обмежені 160 байтами, оскільки вони з’являються у виводі discovery та listing.
Корені Skills із симлінками
За замовчуванням корені Skills робочої області, агента проєкту, додаткового
каталогу та вбудовані корені Skills є межами containment. Папка Skills із
симлінком у <workspace>/skills, яка розв’язується за межі кореня, пропускається
з повідомленням у журналі.
Щоб дозволити навмисну структуру із симлінками, оголосіть довірену ціль:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}З цією конфігурацією <workspace>/skills/manager -> ~/Projects/manager/skills
приймається після розв’язання realpath. extraDirs сканує сусідній репозиторій
безпосередньо; allowSymlinkTargets зберігає шлях із симлінком для наявних
структур.
Skill Workshop apply за замовчуванням не записує через ці симлінки. Щоб дозволити Workshop apply змінювати Skills під уже довіреними цілями симлінків, увімкніть це окремо:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}Керовані каталоги ~/.openclaw/skills і персональні каталоги ~/.agents/skills
уже приймають симлінки каталогів Skills (containment для SKILL.md кожної
Skills усе одно застосовується).
Skills у sandbox та змінні середовища
Передайте секрети в Docker sandbox за допомогою:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}Нагадування про порядок завантаження
workspace/skills (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)Зміни до Skills і конфігурації набувають чинності в наступній новій сесії, коли watcher увімкнено, або на наступному ході агента, коли watcher виявить зміну.