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: "auto",      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 для сканування з найнижчим пріоритетом (після вбудованих і Plugin Skills). Шляхи розгортаються з підтримкою ~.

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 — для CLI OpenClaw і середовища виконання Gateway потрібен Node, оскільки канонічне сховище стану використовує node:sqlite. 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)

Використовуйте security.installPolicy, коли операторам потрібна довірена локальна команда, щоб дозволяти або блокувати встановлення Skills і plugins відповідно до політики конкретного хоста. Політика виконується після того, як OpenClaw підготував вихідні матеріали, і до продовження встановлення або оновлення. Вона застосовується до Skills із ClawHub, завантажених Skills, Skills із Git або локального джерела, інсталяторів залежностей Skills, а також джерел встановлення й оновлення plugins.

json5
{  security: {    installPolicy: {      enabled: true,      // Пропустіть targets, щоб охопити всі підтримувані цілі.      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

Дозволяє налаштованому шляху команди бути символічним посиланням. Розв’язана ціль усе одно має відповідати іншим перевіркам шляху. Аргументи сценарію інтерпретатора мають бути безпосередніми звичайними файлами, а не символічними посиланнями.

Політика отримує через stdin один об’єкт JSON із protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, необов’язковим структурованим source, структурованим origin і request. Вона має записати через stdout один об’єкт JSON: { "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: "локальні шляхи plugins не схвалені на цьому хості",      }),    );    return;  }  process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});

Список дозволених вбудованих Skills

skills.allowBundledstring[]

Необов’язковий список дозволених лише для вбудованих Skills. Якщо його задано, придатними є лише вбудовані Skills зі списку. Це не впливає на керовані Skills, Skills рівня агента та Skills робочого простору.

Записи окремих Skills (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₫��ܩ

Списки дозволених Skills агентів (agents)

Використовуйте конфігурацію агента, коли потрібні ті самі кореневі каталоги Skills машини або робочого простору, але різний набір видимих Skills для кожного агента.

json5
{  agents: {    defaults: {      skills: ["github", "weather"], // спільна базова конфігурація    },    list: [      { id: "writer" }, // успадковує github, weather      { id: "docs", skills: ["docs-search"] }, // повністю замінює значення за замовчуванням      { id: "locked-down", skills: [] }, // без Skills    ],  },}
agents.defaults.skillsstring[]

Спільний базовий список дозволених, який успадковують агенти, що не вказують agents.list[].skills. Повністю пропустіть його, щоб за замовчуванням не обмежувати Skills.

agents.list[].skillsstring[]

Явний остаточний набір Skills для цього агента. Явні списки замінюють успадковані значення за замовчуванням — вони не об’єднуються. Установіть [], щоб не надавати цьому агенту жодних Skills.

Workshop (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Коли true, OpenClaw може створювати пропозиції зі статусом очікування на основі довготривалих виправлень і переглядати успішну, суттєву завершену роботу після переходу системи в режим простою. Це може додати фоновий запуск моделі після відповідних ходів. Ініційоване користувачем створення навичок і /learn продовжують працювати, коли параметр має значення false.

Відомості про критерії відповідності, конфіденційність, вартість, дозволи лише на створення пропозицій і усунення несправностей див. у розділі Самонавчання.

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

auto дозволяє агенту ініціювати застосування, відхилення або карантин без додаткового запиту на схвалення. pending вимагає схвалення оператора.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Дозволяє застосуванню Skill Workshop записувати через символічні посилання навичок робочого простору, фактична ціль яких уже є довіреною згідно з skills.load.allowSymlinkTargets. Не вмикайте цей параметр, якщо застосування згенерованих пропозицій не має змінювати цей спільний корінь навичок.

skills.workshop.maxPendingnumberdefault: 50

Максимальна кількість пропозицій зі статусом очікування та в карантині, що зберігаються для кожного робочого простору (допустимий діапазон: 1-200).

skills.workshop.maxSkillBytesnumberdefault: 40000

Максимальний розмір вмісту пропозиції в байтах (допустимий діапазон: 1024-200000). Описи пропозицій окремо мають жорстке обмеження 160 байт, оскільки вони відображаються у результатах виявлення та списках.

Відомості про життєвий цикл пропозицій, команди CLI, параметри інструментів агента та методи Gateway, якими керує ця конфігурація, див. у розділі Skill Workshop.

Корені навичок із символічними посиланнями

За замовчуванням корені навичок робочого простору, агента проєкту, додаткових каталогів і вбудованих навичок є межами вкладеності. Папка навички із символічним посиланням у <workspace>/skills, що після визначення шляху розташована поза коренем, пропускається з повідомленням у журналі.

Щоб дозволити навмисну структуру із символічними посиланнями, оголосіть довірену ціль:

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

З цією конфігурацією <workspace>/skills/manager -> ~/Projects/manager/skills приймається після визначення фактичного шляху. extraDirs сканує сусідній репозиторій безпосередньо; allowSymlinkTargets зберігає шлях із символічним посиланням для наявних структур.

Застосування Skill Workshop за замовчуванням не записує через ці символічні посилання. Щоб дозволити Workshop під час застосування змінювати навички за вже довіреними цілями символічних посилань, увімкніть це окремо:

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

Керовані каталоги ~/.openclaw/skills і особисті каталоги ~/.agents/skills уже безумовно приймають символічні посилання на каталоги навичок (обмеження вкладеності SKILL.md для кожної навички все одно застосовується) — allowSymlinkTargets потрібен лише для коренів робочого простору, додаткових каталогів і агента проєкту (<workspace>/.agents/skills).

Ізольовані навички та змінні середовища

Передайте секрети в ізольоване середовище Docker так:

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

Нагадування про порядок завантаження

text
workspace/skills      (найвищий пріоритет)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsвбудовані навичкиskills.load.extraDirs (найнижчий пріоритет)

Зміни навичок і конфігурації набувають чинності в наступному новому сеансі, якщо спостерігач увімкнений, або під час наступного ходу агента, коли спостерігач виявить зміну.

Пов’язані матеріали

Was this useful?
On this page

On this page