Перейти к основному содержанию
OpenClaw читает необязательную конфигурацию из ~/.openclaw/openclaw.json. Активный путь конфигурации должен быть обычным файлом. Макеты openclaw.json через symlink не поддерживаются для записей, которыми владеет OpenClaw; атомарная запись может заменить путь вместо сохранения symlink. Если вы храните конфигурацию вне каталога состояния по умолчанию, укажите OPENCLAW_CONFIG_PATH прямо на реальный файл. Если файл отсутствует, OpenClaw использует безопасные значения по умолчанию. Частые причины добавить конфигурацию:
  • Подключить каналы и управлять тем, кто может писать боту
  • Задать модели, инструменты, sandboxing или автоматизацию (cron, хуки)
  • Настроить сессии, медиа, сеть или UI
См. полный справочник по всем доступным полям. Агенты и автоматизация должны использовать config.schema.lookup для точной документации на уровне полей перед редактированием конфигурации. Используйте эту страницу для практических задач и справочник по конфигурации для более широкой карты полей и значений по умолчанию.
Новичок в настройке конфигурации? Начните с openclaw onboard для интерактивной настройки или посмотрите руководство примеры конфигурации с готовыми конфигурациями для копирования и вставки.

Минимальная конфигурация

// ~/.openclaw/openclaw.json
{
  agents: { defaults: { workspace: "~/.openclaw/workspace" } },
  channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}

Редактирование конфигурации

openclaw onboard       # full onboarding flow
openclaw configure     # config wizard

Строгая валидация

OpenClaw принимает только конфигурации, полностью соответствующие схеме. Неизвестные ключи, неверно сформированные типы или недопустимые значения заставляют Gateway отказаться запускаться. Единственное исключение на корневом уровне — $schema (строка), чтобы редакторы могли прикреплять метаданные JSON Schema.
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 секретов, такие как ***.

Распространенные задачи

У каждого канала есть собственный раздел конфигурации в channels.<provider>. См. отдельную страницу канала с шагами настройки:Все каналы используют один и тот же шаблон политики DM:
{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing",   // pairing | allowlist | open | disabled
      allowFrom: ["tg:123"], // only for allowlist/open
    },
  },
}
Задайте основную модель и необязательные резервные варианты:
{
  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 и поведения резервных вариантов.
  • Для пользовательских/самостоятельно размещенных провайдеров см. пользовательские провайдеры в справочнике.
Доступ к DM управляется отдельно для каждого канала через dmPolicy:
  • "pairing" (по умолчанию): неизвестные отправители получают одноразовый код сопряжения для подтверждения
  • "allowlist": только отправители в allowFrom (или в хранилище разрешенных сопряженных отправителей)
  • "open": разрешить все входящие DM (требует allowFrom: ["*"])
  • "disabled": игнорировать все DM
Для групп используйте groupPolicy + groupAllowFrom или allowlist, специфичные для канала.См. полный справочник для подробностей по каждому каналу.
Для групповых сообщений по умолчанию требуется упоминание. Настройте шаблоны триггеров для каждого агента. Обычные ответы в группах/каналах публикуются автоматически; включите путь 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 переопределяет это для групп/каналов.
  • См. полный справочник по режимам видимых ответов, переопределениям для каналов и режиму чата с самим собой.
Используйте 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
    ],
  },
}
Управляйте тем, насколько агрессивно 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, чтобы отключить автоматические перезапуски для одного канала или аккаунта, не отключая глобальный монитор.
  • См. проверки работоспособности для операционной отладки и полный справочник по всем полям.
Дайте локальным клиентам больше времени на завершение pre-auth WebSocket handshake на загруженных или маломощных хостах:
{
  gateway: {
    handshakeTimeoutMs: 30000,
  },
}
  • Значение по умолчанию — 15000 миллисекунд.
  • OPENCLAW_HANDSHAKE_TIMEOUT_MS по-прежнему имеет приоритет для разовых переопределений сервиса или оболочки.
  • Сначала предпочитайте исправлять задержки запуска/цикла событий; эта настройка предназначена для хостов, которые исправны, но медленны во время прогрева.
Сессии управляют непрерывностью и изоляцией разговоров:
{
  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-peer
  • threadBindings: глобальные значения по умолчанию для маршрутизации сеансов, привязанных к тредам (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 через ретранслятор для публичных сборок 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, чтобы трафик регистрации и отправки попадал в одно и то же развертывание ретранслятора.
Сквозной поток:
  1. Установите официальную/TestFlight-сборку iOS.
  2. Необязательно: настройте gateway.push.apns.relay.baseUrl на Gateway только при использовании намеренно отдельной пользовательской сборки с ретранслятором.
  3. Сопрягите приложение iOS с Gateway и дайте подключиться как сеансам узла, так и сеансам оператора.
  4. Приложение iOS получает идентичность Gateway, регистрируется в ретрансляторе с помощью App Attest и квитанции приложения, а затем публикует полезную нагрузку push.apns.register через ретранслятор в сопряженный Gateway.
  5. 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 для сквозного потока и Поток аутентификации и доверия для модели безопасности ретранслятора.
{
  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: {
    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.
Включите 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, чтобы организовывать большие конфигурации:
// ~/.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Нет
Сервер Gatewaygateway.* (порт, привязка, аутентификация, tailscale, TLS, HTTP)Да
Инфраструктураdiscovery, pluginsДа
gateway.reload и gateway.remote являются исключениями - их изменение не запускает перезапуск.

Планирование перезагрузки

Когда вы редактируете исходный файл, на который ссылается $include, OpenClaw планирует перезагрузку по исходной авторской структуре, а не по развернутому представлению в памяти. Это сохраняет предсказуемость решений горячей перезагрузки (горячее применение или перезапуск), даже когда один раздел верхнего уровня находится в собственном включенном файле, например plugins: { $include: "./plugins.json5" }. Планирование перезагрузки завершается отказом, если исходная структура неоднозначна.

Config RPC (программные обновления)

Для инструментов, которые записывают конфигурацию через API Gateway, предпочитайте такой поток:
  • config.schema.lookup, чтобы проверить одно поддерево (поверхностный узел схемы + сводки дочерних элементов)
  • config.get, чтобы получить текущий снимок плюс hash
  • config.patch для частичных обновлений (JSON merge patch: объекты сливаются, null удаляет, массивы заменяются при явном подтверждении через replacePaths, если записи будут удалены)
  • config.apply только когда вы намерены заменить всю конфигурацию
  • update.run для явного самообновления плюс перезапуска; включите continuationMessage, когда после перезапуска сессия должна выполнить один последующий ход
  • update.status, чтобы проверить последний sentinel перезапуска обновления и подтвердить запущенную версию после перезапуска
Агенты должны считать config.schema.lookup первой точкой обращения за точной документацией и ограничениями на уровне полей. Используйте Справочник по конфигурации, когда им нужна более широкая карта конфигурации, значения по умолчанию или ссылки на специальные справочники подсистем.
Записи control plane (config.apply, config.patch, update.run) ограничены 3 запросами за 60 секунд на deviceId+clientIp. Запросы на перезапуск объединяются, а затем между циклами перезапуска применяется пауза 30 секунд. update.status доступен только для чтения, но ограничен администраторами, потому что sentinel перезапуска может содержать сводки шагов обновления и хвосты вывода команд.
Пример частичного patch:
openclaw gateway call config.get --params '{}'  # capture payload.hash
openclaw 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-..." },
  },
}
Если включено и ожидаемые ключи не заданы, 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"
Для полей, поддерживающих объекты 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

Связанные материалы