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.load.allowSymlinkTargetsstring[]Доверенные реальные целевые каталоги, в которые могут разрешаться символические ссылки
на папки навыков, даже если символическая ссылка находится за пределами настроенного корня.
Используйте это для намеренной компоновки соседних репозиториев, например
<workspace>/skills/manager -> ~/Projects/manager/skills. Ограничивайте этот список —
не указывайте широкие корни, такие как ~ или ~/Projects.
skills.load.watchbooleandefault: trueОтслеживает папки навыков и обновляет снимок навыков при изменении файлов
SKILL.md. Охватывает вложенные файлы в сгруппированных корнях навыков.
skills.load.watchDebounceMsnumberdefault: 250Окно устранения дребезга для событий наблюдателя навыков в миллисекундах.
Установка (skills.install)
skills.install.preferBrewbooleandefault: trueПредпочитает установщики Homebrew, когда доступен brew.
skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"Предпочтительный менеджер пакетов Node для установки навыков. Этот параметр влияет только
на установку навыков — среда выполнения CLI и Gateway OpenClaw требует Node, поскольку
каноническое хранилище состояния использует node:sqlite. openclaw setup --node-manager и
openclaw onboard --node-manager принимают npm, pnpm или bun;
задайте "yarn" непосредственно в конфигурации для установки навыков через Yarn.
skills.install.allowUploadedArchivesbooleandefault: falseРазрешает доверенным клиентам Gateway operator.admin устанавливать закрытые
ZIP-архивы, подготовленные через skills.upload.*. Для обычной установки из ClawHub
этот параметр не нужен.
Политика установки оператора (security.installPolicy)
Используйте security.installPolicy, когда операторам нужна доверенная локальная команда для
разрешения или блокировки установки навыков и плагинов с учётом политики конкретного хоста.
Политика запускается после того, как OpenClaw подготовил исходные материалы, но до продолжения
установки или обновления. Она применяется к навыкам ClawHub, загруженным навыкам, навыкам
из Git или локальных источников, установщикам зависимостей навыков, а также источникам
установки и обновления плагинов.
{ 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 выполняет синтетическую пробную установку с помощью настроенной команды.
При массовых обновлениях политика применяется отдельно к каждой цели: заблокированное обновление навыка или плагина завершается ошибкой для этой цели, не отключая политику и не пропуская последующие цели в пакете.
Пример 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: "локальные пути плагинов не разрешены на этом хосте", }), ); return; } process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});Список разрешённых встроенных навыков
skills.allowBundledstring[]Необязательный список разрешений только для встроенных навыков. Если он задан, допускаются только перечисленные встроенные навыки. Управляемые навыки, навыки уровня агента и рабочей области остаются без изменений.
Записи отдельных навыков (skills.entries)
По умолчанию ключи в entries соответствуют name навыка. Если навык
определяет metadata.openclaw.skillKey, используйте вместо него этот ключ. Имена с дефисами
заключайте в кавычки (JSON5 допускает ключи в кавычках).
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false отключает навык, даже если он встроен или установлен.
Встроенный навык coding-agent необходимо включать явно — задайте для него
true и убедитесь, что claude, codex,
opencode или другой поддерживаемый CLI установлен и прошёл аутентификацию.
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
Вспомогательное поле для навыков, объявляющих metadata.openclaw.primaryEnv.
Поддерживает строку открытого текста или SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }.
"skills.entries.<key�����r�"skills.entries.<key�w₫��ܩСписки разрешений агентов (agents)
Используйте конфигурацию агента, если требуется использовать одинаковые корни навыков машины и рабочей области, но разные наборы видимых навыков для каждого агента.
{ agents: { defaults: { skills: ["github", "weather"], // общий базовый набор }, list: [ { id: "writer" }, // наследует github, weather { id: "docs", skills: ["docs-search"] }, // полностью заменяет значения по умолчанию { id: "locked-down", skills: [] }, // без навыков ], },}agents.defaults.skillsstring[]Общий базовый список разрешений, наследуемый агентами, у которых отсутствует
agents.list[].skills. Полностью опустите его, чтобы по умолчанию не ограничивать навыки.
agents.list[].skillsstring[]Явный окончательный набор навыков для этого агента. Явные списки заменяют
унаследованные значения по умолчанию — они не объединяются. Задайте
[], чтобы не предоставлять этому агенту никаких навыков.
Мастерская (skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falseКогда true, OpenClaw может создавать ожидающие предложения на основе устойчивых исправлений
и анализировать успешно завершённую существенную работу после перехода системы
в состояние простоя. Это может добавить фоновый запуск модели после подходящих ходов. Инициированное пользователем
создание навыков и /learn продолжают работать, когда параметр имеет значение false.
Условия соответствия, сведения о конфиденциальности и стоимости, разрешения только на создание предложений и рекомендации по устранению неполадок см. в разделе Самообучение.
skills.workshop.approvalPolicy"pending" | "auto"default: "pending"pending требует одобрения оператора, прежде чем агент сможет самостоятельно применить, отклонить
или поместить предложение в карантин. auto разрешает эти действия без одобрения.
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,
которая разрешается за пределами корневого каталога, пропускается с записью сообщения в журнал.
Чтобы разрешить намеренную структуру с символическими ссылками, укажите доверенную цель:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}С этой конфигурацией <workspace>/skills/manager -> ~/Projects/manager/skills
принимается после разрешения фактического пути. extraDirs сканирует соседний репозиторий
напрямую; allowSymlinkTargets сохраняет путь с символической ссылкой для существующих
структур.
По умолчанию Skill Workshop при применении не записывает данные через эти символические ссылки. Чтобы разрешить Workshop при применении изменять навыки в уже доверенных целях символических ссылок, включите это отдельно:
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}Управляемые каталоги ~/.openclaw/skills и личные каталоги ~/.agents/skills
уже безусловно принимают символические ссылки на каталоги навыков (ограничение вложенности
SKILL.md для каждого навыка всё равно применяется) — allowSymlinkTargets требуется только
для корневых каталогов рабочей области, дополнительных каталогов и агента проекта (<workspace>/.agents/skills).
Навыки в песочнице и переменные окружения
Передайте секреты в песочницу Docker следующим образом:
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}Напоминание о порядке загрузки
workspace/skills (наивысший приоритет)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsвстроенные навыкиskills.load.extraDirs (наименьший приоритет)Изменения навыков и конфигурации вступают в силу в следующем новом сеансе, если наблюдатель включён, либо при следующем ходе агента, когда наблюдатель обнаружит изменение.
Связанные разделы
Назначение навыков, порядок загрузки, ограничение доступа и формат SKILL.md.
Создание пользовательских навыков рабочей области.
Очередь предложений для навыков, подготовленных агентом.
Консервативные, явно включаемые предложения на основе завершённой работы.
Встроенный каталог команд с косой чертой и директивы чата.