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 для сканирования с самым низким приоритетом (ниже встроенных Skills и 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 — для среды выполнения OpenClaw CLI и 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 и плагинов согласно политике конкретного хоста. Политика выполняется после того, как OpenClaw подготовит исходные материалы, и до продолжения установки или обновления. Она применяется к Skills из ClawHub, загруженным Skills, Skills из Git и локальных источников, установщикам зависимостей Skills, а также источникам установки и обновления плагинов.

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 или плагина завершается ошибкой для этой цели, не отключая политику и не пропуская последующие цели в пакете.

Пример 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: "локальные пути плагинов не разрешены на этом хосте",      }),    );    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₫��ܩ

Списки разрешений агентов (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 для этого агента. Явно заданные списки заменяют унаследованные значения по умолчанию, а не объединяются с ними. Задайте [], чтобы не предоставлять этому агенту доступ ни к одному Skill.

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