Gateway
Referência de configuração
Referência em nível de campo para ~/.openclaw/openclaw.json: chaves, valores padrão e links para páginas mais detalhadas dos subsistemas. Para orientações de configuração voltadas a tarefas, consulte Configuração. Os catálogos de comandos pertencentes a canais e plugins e os ajustes avançados de memória/QMD estão em suas próprias páginas, não aqui.
O formato da configuração é JSON5 (comentários e vírgulas finais são permitidos). Todos os campos são opcionais; o OpenClaw usa valores padrão seguros quando eles são omitidos.
O código prevalece sobre esta página:
openclaw config schemaexibe o JSON Schema ativo usado para validação e pela interface de controle, com os metadados de itens integrados/plugins/canais mesclados.- Os agentes devem chamar a ação
config.schema.lookupda ferramentagatewaypara obter um único nó exato do esquema, restrito ao caminho, antes de editar a configuração. pnpm config:docs:check/pnpm config:docs:genvalidam o hash de referência desta documentação em relação à superfície atual do esquema.
Referências detalhadas específicas:
- Referência de configuração de memória para
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationse a configuração de Dreaming emplugins.entries.memory-core.config.dreaming. - Comandos de barra para o catálogo atual de comandos integrados + incluídos.
- Páginas dos canais/plugins responsáveis pelas superfícies de comandos específicas de cada canal.
Canais
As chaves de configuração específicas de cada canal estão em Configuração — canais: channels.* para Slack, Discord, Telegram, WhatsApp, Matrix, iMessage e outros canais incluídos (autenticação, controle de acesso, múltiplas contas, restrição por menção).
Padrões do agente, múltiplos agentes, sessões e mensagens
Consulte Configuração — agentes para:
agents.defaults.*(espaço de trabalho, modelo, raciocínio, Heartbeat, memória, mídia, Skills, sandbox)multiAgent.*(roteamento e vinculações de múltiplos agentes)session.*(ciclo de vida da sessão, Compaction, remoção)messages.*(entrega de mensagens, TTS, renderização de markdown)talk.*(modo de conversa)talk.consultThinkingLevel: substituição do nível de raciocínio para toda a execução do agente OpenClaw por trás das consultas em tempo real do Talk na interface de controletalk.consultFastMode: substituição pontual do modo rápido para consultas em tempo real do Talk na interface de controletalk.speechLocale: identificador de localidade BCP 47 opcional para o reconhecimento de fala do Talk no iOS/macOStalk.silenceTimeoutMs: quando não definido, o Talk mantém a janela de pausa padrão da plataforma antes de enviar a transcrição (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: fallback de retransmissão do Gateway para transcrições finalizadas do Talk em tempo real que ignoramopenclaw_agent_consult
Ferramentas e provedores personalizados
A política de ferramentas, as opções experimentais, a configuração de ferramentas baseadas em provedores e a configuração de provedores personalizados / URLs base ficam em Configuração — ferramentas e provedores personalizados.
Modelos
As definições de provedores, as listas de modelos permitidos e a configuração de provedores personalizados ficam em
Configuração — ferramentas e provedores personalizados.
A raiz models também controla o comportamento global do catálogo de modelos.
{ models: { // Opcional. Padrão: true. Requer a reinicialização do Gateway quando alterado. pricing: { enabled: false }, },}models.mode: comportamento do catálogo de provedores (mergeoureplace).models.providers: mapa de provedores personalizados indexado pelo id do provedor.models.providers.*.localService: gerenciador opcional de processos sob demanda para servidores locais de modelos. O OpenClaw consulta o endpoint de integridade configurado, inicia ocommandabsoluto quando necessário, aguarda até que esteja pronto e então envia a solicitação ao modelo. Consulte Serviços locais de modelos.models.pricing.enabled: controla a inicialização em segundo plano dos preços, que começa depois que os processos auxiliares e canais alcançam o caminho de prontidão do Gateway. Quandofalse, o Gateway ignora as buscas dos catálogos de preços do OpenRouter e do LiteLLM; os valoresmodels.providers.*.models[].costconfigurados continuam funcionando para estimativas locais de custo.
MCP
As definições de servidores MCP gerenciadas pelo OpenClaw ficam em mcp.servers e são
consumidas pelo OpenClaw incorporado e por outros adaptadores de runtime. Os comandos openclaw mcp list,
show, set e unset gerenciam esse bloco sem se conectar ao
servidor de destino durante as edições de configuração.
{ mcp: { // Opcional. Padrão: 600000 ms (10 minutos). Defina como 0 para desativar a remoção por inatividade. 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_*"], }, // Controles opcionais de projeção do servidor de aplicativos Codex. codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers: definições nomeadas de servidores MCP stdio ou remotos para runtimes que expõem as ferramentas MCP configuradas. As entradas remotas usamtransport: "streamable-http"outransport: "sse";type: "http"é um alias nativo da CLI queopenclaw mcp seteopenclaw doctor --fixnormalizam para o campo canônicotransport.mcp.servers.<name>.enabled: defina comofalsepara manter uma definição de servidor salva, mas excluí-la da descoberta de MCP e da projeção de ferramentas do OpenClaw incorporado.mcp.servers.<name>.timeout/requestTimeoutMs: tempo limite por servidor para solicitações MCP, em segundos ou milissegundos.mcp.servers.<name>.connectTimeout/connectionTimeoutMs: tempo limite por servidor para conexão, em segundos ou milissegundos.mcp.servers.<name>.supportsParallelToolCalls: indicação opcional de simultaneidade para adaptadores que podem escolher se devem emitir chamadas paralelas de ferramentas MCP.mcp.servers.<name>.auth: defina como"oauth"para servidores MCP HTTP que exigem OAuth. Executeopenclaw mcp login <name>para armazenar tokens no estado do OpenClaw.mcp.servers.<name>.oauth: substituições opcionais de escopo OAuth, URL de redirecionamento e URL de metadados do cliente.mcp.servers.<name>.sslVerify,clientCert,clientKey: controles TLS HTTP para endpoints privados e TLS mútuo.mcp.servers.<name>.toolFilter: seleção opcional de ferramentas por servidor.includelimita as ferramentas MCP descobertas aos nomes correspondentes;excludeoculta os nomes correspondentes. As entradas são nomes exatos de ferramentas MCP ou padrões glob simples com*. Servidores com recursos ou prompts também geram nomes de ferramentas utilitárias (resources_list,resources_read,prompts_list,prompts_get), e esses nomes usam o mesmo filtro.mcp.servers.<name>.codex: controles opcionais de projeção do servidor de aplicativos Codex. Esse bloco é composto por metadados do OpenClaw apenas para threads do servidor de aplicativos Codex; ele não afeta sessões ACP, a configuração genérica do ambiente Codex nem outros adaptadores de runtime. Uma lista não vazia emcodex.agentslimita o servidor aos ids de agentes do OpenClaw listados. Listas de agentes com escopo vazias, em branco ou inválidas são rejeitadas pela validação da configuração e omitidas pelo caminho de projeção do runtime, em vez de se tornarem globais.codex.defaultToolsApprovalModeemite odefault_tools_approval_modenativo do Codex para esse servidor. O OpenClaw remove o blococodexantes de passar a configuração nativamcp_serversao Codex. Omita o bloco para manter o servidor projetado para todos os agentes do servidor de aplicativos Codex com o comportamento padrão de aprovação MCP do Codex.mcp.sessionIdleTtlMs: TTL de inatividade para runtimes MCP integrados com escopo de sessão. Execuções incorporadas pontuais solicitam limpeza ao fim da execução; esse TTL funciona como proteção para sessões de longa duração e futuros chamadores.- As alterações em
mcp.*são aplicadas a quente por meio do descarte dos runtimes MCP em cache da sessão. A próxima descoberta ou utilização de ferramentas os recria com base na nova configuração, de modo que as entradas removidas demcp.serverssejam eliminadas imediatamente, em vez de aguardar o TTL de inatividade. - A descoberta em runtime também respeita as notificações de alteração na lista de ferramentas MCP, descartando o catálogo em cache dessa sessão. Servidores que anunciam recursos ou prompts recebem ferramentas utilitárias para listar/ler recursos e listar/obter prompts. Falhas repetidas nas chamadas de ferramentas pausam brevemente o servidor afetado antes que outra chamada seja tentada.
Consulte MCP e Backends da CLI para saber mais sobre o comportamento em 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" }, // ou string em texto simples env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}allowBundled: lista opcional de permissão apenas para skills integradas (skills gerenciadas/do espaço de trabalho não são afetadas).load.extraDirs: raízes adicionais de skills compartilhadas (menor precedência).load.allowSymlinkTargets: raízes de destino reais confiáveis para as quais os links simbólicos de skills podem apontar quando o link está fora da raiz de origem configurada.workshop.allowSymlinkTargetWrites: permite que a aplicação do Skill Workshop grave por meio de destinos de links simbólicos já confiáveis (padrão: false).install.preferBrew: quando verdadeiro, prioriza os instaladores do Homebrew quandobrewestá disponível antes de recorrer a outros tipos de instalador.install.nodeManager: preferência de instalador do Node para as especificaçõesmetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: permite que clientes confiáveisoperator.admindo Gateway instalem arquivos zip privados preparados por meio deskills.upload.*(padrão: false). Isso habilita apenas o caminho de arquivos enviados; as instalações normais do ClawHub não exigem essa opção.entries.<skillKey>.enabled: falsedesativa uma skill mesmo que ela esteja integrada/instalada.entries.<skillKey>.apiKey: conveniência para skills que declaram uma variável de ambiente principal (string em texto simples ou objeto SecretRef).limits.maxCandidatesPerRoot,limits.maxSkillsLoadedPerSource,limits.maxSkillsInPrompt,limits.maxSkillsPromptChars,limits.maxSkillFileBytes: limitam a descoberta de skills e o prompt de skills apresentado ao modelo.- As configurações de autonomia/aprovação do Skill Workshop (
workshop.autonomous.enabled,workshop.approvalPolicy,workshop.maxPending,workshop.maxSkillBytes) estão documentadas em Configuração de Skills.
Plugins
{ 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" }, }, }, },}- Carregados de diretórios de pacotes ou bundles em
~/.openclaw/extensionse<workspace>/.openclaw/extensions, além de arquivos ou diretórios listados emplugins.load.paths. - Coloque arquivos de plugin independentes em
plugins.load.paths; as raízes de extensões descobertas automaticamente ignoram arquivos.js,.mjse.tsno nível superior, para que scripts auxiliares nessas raízes não bloqueiem a inicialização. - A descoberta aceita plugins nativos do OpenClaw, além de bundles compatíveis do Codex e do Claude, incluindo bundles do Claude sem manifesto que usam o layout padrão.
- Alterações na configuração exigem a reinicialização do gateway.
allow: lista de permissões opcional (somente os plugins listados são carregados).denyprevalece.plugins.entries.<id>.apiKey: campo de conveniência para a chave de API no nível do plugin (quando compatível com o plugin).plugins.entries.<id>.env: mapa de variáveis de ambiente com escopo do plugin.plugins.entries.<id>.hooks.allowPromptInjection: quandofalse, o núcleo bloqueiabefore_prompt_builde ignora campos que modificam o prompt dobefore_agent_startlegado, preservando os campos legadosmodelOverrideeproviderOverride. Aplica-se a hooks de plugins nativos e a diretórios de hooks fornecidos por bundles compatíveis.plugins.entries.<id>.hooks.allowConversationAccess: quandotrue, plugins confiáveis não incluídos no bundle podem ler o conteúdo bruto da conversa em hooks tipados comollm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeeagent_end.plugins.entries.<id>.subagent.allowModelOverride: confia explicitamente neste plugin para solicitar substituições deprovideremodelpor execução em execuções de subagentes em segundo plano.plugins.entries.<id>.subagent.allowedModels: lista de permissões opcional de destinos canônicosprovider/modelpara substituições de subagentes confiáveis. Use"*"somente quando quiser permitir intencionalmente qualquer modelo.plugins.entries.<id>.llm.allowModelOverride: confia explicitamente neste plugin para solicitar substituições de modelo paraapi.runtime.llm.complete.plugins.entries.<id>.llm.allowedModels: lista de permissões opcional de destinos canônicosprovider/modelpara substituições confiáveis de conclusão de LLM do plugin. Use"*"somente quando quiser permitir intencionalmente qualquer modelo.plugins.entries.<id>.llm.allowAgentIdOverride: confia explicitamente neste plugin para executarapi.runtime.llm.completecom um id de agente diferente do padrão.plugins.entries.<id>.config: objeto de configuração definido pelo plugin (validado pelo esquema do plugin nativo do OpenClaw quando disponível).- As configurações de conta e de runtime do plugin de canal ficam em
channels.<id>e devem ser descritas pelos metadadoschannelConfigsdo manifesto do plugin proprietário, não por um registro central de opções do OpenClaw.
Configuração do plugin do harness do Codex
O plugin codex incluído no bundle é responsável pelas configurações nativas do harness do servidor de aplicativos do Codex em
plugins.entries.codex.config. Consulte a
referência do harness do Codex para ver toda a superfície de configuração
e Harness do Codex para conhecer o modelo de runtime.
codexPlugins aplica-se somente às sessões que selecionam o harness nativo do Codex.
Ele não habilita plugins do Codex para execuções de provedores do OpenClaw, associações de
conversas ACP nem qualquer harness que não seja do Codex.
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_all_plugins: true, allow_destructive_actions: "auto", plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: habilita o suporte nativo a plugins/aplicativos do Codex para o harness do Codex. Padrão:false.plugins.entries.codex.config.codexPlugins.allow_all_plugins: expõe todos os aplicativos atualmente acessíveis conectados à conta autenticada do Codex em cada nova thread nativa do Codex. Padrão:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: política padrão de ações destrutivas para solicitações de aplicativos de plugins configurados. Usetruepara aceitar esquemas seguros de aprovação do Codex sem solicitar confirmação,falsepara recusá-los,"auto"para encaminhar aprovações exigidas pelo Codex pelas aprovações de plugins do OpenClaw ou"ask"para solicitar confirmação para cada ação de gravação/destrutiva do plugin sem aprovação duradoura. O modo"ask"limpa as substituições duradouras de aprovação por ferramenta do Codex para o aplicativo afetado e seleciona o revisor humano de aprovações desse aplicativo antes do início da thread do Codex. Padrão:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: habilita uma entrada de plugin configurada quandocodexPlugins.enabledglobal também é verdadeiro. Padrão:truepara entradas explícitas.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: identidade estável do marketplace, obrigatória junto compluginNamepara cada entrada resolvida. Compatível com"openai-curated"e"workspace-directory". Entradas sem qualquer um dos campos de identidade são ignoradas.plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: identidade estável do plugin do Codex, obrigatória junto commarketplaceName. Uma entradaworkspace-directorydeve usar exatamente osummary.idqualificado pelo marketplace retornado porplugin/list, por exemplo,"example-plugin@workspace-directory".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: substituição da ação destrutiva por plugin. Quando omitida, o valor global deallow_destructive_actionsé usado. O valor por plugin aceita as mesmas políticastrue,false,"auto"ou"ask".
Cada aplicativo de plugin admitido que usa "ask" encaminha as solicitações de aprovação
desse aplicativo ao revisor humano. Outros aplicativos e aprovações da thread que não são de
aplicativos mantêm o revisor configurado, portanto políticas mistas de plugins não herdam
o comportamento de "ask".
codexPlugins.enabled é a diretiva global de habilitação. Entradas explícitas de plugins
gravadas pela migração constituem o conjunto duradouro de instalações selecionadas e de
elegibilidade para reparo. Entradas workspace-directory configuradas manualmente já devem
estar instaladas e habilitadas, e seus aplicativos proprietários devem estar acessíveis; o OpenClaw
não os instala nem os autentica. Se o Codex rejeitar a solicitação explícita do catálogo do workspace,
as entradas habilitadas do workspace falham de modo fechado com
marketplace_missing, enquanto as entradas selecionadas do catálogo padrão permanecem
disponíveis. plugins["*"] não é compatível, não há uma opção install, e
valores locais de marketplacePath intencionalmente não são campos de configuração porque
são específicos do host. Consulte
Plugins nativos do Codex para conhecer os requisitos de versão e
prontidão do servidor de aplicativos.
As verificações de prontidão de app/list permanecem em cache por uma hora e são atualizadas
assincronamente quando ficam obsoletas. A configuração de aplicativos da thread do Codex é calculada
ao estabelecer a sessão do harness do Codex, não a cada interação; use /new, /reset ou reinicie o gateway
depois de alterar a configuração de plugins nativos.
codexPlugins.allow_all_plugins captura todos os aplicativos da conta atualmente acessíveis
em cada nova thread nativa do Codex. Ele não instala plugins nem aplicativos, e
aplicativos inacessíveis permanecem excluídos. Os aplicativos da conta usam a política global
codexPlugins.allow_destructive_actions. Entradas explícitas de plugins têm
precedência quando o mesmo aplicativo está presente nos dois caminhos. Se não for possível ler
app/list, a exposição de toda a conta falha de modo fechado.
plugins.entries.firecrawl.config.webFetch: configurações do provedor de busca web do Firecrawl.apiKey: chave de API opcional do Firecrawl para limites maiores (aceita SecretRef). Usa como alternativasplugins.entries.firecrawl.config.webSearch.apiKey, o campo legadotools.web.fetch.firecrawl.apiKeyou a variável de ambienteFIRECRAWL_API_KEY.baseUrl: URL base da API do Firecrawl (padrão:https://api.firecrawl.dev; substituições auto-hospedadas devem apontar para endpoints privados/internos).onlyMainContent: extrai somente o conteúdo principal das páginas (padrão:true).maxAgeMs: idade máxima do cache em milissegundos (padrão:172800000/ 2 dias).timeoutSeconds: tempo limite da solicitação de extração em segundos (padrão:60).
plugins.entries.xai.config.xSearch: configurações do xAI X Search (pesquisa web do Grok).enabled: habilita o provedor X Search.model: modelo Grok a ser usado para pesquisa (por exemplo,"grok-4.3").
plugins.entries.memory-core.config.dreaming: configurações de Dreaming da memória. Consulte Dreaming para ver as fases e os limites.enabled: chave principal do Dreaming (padrãofalse).frequency: cadência do cron para cada ciclo completo de Dreaming ("0 3 * * *"por padrão).model: substituição opcional do modelo do subagente Dream Diary. Exigeplugins.entries.memory-core.subagent.allowModelOverride: true; combine comallowedModelspara restringir os destinos. Erros de modelo indisponível são repetidos uma vez com o modelo padrão da sessão; falhas de confiança ou de lista de permissões não usam uma alternativa silenciosamente.- a política e os limites das fases são detalhes de implementação (não são chaves de configuração voltadas ao usuário).
- A configuração completa da memória está na referência de configuração da memória:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Plugins habilitados de bundles do Claude também podem fornecer padrões incorporados do OpenClaw por meio de
settings.json; o OpenClaw os aplica como configurações sanitizadas do agente, não como patches brutos da configuração do OpenClaw. plugins.slots.memory: seleciona o id do plugin de memória ativo ou"none"para desabilitar plugins de memória.plugins.slots.contextEngine: seleciona o id do plugin ativo do mecanismo de contexto; usa"legacy"por padrão, a menos que você instale e selecione outro mecanismo.
Consulte Plugins.
Compromissos
commitments controla a memória inferida de acompanhamentos: o OpenClaw pode detectar verificações futuras nas interações da conversa e entregá-las por meio de execuções de heartbeat.
commitments.enabled: habilita a extração oculta pelo LLM, o armazenamento e a entrega por heartbeat de compromissos inferidos de acompanhamento. Padrão:false.commitments.maxPerDay: número máximo de compromissos inferidos de acompanhamento entregues por sessão do agente em um dia corrido. Padrão:3.
Consulte Compromissos inferidos.
Navegador
{ browser: { enabled: true, evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // opte apenas para acesso confiável à rede privada // allowPrivateNetwork: true, // alias legado // 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: falsedesativaact:evaluateewait --fn.tabCleanuprecupera as abas rastreadas do agente principal após um período de inatividade ou quando uma sessão excede seu limite. DefinaidleMinutes: 0oumaxTabsPerSession: 0para desativar individualmente esses modos de limpeza.ssrfPolicy.dangerouslyAllowPrivateNetworkfica desativado quando não definido, portanto a navegação do navegador permanece restrita por padrão.- Defina
ssrfPolicy.dangerouslyAllowPrivateNetwork: truesomente quando você confiar intencionalmente na navegação do navegador em redes privadas. - No modo restrito, os endpoints de perfis CDP remotos (
profiles.*.cdpUrl) estão sujeitos ao mesmo bloqueio de redes privadas durante as verificações de acessibilidade e descoberta. ssrfPolicy.allowPrivateNetworkcontinua sendo compatível como um alias legado.- No modo restrito, use
ssrfPolicy.hostnameAllowlistessrfPolicy.allowedHostnamespara exceções explícitas. - Perfis remotos permitem somente anexação (iniciar/parar/redefinir ficam desativados).
profiles.*.cdpUrlaceitahttp://,https://,ws://ewss://. Use HTTP(S) quando quiser que o OpenClaw descubra/json/version; use WS(S) quando seu provedor fornecer uma URL WebSocket direta do DevTools.remoteCdpTimeoutMseremoteCdpHandshakeTimeoutMsse aplicam à acessibilidade CDP remota eattachOnly, além das solicitações de abertura de abas. Perfis de loopback gerenciados mantêm os padrões locais do CDP. A enumeração persistente de abas remotas do Playwright usa o maior valor como prazo limite da operação.- Se um serviço CDP gerenciado externamente estiver acessível por loopback, defina
attachOnly: truenesse perfil; caso contrário, o OpenClaw tratará a porta de loopback como um perfil de navegador gerenciado localmente e poderá relatar erros de propriedade da porta local. - Perfis
existing-sessionusam o Chrome MCP em vez do CDP e podem se conectar no host selecionado ou por meio de um Node de navegador conectado. - Perfis
existing-sessionpodem definiruserDataDirpara direcionar a um perfil específico de navegador baseado em Chromium, como Brave ou Edge. - Perfis
existing-sessionpodem definircdpUrlquando o Chrome já estiver em execução por trás de um endpoint de descoberta HTTP(S) do DevTools ou de um endpoint WS(S) direto. Nesse modo, o OpenClaw passa o endpoint ao Chrome MCP em vez de usar a conexão automática;userDataDiré ignorado nos argumentos de inicialização do Chrome MCP. - Perfis
existing-sessionmantêm os limites atuais da rota do Chrome MCP: ações orientadas por snapshots/referências em vez de direcionamento por seletor CSS, hooks de upload de um único arquivo, sem substituições de tempo limite de diálogos, semwait --load networkidlee semresponsebody, exportação para PDF, interceptação de downloads ou ações em lote. - Perfis locais gerenciados
openclawatribuem automaticamentecdpPortecdpUrl; definacdpUrlexplicitamente somente para perfis CDP remotos ou para anexação a endpoints de sessões existentes. - Perfis locais gerenciados podem definir
executablePathpara substituir obrowser.executablePathglobal nesse perfil. Use isso para executar um perfil no Chrome e outro no Brave. - Perfis locais gerenciados usam
browser.localLaunchTimeoutMspara a descoberta HTTP do CDP do Chrome após o início do processo ebrowser.localCdpReadyTimeoutMspara verificar a prontidão do websocket CDP após a inicialização. Aumente esses valores em hosts mais lentos nos quais o Chrome inicia corretamente, mas as verificações de prontidão concorrem com a inicialização. Ambos os valores devem ser inteiros positivos de até120000ms; valores de configuração inválidos são rejeitados. - Ordem de detecção automática: navegador padrão, se baseado em Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathebrowser.profiles.<name>.executablePathaceitam~e~/...para o diretório inicial do seu sistema operacional antes da inicialização do Chromium. OuserDataDirespecífico de cada perfilexisting-sessiontambém expande o til.- Serviço de controle: somente loopback (porta derivada de
gateway.port, padrão18791). extraArgsacrescenta flags adicionais de inicialização ao iniciar o Chromium localmente (por exemplo,--disable-gpu, dimensionamento de janela ou flags de depuração).
Interface do usuário
{ ui: { seamColor: "#FF4500", assistant: { name: "OpenClaw", avatar: "CB", // emoji, texto curto, URL de imagem ou URI de dados }, },}seamColor: cor de destaque dos elementos visuais da interface do aplicativo nativo (tonalidade do balão do Modo de Conversa etc.).assistant: substituição da identidade na interface de controle. Usa como alternativa a identidade do agente ativo.
Gateway
{ gateway: { mode: "local", // local | remoto port: 18789, bind: "loopback", auth: { mode: "token", // nenhum | token | senha | proxy confiável token: "your-token", // password: "your-password", // ou OPENCLAW_GATEWAY_PASSWORD // trustedProxy: { userHeader: "x-forwarded-user" }, // para mode=trusted-proxy; consulte /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000, exemptLoopback: true, }, }, tailscale: { mode: "off", // desativado | servir | funnel resetOnExit: false, }, controlUi: { enabled: true, basePath: "/openclaw", // root: "dist/control-ui", // toolTitles: false, // habilita títulos de finalidade gerados por IA para chamadas de ferramentas (consome tokens do modelo utilitário) // embedSandbox: "scripts", // restrito | scripts | confiável // allowExternalEmbedUrls: false, // perigoso: permite URLs http(s) externas absolutas para incorporação // chatMessageMaxWidth: "min(1280px, 82%)", // largura máxima opcional da transcrição centralizada do chat // allowedOrigins: ["https://control.example.com"], // obrigatório para a interface de controle fora do loopback // dangerouslyAllowHostHeaderOriginFallback: false, // modo perigoso de fallback de origem pelo cabeçalho Host // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, terminal: { enabled: false, // shell: "/bin/zsh", }, remote: { url: "ws://127.0.0.1:18789", transport: "ssh", // ssh | direto token: "your-token", // password: "your-password", }, trustedProxies: ["10.0.0.1"], // Opcional. Padrão: false. allowRealIpFallback: false, nodes: { pairing: { // Opcional. Por padrão, não definido/desativado. autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], // Aprovação automática verificada por SSH. Padrão: ativada (true). // Defina como false para desativar somente a verificação SSH; isso não afeta // autoApproveCidrs acima. Para pareamento manual de Nodes, defina como false E // remova autoApproveCidrs. Passe um objeto para ajustar: { user, identity, // timeoutMs, cidrs }. sshVerify: true, }, allowCommands: ["canvas.navigate"], denyCommands: ["system.run"], }, tools: { // Bloqueios HTTP adicionais de /tools/invoke deny: ["browser"], // Remove ferramentas da lista padrão de bloqueio HTTP para chamadores proprietários/administradores allow: ["gateway"], }, push: { apns: { relay: { baseUrl: "https://relay.example.com", timeoutMs: 10000, }, }, }, },}Detalhes dos campos do Gateway
mode:local(executar o gateway) ouremote(conectar a um gateway remoto). O Gateway se recusa a iniciar, a menos que sejalocal.port: porta única multiplexada para WS + HTTP. Precedência:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(padrão),lan(0.0.0.0),tailnet(IPv4 do Tailscale quando disponível; caso contrário, loopback) oucustom(um endereço IPv4). Um endereçotailnetresolvido e qualquer endereçocustomdiferente de127.0.0.1ou0.0.0.0exigem127.0.0.1na mesma porta para clientes no mesmo host; a inicialização falha se qualquer um dos listeners não conseguir fazer o bind. A exposição fora do loopback permanece limitada à interface selecionada.- Aliases de bind legados: use os valores de modo de bind em
gateway.bind(auto,loopback,lan,tailnet,custom), não aliases de host (0.0.0.0,127.0.0.1,localhost,::,::1). - Observação sobre Docker: o bind padrão
loopbackescuta em127.0.0.1dentro do contêiner. Com a rede bridge do Docker (-p 18789:18789), o tráfego chega poreth0, portanto o gateway fica inacessível. Use--network hostou definabind: "lan"(oubind: "custom"comcustomBindHost: "0.0.0.0") para escutar em todas as interfaces. - Autenticação: obrigatória por padrão. Binds fora do loopback exigem autenticação do gateway. Na prática, isso significa um token/senha compartilhado ou um proxy reverso com reconhecimento de identidade usando
gateway.auth.mode: "trusted-proxy". O assistente de integração gera um token por padrão. - Se
gateway.auth.tokenegateway.auth.passwordestiverem configurados (incluindo SecretRefs), definagateway.auth.modeexplicitamente comotokenoupassword. Os fluxos de inicialização e de instalação/reparo do serviço falham quando ambos estão configurados e o modo não está definido. gateway.auth.mode: "none": modo explícito sem autenticação. Use somente em configurações locais confiáveis de loopback; essa opção não é oferecida intencionalmente pelos prompts de integração.gateway.auth.mode: "trusted-proxy": delega a autenticação do navegador/usuário a um proxy reverso com reconhecimento de identidade e confia nos cabeçalhos de identidade degateway.trustedProxies(consulte Autenticação por proxy confiável). Por padrão, esse modo espera uma origem de proxy fora do loopback; proxies reversos de loopback no mesmo host exigemgateway.auth.trustedProxy.allowLoopback = trueexplícito. Chamadores internos no mesmo host podem usargateway.auth.passwordcomo fallback local direto;gateway.auth.tokenpermanece mutuamente exclusivo com o modo de proxy confiável.gateway.auth.allowTailscale: quandotrue, os cabeçalhos de identidade do Tailscale Serve podem satisfazer a autenticação da interface de controle/WebSocket (verificada por meio detailscale whois). Os endpoints da API HTTP não usam essa autenticação por cabeçalho do Tailscale; em vez disso, seguem o modo normal de autenticação HTTP do gateway. Esse fluxo sem token pressupõe que o host do gateway seja confiável. O padrão étruequandotailscale.mode = "serve".gateway.auth.rateLimit: limitador opcional de falhas de autenticação. Aplica-se por IP do cliente e por escopo de autenticação (segredo compartilhado e token de dispositivo são rastreados de forma independente). Tentativas bloqueadas retornam429+Retry-After.- No caminho assíncrono da interface de controle do Tailscale Serve, as tentativas com falha para o mesmo
{scope, clientIp}são serializadas antes da gravação da falha. Portanto, tentativas inválidas simultâneas do mesmo cliente podem acionar o limitador na segunda solicitação, em vez de ambas passarem em uma condição de corrida como simples incompatibilidades. gateway.auth.rateLimit.exemptLoopbacktem como padrãotrue; definafalsequando você quiser intencionalmente limitar também a taxa do tráfego de localhost (para configurações de teste ou implantações de proxy estritas).- As tentativas de autenticação WS originadas no navegador sempre têm limitação de taxa, com a isenção de loopback desativada (defesa em profundidade contra força bruta no localhost por meio do navegador).
- No loopback, esses bloqueios originados no navegador são isolados por valor normalizado de
Origin, para que falhas repetidas de uma origem de localhost não bloqueiem automaticamente uma origem diferente. tailscale.mode:serve(somente tailnet, bind de loopback) oufunnel(público, exige autenticação).tailscale.serviceName: nome opcional do serviço Tailscale para o modo Serve, comosvc:openclaw. Quando definido, o OpenClaw o passa paratailscale serve --service, para que a interface de controle possa ser exposta por meio de um serviço nomeado em vez do nome de host do dispositivo. O valor deve usar o formato de nome de serviçosvc:<dns-label>do Tailscale; a inicialização informa a URL de serviço derivada.tailscale.preserveFunnel: quandotrueetailscale.mode = "serve", o OpenClaw verificatailscale funnel statusantes de reaplicar o Serve na inicialização e ignora essa etapa se uma rota Funnel configurada externamente já abranger a porta do gateway. Padrão:false.controlUi.allowedOrigins: lista explícita de origens de navegador permitidas para conexões WebSocket do Gateway. Obrigatória para origens públicas de navegador fora do loopback. Carregamentos privados da interface no mesmo domínio pela LAN/Tailnet, provenientes de loopback, RFC1918/link-local,.local,.ts.netou hosts CGNAT do Tailscale, são aceitos sem habilitar o fallback de cabeçalho Host.controlUi.toolTitles: habilita títulos de finalidade gerados por IA para chamadas de ferramentas no chat da interface de controle. Padrão:false(a renderização de ferramentas permanece totalmente determinística, sem chamadas de modelo em segundo plano). Quando habilitado, o métodochat.toolTitlesrotula chamadas complexas por meio do roteamento padrão de modelos utilitários — outilityModeldo agente (uma decisão do operador que pode enviar argumentos limitados da ferramenta ao provedor escolhido, como ocorre em todas as tarefas utilitárias) ou o padrão de modelo pequeno declarado pelo provedor da sessão (OpenAI →gpt-5.6-luna, Anthropic →claude-haiku-4-5) — e armazena os resultados em cache no banco de dados de estado por agente, para que visualizações repetidas nunca gerem nova cobrança.utilityModel: \"\"desabilita os títulos como em qualquer outra tarefa utilitária; os títulos nunca usam o modelo principal como fallback.controlUi.chatMessageMaxWidth: largura máxima opcional da transcrição centralizada do chat da interface de controle. Aceita valores restritos de largura CSS, como960px,82%,min(1280px, 82%)ecalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: modo perigoso que habilita o fallback de origem pelo cabeçalho Host para implantações que dependem intencionalmente da política de origem do cabeçalho Host.terminal.enabled: habilita o terminal do operador com escopo administrativo. Padrão:false. O terminal inicia um PTY do host no espaço de trabalho do agente selecionado, herda o ambiente do processo do Gateway e é recusado para agentes comsandbox.mode: "all". Habilite-o somente em implantações de operadores confiáveis; alterá-lo reinicia o Gateway e atualiza a política de segurança de conteúdo da interface de controle.terminal.shell: executável de shell opcional. Quando não definido, o OpenClaw usa$SHELLno Unix e%ComSpec%no Windows.terminal.detachedSessionTimeoutSeconds: por quanto tempo uma sessão de terminal permanece ativa depois que sua conexão cai (recarregamento da página, suspensão do laptop), continuando disponível para reconexão por meio determinal.attach, com sua saída recente reproduzida. Padrão:300. Defina0para encerrar as sessões no momento em que a conexão cair. Sessões desconectadas continuam executando seus comandos; portanto, reduza esse valor em hosts compartilhados ou expostos.remote.transport:ssh(padrão) oudirect(ws/wss). Paradirect,remote.urldeve serwss://em hosts públicos;ws://sem criptografia é aceito somente para loopback, LAN, link-local,.local,.ts.nete hosts CGNAT do Tailscale.remote.remotePort: porta do gateway no host SSH remoto. O padrão é18789; use esta opção quando a porta do túnel local for diferente da porta do gateway remoto.remote.sshHostKeyPolicy: política de chave de host do túnel SSH no macOS.stricté o padrão e exige uma chave já confiável.opensshé uma habilitação explícita da configuração efetiva do OpenSSH para aliases gerenciados; revise as configurações SSH correspondentes do usuário e do sistema antes de usá-la. O aplicativo para macOS econfigure-remoteredefinem essa política comostrictao alterar os destinos, a menos que ela seja habilitada explicitamente outra vez.gateway.remote.token/.passwordsão campos de credenciais do cliente remoto. Eles não configuram a autenticação do gateway por si só.gateway.push.apns.relay.baseUrl: URL HTTPS base do relay APNs externo usado depois que builds do iOS com suporte a relay publicam registros no gateway. Builds públicos da App Store usam o relay hospedado do OpenClaw. URLs de relay personalizadas devem corresponder a um caminho deliberadamente separado de build/implantação do iOS cuja URL de relay aponte para esse relay.gateway.push.apns.relay.timeoutMs: tempo limite de envio do gateway para o relay, em milissegundos. O padrão é10000.- Registros com suporte a relay são delegados a uma identidade específica do gateway. O aplicativo iOS emparelhado busca
gateway.identity.get, inclui essa identidade no registro do relay e encaminha ao gateway uma concessão de envio com escopo de registro. Outro gateway não pode reutilizar esse registro armazenado. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: substituições temporárias por variáveis de ambiente para a configuração de relay acima.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: alternativa exclusiva para desenvolvimento que permite URLs HTTP de relay em loopback. URLs de relay de produção devem permanecer em HTTPS.gateway.handshakeTimeoutMs: tempo limite, em milissegundos, para o handshake do WebSocket do Gateway antes da autenticação. Padrão:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MStem precedência quando definido. Aumente esse valor em hosts sobrecarregados ou de baixo desempenho, nos quais clientes locais conseguem se conectar enquanto o aquecimento da inicialização ainda está se estabilizando.gateway.channelHealthCheckMinutes: intervalo do monitor de integridade dos canais, em minutos. Defina0para desabilitar globalmente as reinicializações do monitor de integridade. Padrão:5.gateway.channelStaleEventThresholdMinutes: limite de inatividade do socket, em minutos. Mantenha esse valor maior ou igual agateway.channelHealthCheckMinutes. Padrão:30.gateway.channelMaxRestartsPerHour: número máximo de reinicializações pelo monitor de integridade por canal/conta em um período móvel de uma hora. Padrão:10.channels.<provider>.healthMonitor.enabled: opção por canal para desabilitar as reinicializações do monitor de integridade, mantendo o monitor global habilitado.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: substituição por conta para canais com várias contas. Quando definida, tem precedência sobre a substituição no nível do canal.- Os caminhos de chamada do gateway local podem usar
gateway.remote.*como fallback somente quandogateway.auth.*não estiver definido. - Se
gateway.auth.token/gateway.auth.passwordfor configurado explicitamente por meio de SecretRef e não puder ser resolvido, a resolução falhará de forma fechada (sem fallback remoto para mascarar a falha). trustedProxies: IPs de proxies reversos que encerram TLS ou injetam cabeçalhos encaminhados do cliente. Liste somente proxies que você controla. Entradas de loopback continuam válidas para configurações de proxy/detecção local no mesmo host (por exemplo, Tailscale Serve ou um proxy reverso local), mas não tornam as solicitações de loopback elegíveis paragateway.auth.mode: "trusted-proxy".allowRealIpFallback: quandotrue, o gateway aceitaX-Real-IPseX-Forwarded-Forestiver ausente. Padrão:false, para um comportamento que falha de forma fechada.gateway.nodes.pairing.autoApproveCidrs: lista opcional de CIDRs/IPs permitidos para aprovar automaticamente o primeiro emparelhamento de dispositivo Node sem escopos solicitados. Fica desabilitada quando não definida. Isso não aprova automaticamente emparelhamentos de operador/navegador/interface de controle/WebChat, nem aprova automaticamente atualizações de função, escopo, metadados ou chave pública.gateway.nodes.pairing.sshVerify: aprovação automática verificada por SSH para o primeiro emparelhamento de dispositivo Node (padrão: habilitada). O gateway se conecta por SSH de volta ao host de emparelhamento (BatchMode, chaves de host estritas) e aprova somente quando há correspondência exata da chave de dispositivo deopenclaw node identity. O nível mínimo de elegibilidade é o mesmo deautoApproveCidrs; as sondagens são limitadas a endereços de origem privados/CGNAT, a menos quecidrsos substitua. Definafalsepara desabilitar ou{ user, identity, timeoutMs, cidrs }para ajustar. Consulte Emparelhamento de Node.gateway.nodes.allowCommands/gateway.nodes.denyCommands: configuração global de permissões/bloqueios para comandos declarados do Node após o pareamento e a avaliação da lista de permissões da plataforma. UseallowCommandspara habilitar comandos perigosos do Node, comocamera.snap,camera.clip,screen.record,health.summary,sms.searchesms.send;denyCommandsremove um comando mesmo que um padrão da plataforma ou uma permissão explícita o incluísse de outra forma. A permissão de Saúde do iOS, a permissão de SMS do Android e a autorização de comandos do Gateway são independentes. Depois que um Node alterar sua lista de comandos declarados, rejeite e aprove novamente o pareamento desse dispositivo para que o Gateway armazene o snapshot atualizado dos comandos.gateway.tools.deny: nomes adicionais de ferramentas bloqueados para a solicitação HTTPPOST /tools/invoke(estende a lista padrão de bloqueios).gateway.tools.allow: remove nomes de ferramentas da lista padrão de bloqueios HTTP para chamadores proprietários/administradores. Isso não eleva chamadoresoperator.writecom identidade associada ao acesso de proprietário/administrador;cron,gatewayenodespermanecem indisponíveis para chamadores que não sejam proprietários, mesmo quando incluídos na lista de permissões.
Endpoints compatíveis com OpenAI
- RPC HTTP de administração: desativado por padrão como o plugin
admin-http-rpc. Ative o plugin para registrarPOST /api/v1/admin/rpc. Consulte RPC HTTP de administração. - Chat Completions: desativado por padrão. Ative com
gateway.http.endpoints.chatCompletions.enabled: true. - Responses API:
gateway.http.endpoints.responses.enabled. - Proteção da entrada de URL da Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistListas de permissões vazias são tratadas como não definidas; usegateway.http.endpoints.responses.files.allowUrl=falsee/ougateway.http.endpoints.responses.images.allowUrl=falsepara desativar a busca de URLs.
- Cabeçalho opcional de proteção da resposta:
gateway.http.securityHeaders.strictTransportSecurity(defina somente para origens HTTPS sob seu controle; consulte Autenticação de proxy confiável)
Isolamento de múltiplas instâncias
Execute vários gateways em um host com portas e diretórios de estado exclusivos:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \OPENCLAW_STATE_DIR=~/.openclaw-a \openclaw gateway --port 19001Flags de conveniência: --dev (usa ~/.openclaw-dev + porta 19001), --profile <name> (usa ~/.openclaw-<name>).
Consulte Vários 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: ativa a terminação TLS no listener do Gateway (HTTPS/WSS) (padrão:false).autoGenerate: gera automaticamente um par local de certificado/chave autoassinado quando arquivos explícitos não estão configurados; somente para uso local/desenvolvimento.certPath: caminho do sistema de arquivos para o arquivo do certificado TLS.keyPath: caminho do sistema de arquivos para o arquivo da chave privada TLS; mantenha as permissões restritas.caPath: caminho opcional do pacote de CAs para verificação de clientes ou cadeias de confiança personalizadas.
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: controla como as edições de configuração são aplicadas em tempo de execução."off": ignora edições em tempo real; as alterações exigem uma reinicialização explícita."restart": sempre reinicia o processo do Gateway quando a configuração muda."hot": aplica as alterações no processo sem reiniciar."hybrid"(padrão): primeiro tenta o recarregamento a quente; recorre à reinicialização, se necessário.
debounceMs: janela de debounce em ms antes da aplicação das alterações de configuração (inteiro não negativo; padrão:300).deferralTimeoutMs: tempo máximo opcional, em ms, para aguardar operações em andamento antes de forçar uma reinicialização ou o recarregamento a quente do canal. Omita-o para usar a espera limitada padrão (300000); defina0para aguardar indefinidamente e registrar periodicamente avisos de que ainda há operações pendentes.
Ambientes de workers na nuvem
Os workers na nuvem são opcionais. Se cloudWorkers estiver ausente ou profiles estiver vazio, o OpenClaw não aceitará a criação de novos workers. Os registros duráveis criados anteriormente ainda são reconciliados e permanecem visíveis; a projeção existente de Gateway/Node permanece inalterada.
Cada provedor de worker deve retornar uma hostKey SSH proveniente de uma saída de provisionamento confiável, exatamente no formato algorithm base64, sem nome de host nem comentário. O bootstrap grava essa chave em um arquivo known_hosts isolado, usa StrictHostKeyChecking=yes e falha antes de abrir uma conexão quando o provedor a omite. Não há fallback de confiança no primeiro uso.
A configuração do túnel ocorre sob demanda, e não como parte do provisionamento. Quando iniciado, o Gateway faz um encaminhamento reverso de um soquete Unix local ao worker para seu endpoint WebSocket de loopback. O soquete fica em um diretório remoto alocado aleatoriamente e acessível somente pelo proprietário; ao contrário de uma porta TCP de loopback, ele não pode ser acessado por outras contas em um worker multiusuário nem entrar em conflito com a porta de outro ambiente. Os keepalives SSH e o recuo limitado de reconexão são executados somente enquanto o proprietário do túnel continuar sendo o atual. A interrupção do túnel bloqueia as reconexões antes de encerrar o processo SSH.
O tráfego de controle e a transferência do workspace usam conexões SSH separadas. Ambos reutilizam a mesma identidade resolvida e o arquivo known_hosts isolado e fixado, mas a transferência do workspace não compartilha a multiplexação da conexão SSH com o túnel de longa duração; assim, o rsync não pode bloquear o tráfego de controle.
Perfil do Crabbox
O provedor crabbox incluído provisiona uma concessão compatível com SSH por meio da CLI local do Crabbox. O settings.provider interno seleciona o backend do Crabbox; ele é separado do id externo do provedor do OpenClaw.
{ cloudWorkers: { profiles: { production: { provider: "crabbox", install: "bundle", // Padrão; use "npm" somente para uma versão lançada do Gateway. settings: { provider: "aws", class: "standard", ttl: "24h", idleTimeout: "60m", // Caminho absoluto opcional. Padrão: irmão ../crabbox/bin/crabbox, depois PATH. binary: "/usr/local/bin/crabbox", }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}settings.provider(obrigatório): backend do Crabbox repassado por--provider. Use um backend cuja saída de inspeção inclua um endpoint SSH;awsseleciona o backend direto da AWS.settings.class(obrigatório): classe de máquina do Crabbox passada para--class.settings.ttlesettings.idleTimeout(obrigatórios): strings positivas de duração do Go passadas para--ttle--idle-timeout. Esses mecanismos de segurança do lado do provedor são distintos da políticalifetimearmazenada pelo OpenClaw abaixo.settings.binary: caminho absoluto opcional para o executável do Crabbox. Sem ele, o OpenClaw verifica o checkout irmão do Crabbox, depois as entradas executáveis emPATHe, por fim, invocacrabbox, para que a ausência da CLI continue sendo um erro visível do provedor.
Configurações desconhecidas são rejeitadas. As credenciais do Crabbox e a configuração de conta específica do backend continuam sob responsabilidade do Crabbox; não as coloque em settings. O OpenClaw invoca somente a CLI local e não faz chamadas de rede ao provedor a partir deste plugin. O provisionamento sempre passa --keep=true; o OpenClaw controla o ciclo de vida externo e destrói a concessão com crabbox stop.
Perfil de desenvolvimento SSH estático
{ cloudWorkers: { profiles: { development: { provider: "static-ssh", settings: { host: "worker.example.test", port: 22, user: "openclaw", hostKey: "ssh-ed25519 <base64-public-host-key>", keyRef: { source: "env", provider: "default", id: "OPENCLAW_WORKER_SSH_KEY", }, }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}profiles: perfis nomeados de workers com ids não vazios e sem espaços em branco nas extremidades. Cada perfil seleciona um provedor registrado por um plugin.provider: id não vazio do provedor de workers. Os exemplos usam o provedorcrabboxincluído e o provedorstatic-sshdo QA Lab.install: método de instalação do worker."bundle"(padrão) transfere um pacote com hash de conteúdo do build instalado do Gateway e oferece suporte a versões lançadas, de desenvolvimento e ainda não lançadas."npm"é uma otimização opcional para uma versão empacotada sem modificações; instalaopenclaw@<exact gateway version>a partir do registro npm público e nunca instalalatest.- Os plugins de provedor incluídos são selecionados automaticamente quando configurados, mas as desativações explícitas e
plugins.allowainda se aplicam. Inclua o id do provedor (por exemplo,crabbox) quando houver uma lista de permissões configurada. Os plugins de provedores externos também devem estar instalados e explicitamente ativados. settings: JSON limitado sob responsabilidade do provedor. O plugin selecionado define e valida suas chaves; use objetos SecretRef para valores que contenham segredos. O provedor SSH estático exigehost,user,hostKeyekeyRef; o padrão deporté22.hostKeydeve ser uma única linha de chave pública de host OpenSSH (algorithm base64) obtida do host conhecido ou de outro canal confiável, sem prefixo de opções.lifetime.idleTimeoutMinutes: minutos expressos como inteiro positivo, armazenados para uma política posterior de recuperação por inatividade.lifetime.maxLifetimeMinutes: minutos expressos como inteiro positivo, armazenados para uma política posterior de ciclo de vida.
Um runtime Node compatível (22.19+, 23.11+ ou 24+) já deve estar instalado no worker. O método opcional "npm" também exige npm e acesso HTTPS de saída ao registro npm público. A configuração da cadeia de ferramentas com acesso à rede é uma política do provedor; o bootstrap informa um erro acionável em vez de instalar as cadeias de ferramentas por conta própria.
Essa base instala e verifica o build do Gateway e fornece o ciclo de vida de início/interrupção do túnel, mas não inicia a CLI geral do OpenClaw. O ponto de entrada autocontido do worker e o loop serão implementados no próximo marco de workers na nuvem.
Cada registro durável de ambiente retém suas configurações validadas de provedor, seu método de instalação resolvido e sua política de ciclo de vida em um snapshot do perfil no momento da criação. Alterar ou remover um perfil nomeado afeta novas criações; os registros existentes continuam a reconciliação do ciclo de vida com esse snapshot, desde que o plugin proprietário continue disponível.
Os valores de ciclo de vida são apenas dados na primeira versão de workers na nuvem; a aplicação automática será implementada em um trabalho posterior do ciclo de vida. Alterações de perfil exigem a reinicialização do Gateway.
Hooks
{ 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: "De: {{messages[0].from}}\nAssunto: {{messages[0].subject}}\n{{messages[0].snippet}}", deliver: true, channel: "last", model: "openai/gpt-5.4-mini", }, ], },}Autenticação: Authorization: Bearer <token> ou x-openclaw-token: <token>.
Tokens de hook na string de consulta são rejeitados.
Notas de validação e segurança:
hooks.enabled=trueexige umhooks.tokennão vazio.hooks.tokendeve ser diferente da autenticação ativa por segredo compartilhado do Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENougateway.auth.password/OPENCLAW_GATEWAY_PASSWORD); a inicialização registra um aviso de segurança não fatal quando detecta reutilização.openclaw security auditsinaliza a reutilização da autenticação de hooks/Gateway como uma constatação crítica, incluindo a autenticação por senha do Gateway fornecida apenas no momento da auditoria (--auth password --password <password>). Executeopenclaw doctor --fixpara trocar umhooks.tokenreutilizado e persistido; depois, atualize os emissores externos de hooks para usarem o novo token de hook.hooks.pathnão pode ser/; use um subcaminho dedicado, como/hooks.- Se
hooks.allowRequestSessionKey=true, restrinjahooks.allowedSessionKeyPrefixes(por exemplo,["hook:"]). - Se um mapeamento ou predefinição usar um
sessionKeybaseado em modelo, definahooks.allowedSessionKeyPrefixesehooks.allowRequestSessionKey=true. Chaves de mapeamento estáticas não exigem essa habilitação explícita.
Endpoints:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }- O
sessionKeyda carga da solicitação só é aceito quandohooks.allowRequestSessionKey=true(padrão:false).
- O
POST /hooks/<name>→ resolvido por meio dehooks.mappings- Valores de
sessionKeyde mapeamentos renderizados a partir de modelos são tratados como fornecidos externamente e também exigemhooks.allowRequestSessionKey=true.
- Valores de
Detalhes do mapeamento
match.pathcorresponde ao subcaminho após/hooks(por exemplo,/hooks/gmail→gmail).match.sourcecorresponde a um campo da carga para caminhos genéricos.- Modelos como
{{messages[0].subject}}leem a carga. transformpode apontar para um módulo JS/TS que retorna uma ação de hook.transform.moduledeve ser um caminho relativo e permanecer dentro dehooks.transformsDir(caminhos absolutos e travessias são rejeitados).- Mantenha
hooks.transformsDirem~/.openclaw/hooks/transforms; diretórios de Skills do espaço de trabalho são rejeitados. Seopenclaw doctorinformar que esse caminho é inválido, mova o módulo de transformação para o diretório de transformações de hooks ou removahooks.transformsDir. agentIdencaminha para um agente específico; IDs desconhecidos usam o agente padrão como alternativa.allowedAgentIds: restringe o encaminhamento efetivo de agentes, incluindo o caminho do agente padrão quandoagentIdé omitido (*ou omitido = permitir todos,[]= negar todos).defaultSessionKey: chave de sessão fixa opcional para execuções de agente por hook semsessionKeyexplícito.allowRequestSessionKey: permite que chamadores de/hooks/agente chaves de sessão de mapeamentos orientadas por modelos definamsessionKey(padrão:false).allowedSessionKeyPrefixes: lista de permissões opcional de prefixos para valores explícitos desessionKey(solicitação + mapeamento), por exemplo,["hook:"]. Torna-se obrigatória quando algum mapeamento ou predefinição usa umsessionKeybaseado em modelo.deliver: trueenvia a resposta final para um canal; o padrão dechannelélast.modelsubstitui o LLM para esta execução de hook (deve ser permitido se o catálogo de modelos estiver definido).
Integração com o Gmail
- A predefinição integrada do Gmail usa
sessionKey: "hook:gmail:{{messages[0].id}}". - Se você mantiver esse encaminhamento por mensagem, defina
hooks.allowRequestSessionKey: truee restrinjahooks.allowedSessionKeyPrefixespara corresponder ao namespace do Gmail, por exemplo,["hook:", "hook:gmail:"]. - Se você precisar de
hooks.allowRequestSessionKey: false, substitua a predefinição por umsessionKeyestático, em vez do padrão baseado em modelo.
{ 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", }, },}- O Gateway inicia automaticamente
gog gmail watch servena inicialização quando configurado. DefinaOPENCLAW_SKIP_GMAIL_WATCHER=1para desabilitar. - Não execute uma instância separada de
gog gmail watch servejunto com o Gateway.
Host do plugin Canvas
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // enabled: false, // ou OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- Disponibiliza HTML/CSS/JS editáveis pelo agente e A2UI via HTTP na porta do Gateway:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Somente local: mantenha
gateway.bind: "loopback"(padrão). - Vinculações que não sejam de loopback: as rotas do Canvas exigem autenticação do Gateway (token/senha/proxy confiável), assim como outras superfícies HTTP do Gateway.
- WebViews de Node normalmente não enviam cabeçalhos de autenticação; depois que um Node é pareado e conectado, o Gateway anuncia URLs de capacidade com escopo de Node para acesso ao Canvas/A2UI.
- As URLs de capacidade são vinculadas à sessão WS ativa do Node e expiram rapidamente. Não é usada uma alternativa baseada em IP.
- Injeta o cliente de recarregamento ao vivo no HTML disponibilizado.
- Cria automaticamente um
index.htmlinicial quando o diretório está vazio. - Também disponibiliza A2UI em
/__openclaw__/a2ui/. - As alterações exigem a reinicialização do Gateway.
- Desabilite o recarregamento ao vivo para diretórios grandes ou erros
EMFILE.
Descoberta
mDNS (Bonjour)
{ discovery: { mdns: { mode: "minimal", // minimal | full | off }, },}minimal(padrão): omitecliPath+sshPortdos registros TXT.full: incluicliPath+sshPort; a divulgação por multicast na LAN ainda exige que o pluginbonjourintegrado esteja habilitado.off: suprime a divulgação por multicast na LAN sem alterar a habilitação do plugin.- O plugin
bonjourintegrado é iniciado automaticamente em hosts macOS e requer habilitação explícita em implantações do Gateway no Linux, Windows e em contêineres. - O nome do host usa por padrão o nome de host do sistema quando ele é um rótulo DNS válido e, caso contrário, usa
openclaw. Substitua-o comOPENCLAW_MDNS_HOSTNAME. OPENCLAW_DISABLE_BONJOUR=1desabilita totalmente a divulgação mDNS, substituindodiscovery.mdns.mode.
Área ampla (DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}Grava uma zona DNS-SD unicast em ~/.openclaw/dns/. Para descoberta entre redes, combine com um servidor DNS (CoreDNS recomendado) + DNS dividido do Tailscale.
Configuração: openclaw dns setup --apply.
Ambiente
env (variáveis de ambiente embutidas)
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, },}- As variáveis de ambiente embutidas só são aplicadas se a variável estiver ausente no ambiente do processo.
- Arquivos
.env:.envdo CWD +~/.openclaw/.env(nenhum deles substitui variáveis existentes). shellEnv: importa do perfil do shell de login as chaves esperadas que estiverem ausentes.- Consulte Ambiente para ver a precedência completa.
Substituição de variáveis de ambiente
Referencie variáveis de ambiente em qualquer string de configuração com ${VAR_NAME}:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- Somente nomes em maiúsculas são correspondidos:
[A-Z_][A-Z0-9_]*. - Variáveis ausentes/vazias causam um erro ao carregar a configuração.
- Use
$${VAR}como escape para um${VAR}literal. - Funciona com
$include.
Segredos
As referências a segredos são aditivas: valores em texto simples continuam funcionando.
SecretRef
Use um destes formatos de objeto:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }Validação:
- Padrão de
provider:^[a-z][a-z0-9_-]{0,63}$ - Padrão de ID para
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - ID para
source: "file": ponteiro JSON absoluto (por exemplo,"/providers/openai/apiKey") - Padrão de ID para
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(oferece suporte a seletores no estilo da AWS, comosecret#json_key) - IDs de
source: "exec"não podem conter segmentos de caminho delimitados por barras.ou..(por exemplo,a/../bé rejeitado)
Superfície de credenciais compatível
- Matriz canônica: Superfície de credenciais do SecretRef
secrets applyusa como destino os caminhos de credenciais compatíveis doopenclaw.json.- As referências de
auth-profiles.jsonsão incluídas na resolução em tempo de execução e na cobertura da auditoria.
Configuração dos provedores de segredos
{ secrets: { providers: { default: { source: "env" }, // provedor de ambiente explícito opcional 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", }, },}Observações:
- O provedor
fileaceitamode: "json"emode: "singleValue"(iddeve ser"value"no modo singleValue). - Os caminhos dos provedores file e exec falham de forma fechada quando a verificação de ACLs do Windows não está disponível. Defina
allowInsecurePath: truesomente para caminhos confiáveis que não possam ser verificados. - O provedor
execexige um caminhocommandabsoluto e usa cargas de protocolo em stdin/stdout. - Por padrão, caminhos de comando que sejam links simbólicos são rejeitados. Defina
allowSymlinkCommand: truepara permitir caminhos de links simbólicos enquanto valida o caminho de destino resolvido. - Se
trustedDirsestiver configurado, a verificação de diretório confiável será aplicada ao caminho de destino resolvido. - Por padrão, o ambiente do processo filho de
execé mínimo; passe explicitamente as variáveis necessárias compassEnv. - As referências a segredos são resolvidas no momento da ativação para um snapshot em memória; depois, os caminhos de solicitação leem somente esse snapshot.
- A filtragem de superfícies ativas é aplicada durante a ativação: referências não resolvidas em superfícies habilitadas fazem a inicialização/recarga falhar, enquanto superfícies inativas são ignoradas com diagnósticos.
Armazenamento de autenticação
{ 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"], }, },}- Os perfis por agente são armazenados em
<agentDir>/auth-profiles.json. auth-profiles.jsonaceita referências no nível do valor (keyRefparaapi_key,tokenRefparatoken) em modos de credencial estática.- Mapas planos legados de
auth-profiles.json, como{ "provider": { "apiKey": "..." } }, não são um formato de tempo de execução;openclaw doctor --fixos reescreve como perfis canônicos de chave de APIprovider:default, com um backup.legacy-flat.*.bak. - Perfis no modo OAuth (
auth.profiles.<id>.mode = "oauth") não aceitam credenciais de perfil de autenticação baseadas em SecretRef. - As credenciais estáticas de tempo de execução vêm de snapshots resolvidos em memória; entradas estáticas legadas de
auth.jsonsão removidas quando detectadas. - As importações legadas de OAuth vêm de
~/.openclaw/credentials/oauth.json. - Consulte OAuth.
- Comportamento de segredos em tempo de execução e ferramentas
audit/configure/apply: Gerenciamento de segredos.
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: recuo base em horas quando um perfil falha devido a erros reais de cobrança/crédito insuficiente (padrão:5). Texto explícito de cobrança ainda pode chegar aqui mesmo em respostas401/403, mas os padrões de correspondência de texto específicos do provedor permanecem restritos ao provedor que os possui (por exemplo,Key limit exceededdo OpenRouter). Mensagens HTTP402recuperáveis sobre janela de uso ou limite de gastos da organização/do espaço de trabalho permanecem no fluxorate_limit.billingBackoffHoursByProvider: substituições opcionais por provedor para as horas de recuo de cobrança.billingMaxHours: limite em horas para o crescimento exponencial do recuo de cobrança (padrão:24).authPermanentBackoffMinutes: recuo base em minutos para falhasauth_permanentde alta confiança (padrão:10).authPermanentMaxMinutes: limite em minutos para o crescimento do recuo deauth_permanent(padrão:60).failureWindowHours: janela móvel em horas usada para contadores de recuo (padrão:24).overloadedProfileRotations: número máximo de alternâncias de perfil de autenticação do mesmo provedor para erros de sobrecarga antes de mudar para o fallback de modelo (padrão:1). Formatos de provedor ocupado, comoModelNotReadyException, chegam aqui.overloadedBackoffMs: atraso fixo antes de tentar novamente uma alternância de provedor/perfil sobrecarregado (padrão:0).rateLimitedProfileRotations: número máximo de alternâncias de perfil de autenticação do mesmo provedor para erros de limite de taxa antes de mudar para o fallback de modelo (padrão:1). Esse grupo de limite de taxa inclui textos formatados pelo provedor, comoToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceedederesource exhausted.
Auditoria
{ audit: { enabled: true, messages: "off", // desativado | direto | todos },}O Gateway registra eventos de auditoria somente de metadados para execuções de agentes e
ações de ferramentas no banco de dados de estado compartilhado. Os metadados do ciclo de vida
das mensagens são uma opção separada. O registro armazena identidade, temporização, nomes de
ferramentas e resultados normalizados, mas nunca prompts, corpos de mensagens, argumentos de
ferramentas, resultados ou texto bruto de erros. As linhas de mensagens não armazenam IDs brutos
de conta da plataforma, conversa, mensagem e destino. As chaves de sessão de execução/ferramenta
permanecem disponíveis para correlação e podem conter IDs de conta da plataforma ou de pares.
Os registros expiram após 30 dias, e o registro é limitado a 100.000 linhas. Consulte-os com
openclaw audit ou com a RPC do Gateway
audit.activity.list. Consulte
Histórico de auditoria para ver o modelo de dados completo, a semântica de
privacidade e os limites de cobertura.
enabled: registra novos eventos de auditoria (padrão:true). O registro fica ativado por padrão porque uma trilha de auditoria ativada somente após um incidente não pode explicar o incidente. Definir comofalseinterrompe a inserção de novos eventos após a reinicialização do Gateway; os registros existentes permanecem legíveis até expirarem. Reativá-lo retoma o registro a partir desse ponto — a lacuna não é preenchida retroativamente.messages: escopo dos metadados de mensagens (padrão:"off")."direct"registra somente conversas diretas conhecidas."all"também registra grupos, canais e tipos de conversa desconhecidos. Ambos os modos permanecem sem conteúdo e substituem identificadores brutos por pseudônimos com chave locais da instalação quando há correlação disponível. Eles são auxiliares de correlação, não uma forma de anonimização; o banco de dados de estado armazena a chave de derivação, mas as exportações por RPC e CLI não.
O Gateway em execução captura audit.enabled e audit.messages na inicialização;
reinicie-o após alterar qualquer uma das configurações. Atualmente, a cobertura de mensagens
inclui mensagens de entrada aceitas que chegam ao despacho do núcleo e uma linha terminal por
payload lógico original de resposta de saída que chega à entrega durável compartilhada.
Caminhos locais de Plugin e de envio direto que ignoram esses limites compartilhados ainda
não são cobertos. O gravador em segundo plano com capacidade limitada opera em regime de
melhor esforço, não como um arquivo de conformidade sem perdas.
Registro em log
{ logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", // bonito | compacto | json redactSensitive: "tools", // desativado | ferramentas redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"], },}- Arquivo de log padrão:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Defina
logging.filepara usar um caminho estável. consoleLevelmuda paradebugquando--verboseé usado.maxFileBytes: tamanho máximo do arquivo de log ativo em bytes antes da rotação (inteiro positivo; padrão:104857600= 100 MB). O OpenClaw mantém até cinco arquivos numerados ao lado do arquivo ativo.redactSensitive/redactPatterns: mascaramento de melhor esforço para a saída do console, logs de arquivo, registros de log OTLP e texto persistido da transcrição da sessão.redactSensitive: "off"desativa somente essa política geral de logs/transcrições; superfícies de segurança da interface, das ferramentas e de diagnóstico ainda ocultam segredos antes da emissão.
Diagnósticos
{ 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: controle mestre da saída de instrumentação (padrão:true).flags: matriz de strings de sinalizadores que ativam a saída de logs direcionada (aceita curingas como"telegram.*"ou"*").stuckSessionWarnMs: limite de tempo sem progresso, em ms, para classificar sessões de processamento de longa duração comosession.long_running,session.stalledousession.stuck(padrão:120000). Progresso de resposta, ferramenta, status, bloco e ACP reinicia o temporizador; diagnósticossession.stuckrepetidos aumentam o intervalo enquanto não houver alterações.stuckSessionAbortMs: limite de tempo sem progresso, em ms, antes que trabalhos ativos paralisados elegíveis possam ser encerrados e drenados para recuperação. Quando não definido, o OpenClaw usa a janela estendida mais segura de execução incorporada de pelo menos 5 minutos e 3xstuckSessionWarnMs.memoryPressureSnapshot: captura um snapshot de estabilidade ocultado anterior à falta de memória quando a pressão de memória atingecritical(padrão:false). Defina comotruepara adicionar a varredura/gravação do arquivo do pacote de estabilidade, mantendo os eventos normais de pressão de memória.otel.enabled: ativa o pipeline de exportação do OpenTelemetry (padrão:false). Para ver a configuração completa, o catálogo de sinais e o modelo de privacidade, consulte Exportação do OpenTelemetry.otel.endpoint: URL do coletor para exportação OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: endpoints OTLP opcionais específicos por sinal. Quando definidos, substituemotel.endpointsomente para esse sinal.otel.protocol:"http/protobuf"(padrão) ou"grpc".otel.headers: cabeçalhos adicionais de metadados HTTP/gRPC enviados com as solicitações de exportação OTel.otel.serviceName: nome do serviço para atributos de recurso.otel.traces/otel.metrics/otel.logs: ativa a exportação de rastreamentos, métricas ou logs.otel.logsExporter: destino da exportação de logs:"otlp"(padrão),"stdout"para um objeto JSON por linha da saída padrão ou"both".otel.sampleRate: taxa de amostragem de rastreamentos de0a1.otel.flushIntervalMs: intervalo periódico de liberação da telemetria em ms.otel.captureContent: captura opcional de conteúdo bruto para atributos de spans OTEL. Fica desativada por padrão. O booleanotruecaptura conteúdo de mensagens/ferramentas que não seja do sistema; o formato de objeto permite ativar explicitamenteinputMessages,outputMessages,toolInputs,toolOutputs,systemPromptetoolDefinitions.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: controle de ambiente para o formato experimental mais recente de spans de inferência GenAI, incluindo nomes de spans{gen_ai.operation.name} {gen_ai.request.model}, tipo de spanCLIENTegen_ai.provider.nameem vez dogen_ai.systemlegado. Por padrão, os spans mantêmopenclaw.model.callegen_ai.systempara compatibilidade; as métricas GenAI usam atributos semânticos limitados.OPENCLAW_OTEL_PRELOADED=1: controle de ambiente para hosts que já registraram um SDK OpenTelemetry global. O OpenClaw então ignora a inicialização/desligamento do SDK pertencente ao Plugin, mantendo os listeners de diagnóstico ativos.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTeOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: variáveis de ambiente de endpoint específicas por sinal usadas quando a chave de configuração correspondente não está definida.cacheTrace.enabled: registra snapshots de rastreamento de cache para execuções incorporadas (padrão:false).cacheTrace.filePath: caminho de saída do rastreamento de cache em JSONL (padrão:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: controla o que é incluído na saída de rastreamento de cache (todos com padrão:true).
Atualização
{ update: { channel: "stable", // estável | estável estendido | beta | desenvolvimento checkOnStart: true, auto: { enabled: false, stableDelayHours: 6, stableJitterHours: 12, betaCheckIntervalHours: 1, }, },}channel: canal de lançamento —"stable","extended-stable","beta"ou"dev". O canal estável estendido é exclusivo do pacote: comandos em primeiro plano controlam a instalação, enquanto o Gateway pode emitir dicas de atualização somente leitura.checkOnStart: verifica atualizações do npm quando o Gateway é iniciado (padrão:true). Seleções armazenadas do canal estável estendido usam a mesma dica somente leitura e a programação de dicas de 24 horas.auto.enabled: ativa a atualização automática em segundo plano para instalações de pacotes dos canais estável e beta (padrão:false). O canal estável estendido nunca é aplicado automaticamente.auto.stableDelayHours: atraso mínimo em horas antes da aplicação automática do canal estável (padrão:6; máximo:168).auto.stableJitterHours: janela adicional de distribuição gradual do canal estável em horas (padrão:12; máximo:168).auto.betaCheckIntervalHours: frequência em horas das verificações do canal beta (padrão:1; máximo:24). As configurações de atraso/distribuição do canal estável e de consulta do beta não se aplicam ao canal estável estendido.
ACP
{ acp: { enabled: true, dispatch: { enabled: true }, backend: "acpx", fallbacks: ["acpx-secondary"], defaultAgent: "main", allowedAgents: ["main", "ops"], maxConcurrentSessions: 10, stream: { coalesceIdleMs: 50, maxChunkChars: 1000, repeatSuppression: true, deliveryMode: "live", // ao vivo | somente final hiddenBoundarySeparator: "paragraph", // nenhum | espaço | nova linha | parágrafo maxOutputChars: 50000, maxSessionUpdateChars: 500, }, runtime: { ttlMinutes: 30, }, },}enabled: controle global do recurso ACP (padrão:true; defina comofalsepara ocultar os recursos de encaminhamento e criação do ACP).dispatch.enabled: controle independente para o encaminhamento de turnos de sessões ACP (padrão:true). Defina comofalsepara manter os comandos ACP disponíveis enquanto bloqueia a execução.backend: id padrão do backend de runtime ACP (deve corresponder a um plugin de runtime ACP registrado). Instale primeiro o plugin de backend e, seplugins.allowestiver definido, inclua o id do plugin de backend (por exemplo,acpx), caso contrário o backend ACP não será carregado.fallbacks: lista ordenada de ids de backends ACP alternativos testados quando o backend principal falha antecipadamente, antes de produzir qualquer saída, com um erro aparentemente transitório (indisponível, com limitação de taxa, cota esgotada ou sobrecarregado). Cada entrada deve corresponder ao backend de um plugin de runtime ACP registrado.defaultAgent: id do agente ACP de destino alternativo quando as criações não especificam um destino explícito.allowedAgents: lista de permissões de ids de agentes permitidos para sessões de runtime ACP; vazia significa nenhuma restrição adicional.maxConcurrentSessions: número máximo de sessões ACP ativas simultaneamente.stream.coalesceIdleMs: janela de liberação por inatividade, em ms, para texto transmitido.stream.maxChunkChars: tamanho máximo do bloco antes de dividir a projeção de blocos transmitidos.stream.repeatSuppression: suprime linhas repetidas de status/ferramenta por turno (padrão:true).stream.deliveryMode:"live"transmite incrementalmente;"final_only"mantém em buffer até os eventos terminais do turno.stream.hiddenBoundarySeparator: separador antes do texto visível após eventos de ferramenta ocultos (padrão:"paragraph").stream.maxOutputChars: número máximo de caracteres da saída do assistente projetada por turno ACP.stream.maxSessionUpdateChars: número máximo de caracteres para linhas projetadas de status/atualização do ACP.stream.tagVisibility: registro de nomes de tags para substituições booleanas de visibilidade de eventos transmitidos.runtime.ttlMinutes: TTL de inatividade, em minutos, para workers de sessões ACP antes que possam ser limpos.runtime.installCommand: comando de instalação opcional a ser executado ao inicializar um ambiente de runtime ACP.
CLI
{ cli: { banner: { taglineMode: "off", // random | default | off }, },}cli.banner.taglineModecontrola o estilo do slogan do banner:"random"(padrão): slogans divertidos/sazonais alternados."default": slogan neutro fixo (All your chats, one OpenClaw.)."off": sem texto de slogan (o título/a versão do banner ainda são exibidos).
- Para ocultar o banner inteiro (não apenas os slogans), defina a variável de ambiente
OPENCLAW_HIDE_BANNER=1.
Assistente
Metadados gravados pelos fluxos de configuração guiada da 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", },}Identidade
Consulte os campos de identidade de agents.list em Padrões dos agentes.
Ponte (legada, removida)
As versões atuais não incluem mais a ponte TCP. Os Nodes se conectam pelo WebSocket do Gateway. As chaves bridge.* não fazem mais parte do esquema de configuração (a validação falha até que sejam removidas; openclaw doctor --fix pode eliminar chaves desconhecidas).
Configuração legada da ponte (referência histórica)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // padrão; despacho do cron + execução isolada do turno do agente de cron webhook: "https://example.invalid/legacy", // fallback obsoleto para tarefas armazenadas com notify:true webhookToken: "replace-with-dedicated-token", // token bearer opcional para autenticação de Webhooks de saída sessionRetention: "24h", // string de duração ou false runLog: { maxBytes: "2mb", // padrão de 2_000_000 bytes keepLines: 2000, // padrão de 2000 }, },}sessionRetention: por quanto tempo manter as sessões concluídas de execuções isoladas do cron antes de remover as linhas de sessão do SQLite. Também controla a limpeza de transcrições arquivadas de cron excluídas. Padrão:24h; defina comofalsepara desativar.runLog.maxBytes: aceito para compatibilidade com logs de execução de cron mais antigos baseados em arquivos. Padrão:2_000_000bytes.runLog.keepLines: linhas mais recentes do histórico de execuções do SQLite mantidas por tarefa. Padrão:2000.webhookToken: token bearer usado para entrega POST de Webhooks do cron (delivery.mode = "webhook"); se omitido, nenhum cabeçalho de autenticação é enviado.webhook: URL de Webhook legada e obsoleta (http/https), usada poropenclaw doctor --fixpara migrar tarefas armazenadas que ainda têmnotify: true; a entrega em tempo de execução usadelivery.mode="webhook"por tarefa maisdelivery.to, oudelivery.completionDestinationao preservar a entrega de anúncio.
cron.retry
{ cron: { retry: { maxAttempts: 3, backoffMs: [30000, 60000, 300000], retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"], }, },}maxAttempts: número máximo de novas tentativas para tarefas Cron em caso de erros transitórios (padrão:3; intervalo:0-10).backoffMs: matriz de atrasos de espera em ms para cada nova tentativa (padrão:[30000, 60000, 300000]; 1-10 entradas).retryOn: tipos de erro que acionam novas tentativas —"rate_limit","overloaded","network","timeout","server_error". Omita para tentar novamente em todos os tipos transitórios.
As tarefas de execução única permanecem habilitadas até que as tentativas se esgotem; em seguida, são desabilitadas, mantendo o estado de erro final. As tarefas recorrentes usam a mesma política de novas tentativas para erros transitórios e são executadas novamente após o tempo de espera, antes do próximo horário agendado; erros permanentes ou o esgotamento das tentativas para erros transitórios fazem com que a tarefa retorne à programação recorrente normal, com espera após erros.
cron.failureAlert
{ cron: { failureAlert: { enabled: false, after: 3, cooldownMs: 3600000, includeSkipped: false, mode: "announce", accountId: "main", }, },}enabled: habilita alertas de falha para tarefas Cron (padrão:false).after: número de falhas consecutivas antes do acionamento de um alerta (inteiro positivo, mín.:1).cooldownMs: número mínimo de milissegundos entre alertas repetidos para a mesma tarefa (inteiro não negativo).includeSkipped: contabiliza execuções consecutivas ignoradas para o limite do alerta (padrão:false). As execuções ignoradas são monitoradas separadamente e não afetam a espera após erros de execução.mode: modo de entrega —"announce"envia por meio de uma mensagem de canal;"webhook"publica no Webhook configurado.accountId: ID opcional da conta ou do canal para delimitar a entrega de alertas.
cron.failureDestination
{ cron: { failureDestination: { mode: "announce", channel: "last", to: "channel:C1234567890", accountId: "main", }, },}- Destino padrão das notificações de falha do Cron para todas as tarefas.
mode:"announce"ou"webhook"; o padrão é"announce"quando há dados de destino suficientes.channel: substituição do canal para entrega por anúncio."last"reutiliza o último canal de entrega conhecido.to: destino explícito do anúncio ou URL do Webhook. Obrigatório para o modo Webhook.accountId: substituição opcional da conta para entrega.- O
delivery.failureDestinationde cada tarefa substitui este padrão global. - Quando nenhum destino de falha global nem específico da tarefa está definido, as tarefas que já realizam entregas por
announceusam esse destino principal de anúncio como alternativa em caso de falha. delivery.failureDestinationé compatível apenas com tarefassessionTarget="isolated", a menos que odelivery.modeprincipal da tarefa seja"webhook".
Consulte Tarefas Cron. As execuções isoladas do Cron são monitoradas como tarefas em segundo plano.
Variáveis de modelo para modelos de mídia
Espaços reservados de modelo expandidos em tools.media.models[].args:
| Variável | Descrição |
|---|---|
{{Body}} |
Corpo completo da mensagem recebida |
{{RawBody}} |
Corpo bruto (sem invólucros de histórico/remetente) |
{{BodyStripped}} |
Corpo sem menções a grupos |
{{From}} |
Identificador do remetente |
{{To}} |
Identificador do destino |
{{MessageSid}} |
ID da mensagem do canal |
{{SessionId}} |
UUID da sessão atual |
{{IsNewSession}} |
"true" quando uma nova sessão é criada |
{{MediaUrl}} |
Pseudo-URL da mídia recebida |
{{MediaPath}} |
Caminho local da mídia |
{{MediaType}} |
Tipo de mídia (imagem/áudio/documento/…) |
{{Transcript}} |
Transcrição do áudio |
{{Prompt}} |
Prompt de mídia resolvido para entradas da CLI |
{{MaxChars}} |
Máximo resolvido de caracteres de saída para entradas da CLI |
{{ChatType}} |
"direct" ou "group" |
{{GroupSubject}} |
Assunto do grupo (melhor esforço) |
{{GroupMembers}} |
Prévia dos membros do grupo (melhor esforço) |
{{SenderName}} |
Nome de exibição do remetente (melhor esforço) |
{{SenderE164}} |
Número de telefone do remetente (melhor esforço) |
{{Provider}} |
Indicação do provedor (whatsapp, telegram, discord etc.) |
Inclusões de configuração ($include)
Divida a configuração em vários arquivos:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/mueller.json5", "./clients/schmidt.json5"], },}Comportamento da mesclagem:
- Arquivo único: substitui o objeto que o contém.
- Matriz de arquivos: mesclada profundamente na ordem indicada (os posteriores substituem os anteriores).
- Chaves irmãs: mescladas após as inclusões (substituem os valores incluídos).
- Inclusões aninhadas: até 10 níveis de profundidade.
- Caminhos: resolvidos em relação ao arquivo que realiza a inclusão, mas devem permanecer dentro do diretório de configuração de nível superior (
dirnamedeopenclaw.json). Formas absolutas/com../são permitidas somente quando ainda são resolvidas dentro desse limite. DefinaOPENCLAW_INCLUDE_ROOTS(caminhos absolutos) para permitir raízes adicionais fora do diretório de configuração. - Limites: os caminhos não devem conter bytes nulos e devem ter estritamente menos de 4096 caracteres antes e depois da resolução; cada arquivo incluído é limitado a 2 MB.
- As gravações pertencentes ao OpenClaw que alteram apenas uma seção de nível superior respaldada por uma inclusão de arquivo único são encaminhadas para esse arquivo incluído. Por exemplo,
plugins installatualizaplugins: { $include: "./plugins.json5" }emplugins.json5e mantémopenclaw.jsonintacto. - Inclusões na raiz, matrizes de inclusões e inclusões com substituições por chaves irmãs são somente leitura para gravações pertencentes ao OpenClaw; essas gravações falham de forma segura em vez de achatar a configuração.
- Erros: mensagens claras para arquivos ausentes, erros de análise, inclusões circulares, formato de caminho inválido e comprimento excessivo.