Gateway
Довідник із конфігурації
Довідник основної конфігурації для ~/.openclaw/openclaw.json. Огляд, орієнтований на завдання, див. у Конфігурація.
Охоплює основні поверхні конфігурації OpenClaw і дає посилання назовні, коли підсистема має власний глибший довідник. Каталоги команд, якими володіють канали й plugins, а також поглиблені параметри пам’яті/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 каталогу команд
- сторінки відповідних каналів/plugins для поверхонь команд, специфічних для каналу
Формат конфігурації — JSON5 (дозволені коментарі та завершальні коми). Усі поля необов’язкові - OpenClaw використовує безпечні типові значення, коли їх пропущено.
Канали
Ключі конфігурації для окремих каналів перенесено на окрему сторінку - див.
Конфігурація - канали для channels.*,
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, обмеження згадками).
Типові параметри агента, багато агентів, сеанси та повідомлення
Перенесено на окрему сторінку - див. Конфігурація - агенти для:
agents.defaults.*(робоча область, модель, мислення, Heartbeat, пам’ять, медіа, Skills, пісочниця)multiAgent.*(маршрутизація та прив’язки для багатьох агентів)session.*(життєвий цикл сеансу, Compaction, обрізання)messages.*(доставка повідомлень, TTS, рендеринг markdown)talk.*(режим Talk)talk.speechLocale: необов’язковий ідентифікатор локалі BCP 47 для розпізнавання мовлення Talk на iOS/macOStalk.silenceTimeoutMs: коли не задано, Talk зберігає типове для платформи вікно паузи перед надсиланням транскрипта (700 ms on macOS and Android, 900 ms on iOS)
Інструменти та кастомні провайдери
Політика інструментів, експериментальні перемикачі, конфігурація інструментів на базі провайдерів і налаштування кастомного провайдера / базової URL-адреси перенесені на окрему сторінку - див. Конфігурація - інструменти та кастомні провайдери.
Моделі
Визначення провайдерів, списки дозволених моделей і налаштування кастомних провайдерів розміщено в
Конфігурація - інструменти та кастомні провайдери.
Корінь models також відповідає за глобальну поведінку каталогу моделей.
{
models: {
// Optional. Default: true. Requires a Gateway restart when changed.
pricing: { enabled: false },
},
}
models.mode: поведінка каталогу провайдерів (mergeабоreplace).models.providers: мапа кастомних провайдерів, ключована ідентифікатором провайдера.models.pricing.enabled: керує фоновим початковим завантаженням pricing, яке стартує після того, як sidecars і канали досягнуть готового шляху Gateway. Колиfalse, Gateway пропускає отримання pricing-каталогів OpenRouter і LiteLLM; налаштовані значенняmodels.providers.*.models[].costдосі працюють для локальних оцінок вартості.
MCP
Визначення MCP-серверів, керованих OpenClaw, розміщені в mcp.servers і
використовуються вбудованим Pi та іншими 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
headers: {
Authorization: "Bearer ${MCP_REMOTE_TOKEN}",
},
},
},
},
}
mcp.servers: іменовані визначення stdio або віддалених MCP-серверів для runtime, які надають налаштовані MCP-інструменти. Віддалені записи використовуютьtransport: "streamable-http"абоtransport: "sse";type: "http"— CLI-нативний псевдонім, якийopenclaw mcp setіopenclaw doctor --fixнормалізують у канонічне полеtransport.mcp.sessionIdleTtlMs: TTL бездіяльності для bundled MCP runtime, обмежених сеансом. Одноразові вбудовані запуски запитують очищення наприкінці запуску; цей TTL є резервним механізмом для довгоживучих сеансів і майбутніх викликачів.- Зміни в
mcp.*застосовуються гаряче через звільнення кешованих MCP runtime сеансів. Наступне виявлення/використання інструмента створює їх заново з нової конфігурації, тож видалені записиmcp.serversприбираються негайно, а не чекають idle TTL.
Див. MCP і CLI бекенди щодо поведінки runtime.
Skills
{
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/Projects/agent-scripts/skills"],
},
install: {
preferBrew: true,
nodeManager: "npm", // npm | pnpm | yarn | bun
},
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: необов’язковий список дозволених лише для bundled skills (не впливає на керовані/робочі skills).load.extraDirs: додаткові спільні корені skill (найнижчий пріоритет).install.preferBrew: колиtrue, віддає перевагу інсталяторам Homebrew, якщоbrewдоступний, перш ніж переходити до інших типів інсталяторів.install.nodeManager: перевага Node-інсталятора для специфікаційmetadata.openclaw.install(npm|pnpm|yarn|bun).entries.<skillKey>.enabled: falseвимикає skill, навіть якщо він bundled/встановлений.entries.<skillKey>.apiKey: зручність для skills, які оголошують основну змінну середовища (plaintext-рядок або об’єкт SecretRef).
Plugins
{
plugins: {
enabled: true,
allow: ["voice-call"],
bundledDiscovery: "allowlist",
deny: [],
load: {
paths: ["~/Projects/oss/voice-call-plugin"],
},
entries: {
"voice-call": {
enabled: true,
hooks: {
allowPromptInjection: false,
},
config: { provider: "twilio" },
},
},
},
}
- Завантажуються з
~/.openclaw/extensions,<workspace>/.openclaw/extensions, а такожplugins.load.paths. - Discovery приймає нативні OpenClaw plugins, а також сумісні Codex bundles і Claude bundles, включно з manifestless Claude default-layout bundles.
- Зміни конфігурації потребують перезапуску gateway.
allow: необов’язковий список дозволених (завантажуються лише перелічені plugins).denyмає пріоритет.bundledDiscovery: типове значення для нових конфігурацій —"allowlist", тому непорожнійplugins.allowтакож обмежує bundled provider plugins, зокрема web-search runtime providers. Doctor записує"compat"для мігрованих legacy allowlist конфігурацій, щоб зберегти наявну поведінку bundled providers, доки ви не ввімкнете нову.plugins.entries.<id>.apiKey: зручне поле API-ключа на рівні plugin (коли підтримується plugin).plugins.entries.<id>.env: мапа змінних середовища, обмежена plugin.plugins.entries.<id>.hooks.allowPromptInjection: колиfalse, core блокуєbefore_prompt_buildі ігнорує поля, що змінюють prompt, із legacybefore_agent_start, зберігаючи legacymodelOverrideіproviderOverride. Застосовується до нативних plugin hooks і підтримуваних директорій hooks, наданих bundle.plugins.entries.<id>.hooks.allowConversationAccess: колиtrue, довірені небандловані plugins можуть читати сирий вміст розмови з типізованих hooks, як-отllm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeіagent_end.plugins.entries.<id>.subagent.allowModelOverride: явно довіряє цьому plugin запитувати per-run перевизначенняproviderіmodelдля фонових запусків subagent.plugins.entries.<id>.subagent.allowedModels: необов’язковий список дозволених канонічних цілейprovider/modelдля довірених перевизначень subagent. Використовуйте"*"лише тоді, коли навмисно хочете дозволити будь-яку модель.plugins.entries.<id>.config: об’єкт конфігурації, визначений plugin (валідується нативною схемою OpenClaw plugin, коли доступна).- Налаштування облікового запису/runtime channel plugin розміщуються в
channels.<id>і мають описуватися метаданимиchannelConfigsманіфесту відповідного plugin, а не центральним реєстром опцій OpenClaw. plugins.entries.firecrawl.config.webFetch: налаштування провайдера Firecrawl web-fetch.apiKey: API-ключ Firecrawl (приймає SecretRef). Повертається доplugins.entries.firecrawl.config.webSearch.apiKey, legacytools.web.fetch.firecrawl.apiKeyабо змінної середовищаFIRECRAWL_API_KEY.baseUrl: базова URL-адреса Firecrawl API (типово:https://api.firecrawl.dev; self-hosted перевизначення мають вказувати на private/internal endpoints).onlyMainContent: витягувати зі сторінок лише основний вміст (типово:true).maxAgeMs: максимальний вік кешу в мілісекундах (типово:172800000/ 2 дні).timeoutSeconds: тайм-аут scrape-запиту в секундах (типово:60).
plugins.entries.xai.config.xSearch: налаштування xAI X Search (Grok web search).enabled: увімкнути провайдера X Search.model: модель Grok для використання в пошуку (наприклад,"grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: налаштування memory dreaming. Див. Dreaming щодо фаз і порогів.enabled: головний перемикач dreaming (типовоfalse).frequency: Cron cadence для кожного повного sweep dreaming (типово"0 3 * * *").model: необов’язкове перевизначення моделі subagent Dream Diary. Потребуєplugins.entries.memory-core.subagent.allowModelOverride: true; поєднуйте зallowedModels, щоб обмежити цілі. Помилки недоступності моделі повторюються один раз із типовою моделлю сеансу; збої довіри або allowlist не переходять на запасний варіант мовчки.- політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації).
- Повна конфігурація пам’яті міститься в Довідник конфігурації пам’яті:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Увімкнені Claude bundle plugins також можуть додавати вбудовані типові значення Pi з
settings.json; OpenClaw застосовує їх як sanitized налаштування агента, а не як сирі patches конфігурації OpenClaw. plugins.slots.memory: виберіть ідентифікатор активного plugin пам’яті або"none", щоб вимкнути plugins пам’яті.plugins.slots.contextEngine: виберіть ідентифікатор активного plugin context engine; типово"legacy", якщо ви не встановите й не виберете інший engine.
Див. Plugins.
Зобов’язання
commitments керує виведеною пам’яттю подальших дій: OpenClaw може виявляти check-ins із ходів розмови та доставляти їх через Heartbeat-запуски.
commitments.enabled: увімкнути приховане LLM-витягування, зберігання й Heartbeat-доставку для виведених зобов’язань щодо подальших дій. Типово:false.commitments.maxPerDay: максимальна кількість виведених зобов’язань щодо подальших дій, доставлених за сеанс агента протягом ковзного дня. Типово:3.
Див. Виведені зобов’язання.
Браузер
{
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застосовуються до перевірок доступності віддаленого CDP іattachOnly, а також до запитів відкриття вкладок. Керовані профілі loopback зберігають локальні стандартні значення CDP.- Якщо зовнішньо керований сервіс CDP доступний через loopback, установіть для цього
профілю
attachOnly: true; інакше OpenClaw трактує порт loopback як локальний керований профіль браузера і може повідомляти про помилки володіння локальним портом. - Профілі
existing-sessionвикористовують Chrome MCP замість CDP і можуть підключатися на вибраному хості або через підключений браузерний вузол. - Профілі
existing-sessionможуть задаватиuserDataDir, щоб націлитися на конкретний профіль браузера на базі Chromium, наприклад Brave або Edge. - Профілі
existing-sessionзберігають поточні обмеження маршрутів Chrome MCP: дії на основі snapshot/ref замість націлювання CSS-селекторами, хуки завантаження одного файлу, без перевизначень тайм-аутів діалогів, безwait --load networkidleі безresponsebody, експорту PDF, перехоплення завантажень або пакетних дій. - Локальні керовані профілі
openclawавтоматично призначаютьcdpPortіcdpUrl; задавайтеcdpUrlявно лише для віддаленого CDP. - Локальні керовані профілі можуть задавати
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: {
seamColor: "#FF4500",
assistant: {
name: "OpenClaw",
avatar: "CB", // emoji, short text, image URL, or data URI
},
},
}
seamColor: акцентний колір для chrome нативного інтерфейсу застосунку (відтінок бульбашки 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://gateway.tailnet: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
allow: ["gateway"],
},
push: {
apns: {
relay: {
baseUrl: "https://relay.example.com",
timeoutMs: 10000,
},
},
},
},
}
Gateway field details
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.- Застарілі псевдоніми прив’язки: використовуйте значення режиму прив’язки в
gateway.bind(auto,loopback,lan,tailnet,custom), а не псевдоніми хоста (0.0.0.0,127.0.0.1,localhost,::,::1). - Примітка щодо Docker: типова прив’язка
loopbackслухає127.0.0.1всередині контейнера. За мережевого мосту Docker (-p 18789:18789) трафік надходить наeth0, тому Gateway недоступний. Використовуйте--network hostабо задайтеbind: "lan"(абоbind: "custom"зcustomBindHost: "0.0.0.0"), щоб слухати всі інтерфейси. - Автентифікація: типово обов’язкова. Прив’язки не до loopback вимагають автентифікації Gateway. На практиці це означає спільний токен/пароль або identity-aware зворотний проксі з
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 зворотному проксі та довіряє заголовкам ідентичності відgateway.trustedProxies(див. Автентифікація через довірений проксі). Цей режим типово очікує джерело проксі не loopback; same-host loopback зворотні проксі вимагають явногоgateway.auth.trustedProxy.allowLoopback = true. Внутрішні same-host виклики можуть використовуватиgateway.auth.passwordяк локальний прямий резервний варіант;gateway.auth.tokenлишається взаємовиключним із режимом trusted-proxy.gateway.auth.allowTailscale: колиtrue, заголовки ідентичності Tailscale Serve можуть задовольняти автентифікацію інтерфейсу керування/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 невдалі спроби для того самого
{scope, clientIp}серіалізуються перед записом помилки. Тому одночасні невдалі спроби від того самого клієнта можуть спрацювати обмежувачем уже на другому запиті, а не обидві пройти як звичайні невідповідності. gateway.auth.rateLimit.exemptLoopbackтипово має значенняtrue; задайтеfalse, коли ви навмисно хочете обмежувати частоту localhost-трафіку також (для тестових налаштувань або строгих проксі-розгортань).- Спроби WS-автентифікації з браузерного origin завжди обмежуються з вимкненим винятком для loopback (додатковий захист від браузерного перебору localhost).
- На loopback такі браузерні блокування origin ізольовані за нормалізованим значенням
Origin, тому повторні невдачі з одного localhost origin не блокують автоматично інший origin. tailscale.mode:serve(лише tailnet, прив’язка loopback) абоfunnel(публічно, вимагає автентифікації).controlUi.allowedOrigins: явний список дозволених браузерних origin для підключень WebSocket до Gateway. Обов’язковий, коли браузерні клієнти очікуються з origin не loopback.controlUi.chatMessageMaxWidth: необов’язкова максимальна ширина для згрупованих повідомлень чату інтерфейсу керування. Приймає обмежені значення ширини CSS, як-от960px,82%,min(1280px, 82%)іcalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: небезпечний режим, що вмикає резервне визначення origin із заголовка Host для розгортань, які навмисно покладаються на політику origin за заголовком Host.remote.transport:ssh(типово) абоdirect(ws/wss). Дляdirectзначенняremote.urlмає бутиws://абоwss://.OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: аварійне перевизначення в середовищі клієнтського процесу, яке дозволяє відкритий текстws://до довірених IP приватної мережі; типове значення для відкритого тексту лишається лише loopback. Еквівалента вopenclaw.jsonнемає, а конфігурація приватної мережі браузера, як-отbrowser.ssrfPolicy.dangerouslyAllowPrivateNetwork, не впливає на клієнтів WebSocket Gateway.gateway.remote.token/.password— це поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують автентифікацію Gateway.gateway.push.apns.relay.baseUrl: базова HTTPS-URL для зовнішнього ретранслятора APNs, який використовують офіційні/TestFlight збірки iOS після публікації в Gateway реєстрацій із підтримкою ретранслятора. Ця URL має збігатися з URL ретранслятора, скомпільованою в iOS-збірку.gateway.push.apns.relay.timeoutMs: час очікування надсилання від Gateway до ретранслятора в мілісекундах. Типово10000.- Реєстрації з підтримкою ретранслятора делегуються конкретній ідентичності Gateway. Спарений застосунок iOS отримує
gateway.identity.get, включає цю ідентичність у реєстрацію ретранслятора та пересилає Gateway дозвіл надсилання, прив’язаний до реєстрації. Інший Gateway не може повторно використати цю збережену реєстрацію. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: тимчасові перевизначення env для наведеної вище конфігурації ретранслятора.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: escape hatch лише для розробки для HTTP URL ретранслятора loopback. Виробничі URL ретранслятора мають лишатися на HTTPS.gateway.handshakeTimeoutMs: час очікування pre-auth рукостискання WebSocket Gateway у мілісекундах. Типово:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MSмає пріоритет, коли задано. Збільшуйте це значення на навантажених або малопотужних хостах, де локальні клієнти можуть підключатися, поки стартовий прогрів ще стабілізується.gateway.channelHealthCheckMinutes: інтервал монітора здоров’я каналу в хвилинах. Задайте0, щоб глобально вимкнути перезапуски монітора здоров’я. Типово:5.gateway.channelStaleEventThresholdMinutes: поріг застарілого сокета в хвилинах. Тримайте його більшим або рівнимgateway.channelHealthCheckMinutes. Типово:30.gateway.channelMaxRestartsPerHour: максимальна кількість перезапусків монітором здоров’я на канал/обліковий запис у ковзній годині. Типово:10.channels.<provider>.healthMonitor.enabled: відмова для окремого каналу від перезапусків монітора здоров’я зі збереженням увімкненого глобального монітора.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: перевизначення для окремого облікового запису в багатоканальних каналах. Коли задано, має пріоритет над перевизначенням рівня каналу.- Локальні шляхи викликів Gateway можуть використовувати
gateway.remote.*як резервний варіант лише колиgateway.auth.*не задано. - Якщо
gateway.auth.token/gateway.auth.passwordявно налаштовано через SecretRef і не розв’язано, розв’язання завершується закритою відмовою (без маскування віддаленим резервним варіантом). trustedProxies: IP зворотних проксі, які завершують TLS або вставляють заголовки пересланого клієнта. Перелічуйте лише проксі, які ви контролюєте. Записи loopback усе ще чинні для same-host проксі/налаштувань локального виявлення (наприклад, Tailscale Serve або локальний зворотний проксі), але вони не роблять loopback-запити придатними дляgateway.auth.mode: "trusted-proxy".allowRealIpFallback: колиtrue, Gateway приймаєX-Real-IP, якщоX-Forwarded-Forвідсутній. Типовоfalseдля поведінки fail-closed.gateway.nodes.pairing.autoApproveCidrs: необов’язковий список дозволених CIDR/IP для автоматичного схвалення першого спарювання пристрою вузла без запитаних областей доступу. Вимкнено, коли не задано. Це не схвалює автоматично спарювання оператора/браузера/інтерфейсу керування/WebChat і не схвалює автоматично підвищення ролі, області доступу, метаданих або публічного ключа.gateway.nodes.allowCommands/gateway.nodes.denyCommands: глобальне формування allow/deny для оголошених команд вузла після спарювання та оцінювання списку дозволеного платформою. ВикористовуйтеallowCommands, щоб явно дозволити небезпечні команди вузла, як-отcamera.snap,camera.clipіscreen.record;denyCommandsвилучає команду, навіть якщо типове значення платформи або явний дозвіл інакше включали б її. Після того як вузол змінить свій оголошений список команд, відхиліть і повторно схваліть це спарювання пристрою, щоб Gateway зберіг оновлений знімок команд.gateway.tools.deny: додаткові назви інструментів, заблоковані для HTTPPOST /tools/invoke(розширює типовий список заборон).gateway.tools.allow: вилучає назви інструментів із типового HTTP-списку заборон.
OpenAI-сумісні кінцеві точки
- 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Порожні списки дозволених трактуються як незадані; використовуйтеgateway.http.endpoints.responses.files.allowUrl=falseі/абоgateway.http.endpoints.responses.images.allowUrl=false, щоб вимкнути отримання URL.
- Необов’язковий заголовок посилення захисту відповіді:
gateway.http.securityHeaders.strictTransportSecurity(задавайте лише для HTTPS origin, які ви контролюєте; див. Автентифікація через довірений проксі)
Ізоляція кількох екземплярів
Запускайте кілька Gateway на одному хості з унікальними портами та каталогами стану:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
OPENCLAW_STATE_DIR=~/.openclaw-a \
openclaw gateway --port 19001
Зручні прапорці: --dev (використовує ~/.openclaw-dev + порт 19001), --profile <name> (використовує ~/.openclaw-<name>).
Див. Кілька Gateway.
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 на слухачі Gateway (HTTPS/WSS) (типово:false).autoGenerate: автоматично генерує локальну самопідписану пару сертифікат/ключ, коли явні файли не налаштовано; лише для локального використання/розробки.certPath: шлях файлової системи до файлу сертифіката TLS.keyPath: шлях файлової системи до файлу приватного ключа TLS; тримайте права доступу обмеженими.caPath: необов’язковий шлях до CA bundle для перевірки клієнта або користувацьких ланцюжків довіри.
gateway.reload
{
gateway: {
reload: {
mode: "hybrid", // off | restart | hot | hybrid
debounceMs: 500,
deferralTimeoutMs: 300000,
},
},
}
mode: керує тим, як зміни конфігурації застосовуються під час виконання."off": ігнорувати live-редагування; зміни потребують явного перезапуску."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>.
Токени hook у рядку запиту відхиляються.
Примітки щодо перевірки та безпеки:
hooks.enabled=trueпотребує непорожньогоhooks.token.hooks.tokenмає бути відмінним відgateway.auth.token; повторне використання токена Gateway відхиляється.hooks.pathне може бути/; використовуйте окремий підшлях, наприклад/hooks.- Якщо
hooks.allowRequestSessionKey=true, обмежтеhooks.allowedSessionKeyPrefixes(наприклад,["hook:"]). - Якщо зіставлення або пресет використовує шаблонний
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.
- Значення
Mapping details
match.pathзіставляє підшлях після/hooks(наприклад,/hooks/gmail→gmail).match.sourceзіставляє поле корисного навантаження для загальних шляхів.- Шаблони на кшталт
{{messages[0].subject}}читають дані з корисного навантаження. transformможе вказувати на модуль JS/TS, який повертає дію hook.transform.moduleмає бути відносним шляхом і залишатися в межахhooks.transformsDir(абсолютні шляхи та обхід каталогів відхиляються).- Тримайте
hooks.transformsDirу межах~/.openclaw/hooks/transforms; каталоги Skills у робочій області відхиляються. Якщоopenclaw doctorповідомляє, що цей шлях недійсний, перемістіть модуль трансформації до каталогу трансформацій hooks або вилучітьhooks.transformsDir. agentIdспрямовує до конкретного агента; невідомі ідентифікатори повертаються до типового.allowedAgentIds: обмежує явну маршрутизацію (*або пропущено = дозволити всі,[]= заборонити всі).defaultSessionKey: необов’язковий фіксований ключ сесії для запусків агента hook без явногоsessionKey.allowRequestSessionKey: дозволяє викликачам/hooks/agentі ключам сесій зіставлення на основі шаблонів задаватиsessionKey(за замовчуванням:false).allowedSessionKeyPrefixes: необов’язковий список дозволених префіксів для явних значеньsessionKey(запит + зіставлення), наприклад["hook:"]. Він стає обов’язковим, коли будь-яке зіставлення або пресет використовує шаблоннийsessionKey.deliver: trueнадсилає фінальну відповідь у канал;channelза замовчуванням дорівнюєlast.modelперевизначає LLM для цього запуску hook (має бути дозволено, якщо задано каталог моделей).
Інтеграція Gmail
- Вбудований пресет Gmail використовує
sessionKey: "hook:gmail:{{messages[0].id}}". - Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, задайте
hooks.allowRequestSessionKey: trueі обмежтеhooks.allowedSessionKeyPrefixes, щоб вони відповідали простору імен Gmail, наприклад["hook:", "hook:gmail:"]. - Якщо вам потрібно
hooks.allowRequestSessionKey: false, перевизначте пресет статичнимsessionKeyзамість шаблонного типового значення.
{
hooks: {
gmail: {
account: "[email protected]",
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 можливостей з областю дії вузла для доступу до canvas/A2UI.
- URL можливостей прив’язані до активної WS-сесії вузла й швидко спливають. Резервний механізм на основі IP не використовується.
- Вставляє клієнт live-reload в обслуговуваний HTML.
- Автоматично створює початковий
index.html, коли каталог порожній. - Також обслуговує A2UI на
/__openclaw__/a2ui/. - Зміни потребують перезапуску gateway.
- Вимикайте live reload для великих каталогів або помилок
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 і вмикається за бажанням у розгортаннях Gateway на Linux, Windows і в контейнерах. - Ім’я хоста за замовчуванням береться із системного імені хоста, коли воно є дійсною DNS-міткою, з поверненням до
openclaw. Перевизначте за допомогоюOPENCLAW_MDNS_HOSTNAME.
Глобальна зона (DNS-SD)
{
discovery: {
wideArea: { enabled: true },
},
}
Записує unicast-зону DNS-SD у ~/.openclaw/dns/. Для виявлення між мережами поєднайте з DNS-сервером (рекомендовано CoreDNS) + split DNS Tailscale.
Налаштування: openclaw dns setup --apply.
Середовище
env (вбудовані змінні середовища)
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: {
GROQ_API_KEY: "gsk-...",
},
shellEnv: {
enabled: true,
timeoutMs: 15000,
},
},
}
- Вбудовані змінні середовища застосовуються лише якщо в середовищі процесу немає відповідного ключа.
- Файли
.env:.envу CWD +~/.openclaw/.env(жоден не перевизначає наявні змінні). shellEnv: імпортує відсутні очікувані ключі з профілю вашої оболонки входу.- Повний порядок пріоритетів див. у Середовище.
Підстановка змінних середовища
Посилайтеся на змінні середовища в будь-якому рядку конфігурації за допомогою ${VAR_NAME}:
{
gateway: {
auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" },
},
}
- Зіставляються лише назви у верхньому регістрі:
[A-Z_][A-Z0-9_]*. - Відсутні або порожні змінні спричиняють помилку під час завантаження конфігурації.
- Екрануйте як
$${VAR}для буквального${VAR}. - Працює з
$include.
Секрети
Посилання на секрети є адитивними: значення відкритим текстом усе ще працюють.
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}$ - 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 завершуються із закриттям доступу, коли перевірка Windows ACL недоступна. Установлюйте
allowInsecurePath: trueлише для довірених шляхів, які неможливо перевірити. - Постачальник
execвимагає абсолютного шляхуcommandі використовує протокольні payload у stdin/stdout. - За замовчуванням шляхи команд через символьні посилання відхиляються. Установіть
allowSymlinkCommand: true, щоб дозволити шляхи із символьними посиланнями, водночас перевіряючи розв’язаний цільовий шлях. - Якщо налаштовано
trustedDirs, перевірка довіреного каталогу застосовується до розв’язаного цільового шляху. - Дочірнє середовище
execза замовчуванням мінімальне; передавайте потрібні змінні явно черезpassEnv. - Посилання на секрети розв’язуються під час активації у знімок у пам’яті, після чого шляхи запитів читають лише цей знімок.
- Фільтрація активної поверхні застосовується під час активації: нерозв’язані посилання на ввімкнених поверхнях призводять до збою запуску або перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
Сховище автентифікації
{
auth: {
profiles: {
"anthropic:default": { provider: "anthropic", mode: "api_key" },
"anthropic:work": { provider: "anthropic", mode: "api_key" },
"openai-codex:personal": { provider: "openai-codex", mode: "oauth" },
},
order: {
anthropic: ["anthropic:default", "anthropic:work"],
"openai-codex": ["openai-codex:personal"],
},
},
}
- Профілі для кожного агента зберігаються в
<agentDir>/auth-profiles.json. auth-profiles.jsonпідтримує посилання на рівні значень (keyRefдляapi_key,tokenRefдляtoken) для статичних режимів облікових даних.- Застарілі пласкі мапи
auth-profiles.json, як-от{ "provider": { "apiKey": "..." } }, не є форматом часу виконання;openclaw doctor --fixпереписує їх у канонічні профілі API-ключівprovider:defaultіз резервною копією.legacy-flat.*.bak. - Профілі в режимі OAuth (
auth.profiles.<id>.mode = "oauth") не підтримують облікові дані профілю автентифікації на основі SecretRef. - Статичні облікові дані часу виконання надходять із розв’язаних знімків у пам’яті; застарілі статичні записи
auth.jsonочищуються, коли їх виявлено. - Застарілі імпорти OAuth беруться з
~/.openclaw/credentials/oauth.json. - Див. OAuth.
- Поведінка секретів під час виконання та інструменти
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: максимальна кількість ротацій профілів автентифікації того самого провайдера для помилок перевантаження перед переходом до резервної моделі (типово:1). Форми зайнятості провайдера, як-отModelNotReadyException, потрапляють сюди.overloadedBackoffMs: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово:0).rateLimitedProfileRotations: максимальна кількість ротацій профілів автентифікації того самого провайдера для помилок обмеження частоти перед переходом до резервної моделі (типово: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: 600000,
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,
sampleRate: 1.0,
flushIntervalMs: 5000,
captureContent: {
enabled: false,
inputMessages: false,
outputMessages: false,
toolInputs: false,
toolOutputs: false,
systemPrompt: 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 використовує безпечніше розширене вікно вбудованого запуску щонайменше 10 хвилин і 5xstuckSessionWarnMs.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.sampleRate: частота вибірки трас0-1.otel.flushIntervalMs: періодичний інтервал скидання телеметрії в мс.otel.captureContent: явне ввімкнення захоплення сирого вмісту для атрибутів span OTEL. Типово вимкнено. Булевеtrueзахоплює несистемний вміст повідомлень/інструментів; форма об’єкта дає змогу явно ввімкнутиinputMessages,outputMessages,toolInputs,toolOutputsіsystemPrompt.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: перемикач середовища для найновіших експериментальних атрибутів провайдера span GenAI. Типово spans зберігають застарілий атрибут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: мінімальна затримка в годинах перед авто-застосуванням стабільного каналу (типово:6; максимум:168).auto.stableJitterHours: додаткове вікно розподілу розгортання стабільного каналу в годинах (типово:12; максимум:168).auto.betaCheckIntervalHours: як часто виконуються перевірки бета-каналу в годинах (типово: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, щоб приховати dispatch ACP і можливості spawn).dispatch.enabled: незалежний шлюз для dispatch ходу сесії ACP (типово:true). Встановітьfalse, щоб залишити команди ACP доступними, блокуючи виконання.backend: типовий ідентифікатор бекенда середовища виконання ACP (має відповідати зареєстрованому Plugin середовища виконання ACP). Спершу встановіть Plugin бекенда, а якщо заданоplugins.allow, включіть ідентифікатор Plugin бекенда (наприкладacpx), інакше бекенд ACP не завантажиться.defaultAgent: резервний ідентифікатор цільового агента ACP, коли spawns не вказують явну ціль.allowedAgents: allowlist ідентифікаторів агентів, дозволених для сесій середовища виконання 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: необов’язкова команда інсталяції, яку потрібно виконати під час початкового налаштування середовища виконання 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",
},
}
Ідентичність
Див. поля ідентичності agents.list у типових параметрах агента.
Міст (застаріле, вилучено)
Поточні збірки більше не містять TCP-міст. Вузли підключаються через WebSocket Gateway. Ключі bridge.* більше не є частиною схеми конфігурації (валідація завершується помилкою, доки їх не буде вилучено; openclaw doctor --fix може видалити невідомі ключі).
Legacy bridge config (historical reference)
{
"bridge": {
"enabled": true,
"port": 18790,
"bind": "tailnet",
"tls": {
"enabled": true,
"autoGenerate": true
}
}
}
Cron
{
cron: {
enabled: true,
maxConcurrentRuns: 2, // 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/runs/<jobId>.jsonl) перед обрізанням. За замовчуванням:2_000_000байтів.runLog.keepLines: найновіші рядки, що зберігаються під час обрізання журналу запуску. За замовчуванням:2000.webhookToken: bearer-токен, який використовується для POST-доставки cron webhook (delivery.mode = "webhook"); якщо пропущено, заголовок автентифікації не надсилається.webhook: застаріла резервна URL-адреса webhook (http/https), що використовується лише для збережених завдань, які досі маютьnotify: true.
cron.retry
{
cron: {
retry: {
maxAttempts: 3,
backoffMs: [30000, 60000, 300000],
retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"],
},
},
}
maxAttempts: максимальна кількість повторних спроб для одноразових завдань у разі тимчасових помилок (за замовчуванням:3; діапазон:0-10).backoffMs: масив затримок backoff у мс для кожної повторної спроби (за замовчуванням:[30000, 60000, 300000]; 1-10 записів).retryOn: типи помилок, що запускають повторні спроби -"rate_limit","overloaded","network","timeout","server_error". Пропустіть, щоб повторювати всі тимчасові типи.
Застосовується лише до одноразових завдань cron. Повторювані завдання використовують окрему обробку збоїв.
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: перевизначення каналу для доставки announce."last"повторно використовує останній відомий канал доставки.to: явна ціль announce або URL webhook. Обов’язково для режиму webhook.accountId: необов’язкове перевизначення облікового запису для доставки.delivery.failureDestinationокремого завдання перевизначає це глобальне значення за замовчуванням.- Коли не задано ні глобальне, ні окреме для завдання місце призначення збоїв, завдання, які вже доставляють через
announce, у разі збою повертаються до основної цілі 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}} |
Розв’язаний медіа prompt для записів CLI |
{{MaxChars}} |
Розв’язана максимальна кількість символів виводу для записів CLI |
{{ChatType}} |
"direct" або "group" |
{{GroupSubject}} |
Тема групи (найкраща спроба) |
{{GroupMembers}} |
Попередній перегляд учасників групи (найкраща спроба) |
{{SenderName}} |
Відображуване ім’я відправника (найкраща спроба) |
{{SenderE164}} |
Номер телефону відправника (найкраща спроба) |
{{Provider}} |
Підказка 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). Абсолютні форми/форми з../дозволені лише тоді, коли вони все одно розв’язуються всередині цієї межі. - Записи, що належать OpenClaw і змінюють лише один розділ верхнього рівня, підкріплений включенням одного файла, записуються наскрізно в цей включений файл. Наприклад,
plugins installоновлюєplugins: { $include: "./plugins.json5" }уplugins.json5і залишаєopenclaw.jsonнедоторканим. - Кореневі включення, масиви включень і включення із сусідніми перевизначеннями доступні лише для читання для записів, що належать OpenClaw; такі записи завершуються закритою помилкою замість сплющення конфігурації.
- Помилки: чіткі повідомлення для відсутніх файлів, помилок розбору та циклічних включень.
Пов’язане: Конфігурація · Приклади конфігурації · Doctor