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 і 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.

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

Необов'язковий 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:

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

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 для кожного агента.

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. Пропустіть повністю, щоб за замовчуванням не обмежувати 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, яка розв’язується за межі кореня, пропускається з повідомленням у журналі.

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

json5
{  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 під уже довіреними цілями симлінків, увімкніть це окремо:

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

Керовані каталоги ~/.openclaw/skills і персональні каталоги ~/.agents/skills уже приймають симлінки каталогів Skills (containment для SKILL.md кожної Skills усе одно застосовується).

Skills у sandbox та змінні середовища

Передайте секрети в Docker sandbox за допомогою:

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)

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

Пов’язане

Was this useful?
On this page

On this page