Gateway
Конфигурация
OpenClaw читает необязательную конфигурацию JSON5 из ~/.openclaw/openclaw.json.
Активный путь конфигурации должен быть обычным файлом. Макеты openclaw.json
через symlink не поддерживаются для записей, которыми владеет OpenClaw; атомарная запись может заменить
путь вместо сохранения symlink. Если вы храните конфигурацию вне
каталога состояния по умолчанию, укажите OPENCLAW_CONFIG_PATH прямо на реальный файл.
Если файл отсутствует, OpenClaw использует безопасные значения по умолчанию. Частые причины добавить конфигурацию:
- Подключить каналы и управлять тем, кто может писать боту
- Задать модели, инструменты, sandboxing или автоматизацию (cron, хуки)
- Настроить сессии, медиа, сеть или UI
См. полный справочник по всем доступным полям.
Агенты и автоматизация должны использовать config.schema.lookup для точной документации
на уровне полей перед редактированием конфигурации. Используйте эту страницу для практических задач и
справочник по конфигурации для более широкой
карты полей и значений по умолчанию.
Минимальная конфигурация
// ~/.openclaw/openclaw.json{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}Редактирование конфигурации
Interactive wizard
openclaw onboard # full onboarding flowopenclaw configure # config wizardCLI (one-liners)
openclaw config get agents.defaults.workspaceopenclaw config set agents.defaults.heartbeat.every "2h"openclaw config unset plugins.entries.brave.config.webSearch.apiKeyControl UI
Откройте http://127.0.0.1:18789 и используйте вкладку Config.
Control UI строит форму из живой схемы конфигурации, включая документационные метаданные полей
title / description, а также схемы plugin и каналов, когда они
доступны, с редактором Raw JSON как резервным вариантом. Для интерфейсов
с детализацией и других инструментов Gateway также предоставляет config.schema.lookup, чтобы
получить один узел схемы, ограниченный путем, плюс краткие сведения о непосредственных дочерних элементах.
Direct edit
Редактируйте ~/.openclaw/openclaw.json напрямую. Gateway отслеживает файл и применяет изменения автоматически (см. горячая перезагрузка).
Строгая валидация
openclaw config schema выводит каноническую JSON Schema, используемую Control UI
и валидацией. config.schema.lookup получает один узел, ограниченный путем, плюс
краткие сведения о дочерних элементах для инструментов с детализацией. Документационные метаданные полей title/description
передаются через вложенные объекты, wildcard (*), элементы массива ([]) и ветви anyOf/
oneOf/allOf. Схемы runtime plugin и каналов объединяются, когда
загружен реестр манифестов.
Когда валидация не проходит:
- Gateway не загружается
- Работают только диагностические команды (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Запустите
openclaw doctor, чтобы увидеть точные проблемы - Запустите
openclaw doctor --fix(или--yes), чтобы применить исправления
Gateway хранит доверенную последнюю работоспособную копию после каждого успешного запуска,
но запуск и горячая перезагрузка не восстанавливают ее автоматически. Если openclaw.json
не проходит валидацию (включая локальную валидацию plugin), запуск Gateway завершается с ошибкой или
перезагрузка пропускается, а текущий runtime сохраняет последнюю принятую конфигурацию.
Запустите openclaw doctor --fix (или --yes), чтобы исправить конфигурацию с префиксами/перезаписанными данными или
восстановить последнюю работоспособную копию. Повышение до последней работоспособной копии пропускается, когда
кандидат содержит отредактированные placeholders секретов, такие как ***.
Распространенные задачи
Set up a channel (WhatsApp, Telegram, Discord, etc.)
У каждого канала есть собственный раздел конфигурации в channels.<provider>. См. отдельную страницу канала с шагами настройки:
- WhatsApp -
channels.whatsapp - Telegram -
channels.telegram - Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - Microsoft Teams -
channels.msteams - Slack -
channels.slack - Signal -
channels.signal - iMessage -
channels.imessage - Mattermost -
channels.mattermost
Все каналы используют один и тот же шаблон политики DM:
{ channels: { telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["tg:123"], // only for allowlist/open }, },}Choose and configure models
Задайте основную модель и необязательные резервные варианты:
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["openai/gpt-5.4"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "openai/gpt-5.4": { alias: "GPT" }, }, }, },}agents.defaults.modelsопределяет каталог моделей и действует как allowlist для/model; записиprovider/*фильтруют/model,/modelsи средства выбора моделей до выбранных провайдеров, при этом по-прежнему используя динамическое обнаружение моделей.- Используйте
openclaw config set agents.defaults.models '<json>' --strict-json --merge, чтобы добавить записи allowlist без удаления существующих моделей. Обычные замены, которые удалили бы записи, отклоняются, если не передать--replace. - Ссылки на модели используют формат
provider/model(например,anthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxуправляет уменьшением изображений стенограммы/инструментов (по умолчанию1200); более низкие значения обычно уменьшают использование vision-токенов в запусках с большим количеством скриншотов.- См. CLI моделей для переключения моделей в чате и аварийное переключение моделей для ротации auth и поведения резервных вариантов.
- Для пользовательских/самостоятельно размещенных провайдеров см. пользовательские провайдеры в справочнике.
Control who can message the bot
Доступ к DM управляется отдельно для каждого канала через dmPolicy:
"pairing"(по умолчанию): неизвестные отправители получают одноразовый код сопряжения для подтверждения"allowlist": только отправители вallowFrom(или в хранилище разрешенных сопряженных отправителей)"open": разрешить все входящие DM (требуетallowFrom: ["*"])"disabled": игнорировать все DM
Для групп используйте groupPolicy + groupAllowFrom или allowlist, специфичные для канала.
См. полный справочник для подробностей по каждому каналу.
Set up group chat mention gating
Для групповых сообщений по умолчанию требуется упоминание. Настройте шаблоны триггеров для каждого агента. Обычные ответы в группах/каналах публикуются автоматически; включите путь message-tool для общих комнат, где агент должен решать, когда говорить:
{ messages: { visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere groupChat: { visibleReplies: "message_tool", // opt-in; visible output requires message(action=send) unmentionedInbound: "room_event", // unmentioned always-on group chatter is quiet context }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- Упоминания в метаданных: нативные @-упоминания (WhatsApp tap-to-mention, Telegram @bot и т. д.)
- Текстовые шаблоны: безопасные regex-шаблоны в
mentionPatterns - Видимые ответы:
messages.visibleRepliesможет требовать отправки через message-tool глобально;messages.groupChat.visibleRepliesпереопределяет это для групп/каналов. - См. полный справочник по режимам видимых ответов, переопределениям для каналов и режиму чата с самим собой.
Restrict skills per agent
Используйте agents.defaults.skills как общий базовый набор, затем переопределяйте конкретных
агентов через agents.list[].skills:
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults { id: "locked-down", skills: [] }, // no skills ], },}- Опустите
agents.defaults.skills, чтобы Skills по умолчанию были без ограничений. - Опустите
agents.list[].skills, чтобы наследовать значения по умолчанию. - Задайте
agents.list[].skills: [], чтобы Skills отсутствовали. - См. Skills, конфигурация Skills и справочник по конфигурации.
Tune gateway channel health monitoring
Управляйте тем, насколько агрессивно gateway перезапускает каналы, которые выглядят устаревшими:
{ gateway: { channelHealthCheckMinutes: 5, channelStaleEventThresholdMinutes: 30, channelMaxRestartsPerHour: 10, }, channels: { telegram: { healthMonitor: { enabled: false }, accounts: { alerts: { healthMonitor: { enabled: true }, }, }, }, },}- Задайте
gateway.channelHealthCheckMinutes: 0, чтобы глобально отключить перезапуски health monitor. channelStaleEventThresholdMinutesдолжен быть больше интервала проверки или равен ему.- Используйте
channels.<provider>.healthMonitor.enabledилиchannels.<provider>.accounts.<id>.healthMonitor.enabled, чтобы отключить автоматические перезапуски для одного канала или аккаунта, не отключая глобальный монитор. - См. проверки работоспособности для операционной отладки и полный справочник по всем полям.
Tune gateway WebSocket handshake timeout
Дайте локальным клиентам больше времени на завершение pre-auth WebSocket handshake на загруженных или маломощных хостах:
{ gateway: { handshakeTimeoutMs: 30000, },}- Значение по умолчанию —
15000миллисекунд. OPENCLAW_HANDSHAKE_TIMEOUT_MSпо-прежнему имеет приоритет для разовых переопределений сервиса или оболочки.- Сначала предпочитайте исправлять задержки запуска/цикла событий; эта настройка предназначена для хостов, которые исправны, но медленны во время прогрева.
Configure sessions and resets
Сессии управляют непрерывностью и изоляцией разговоров:
{ session: { dmScope: "per-channel-peer", // recommended for multi-user threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, }, reset: { mode: "daily", atHour: 4, idleMinutes: 120, }, },}dmScope:main(общий) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: глобальные значения по умолчанию для маршрутизации сеансов, привязанных к тредам (Discord поддерживает/focus,/unfocus,/agents,/session idleи/session max-age).- См. Управление сеансами о областях действия, связях идентичностей и политике отправки.
- См. полный справочник по всем полям.
Включить песочницы
Запускайте сеансы агентов в изолированных средах песочницы:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}Сначала соберите образ: из checkout исходного кода выполните scripts/sandbox-setup.sh, а при установке из npm см. встроенную команду docker build в разделе Песочницы § Образы и настройка.
См. Песочницы для полного руководства и полный справочник по всем параметрам.
Включить push через ретранслятор для официальных сборок iOS
Push через ретранслятор для публичных сборок App Store/TestFlight использует размещенный ретранслятор OpenClaw: https://ios-push-relay.openclaw.ai.
Пользовательские развертывания ретранслятора требуют намеренно отдельного пути сборки/развертывания iOS, URL ретранслятора которого совпадает с URL ретранслятора Gateway. Если вы используете пользовательскую сборку с ретранслятором, задайте это в конфигурации Gateway:
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", // Optional. Default: 10000 timeoutMs: 10000, }, }, }, },}Эквивалент CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.comЧто это делает:
- Позволяет Gateway отправлять
push.test, сигналы пробуждения и пробуждения для переподключения через внешний ретранслятор. - Использует разрешение на отправку в области регистрации, пересланное сопряженным приложением iOS. Gateway не нужен токен ретранслятора на уровне всего развертывания.
- Привязывает каждую регистрацию через ретранслятор к идентичности Gateway, с которым было сопряжено приложение iOS, поэтому другой Gateway не сможет повторно использовать сохраненную регистрацию.
- Оставляет локальные/ручные сборки iOS на прямом APNs. Отправки через ретранслятор применяются только к официальным распространяемым сборкам, зарегистрированным через ретранслятор.
- Должно совпадать с базовым URL ретранслятора, встроенным в сборку iOS, чтобы трафик регистрации и отправки попадал в одно и то же развертывание ретранслятора.
Сквозной поток:
- Установите официальную/TestFlight-сборку iOS.
- Необязательно: настройте
gateway.push.apns.relay.baseUrlна Gateway только при использовании намеренно отдельной пользовательской сборки с ретранслятором. - Сопрягите приложение iOS с Gateway и дайте подключиться как сеансам узла, так и сеансам оператора.
- Приложение iOS получает идентичность Gateway, регистрируется в ретрансляторе с помощью App Attest и квитанции приложения, а затем публикует полезную нагрузку
push.apns.registerчерез ретранслятор в сопряженный Gateway. - Gateway сохраняет дескриптор ретранслятора и разрешение на отправку, затем использует их для
push.test, сигналов пробуждения и пробуждений для переподключения.
Операционные примечания:
- Если вы переключаете приложение iOS на другой Gateway, переподключите приложение, чтобы оно могло опубликовать новую регистрацию ретранслятора, привязанную к этому Gateway.
- Если вы выпускаете новую сборку iOS, указывающую на другое развертывание ретранслятора, приложение обновляет кешированную регистрацию ретранслятора вместо повторного использования старого источника ретранслятора.
Примечание о совместимости:
OPENCLAW_APNS_RELAY_BASE_URLиOPENCLAW_APNS_RELAY_TIMEOUT_MSпо-прежнему работают как временные переопределения через переменные окружения.- Пользовательские URL ретранслятора Gateway должны совпадать с базовым URL ретранслятора, встроенным в сборку iOS. Публичный канал релиза App Store отклоняет пользовательские переопределения URL ретранслятора iOS.
OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueостается аварийным выходом для разработки только через local loopback; не сохраняйте HTTP URL ретранслятора в конфигурации.
См. Приложение iOS для сквозного потока и Поток аутентификации и доверия для модели безопасности ретранслятора.
Настроить Heartbeat (периодические проверки)
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", }, }, },}every: строка длительности (30m,2h). Задайте0m, чтобы отключить.target:last|none|<channel-id>(например,discord,matrix,telegramилиwhatsapp)directPolicy:allow(по умолчанию) илиblockдля целей Heartbeat в стиле личных сообщений- См. Heartbeat для полного руководства.
Настроить задания Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // default; cron dispatch + isolated cron agent-turn execution sessionRetention: "24h", runLog: { maxBytes: "2mb", keepLines: 2000, }, },}sessionRetention: удалять завершенные изолированные сеансы запусков изsessions.json(по умолчанию24h; задайтеfalse, чтобы отключить).runLog: удалять сохраненные строки истории запусков Cron для каждого задания.maxBytesостается допустимым для старых журналов запусков на основе файлов.- См. Задания Cron для обзора функции и примеров CLI.
Настроить Webhook-и (хуки)
Включите HTTP-конечные точки Webhook на Gateway:
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: false, allowedSessionKeyPrefixes: ["hook:"], mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "main", deliver: true, }, ], },}Примечание по безопасности:
- Считайте все содержимое полезных нагрузок хуков/Webhook недоверенным вводом.
- Используйте выделенный
hooks.token; не используйте повторно активные секреты аутентификации Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENилиgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD). - Аутентификация хуков выполняется только через заголовки (
Authorization: Bearer ...илиx-openclaw-token); токены в строке запроса отклоняются. hooks.pathне может быть/; держите вход Webhook на выделенном подпути, например/hooks.- Держите флаги обхода небезопасного содержимого отключенными (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), кроме случаев строго ограниченной отладки. - Если вы включаете
hooks.allowRequestSessionKey, также задайтеhooks.allowedSessionKeyPrefixes, чтобы ограничить выбираемые вызывающей стороной ключи сеансов. - Для агентов, запускаемых хуками, предпочитайте сильные современные уровни моделей и строгую политику инструментов (например, только обмен сообщениями плюс песочница, где возможно).
См. полный справочник по всем параметрам сопоставления и интеграции Gmail.
Настроить маршрутизацию нескольких агентов
Запускайте несколько изолированных агентов с отдельными рабочими пространствами и сеансами:
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}См. Мультиагентная работа и полный справочник по правилам привязки и профилям доступа для отдельных агентов.
Разделить конфигурацию на несколько файлов ($include)
Используйте $include, чтобы организовывать большие конфигурации:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- Один файл: заменяет содержащий объект
- Массив файлов: глубоко объединяется по порядку (последний имеет приоритет)
- Соседние ключи: объединяются после включений (переопределяют включенные значения)
- Вложенные включения: поддерживаются до 10 уровней глубины
- Относительные пути: разрешаются относительно включающего файла
- Формат пути: пути включения не должны содержать нулевых байтов и должны быть строго короче 4096 символов до и после разрешения
- Записи, принадлежащие OpenClaw: когда запись изменяет только один раздел верхнего уровня,
подкрепленный включением одного файла, например
plugins: { $include: "./plugins.json5" }, OpenClaw обновляет этот включенный файл и оставляетopenclaw.jsonнетронутым - Неподдерживаемая сквозная запись: корневые включения, массивы включений и включения с соседними переопределениями завершаются закрыто для записей, принадлежащих OpenClaw, вместо выравнивания конфигурации
- Ограничение: пути
$includeдолжны разрешаться внутри каталога, содержащегоopenclaw.json. Чтобы совместно использовать дерево на разных машинах или для разных пользователей, задайтеOPENCLAW_INCLUDE_ROOTSкак список путей (:в POSIX,;в Windows) к дополнительным каталогам, на которые могут ссылаться включения. Символические ссылки разрешаются и проверяются повторно, поэтому путь, который лексически находится в каталоге конфигурации, но чей реальный целевой путь выходит за пределы всех разрешенных корней, все равно отклоняется. - Обработка ошибок: понятные ошибки для отсутствующих файлов, ошибок разбора, циклических включений, недопустимого формата пути и чрезмерной длины
Горячая перезагрузка конфигурации
Gateway отслеживает ~/.openclaw/openclaw.json и применяет изменения автоматически: ручной перезапуск для большинства настроек не требуется.
Прямые правки файла считаются недоверенными, пока не пройдут валидацию. Наблюдатель ждет,
пока уляжется шум временной записи/переименования от редактора, читает итоговый файл и отклоняет
недопустимые внешние правки без перезаписи openclaw.json. Записи конфигурации,
принадлежащие OpenClaw, проходят через тот же шлюз схемы перед записью; разрушительные перезаписи,
такие как удаление gateway.mode или уменьшение файла более чем наполовину, отклоняются и
сохраняются как .rejected.* для проверки.
Если вы видите config reload skipped (invalid config) или запуск сообщает Invalid config, проверьте конфигурацию, выполните openclaw config validate, затем выполните openclaw doctor --fix для исправления. См. Устранение неполадок Gateway
для контрольного списка.
Режимы перезагрузки
| Режим | Поведение |
|---|---|
hybrid (по умолчанию) |
Мгновенно горячо применяет безопасные изменения. Автоматически перезапускается для критических. |
hot |
Горячо применяет только безопасные изменения. Записывает предупреждение, когда нужен перезапуск: вы выполняете его сами. |
restart |
Перезапускает Gateway при любом изменении конфигурации, безопасном или нет. |
off |
Отключает отслеживание файлов. Изменения вступают в силу при следующем ручном перезапуске. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}Что применяется горячо, а что требует перезапуска
Большинство полей применяются горячо без простоя. В режиме hybrid изменения, требующие перезапуска, обрабатываются автоматически.
| Категория | Поля | Требуется перезапуск? |
|---|---|---|
| Каналы | channels.*, web (WhatsApp) - все встроенные каналы и каналы Plugin |
Нет |
| Агент и модели | agent, agents, models, routing |
Нет |
| Автоматизация | hooks, cron, agent.heartbeat |
Нет |
| Сессии и сообщения | session, messages |
Нет |
| Инструменты и медиа | tools, browser, skills, mcp, audio, talk |
Нет |
| UI и прочее | ui, logging, identity, bindings |
Нет |
| Сервер Gateway | gateway.* (порт, привязка, аутентификация, tailscale, TLS, HTTP) |
Да |
| Инфраструктура | discovery, plugins |
Да |
Планирование перезагрузки
Когда вы редактируете исходный файл, на который ссылается $include, OpenClaw планирует
перезагрузку по исходной авторской структуре, а не по развернутому представлению в памяти.
Это сохраняет предсказуемость решений горячей перезагрузки (горячее применение или перезапуск), даже когда
один раздел верхнего уровня находится в собственном включенном файле, например
plugins: { $include: "./plugins.json5" }. Планирование перезагрузки завершается отказом, если
исходная структура неоднозначна.
Config RPC (программные обновления)
Для инструментов, которые записывают конфигурацию через API Gateway, предпочитайте такой поток:
config.schema.lookup, чтобы проверить одно поддерево (поверхностный узел схемы + сводки дочерних элементов)config.get, чтобы получить текущий снимок плюсhashconfig.patchдля частичных обновлений (JSON merge patch: объекты сливаются,nullудаляет, массивы заменяются при явном подтверждении черезreplacePaths, если записи будут удалены)config.applyтолько когда вы намерены заменить всю конфигурациюupdate.runдля явного самообновления плюс перезапуска; включитеcontinuationMessage, когда после перезапуска сессия должна выполнить один последующий ходupdate.status, чтобы проверить последний sentinel перезапуска обновления и подтвердить запущенную версию после перезапуска
Агенты должны считать config.schema.lookup первой точкой обращения за точной
документацией и ограничениями на уровне полей. Используйте Справочник по конфигурации,
когда им нужна более широкая карта конфигурации, значения по умолчанию или ссылки на специальные
справочники подсистем.
Пример частичного patch:
openclaw gateway call config.get --params '{}' # capture payload.hashopenclaw gateway call config.patch --params '{ "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }", "baseHash": "<hash>"}'И config.apply, и config.patch принимают raw, baseHash, sessionKey,
note и restartDelayMs. baseHash обязателен для обоих методов, когда
конфигурация уже существует.
config.patch также принимает replacePaths, массив путей конфигурации, для которых
замена массива является намеренной. Если patch заменит или удалит существующий массив
с меньшим количеством записей, Gateway отклонит запись, если этот точный путь
не указан в replacePaths; вложенные массивы в элементах массива используют [], например
agents.list[].skills. Это не дает усеченным снимкам config.get
незаметно перезаписать массивы маршрутизации или списков разрешений. Используйте config.apply, когда вы
намерены заменить всю конфигурацию.
Переменные окружения
OpenClaw читает переменные окружения из родительского процесса, а также из:
.envиз текущего рабочего каталога (если есть)~/.openclaw/.env(глобальный fallback)
Ни один из файлов не переопределяет существующие переменные окружения. Вы также можете задавать inline-переменные окружения в конфигурации:
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-..." }, },}Импорт окружения shell (необязательно)
Если включено и ожидаемые ключи не заданы, OpenClaw запускает ваш login shell и импортирует только отсутствующие ключи:
{env: { shellEnv: { enabled: true, timeoutMs: 15000 },},}Эквивалент переменной окружения: OPENCLAW_LOAD_SHELL_ENV=1
Подстановка переменных окружения в значениях конфигурации
Ссылайтесь на переменные окружения в любом строковом значении конфигурации с помощью ${VAR_NAME}:
{gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },}Правила:
- Сопоставляются только имена в верхнем регистре:
[A-Z_][A-Z0-9_]* - Отсутствующие или пустые переменные вызывают ошибку во время загрузки
- Экранируйте через
$${VAR}для буквального вывода - Работает внутри файлов
$include - Inline-подстановка:
"${BASE}/v1"→"https://api.example.com/v1"
Ссылки на секреты (env, file, exec)
Для полей, поддерживающих объекты SecretRef, можно использовать:
{models: { providers: { openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } }, },},skills: { entries: { "image-lab": { apiKey: { source: "file", provider: "filemain", id: "/skills/entries/image-lab/apiKey", }, }, },},channels: { googlechat: { serviceAccountRef: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, },},}Подробности SecretRef (включая secrets.providers для env/file/exec) находятся в Управление секретами.
Поддерживаемые пути учетных данных перечислены в Поверхность учетных данных SecretRef.
См. Окружение для полного порядка приоритета и источников.
Полный справочник
Полный справочник по всем полям см. в Справочнике по конфигурации.
Связанные материалы: Примеры конфигурации · Справочник по конфигурации · Doctor