Gateway
Довідник конфігурації
Довідник основної конфігурації для ~/.openclaw/openclaw.json. Огляд, орієнтований на завдання, див. у Конфігурація.
Охоплює основні поверхні конфігурації OpenClaw і містить посилання на окремі докладні довідники підсистем. Каталоги команд, що належать каналам і плагінам, а також глибокі параметри пам’яті/QMD розміщені на власних сторінках, а не на цій.
Джерело істини в коді:
openclaw config schemaвиводить актуальну JSON Schema, що використовується для валідації та Control UI, з об’єднаними метаданими bundled/plugin/channel, коли вони доступніconfig.schema.lookupповертає один вузол схеми, обмежений шляхом, для інструментів деталізаціїpnpm config:docs:check/pnpm config:docs:genперевіряють базовий хеш документації конфігурації проти поточної поверхні схеми
Шлях пошуку агента: використовуйте дію інструмента gateway config.schema.lookup для
точної документації на рівні полів і обмежень перед редагуванням. Використовуйте
Конфігурація для настанов, орієнтованих на завдання, а цю сторінку
для ширшої карти полів, типових значень і посилань на довідники підсистем.
Окремі докладні довідники:
- Довідник конфігурації пам’яті для
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationsі конфігурації dreaming уplugins.entries.memory-core.config.dreaming - Slash-команди для поточного вбудованого + bundled каталогу команд
- сторінки власників каналів/плагінів для поверхонь команд, специфічних для каналів
Формат конфігурації — JSON5 (дозволені коментарі + кінцеві коми). Усі поля необов’язкові - OpenClaw використовує безпечні типові значення, коли їх пропущено.
Канали
Ключі конфігурації для окремих каналів перенесено на окрему сторінку - див.
Конфігурація - канали для channels.*,
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, gating згадок).
Типові значення агента, multi-agent, сесії та повідомлення
Перенесено на окрему сторінку - див. Конфігурація - агенти для:
agents.defaults.*(робочий простір, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox)multiAgent.*(multi-agent маршрутизація та прив’язки)session.*(життєвий цикл сесії, compaction, pruning)messages.*(доставка повідомлень, TTS, рендеринг markdown)talk.*(режим Talk)talk.consultThinkingLevel: перевизначення рівня thinking для повного запуску агента OpenClaw за realtime-консультаціями Control UI Talktalk.consultFastMode: одноразове перевизначення швидкого режиму для realtime-консультацій Control UI Talktalk.speechLocale: необов’язковий ідентифікатор локалі BCP 47 для розпізнавання мовлення Talk на iOS/macOStalk.silenceTimeoutMs: коли не задано, Talk зберігає типове вікно паузи платформи перед надсиланням транскрипту (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: резервний relay Gateway для фіналізованих realtime-транскриптів Talk, які пропускаютьopenclaw_agent_consult
Інструменти та користувацькі провайдери
Політики інструментів, експериментальні перемикачі, конфігурацію інструментів на базі провайдерів і налаштування користувацьких провайдерів / base-URL перенесено на окрему сторінку - див. Конфігурація - інструменти та користувацькі провайдери.
Моделі
Визначення провайдерів, allowlist моделей і налаштування користувацьких провайдерів розміщені в
Конфігурація - інструменти та користувацькі провайдери.
Корінь models також відповідає за глобальну поведінку каталогу моделей.
{ models: { // Optional. Default: true. Requires a Gateway restart when changed. pricing: { enabled: false }, },}models.mode: поведінка каталогу провайдера (mergeабоreplace).models.providers: мапа користувацьких провайдерів, ключована за ідентифікатором провайдера.models.providers.*.localService: необов’язковий менеджер процесів на вимогу для локальних серверів моделей. OpenClaw перевіряє налаштований endpoint здоров’я, запускає абсолютнуcommand, коли потрібно, очікує готовності, а потім надсилає запит моделі. Див. Локальні сервіси моделей.models.pricing.enabled: керує фоновим початковим завантаженням цін, яке стартує після того, як sidecars і канали досягають ready-шляху Gateway. Колиfalse, Gateway пропускає отримання каталогів цін OpenRouter і LiteLLM; налаштовані значенняmodels.providers.*.models[].costвсе одно працюють для локальних оцінок вартості.
MCP
Визначення MCP-серверів, керованих OpenClaw, розміщені в mcp.servers і
використовуються вбудованим OpenClaw та іншими runtime-адаптерами. Команди openclaw mcp list,
show, set і unset керують цим блоком без підключення до
цільового сервера під час редагування конфігурації.
{ mcp: { // Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction. sessionIdleTtlMs: 600000, servers: { docs: { command: "npx", args: ["-y", "@modelcontextprotocol/server-fetch"], }, remote: { url: "https://example.com/mcp", transport: "streamable-http", // streamable-http | sse timeout: 20, connectTimeout: 5, supportsParallelToolCalls: true, headers: { Authorization: "Bearer ${MCP_REMOTE_TOKEN}", }, auth: "oauth", oauth: { scope: "docs.read", }, sslVerify: true, clientCert: "/path/to/client.crt", clientKey: "/path/to/client.key", toolFilter: { include: ["search_*"], exclude: ["admin_*"], }, // Optional Codex app-server projection controls. codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers: іменовані stdio або віддалені визначення MCP-серверів для runtime, які надають налаштовані MCP-інструменти. Віддалені записи використовуютьtransport: "streamable-http"абоtransport: "sse";type: "http"— це CLI-native alias, якийopenclaw mcp setіopenclaw doctor --fixнормалізують у канонічне полеtransport.mcp.servers.<name>.enabled: задайтеfalse, щоб зберегти визначення сервера, виключивши його з discovery MCP у вбудованому OpenClaw і проєкції інструментів.mcp.servers.<name>.timeout/requestTimeoutMs: timeout запиту MCP для окремого сервера в секундах або мілісекундах.mcp.servers.<name>.connectTimeout/connectionTimeoutMs: timeout підключення для окремого сервера в секундах або мілісекундах.mcp.servers.<name>.supportsParallelToolCalls: необов’язкова підказка щодо паралельності для адаптерів, які можуть обирати, чи виконувати паралельні виклики MCP-інструментів.mcp.servers.<name>.auth: задайте"oauth"для HTTP MCP-серверів, які потребують OAuth. Запустітьopenclaw mcp login <name>, щоб зберегти токени в стані OpenClaw.mcp.servers.<name>.oauth: необов’язкові перевизначення OAuth scope, redirect URL і client metadata URL.mcp.servers.<name>.sslVerify,clientCert,clientKey: елементи керування HTTP TLS для приватних endpoint і mutual TLS.mcp.servers.<name>.toolFilter: необов’язковий вибір інструментів для окремого сервера.includeобмежує виявлені MCP-інструменти іменами, що збігаються;excludeприховує імена, що збігаються. Записи — це точні імена MCP-інструментів або прості*globs. Сервери з ресурсами або prompts також генерують імена службових інструментів (resources_list,resources_read,prompts_list,prompts_get), і ці імена використовують той самий фільтр.mcp.servers.<name>.codex: необов’язкові елементи керування проєкцією Codex app-server. Цей блок є метаданими OpenClaw лише для потоків Codex app-server; він не впливає на ACP-сесії, загальну конфігурацію Codex harness або інші runtime-адаптери. Непорожнійcodex.agentsобмежує сервер переліченими ідентифікаторами агентів OpenClaw. Порожні, blank або недійсні scoped списки агентів відхиляються валідацією конфігурації та пропускаються runtime-шляхом проєкції замість того, щоб ставати глобальними.codex.defaultToolsApprovalModeвиводить нативнийdefault_tools_approval_modeCodex для цього сервера. OpenClaw видаляє блокcodexперед передаванням нативної конфігураціїmcp_serversу Codex. Пропустіть блок, щоб сервер проєктувався для кожного агента Codex app-server із типовою поведінкою схвалення MCP у Codex.mcp.sessionIdleTtlMs: idle TTL для session-scoped bundled MCP runtime. Одноразові вбудовані запуски запитують очищення після завершення запуску; цей TTL є backstop для довготривалих сесій і майбутніх викликачів.- Зміни в
mcp.*hot-apply шляхом dispose cached session MCP runtime. Наступне discovery/використання інструментів відтворює їх із нової конфігурації, тому видалені записиmcp.serversприбираються негайно, а не чекають idle TTL. - Runtime discovery також враховує сповіщення про зміни списку MCP-інструментів, скидаючи cached каталог для цієї сесії. Сервери, які оголошують ресурси або prompts, отримують службові інструменти для переліку/читання ресурсів і переліку/отримання prompts. Повторні збої викликів інструментів ненадовго призупиняють відповідний сервер перед наступною спробою виклику.
Див. MCP і CLI backends щодо поведінки runtime.
Skills
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, workshop: { allowSymlinkTargetWrites: false, }, entries: { "image-lab": { apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}allowBundled: необов’язковий allowlist лише для bundled skills (не впливає на managed/workspace skills).load.extraDirs: додаткові спільні корені skill (найнижчий пріоритет).load.allowSymlinkTargets: довірені реальні цільові корені, у які symlink skill можуть resolve, коли link розміщений поза налаштованим source root.workshop.allowSymlinkTargetWrites: дозволяє Skill Workshop apply записувати через уже довірені symlink targets (типово: false).install.preferBrew: коли true, віддає перевагу інсталяторам Homebrew, якщоbrewдоступний, перед fallback до інших типів інсталяторів.install.nodeManager: преференція інсталятора node для специфікаційmetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: дозволяє довіреним клієнтам Gatewayoperator.adminінсталювати приватні zip-архіви, підготовлені черезskills.upload.*(типово: false). Це вмикає лише шлях uploaded-archive; звичайні інсталяції ClawHub цього не потребують.entries.<skillKey>.enabled: falseвимикає skill, навіть якщо він bundled/installed.entries.<skillKey>.apiKey: зручність для skills, які оголошують основну змінну env (plaintext string або об’єкт SecretRef).
Плагіни
{ plugins: { enabled: true, allow: ["voice-call"], deny: [], load: { paths: ["~/Projects/oss/voice-call-plugin"], }, entries: { "voice-call": { enabled: true, hooks: { allowPromptInjection: false, }, config: { provider: "twilio" }, }, }, },}- Завантажується з каталогів пакетів або bundle-каталогів у
~/.openclaw/extensionsі<workspace>/.openclaw/extensions, а також із файлів або каталогів, перелічених уplugins.load.paths. - Розміщуйте окремі файли плагінів у
plugins.load.paths; автоматично виявлені корені розширень ігнорують файли.js,.mjsі.tsверхнього рівня, щоб допоміжні скрипти в цих коренях не блокували запуск. - Виявлення приймає нативні плагіни OpenClaw, а також сумісні Codex bundles і Claude bundles, включно з Claude bundles без маніфеста зі стандартною структурою.
- Зміни конфігурації потребують перезапуску gateway.
allow: необов’язковий список дозволених плагінів (завантажуються лише перелічені плагіни).denyмає пріоритет.plugins.entries.<id>.apiKey: зручне поле API-ключа на рівні плагіна (коли підтримується плагіном).plugins.entries.<id>.env: мапа змінних середовища в області плагіна.plugins.entries.<id>.hooks.allowPromptInjection: колиfalse, ядро блокуєbefore_prompt_buildта ігнорує поля, що змінюють prompt, зі застарілогоbefore_agent_start, зберігаючи застаріліmodelOverrideіproviderOverride. Застосовується до нативних hooks плагіна та підтримуваних каталогів hooks, наданих bundle.plugins.entries.<id>.hooks.allowConversationAccess: колиtrue, довірені небандловані плагіни можуть читати необроблений вміст розмови з typed hooks, таких якllm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeіagent_end.plugins.entries.<id>.subagent.allowModelOverride: явно довіряє цьому плагіну запитувати перевизначенняproviderіmodelдля кожного запуску фонових subagent-запусків.plugins.entries.<id>.subagent.allowedModels: необов’язковий список дозволених канонічних цілейprovider/modelдля довірених subagent-перевизначень. Використовуйте"*"лише тоді, коли навмисно хочете дозволити будь-яку модель.plugins.entries.<id>.llm.allowModelOverride: явно довіряє цьому плагіну запитувати перевизначення моделі дляapi.runtime.llm.complete.plugins.entries.<id>.llm.allowedModels: необов’язковий список дозволених канонічних цілейprovider/modelдля довірених перевизначень завершення LLM плагіна. Використовуйте"*"лише тоді, коли навмисно хочете дозволити будь-яку модель.plugins.entries.<id>.llm.allowAgentIdOverride: явно довіряє цьому плагіну запускатиapi.runtime.llm.completeдля нестандартного agent id.plugins.entries.<id>.config: визначений плагіном об’єкт конфігурації (перевіряється схемою нативного плагіна OpenClaw, коли доступна).- Налаштування облікового запису/runtime channel-плагіна розміщуються в
channels.<id>і мають описуватися метаданимиchannelConfigsманіфеста плагіна-власника, а не центральним реєстром опцій OpenClaw.
Конфігурація плагіна Codex harness
Бандлований плагін codex володіє нативними налаштуваннями Codex app-server harness у
plugins.entries.codex.config. Див.
довідник Codex harness для повної поверхні
конфігурації та Codex harness для моделі runtime.
codexPlugins застосовується лише до сесій, які вибирають нативний Codex harness.
Він не вмикає плагіни Codex для запусків OpenClaw provider, ACP
conversation bindings або будь-якого не-Codex harness.
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_destructive_actions: true, plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: вмикає нативну підтримку plugin/app Codex для Codex harness. За замовчуванням:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: стандартна політика destructive-action для мігрованих elicitations plugin app. Використовуйтеtrue, щоб приймати безпечні схеми схвалення Codex без запиту,false, щоб відхиляти їх,"auto", щоб маршрутизувати потрібні Codex схвалення через схвалення плагінів OpenClaw, або"ask", щоб запитувати кожну write/destructive дію плагіна без довготривалого схвалення. Режим"ask"очищає довготривалі перевизначення схвалень Codex для кожного інструмента відповідного app і вибирає human approvals reviewer для цього app перед запуском Codex thread. За замовчуванням:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: вмикає мігрований запис плагіна, коли глобальнийcodexPlugins.enabledтакож істинний. За замовчуванням:trueдля явних записів.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: стабільна ідентичність marketplace. V1 підтримує лише"openai-curated".plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: стабільна ідентичність плагіна Codex з міграції, наприклад"google-calendar".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: перевизначення destructive-action для окремого плагіна. Якщо пропущено, використовується глобальне значенняallow_destructive_actions. Значення для окремого плагіна приймає ті самі політикиtrue,false,"auto"або"ask".
Кожен допущений plugin app, що використовує "ask", маршрутизує запити схвалення цього app
до human reviewer. Інші apps і схвалення thread, що не належать app, зберігають свого
налаштованого reviewer, тому змішані політики плагінів не успадковують поведінку "ask".
codexPlugins.enabled — це глобальна директива ввімкнення. Явні записи плагінів,
записані міграцією, є довготривалим набором встановлень і придатності для ремонту.
plugins["*"] не підтримується, перемикача install немає, а локальні
значення marketplacePath навмисно не є полями конфігурації, бо вони
залежать від хоста.
Перевірки готовності app/list кешуються на одну годину й оновлюються
асинхронно, коли застарівають. Конфігурація app для Codex thread обчислюється під час встановлення
сесії Codex harness, а не на кожному ході; використовуйте /new, /reset або перезапуск gateway
після зміни нативної конфігурації плагінів.
plugins.entries.firecrawl.config.webFetch: налаштування Firecrawl web-fetch provider.apiKey: необов’язковий API-ключ Firecrawl для вищих лімітів (приймає SecretRef). Повертається доplugins.entries.firecrawl.config.webSearch.apiKey, застарілогоtools.web.fetch.firecrawl.apiKeyабо env varFIRECRAWL_API_KEY.baseUrl: базова URL-адреса Firecrawl API (за замовчуванням:https://api.firecrawl.dev; self-hosted перевизначення мають вказувати на приватні/внутрішні endpoints).onlyMainContent: витягувати зі сторінок лише основний вміст (за замовчуванням:true).maxAgeMs: максимальний вік кешу в мілісекундах (за замовчуванням:172800000/ 2 дні).timeoutSeconds: timeout запиту scrape у секундах (за замовчуванням:60).
plugins.entries.xai.config.xSearch: налаштування xAI X Search (Grok web search).enabled: увімкнути X Search provider.model: модель Grok для використання в пошуку (наприклад,"grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: налаштування memory dreaming. Див. Dreaming щодо фаз і порогів.enabled: головний перемикач dreaming (за замовчуваннямfalse).frequency: cadence cron для кожного повного dreaming sweep ("0 3 * * *"за замовчуванням).model: необов’язкове перевизначення моделі subagent Dream Diary. Потребуєplugins.entries.memory-core.subagent.allowModelOverride: true; поєднуйте зallowedModels, щоб обмежити цілі. Помилки недоступності моделі повторюються один раз зі стандартною моделлю сесії; помилки довіри або allowlist не мають тихого fallback.- політика фаз і пороги є деталями реалізації (не user-facing ключами конфігурації).
- Повна конфігурація пам’яті розміщена в довіднику конфігурації пам’яті:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Увімкнені Claude bundle-плагіни також можуть додавати вбудовані стандартні значення OpenClaw із
settings.json; OpenClaw застосовує їх як очищені налаштування агента, а не як необроблені patches конфігурації OpenClaw. plugins.slots.memory: виберіть id активного плагіна пам’яті або"none", щоб вимкнути плагіни пам’яті.plugins.slots.contextEngine: виберіть id активного плагіна context engine; за замовчуванням"legacy", якщо ви не встановите й не виберете інший engine.
Див. Плагіни.
Зобов’язання
commitments керує виведеною follow-up пам’яттю: OpenClaw може виявляти check-ins із ходів розмови й доставляти їх через запуски heartbeat.
commitments.enabled: увімкнути приховане LLM-витягання, зберігання й доставку heartbeat для виведених follow-up commitments. За замовчуванням:false.commitments.maxPerDay: максимальна кількість виведених follow-up commitments, доставлених на сесію агента в ковзний день. За замовчуванням:3.
Див. Виведені commitments.
Браузер
{ browser: { enabled: true, evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, tabCleanup: { enabled: true, idleMinutes: 120, maxTabsPerSession: 8, sweepMinutes: 5, }, profiles: { openclaw: { cdpPort: 18800, color: "#FF4500" }, work: { cdpPort: 18801, color: "#0066CC", executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", }, user: { driver: "existing-session", attachOnly: true, color: "#00AA00" }, brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, }, color: "#FF4500", // headless: false, // noSandbox: false, // extraArgs: [], // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", // attachOnly: false, },}evaluateEnabled: falseвимикаєact:evaluateіwait --fn.tabCleanupзвільняє відстежувані вкладки основного агента після періоду простою або коли сесія перевищує свій ліміт. УстановітьidleMinutes: 0абоmaxTabsPerSession: 0, щоб вимкнути ці окремі режими очищення.ssrfPolicy.dangerouslyAllowPrivateNetworkвимкнено, коли не задано, тому навігація браузера за замовчуванням залишається строгою.- Установлюйте
ssrfPolicy.dangerouslyAllowPrivateNetwork: trueлише тоді, коли ви навмисно довіряєте браузерній навігації приватною мережею. - У строгому режимі віддалені кінцеві точки профілів CDP (
profiles.*.cdpUrl) підпадають під те саме блокування приватної мережі під час перевірок доступності/виявлення. ssrfPolicy.allowPrivateNetworkі далі підтримується як застарілий псевдонім.- У строгому режимі використовуйте
ssrfPolicy.hostnameAllowlistіssrfPolicy.allowedHostnamesдля явних винятків. - Віддалені профілі працюють лише в режимі підключення (start/stop/reset вимкнено).
profiles.*.cdpUrlприймаєhttp://,https://,ws://іwss://. Використовуйте HTTP(S), коли потрібно, щоб OpenClaw виявляв/json/version; використовуйте WS(S), коли ваш провайдер надає пряму URL-адресу DevTools WebSocket.remoteCdpTimeoutMsіremoteCdpHandshakeTimeoutMsзастосовуються до доступності віддалених іattachOnlyCDP, а також до запитів відкриття вкладок. Керовані профілі loopback зберігають локальні стандартні значення CDP.- Якщо зовні керований сервіс CDP доступний через loopback, установіть для цього
профілю
attachOnly: true; інакше OpenClaw трактуватиме порт loopback як локальний керований профіль браузера й може повідомляти про помилки володіння локальним портом. - Профілі
existing-sessionвикористовують Chrome MCP замість CDP і можуть підключатися на вибраному хості або через підключений вузол браузера. - Профілі
existing-sessionможуть задаватиuserDataDir, щоб націлитися на конкретний профіль браузера на базі Chromium, наприклад Brave або Edge. - Профілі
existing-sessionможуть задаватиcdpUrl, коли Chrome уже запущено за кінцевою точкою виявлення DevTools HTTP(S) або прямою кінцевою точкою WS(S). У цьому режимі OpenClaw передає кінцеву точку до Chrome MCP замість використання автопідключення;userDataDirігнорується для аргументів запуску Chrome MCP. - Профілі
existing-sessionзберігають поточні обмеження маршруту Chrome MCP: дії на основі snapshot/ref замість націлювання CSS-селекторами, хуки завантаження одного файлу, без перевизначень тайм-аутів діалогів, безwait --load networkidle, а також безresponsebody, експорту PDF, перехоплення завантажень або пакетних дій. - Локальні керовані профілі
openclawавтоматично призначаютьcdpPortіcdpUrl; задавайтеcdpUrlявно лише для віддалених профілів CDP або підключення кінцевої точки existing-session. - Локальні керовані профілі можуть задавати
executablePath, щоб перевизначити глобальнийbrowser.executablePathдля цього профілю. Використовуйте це, щоб запускати один профіль у Chrome, а інший у Brave. - Локальні керовані профілі використовують
browser.localLaunchTimeoutMsдля HTTP-виявлення Chrome CDP після запуску процесу таbrowser.localCdpReadyTimeoutMsдля готовності CDP websocket після запуску. Збільшуйте їх на повільніших хостах, де Chrome успішно запускається, але перевірки готовності випереджають запуск. Обидва значення мають бути додатними цілими числами до120000мс; недійсні значення конфігурації відхиляються. - Порядок автовиявлення: стандартний браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathіbrowser.profiles.<name>.executablePathобидва приймають~і~/...для домашнього каталогу вашої ОС перед запуском Chromium.userDataDirдля окремого профілю в профіляхexisting-sessionтакож розгортається з тильдою.- Сервіс керування: лише loopback (порт походить від
gateway.port, стандартно18791). extraArgsдодає додаткові прапорці запуску до локального старту Chromium (наприклад,--disable-gpu, налаштування розміру вікна або прапорці налагодження).
UI
{ ui: { seamColor: "#FF4500", assistant: { name: "OpenClaw", avatar: "CB", // emoji, short text, image URL, or data URI }, },}seamColor: акцентний колір для chrome UI нативного застосунку (відтінок бульбашки Talk Mode тощо).assistant: перевизначення ідентичності Control UI. За замовчуванням використовується ідентичність активного агента.
Gateway
{ gateway: { mode: "local", // local | remote port: 18789, bind: "loopback", auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000, exemptLoopback: true, }, }, tailscale: { mode: "off", // off | serve | funnel resetOnExit: false, }, controlUi: { enabled: true, basePath: "/openclaw", // root: "dist/control-ui", // embedSandbox: "scripts", // strict | scripts | trusted // allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs // chatMessageMaxWidth: "min(1280px, 82%)", // optional grouped chat message max-width // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, remote: { url: "ws://127.0.0.1:18789", transport: "ssh", // ssh | direct token: "your-token", // password: "your-password", }, trustedProxies: ["10.0.0.1"], // Optional. Default false. allowRealIpFallback: false, nodes: { pairing: { // Optional. Default unset/disabled. autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], }, allowCommands: ["canvas.navigate"], denyCommands: ["system.run"], }, tools: { // Additional /tools/invoke HTTP denies deny: ["browser"], // Remove tools from the default HTTP deny list for owner/admin callers allow: ["gateway"], }, push: { apns: { relay: { baseUrl: "https://relay.example.com", timeoutMs: 10000, }, }, }, },}Подробиці полів Gateway
mode:local(запустити gateway) абоremote(під’єднатися до віддаленого gateway). Gateway відмовляється запускатися, якщо значення неlocal.port: єдиний мультиплексований порт для WS + HTTP. Пріоритет:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(типово),lan(0.0.0.0),tailnet(лише IP Tailscale) абоcustom.- Застарілі псевдоніми bind: використовуйте значення режиму bind у
gateway.bind(auto,loopback,lan,tailnet,custom), а не псевдоніми хоста (0.0.0.0,127.0.0.1,localhost,::,::1). - Примітка щодо Docker: типовий bind
loopbackслухає на127.0.0.1всередині контейнера. За мережевого мосту Docker (-p 18789:18789) трафік надходить наeth0, тому gateway недоступний. Використайте--network hostабо задайтеbind: "lan"(чиbind: "custom"зcustomBindHost: "0.0.0.0"), щоб слухати на всіх інтерфейсах. - Автентифікація: типово обов’язкова. Bind не через loopback потребують автентифікації gateway. На практиці це означає спільний токен/пароль або identity-aware reverse proxy з
gateway.auth.mode: "trusted-proxy". Майстер онбордингу типово генерує токен. - Якщо налаштовано і
gateway.auth.token, іgateway.auth.password(зокрема SecretRefs), явно задайтеgateway.auth.modeякtokenабоpassword. Потоки запуску та встановлення/ремонту служби завершуються помилкою, коли налаштовано обидва поля, а режим не задано. gateway.auth.mode: "none": явний режим без автентифікації. Використовуйте лише для довірених локальних налаштувань local loopback; це навмисно не пропонується в підказках онбордингу.gateway.auth.mode: "trusted-proxy": делегуйте автентифікацію браузера/користувача identity-aware reverse proxy і довіряйте заголовкам ідентичності відgateway.trustedProxies(див. Автентифікація через довірений проксі). Цей режим типово очікує джерело проксі не через loopback; same-host loopback reverse proxies потребують явногоgateway.auth.trustedProxy.allowLoopback = true. Внутрішні same-host виклики можуть використовуватиgateway.auth.passwordяк локальний прямий fallback;gateway.auth.tokenзалишається взаємовиключним із режимом trusted-proxy.gateway.auth.allowTailscale: колиtrue, заголовки ідентичності Tailscale Serve можуть задовольняти автентифікацію Control UI/WebSocket (перевіряється черезtailscale whois). Кінцеві точки HTTP API не використовують цю автентифікацію заголовками Tailscale; натомість вони дотримуються звичайного режиму HTTP-автентифікації gateway. Цей безтокеновий потік припускає, що хост gateway є довіреним. Типовоtrue, колиtailscale.mode = "serve".gateway.auth.rateLimit: необов’язковий обмежувач невдалих спроб автентифікації. Застосовується для IP клієнта й області автентифікації (shared-secret і device-token відстежуються незалежно). Заблоковані спроби повертають429+Retry-After.- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого
{scope, clientIp}серіалізуються перед записом помилки. Тому одночасні некоректні спроби від того самого клієнта можуть спрацювати обмежувач уже на другому запиті, замість того щоб обидві пройшли як прості невідповідності. gateway.auth.rateLimit.exemptLoopbackтипово має значенняtrue; задайтеfalse, коли навмисно хочете також обмежувати трафік localhost (для тестових налаштувань або строгих розгортань із проксі).- Спроби WS-автентифікації з browser-origin завжди throttled із вимкненим винятком для loopback (захист у глибину проти brute force localhost із браузера).
- На loopback ці блокування browser-origin ізольовані за нормалізованим значенням
Origin, тому повторні помилки з одного localhost origin не блокують автоматично інший origin. tailscale.mode:serve(лише tailnet, bind loopback) абоfunnel(публічний, потребує автентифікації).tailscale.serviceName: необов’язкова назва Tailscale Service для режиму Serve, наприкладsvc:openclaw. Коли задано, OpenClaw передає її вtailscale serve --service, щоб Control UI можна було відкрити через іменований Service замість hostname пристрою. Значення має використовувати формат назви Service Tailscalesvc:<dns-label>; запуск повідомляє похідну URL-адресу Service.tailscale.preserveFunnel: колиtrueіtailscale.mode = "serve", OpenClaw перевіряєtailscale funnel statusперед повторним застосуванням Serve під час запуску й пропускає його, якщо зовнішньо налаштований маршрут Funnel уже покриває порт gateway. Типовоfalse.controlUi.allowedOrigins: явний allowlist browser-origin для підключень Gateway WebSocket. Обов’язковий для публічних browser origins не через loopback. Приватні same-origin LAN/Tailnet завантаження UI з loopback, RFC1918/link-local,.local,.ts.netабо хостів Tailscale CGNAT приймаються без увімкнення fallback за Host-заголовком.controlUi.chatMessageMaxWidth: необов’язкова максимальна ширина для згрупованих повідомлень чату Control UI. Приймає обмежені значення ширини CSS, як-от960px,82%,min(1280px, 82%)іcalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: небезпечний режим, що вмикає origin fallback за Host-заголовком для розгортань, які навмисно покладаються на політику origin за Host-заголовком.remote.transport:ssh(типово) абоdirect(ws/wss). Дляdirectзначенняremote.urlмає бутиwss://для публічних хостів; відкритий текстws://приймається лише для loopback, LAN, link-local,.local,.ts.netі хостів Tailscale CGNAT.remote.remotePort: порт gateway на віддаленому SSH-хості. Типово18789; використовуйте це, коли локальний порт тунелю відрізняється від віддаленого порту gateway.remote.sshHostKeyPolicy: політика host-key тунелю SSH на macOS.strictє типовим значенням і потребує вже довіреного ключа.openssh— це явна згода на ефективну конфігурацію OpenSSH для керованих псевдонімів; перед використанням перегляньте відповідні користувацькі й системні налаштування SSH. Застосунок macOS іconfigure-remoteскидають цю політику доstrictпід час зміни цілей, якщо її явно не ввімкнути знову.gateway.remote.token/.password— це поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують автентифікацію gateway.gateway.push.apns.relay.baseUrl: базова HTTPS URL-адреса зовнішнього APNs relay, що використовується після того, як relay-backed збірки iOS публікують реєстрації в gateway. Публічні збірки App Store використовують розміщений relay OpenClaw. Користувацькі URL-адреси relay мають відповідати навмисно окремому шляху збірки/розгортання iOS, чия URL-адреса relay вказує на цей relay.gateway.push.apns.relay.timeoutMs: timeout надсилання від gateway до relay у мілісекундах. Типово10000.- Relay-backed реєстрації делегуються конкретній ідентичності gateway. Спарений застосунок iOS отримує
gateway.identity.get, включає цю ідентичність у реєстрацію relay і пересилає gateway дозвіл на надсилання, scoped до реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: тимчасові override змінних середовища для конфігурації relay вище.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: escape hatch лише для розробки для URL-адрес HTTP relay на loopback. Production URL-адреси relay мають залишатися на HTTPS.gateway.handshakeTimeoutMs: timeout handshake Gateway WebSocket перед автентифікацією в мілісекундах. Типово:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MSмає пріоритет, коли задано. Збільште це значення на завантажених або малопотужних хостах, де локальні клієнти можуть під’єднуватися, поки warmup запуску ще стабілізується.gateway.channelHealthCheckMinutes: інтервал health-monitor каналу в хвилинах. Задайте0, щоб глобально вимкнути перезапуски health-monitor. Типово:5.gateway.channelStaleEventThresholdMinutes: поріг stale-socket у хвилинах. Тримайте це значення більшим або рівнимgateway.channelHealthCheckMinutes. Типово:30.gateway.channelMaxRestartsPerHour: максимальна кількість перезапусків health-monitor на канал/обліковий запис за rolling hour. Типово:10.channels.<provider>.healthMonitor.enabled: поканальне opt-out для перезапусків health-monitor зі збереженням увімкненого глобального монітора.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: override на рівні облікового запису для багатооблікових каналів. Коли задано, має пріоритет над override на рівні каналу.- Локальні шляхи викликів gateway можуть використовувати
gateway.remote.*як fallback лише колиgateway.auth.*не задано. - Якщо
gateway.auth.token/gateway.auth.passwordявно налаштовано через SecretRef і не розв’язано, розв’язання fail-closed (без маскування remote fallback). trustedProxies: IP-адреси reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Вказуйте лише проксі, які ви контролюєте. Записи loopback усе ще дійсні для same-host proxy/local-detection налаштувань (наприклад, Tailscale Serve або локальний reverse proxy), але вони не роблять loopback-запити придатними дляgateway.auth.mode: "trusted-proxy".allowRealIpFallback: колиtrue, gateway приймаєX-Real-IP, якщоX-Forwarded-Forвідсутній. Типовоfalseдля fail-closed поведінки.gateway.nodes.pairing.autoApproveCidrs: необов’язковий CIDR/IP allowlist для автоматичного схвалення першого pairing пристрою node без запитаних scopes. Вимкнено, коли не задано. Це не схвалює автоматично operator/browser/Control UI/WebChat pairing і не схвалює автоматично role, scope, metadata або public-key upgrades.gateway.nodes.allowCommands/gateway.nodes.denyCommands: глобальне формування allow/deny для оголошених команд node після pairing і оцінювання platform allowlist. ВикористовуйтеallowCommands, щоб opt into небезпечні команди node, як-отcamera.snap,camera.clipіscreen.record;denyCommandsвилучає команду, навіть якщо platform default або явний allow інакше включив би її. Після того як node змінить свій оголошений список команд, відхиліть і повторно схваліть pairing цього пристрою, щоб gateway зберіг оновлений command snapshot.gateway.tools.deny: додаткові назви інструментів, заблоковані для HTTPPOST /tools/invoke(розширює типовий deny list).gateway.tools.allow: вилучає назви інструментів із типового HTTP deny list для owner/admin callers. Це не підвищує identity-bearingoperator.writecallers до owner/admin access;cron,gatewayіnodesзалишаються недоступними для non-owner callers, навіть коли allowlisted.
OpenAI-сумісні кінцеві точки
- Admin HTTP RPC: типово вимкнено як plugin
admin-http-rpc. Увімкніть plugin, щоб зареєструватиPOST /api/v1/admin/rpc. Див. Admin HTTP RPC. - Chat Completions: типово вимкнено. Увімкніть через
gateway.http.endpoints.chatCompletions.enabled: true. - Responses API:
gateway.http.endpoints.responses.enabled. - Посилення URL-вводу Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistПорожні allowlists вважаються незаданими; використовуйтеgateway.http.endpoints.responses.files.allowUrl=falseі/абоgateway.http.endpoints.responses.images.allowUrl=false, щоб вимкнути URL fetching.
- Необов’язковий заголовок посилення відповіді:
gateway.http.securityHeaders.strictTransportSecurity(задавайте лише для HTTPS origins, які ви контролюєте; див. Автентифікація через довірений проксі)
Ізоляція кількох екземплярів
Запускайте кілька gateways на одному хості з унікальними портами й state dirs:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \OPENCLAW_STATE_DIR=~/.openclaw-a \openclaw gateway --port 19001Зручні прапорці: --dev (використовує ~/.openclaw-dev + порт 19001), --profile <name> (використовує ~/.openclaw-<name>).
Див. Кілька Gateways.
gateway.tls
{ gateway: { tls: { enabled: false, autoGenerate: false, certPath: "/etc/openclaw/tls/server.crt", keyPath: "/etc/openclaw/tls/server.key", caPath: "/etc/openclaw/tls/ca-bundle.crt", }, },}enabled: вмикає завершення TLS на listener gateway (HTTPS/WSS) (типово:false).autoGenerate: автоматично генерує локальну self-signed пару cert/key, коли явні файли не налаштовано; лише для локального/dev використання.certPath: шлях файлової системи до файлу сертифіката TLS.keyPath: шлях файлової системи до файлу приватного ключа TLS; тримайте дозволи обмеженими.caPath: необов’язковий шлях до CA bundle для перевірки клієнтів або користувацьких trust chains.
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: керує тим, як зміни конфігурації застосовуються під час виконання."off": ігнорувати живі зміни; зміни потребують явного перезапуску."restart": завжди перезапускати процес Gateway у разі зміни конфігурації."hot": застосовувати зміни в межах процесу без перезапуску."hybrid"(типово): спершу спробувати гаряче перезавантаження; за потреби повернутися до перезапуску.
debounceMs: вікно debounce у мс перед застосуванням змін конфігурації (невід’ємне ціле число).deferralTimeoutMs: необов’язковий максимальний час у мс для очікування поточних операцій перед примусовим перезапуском або гарячим перезавантаженням каналу. Пропустіть його, щоб використати типове обмежене очікування (300000); задайте0, щоб чекати безстроково й періодично записувати попередження про операції, що все ще очікують.
Хуки
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", maxBodyBytes: 262144, defaultSessionKey: "hook:ingress", allowRequestSessionKey: true, allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"], allowedAgentIds: ["hooks", "main"], presets: ["gmail"], transformsDir: "~/.openclaw/hooks/transforms", mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "hooks", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}", deliver: true, channel: "last", model: "openai/gpt-5.4-mini", }, ], },}Автентифікація: Authorization: Bearer <token> або x-openclaw-token: <token>.
Токени хуків у рядку запиту відхиляються.
Примітки щодо валідації та безпеки:
hooks.enabled=trueпотребує непорожньогоhooks.token.hooks.tokenмає відрізнятися від активного спільного секрету автентифікації Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENабоgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD); під час запуску журнал записує некритичне попередження безпеки, коли виявляє повторне використання.openclaw security auditпозначає повторне використання автентифікації hook/Gateway як критичну знахідку, включно з автентифікацією Gateway за паролем, наданою лише під час аудиту (--auth password --password <password>). Запустітьopenclaw doctor --fix, щоб ротувати збережений повторно використанийhooks.token, а потім оновіть зовнішніх відправників хуків, щоб вони використовували новий токен хуків.hooks.pathне може бути/; використовуйте окремий підшлях, наприклад/hooks.- Якщо
hooks.allowRequestSessionKey=true, обмежтеhooks.allowedSessionKeyPrefixes(наприклад,["hook:"]). - Якщо зіставлення або preset використовує шаблонний
sessionKey, задайтеhooks.allowedSessionKeyPrefixesіhooks.allowRequestSessionKey=true. Статичні ключі зіставлення не потребують такого явного ввімкнення.
Кінцеві точки:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeyз корисного навантаження запиту приймається лише колиhooks.allowRequestSessionKey=true(типово:false).
POST /hooks/<name>→ розв’язується черезhooks.mappings- Значення
sessionKeyзіставлення, відрендерені з шаблону, вважаються зовнішньо наданими й також потребуютьhooks.allowRequestSessionKey=true.
- Значення
Подробиці зіставлення
match.pathзіставляє підшлях після/hooks(наприклад,/hooks/gmail→gmail).match.sourceзіставляє поле корисного навантаження для загальних шляхів.- Шаблони на кшталт
{{messages[0].subject}}читають дані з корисного навантаження. transformможе вказувати на модуль JS/TS, який повертає дію хуку.transform.moduleмає бути відносним шляхом і залишатися в межахhooks.transformsDir(абсолютні шляхи й обхід каталогів відхиляються).- Тримайте
hooks.transformsDirу межах~/.openclaw/hooks/transforms; каталоги Skills робочого простору відхиляються. Якщоopenclaw doctorповідомляє, що цей шлях недійсний, перемістіть модуль transform у каталог трансформацій хуків або вилучітьhooks.transformsDir. agentIdмаршрутизує до конкретного агента; невідомі ідентифікатори повертаються до типового агента.allowedAgentIds: обмежує ефективну маршрутизацію агента, включно зі шляхом типового агента, колиagentIdпропущено (*або пропущено = дозволити всі,[]= заборонити всі).defaultSessionKey: необов’язковий фіксований ключ сеансу для запусків агента хуку без явногоsessionKey.allowRequestSessionKey: дозволити викликачам/hooks/agentі керованим шаблонами ключам сеансів зіставлення задаватиsessionKey(типово:false).allowedSessionKeyPrefixes: необов’язковий allowlist префіксів для явних значеньsessionKey(запит + зіставлення), наприклад["hook:"]. Він стає обов’язковим, коли будь-яке зіставлення або preset використовує шаблоннийsessionKey.deliver: trueнадсилає фінальну відповідь у канал;channelтипово має значенняlast.modelперевизначає LLM для цього запуску хуку (має бути дозволено, якщо задано каталог моделей).
Інтеграція Gmail
- Вбудований preset Gmail використовує
sessionKey: "hook:gmail:{{messages[0].id}}". - Якщо ви залишаєте цю помаршрутну обробку для кожного повідомлення, задайте
hooks.allowRequestSessionKey: trueі обмежтеhooks.allowedSessionKeyPrefixes, щоб вони відповідали простору імен Gmail, наприклад["hook:", "hook:gmail:"]. - Якщо вам потрібен
hooks.allowRequestSessionKey: false, перевизначте preset статичнимsessionKeyзамість типового шаблонного значення.
{ hooks: { gmail: { account: "openclaw@gmail.com", topic: "projects/<project-id>/topics/gog-gmail-watch", subscription: "gog-gmail-watch-push", pushToken: "shared-push-token", hookUrl: "http://127.0.0.1:18789/hooks/gmail", includeBody: true, maxBytes: 20000, renewEveryMinutes: 720, serve: { bind: "127.0.0.1", port: 8788, path: "/" }, tailscale: { mode: "funnel", path: "/gmail-pubsub" }, model: "openrouter/meta-llama/llama-3.3-70b-instruct:free", thinking: "off", }, },}- Gateway автоматично запускає
gog gmail watch serveпід час завантаження, коли налаштовано. ЗадайтеOPENCLAW_SKIP_GMAIL_WATCHER=1, щоб вимкнути. - Не запускайте окремий
gog gmail watch serveпаралельно з Gateway.
Хост Plugin Canvas
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- Обслуговує редаговані агентом HTML/CSS/JS і A2UI через HTTP під портом Gateway:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Лише локально: залишайте
gateway.bind: "loopback"(типово). - Прив’язки не до loopback: маршрути canvas потребують автентифікації Gateway (токен/пароль/довірений проксі), як і інші HTTP-поверхні Gateway.
- Node WebViews зазвичай не надсилають заголовки автентифікації; після спарювання й підключення вузла Gateway оголошує URL можливостей, scoped до вузла, для доступу canvas/A2UI.
- URL можливостей прив’язані до активного сеансу WS вузла й швидко спливають. Резервний механізм на основі IP не використовується.
- Вставляє клієнт живого перезавантаження в HTML, що обслуговується.
- Автоматично створює стартовий
index.html, коли порожньо. - Також обслуговує A2UI за адресою
/__openclaw__/a2ui/. - Зміни потребують перезапуску gateway.
- Вимкніть живе перезавантаження для великих каталогів або помилок
EMFILE.
Виявлення
mDNS (Bonjour)
{ discovery: { mdns: { mode: "minimal", // minimal | full | off }, },}minimal(типово, коли ввімкнено bundled Pluginbonjour): пропускаєcliPath+sshPortіз TXT-записів.full: включаєcliPath+sshPort; широкомовна multicast-реклама в LAN усе одно потребує ввімкненого bundled Pluginbonjour.off: пригнічує multicast-рекламу в LAN без зміни ввімкнення Plugin.- Bundled Plugin
bonjourавтоматично запускається на хостах macOS і вмикається явно на Linux, Windows і контейнеризованих розгортаннях Gateway. - Ім’я хоста типово дорівнює системному імені хоста, коли воно є дійсною DNS-міткою, інакше використовується
openclaw. Перевизначте черезOPENCLAW_MDNS_HOSTNAME.
Wide-area (DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}Записує unicast-зону DNS-SD у ~/.openclaw/dns/. Для виявлення між мережами поєднайте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS.
Налаштування: openclaw dns setup --apply.
Середовище
env (вбудовані змінні середовища)
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, },}- Вбудовані змінні середовища застосовуються лише якщо в середовищі процесу немає ключа.
- Файли
.env: CWD.env+~/.openclaw/.env(жоден не перевизначає наявні змінні). shellEnv: імпортує відсутні очікувані ключі з профілю вашої login shell.- Див. Середовище для повного порядку пріоритетів.
Підстановка змінних середовища
Посилайтеся на змінні середовища в будь-якому рядку конфігурації через ${VAR_NAME}:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- Зіставляються лише імена у верхньому регістрі:
[A-Z_][A-Z0-9_]*. - Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації.
- Екрануйте через
$${VAR}для буквального${VAR}. - Працює з
$include.
Секрети
Посилання на секрети є additive: plaintext-значення досі працюють.
SecretRef
Використовуйте одну форму об’єкта:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }Валідація:
- Шаблон
provider:^[a-z][a-z0-9_-]{0,63}$ - Шаблон id для
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - id для
source: "file": абсолютний JSON pointer (наприклад"/providers/openai/apiKey") - Шаблон id для
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(підтримує селектори у стилі AWSsecret#json_key) - id для
source: "exec"не мають містити сегменти шляху.або.., розділені скісними рисками (наприклад,a/../bвідхиляється)
Підтримувана поверхня облікових даних
- Канонічна матриця: Поверхня облікових даних SecretRef
secrets applyнацілюється на підтримувані шляхи облікових данихopenclaw.json.- Посилання
auth-profiles.jsonвключено до розв’язання під час виконання й покриття аудиту.
Конфігурація постачальників секретів
{ secrets: { providers: { default: { source: "env" }, // optional explicit env provider filemain: { source: "file", path: "~/.openclaw/secrets.json", mode: "json", timeoutMs: 5000, }, vault: { source: "exec", command: "/usr/local/bin/openclaw-vault-resolver", passEnv: ["PATH", "VAULT_ADDR"], }, }, defaults: { env: "default", file: "filemain", exec: "vault", }, },}Примітки:
- Постачальник
fileпідтримуєmode: "json"іmode: "singleValue"(idмає бути"value"у режимі singleValue). - Шляхи постачальників file і exec закриваються з помилкою, коли перевірка ACL Windows недоступна. Задавайте
allowInsecurePath: trueлише для довірених шляхів, які неможливо перевірити. - Постачальник
execпотребує абсолютного шляхуcommandі використовує protocol payloads у stdin/stdout. - Типово шляхи команд-симлінків відхиляються. Задайте
allowSymlinkCommand: true, щоб дозволити шляхи-симлінки з валідацією розв’язаного цільового шляху. - Якщо налаштовано
trustedDirs, перевірка довіреного каталогу застосовується до розв’язаного цільового шляху. - Дочірнє середовище
execтипово мінімальне; передавайте потрібні змінні явно черезpassEnv. - Посилання на секрети розв’язуються під час активації в знімок у пам’яті, після чого шляхи запитів читають лише цей знімок.
- Фільтрація активної поверхні застосовується під час активації: нерозв’язані посилання на ввімкнених поверхнях призводять до збою запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
Сховище автентифікації
{ auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai:personal"], }, },}- Профілі окремих агентів зберігаються в
<agentDir>/auth-profiles.json. auth-profiles.jsonпідтримує посилання на рівні значень (keyRefдляapi_key,tokenRefдляtoken) для статичних режимів облікових даних.- Застарілі плоскі мапи
auth-profiles.json, як-от{ "provider": { "apiKey": "..." } }, не є форматом runtime;openclaw doctor --fixпереписує їх у канонічні профілі API-ключівprovider:defaultз резервною копією.legacy-flat.*.bak. - Профілі режиму OAuth (
auth.profiles.<id>.mode = "oauth") не підтримують облікові дані auth-профілів на базі SecretRef. - Статичні облікові дані runtime надходять із розв'язаних знімків у пам'яті; застарілі статичні записи
auth.jsonочищаються під час виявлення. - Застарілі імпорти OAuth з
~/.openclaw/credentials/oauth.json. - Див. OAuth.
- Поведінка runtime для секретів та інструменти
audit/configure/apply: Керування секретами.
auth.cooldowns
{ auth: { cooldowns: { billingBackoffHours: 5, billingBackoffHoursByProvider: { anthropic: 3, openai: 8 }, billingMaxHours: 24, authPermanentBackoffMinutes: 10, authPermanentMaxMinutes: 60, failureWindowHours: 24, overloadedProfileRotations: 1, overloadedBackoffMs: 0, rateLimitedProfileRotations: 1, }, },}billingBackoffHours: базове відтермінування в годинах, коли профіль дає збій через справжні помилки білінгу або недостатньо кредитів (типово:5). Явний текст про білінг може все ще потрапити сюди навіть у відповідях401/403, але текстові зіставлячі, специфічні для провайдера, залишаються обмеженими провайдером, якому вони належать (наприклад OpenRouterKey limit exceeded). Повторювані HTTP402повідомлення про вікно використання або ліміт витрат організації/робочого простору натомість залишаються у шляхуrate_limit.billingBackoffHoursByProvider: необов'язкові перевизначення кількості годин відтермінування білінгу для кожного провайдера.billingMaxHours: верхня межа в годинах для експоненційного зростання відтермінування білінгу (типово:24).authPermanentBackoffMinutes: базове відтермінування в хвилинах для високодостовірних збоївauth_permanent(типово:10).authPermanentMaxMinutes: верхня межа в хвилинах для зростання відтермінуванняauth_permanent(типово:60).failureWindowHours: ковзне вікно в годинах, що використовується для лічильників відтермінування (типово:24).overloadedProfileRotations: максимальна кількість ротацій auth-профілів того самого провайдера для помилок перевантаження перед переходом до резервної моделі (типово:1). Форми зайнятості провайдера, як-отModelNotReadyException, потрапляють сюди.overloadedBackoffMs: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово:0).rateLimitedProfileRotations: максимальна кількість ротацій auth-профілів того самого провайдера для помилок обмеження швидкості перед переходом до резервної моделі (типово:1). Цей кошик обмеження швидкості включає текст у формі провайдера, як-отToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededіresource exhausted.
Журналювання
{ logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", // pretty | compact | json redactSensitive: "tools", // off | tools redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"], },}- Типовий файл журналу:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Задайте
logging.fileдля стабільного шляху. consoleLevelпідвищується доdebug, коли використано--verbose.maxFileBytes: максимальний розмір активного файлу журналу в байтах перед ротацією (додатне ціле число; типово:104857600= 100 МБ). OpenClaw зберігає до п'яти нумерованих архівів поруч з активним файлом.redactSensitive/redactPatterns: маскування на основі найкращих зусиль для виводу консолі, файлових журналів, записів журналів OTLP і збереженого тексту транскрипту сесії.redactSensitive: "off"вимикає лише цю загальну політику журналу/транскрипту; поверхні безпеки UI/інструментів/діагностики все одно редагують секрети перед виведенням.
Діагностика
{ diagnostics: { enabled: true, flags: ["telegram.*"], stuckSessionWarnMs: 30000, stuckSessionAbortMs: 300000, memoryPressureSnapshot: false, otel: { enabled: false, endpoint: "https://otel-collector.example.com:4318", tracesEndpoint: "https://traces.example.com/v1/traces", metricsEndpoint: "https://metrics.example.com/v1/metrics", logsEndpoint: "https://logs.example.com/v1/logs", protocol: "http/protobuf", // http/protobuf | grpc headers: { "x-tenant-id": "my-org" }, serviceName: "openclaw-gateway", traces: true, metrics: true, logs: false, logsExporter: "otlp", sampleRate: 1.0, flushIntervalMs: 5000, captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, cacheTrace: { enabled: false, filePath: "~/.openclaw/logs/cache-trace.jsonl", includeMessages: true, includePrompt: true, includeSystem: true, }, },}enabled: головний перемикач для виводу інструментування (типово:true).flags: масив рядків прапорців, що вмикають цільовий вивід журналу (підтримує шаблони на кшталт"telegram.*"або"*").stuckSessionWarnMs: поріг віку без прогресу в мс для класифікації довготривалих сесій обробки якsession.long_running,session.stalledабоsession.stuck. Відповідь, інструмент, статус, блок і прогрес ACP скидають таймер; повторювані діагностикиsession.stuckвідступають, доки стан не змінюється.stuckSessionAbortMs: поріг віку без прогресу в мс, після якого придатна зависла активна робота може бути аварійно зупинена з осушенням для відновлення. Якщо не задано, OpenClaw використовує безпечніше розширене вікно вбудованого запуску щонайменше 5 хвилин і 3xstuckSessionWarnMs.memoryPressureSnapshot: захоплює відредагований знімок стабільності перед OOM, коли тиск пам'яті досягаєcritical(типово:false). Установітьtrue, щоб додати сканування/запис файлу пакета стабільності, зберігаючи звичайні події тиску пам'яті.otel.enabled: вмикає конвеєр експорту OpenTelemetry (типово:false). Повну конфігурацію, каталог сигналів і модель приватності див. у експорті OpenTelemetry.otel.endpoint: URL колектора для експорту OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: необов'язкові кінцеві точки OTLP, специфічні для сигналу. Якщо задані, вони перевизначаютьotel.endpointлише для цього сигналу.otel.protocol:"http/protobuf"(типово) або"grpc".otel.headers: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel.otel.serviceName: назва сервісу для атрибутів ресурсу.otel.traces/otel.metrics/otel.logs: увімкнути експорт трасувань, метрик або журналів.otel.logsExporter: приймач експорту журналів:"otlp"(типово),"stdout"для одного JSON-об'єкта на рядок stdout або"both".otel.sampleRate: частота семплювання трасувань0-1.otel.flushIntervalMs: інтервал періодичного скидання телеметрії в мс.otel.captureContent: явне увімкнення захоплення необробленого вмісту для атрибутів span OTEL. Типово вимкнено. Булевеtrueзахоплює несистемний вміст повідомлень/інструментів; форма об'єкта дає змогу явно увімкнутиinputMessages,outputMessages,toolInputs,toolOutputs,systemPromptіtoolDefinitions.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: перемикач середовища для найновішої експериментальної форми span виведення GenAI, включно з назвами span{gen_ai.operation.name} {gen_ai.request.model}, типом spanCLIENTіgen_ai.provider.nameзамість застарілогоgen_ai.system. Типово spans зберігаютьopenclaw.model.callіgen_ai.systemдля сумісності; метрики GenAI використовують обмежені семантичні атрибути.OPENCLAW_OTEL_PRELOADED=1: перемикач середовища для хостів, які вже зареєстрували глобальний SDK OpenTelemetry. Тоді OpenClaw пропускає запуск/завершення роботи SDK, що належить Plugin, зберігаючи діагностичні слухачі активними.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTіOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: змінні середовища кінцевих точок, специфічні для сигналів, які використовуються, коли відповідний ключ конфігурації не задано.cacheTrace.enabled: журналювати знімки трасування кешу для вбудованих запусків (типово:false).cacheTrace.filePath: шлях виводу для JSONL трасування кешу (типово:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: керують тим, що включено у вивід трасування кешу (усі типово:true).
Оновлення
{ update: { channel: "stable", // stable | beta | dev checkOnStart: true, auto: { enabled: false, stableDelayHours: 6, stableJitterHours: 12, betaCheckIntervalHours: 1, }, },}channel: канал випуску для встановлень npm/git -"stable","beta"або"dev".checkOnStart: перевіряти оновлення npm під час запуску gateway (типово:true).auto.enabled: увімкнути фонове автооновлення для встановлень пакетів (типово:false).auto.stableDelayHours: мінімальна затримка в годинах перед автоматичним застосуванням у stable-каналі (типово:6; макс.:168).auto.stableJitterHours: додаткове вікно рознесення розгортання stable-каналу в годинах (типово:12; макс.:168).auto.betaCheckIntervalHours: як часто виконуються перевірки beta-каналу в годинах (типово:1; макс.:24).
ACP
{ acp: { enabled: true, dispatch: { enabled: true }, backend: "acpx", defaultAgent: "main", allowedAgents: ["main", "ops"], maxConcurrentSessions: 10, stream: { coalesceIdleMs: 50, maxChunkChars: 1000, repeatSuppression: true, deliveryMode: "live", // live | final_only hiddenBoundarySeparator: "paragraph", // none | space | newline | paragraph maxOutputChars: 50000, maxSessionUpdateChars: 500, }, runtime: { ttlMinutes: 30, }, },}enabled: глобальний перемикач функції ACP (типово:true; установітьfalse, щоб приховати диспетчеризацію ACP і можливості створення).dispatch.enabled: незалежний перемикач для диспетчеризації ходу сесії ACP (типово:true). Установітьfalse, щоб залишити команди ACP доступними, але заблокувати виконання.backend: типовий ідентифікатор backend runtime ACP (має відповідати зареєстрованому runtime Plugin ACP). Спочатку встановіть backend Plugin, а якщо заданоplugins.allow, включіть ідентифікатор backend Plugin (наприкладacpx), інакше backend ACP не завантажиться.defaultAgent: резервний ідентифікатор цільового агента ACP, коли створення не вказує явну ціль.allowedAgents: allowlist ідентифікаторів агентів, дозволених для runtime-сесій ACP; порожнє значення означає відсутність додаткових обмежень.maxConcurrentSessions: максимальна кількість одночасно активних сесій ACP.stream.coalesceIdleMs: вікно скидання простою в мс для потокового тексту.stream.maxChunkChars: максимальний розмір фрагмента перед розділенням проєкції потокового блоку.stream.repeatSuppression: пригнічувати повторювані рядки статусу/інструментів за хід (типово:true).stream.deliveryMode:"live"передає потік інкрементально;"final_only"буферизує до термінальних подій ходу.stream.hiddenBoundarySeparator: розділювач перед видимим текстом після прихованих подій інструментів (типово:"paragraph").stream.maxOutputChars: максимальна кількість символів виводу асистента, що проєктуються за хід ACP.stream.maxSessionUpdateChars: максимальна кількість символів для проєктованих рядків статусу/оновлення ACP.stream.tagVisibility: запис назв тегів до булевих перевизначень видимості для потокових подій.runtime.ttlMinutes: TTL простою в хвилинах для працівників сесій ACP перед можливим очищенням.runtime.installCommand: необов'язкова команда встановлення, яку потрібно виконати під час початкового налаштування runtime-середовища ACP.
CLI
{ cli: { banner: { taglineMode: "off", // random | default | off }, },}cli.banner.taglineModeкерує стилем слогана банера:"random"(типово): ротаційні кумедні/сезонні слогани."default": фіксований нейтральний слоган (All your chats, one OpenClaw.)."off": без тексту слогана (заголовок/версія банера все одно показуються).
- Щоб приховати весь банер (не лише слогани), задайте env
OPENCLAW_HIDE_BANNER=1.
Майстер
Метадані, які записують керовані CLI-процеси налаштування (onboard, configure, doctor):
{ wizard: { lastRunAt: "2026-01-01T00:00:00.000Z", lastRunVersion: "2026.1.4", lastRunCommit: "abc1234", lastRunCommand: "configure", lastRunMode: "local", securityAcknowledgedAt: "2026-01-01T00:00:00.000Z", },}Ідентичність
Див. поля ідентичності agents.list у типових налаштуваннях агента.
Міст (застарілий, вилучено)
Поточні збірки більше не містять TCP-міст. Вузли підключаються через Gateway WebSocket. Ключі bridge.* більше не є частиною схеми конфігурації (перевірка не проходитиме, доки їх не буде вилучено; openclaw doctor --fix може видалити невідомі ключі).
Застаріла конфігурація моста (історична довідка)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // default; cron dispatch + isolated cron agent-turn execution webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth sessionRetention: "24h", // duration string or false runLog: { maxBytes: "2mb", // default 2_000_000 bytes keepLines: 2000, // default 2000 }, },}sessionRetention: як довго зберігати завершені ізольовані сеанси запусків cron перед очищенням ізsessions.json. Також керує очищенням архівованих транскриптів видалених cron. Типово:24h; задайтеfalse, щоб вимкнути.runLog.maxBytes: приймається для сумісності зі старішими файловими журналами запусків cron. Типово:2_000_000байтів.runLog.keepLines: найновіші рядки історії запусків SQLite, що зберігаються для кожного завдання. Типово:2000.webhookToken: bearer-токен, який використовується для POST-доставки cron Webhook (delivery.mode = "webhook"); якщо пропущено, заголовок авторизації не надсилається.webhook: застарілий резервний URL Webhook (http/https), якийopenclaw doctor --fixвикористовує для міграції збережених завдань, що все ще маютьnotify: true; доставка під час виконання використовуєdelivery.mode="webhook"для кожного завдання разом ізdelivery.to, абоdelivery.completionDestinationпід час збереження доставки оголошення.
cron.retry
{ cron: { retry: { maxAttempts: 3, backoffMs: [30000, 60000, 300000], retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"], }, },}maxAttempts: максимальна кількість повторних спроб для завдань cron у разі тимчасових помилок (типово:3; діапазон:0-10).backoffMs: масив затримок backoff у мс для кожної повторної спроби (типово:[30000, 60000, 300000]; 1-10 записів).retryOn: типи помилок, які запускають повторні спроби -"rate_limit","overloaded","network","timeout","server_error". Пропустіть, щоб повторювати всі тимчасові типи.
Одноразові завдання залишаються ввімкненими, доки повторні спроби не буде вичерпано, після чого вимикаються зі збереженням фінального стану помилки. Повторювані завдання використовують ту саму політику повторів для тимчасових помилок, щоб запуститися знову після backoff перед наступним запланованим слотом; постійні помилки або вичерпані повтори тимчасових помилок повертаються до звичайного повторюваного розкладу з backoff помилки.
cron.failureAlert
{ cron: { failureAlert: { enabled: false, after: 3, cooldownMs: 3600000, includeSkipped: false, mode: "announce", accountId: "main", }, },}enabled: увімкнути сповіщення про збої для завдань cron (типово:false).after: кількість послідовних збоїв перед надсиланням сповіщення (додатне ціле число, мін.:1).cooldownMs: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число).includeSkipped: враховувати послідовно пропущені запуски в порозі сповіщення (типово:false). Пропущені запуски відстежуються окремо й не впливають на backoff помилок виконання.mode: режим доставки -"announce"надсилає через повідомлення каналу;"webhook"публікує в налаштований Webhook.accountId: необов’язковий обліковий запис або ідентифікатор каналу для обмеження області доставки сповіщень.
cron.failureDestination
{ cron: { failureDestination: { mode: "announce", channel: "last", to: "channel:C1234567890", accountId: "main", }, },}- Типове призначення для сповіщень про збої cron в усіх завданнях.
mode:"announce"або"webhook"; типово"announce", коли є достатньо цільових даних.channel: перевизначення каналу для доставки оголошення."last"повторно використовує останній відомий канал доставки.to: явна ціль оголошення або URL Webhook. Обов’язково для режиму Webhook.accountId: необов’язкове перевизначення облікового запису для доставки.delivery.failureDestinationдля окремого завдання перевизначає це глобальне типове значення.- Коли не задано ні глобальне, ні індивідуальне для завдання призначення збоїв, завдання, які вже доставляються через
announce, у разі збою повертаються до цієї основної цілі оголошення. delivery.failureDestinationпідтримується лише для завданьsessionTarget="isolated", якщо основнийdelivery.modeзавдання не є"webhook".
Див. завдання Cron. Ізольовані виконання cron відстежуються як фонові завдання.
Змінні шаблонів медіамоделі
Заповнювачі шаблонів, що розгортаються в tools.media.models[].args:
| Змінна | Опис |
|---|---|
{{Body}} |
Повне тіло вхідного повідомлення |
{{RawBody}} |
Сире тіло (без обгорток історії/відправника) |
{{BodyStripped}} |
Тіло з видаленими згадками груп |
{{From}} |
Ідентифікатор відправника |
{{To}} |
Ідентифікатор призначення |
{{MessageSid}} |
Ідентифікатор повідомлення каналу |
{{SessionId}} |
UUID поточного сеансу |
{{IsNewSession}} |
"true", коли створено новий сеанс |
{{MediaUrl}} |
Псевдо-URL вхідного медіа |
{{MediaPath}} |
Локальний шлях до медіа |
{{MediaType}} |
Тип медіа (зображення/аудіо/документ/…) |
{{Transcript}} |
Транскрипт аудіо |
{{Prompt}} |
Розв’язаний медіапромпт для записів CLI |
{{MaxChars}} |
Розв’язана максимальна кількість символів виводу для записів CLI |
{{ChatType}} |
"direct" або "group" |
{{GroupSubject}} |
Тема групи (за можливості) |
{{GroupMembers}} |
Попередній перегляд учасників групи (за можливості) |
{{SenderName}} |
Відображуване ім’я відправника (за можливості) |
{{SenderE164}} |
Номер телефону відправника (за можливості) |
{{Provider}} |
Підказка провайдера (whatsapp, telegram, discord тощо) |
Включення конфігурації ($include)
Розділіть конфігурацію на кілька файлів:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/mueller.json5", "./clients/schmidt.json5"], },}Поведінка злиття:
- Один файл: замінює об’єкт, що його містить.
- Масив файлів: глибоко зливається по порядку (пізніші перевизначають попередні).
- Сусідні ключі: зливаються після включень (перевизначають включені значення).
- Вкладені включення: до 10 рівнів углиб.
- Шляхи: розв’язуються відносно файлу, що включає, але мають залишатися всередині каталогу конфігурації верхнього рівня (
dirnameфайлуopenclaw.json). Абсолютні форми/форми../дозволені лише тоді, коли вони все одно розв’язуються всередині цієї межі. Шляхи не повинні містити null-байти й мають бути строго коротшими за 4096 символів до та після розв’язання. - Записи, що належать OpenClaw і змінюють лише один розділ верхнього рівня, підтриманий однофайловим включенням, записуються до цього включеного файлу. Наприклад,
plugins installоновлюєplugins: { $include: "./plugins.json5" }уplugins.json5і залишаєopenclaw.jsonбез змін. - Кореневі включення, масиви включень і включення із сусідніми перевизначеннями є лише для читання для записів, що належать OpenClaw; такі записи fail closed замість вирівнювання конфігурації.
- Помилки: чіткі повідомлення для відсутніх файлів, помилок розбору, циклічних включень, недійсного формату шляху та надмірної довжини.
Пов’язано: Конфігурація · Приклади конфігурації · Doctor