Configuração
O OpenClaw lê uma config opcional em de~/.openclaw/openclaw.json.
Se o arquivo estiver ausente, o OpenClaw usa padrões seguros. Motivos comuns para adicionar uma config:
- Conectar canais e controlar quem pode enviar mensagens ao bot
- Definir modelos, ferramentas, sandboxing ou automação (Cron, hooks)
- Ajustar sessões, mídia, rede ou UI
Config mínima
Editando a config
- Assistente interativo
- CLI (one-liners)
- Control UI
- Edição direta
Validação estrita
Observações sobre ferramentas de schema:openclaw config schemaimprime a mesma família de JSON Schema usada pela Control UI e pela validação da config.- Trate essa saída de schema como o contrato canônico legível por máquina para
openclaw.json; esta visão geral e a referência de configuração o resumem. - Os valores de
titleedescriptiondos campos são carregados para a saída do schema para ferramentas de editor e formulário. - Entradas de objeto aninhado, curinga (
*) e item de array ([]) herdam os mesmos metadados de documentação quando existe documentação de campo correspondente. - Ramos de composição
anyOf/oneOf/allOftambém herdam os mesmos metadados de documentação, para que variantes de união/interseção mantenham a mesma ajuda de campo. config.schema.lookupretorna um caminho de config normalizado com um node raso do schema (title,description,type,enum,const, limites comuns e campos de validação semelhantes), metadados de dica de UI correspondentes e resumos imediatos dos filhos para ferramentas com detalhamento.- Schemas dinâmicos de Plugin/canal são mesclados quando o gateway consegue carregar o registro de manifest atual.
pnpm config:docs:checkdetecta divergência entre os artefatos de baseline de config voltados para a documentação e a superfície atual do schema.
- O Gateway não inicia
- Apenas comandos de diagnóstico funcionam (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Execute
openclaw doctorpara ver os problemas exatos - Execute
openclaw doctor --fix(ou--yes) para aplicar reparos
openclaw.json for alterado depois fora do OpenClaw e deixar de validar, a inicialização
e o hot reload preservam o arquivo quebrado como um snapshot .clobbered.* com timestamp,
restauram a última cópia válida conhecida e registram um aviso bem visível com o motivo da recuperação.
O próximo turno do agente principal também recebe um aviso de evento do sistema informando que a
config foi restaurada e não deve ser reescrita cegamente. A promoção do último estado válido conhecido
é atualizada após uma inicialização validada e após hot reloads aceitos, incluindo
gravações de config feitas pelo OpenClaw cujo hash do arquivo persistido ainda corresponde à
gravação aceita. A promoção é ignorada quando o candidato contém placeholders de segredo
redigidos como *** ou valores de token encurtados.
Tarefas comuns
Configurar um canal (WhatsApp, Telegram, Discord etc.)
Configurar um canal (WhatsApp, Telegram, Discord etc.)
Cada canal tem sua própria seção de config em
channels.<provider>. Veja a página dedicada do canal para as etapas de configuração:- WhatsApp —
channels.whatsapp - Telegram —
channels.telegram - Discord —
channels.discord - Feishu —
channels.feishu - Google Chat —
channels.googlechat - Microsoft Teams —
channels.msteams - Slack —
channels.slack - Signal —
channels.signal - iMessage —
channels.imessage - Mattermost —
channels.mattermost
Escolher e configurar modelos
Escolher e configurar modelos
Defina o modelo principal e fallbacks opcionais:
agents.defaults.modelsdefine o catálogo de modelos e atua como allowlist para/model.- Referências de modelo usam o formato
provider/model(por exemplo,anthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxcontrola o redimensionamento de imagens de transcrição/ferramenta (padrão1200); valores menores geralmente reduzem o uso de vision tokens em execuções com muitas capturas de tela.- Veja Models CLI para trocar de modelo no chat e Model Failover para rotação de autenticação e comportamento de fallback.
- Para provedores personalizados/hospedados por você, veja Custom providers na referência.
Controlar quem pode enviar mensagens ao bot
Controlar quem pode enviar mensagens ao bot
O acesso por DM é controlado por canal via
dmPolicy:"pairing"(padrão): remetentes desconhecidos recebem um código de pareamento único para aprovação"allowlist": apenas remetentes emallowFrom(ou no armazenamento de allowlist pareada)"open": permite todas as DMs de entrada (requerallowFrom: ["*"])"disabled": ignora todas as DMs
groupPolicy + groupAllowFrom ou allowlists específicas do canal.Veja a referência completa para detalhes por canal.Configurar bloqueio por menção em chat de grupo
Configurar bloqueio por menção em chat de grupo
Mensagens de grupo, por padrão, exigem menção. Configure padrões por agente:
- Menções por metadados: menções nativas com @ (WhatsApp tocar para mencionar, Telegram @bot etc.)
- Padrões de texto: padrões regex seguros em
mentionPatterns - Veja a referência completa para substituições por canal e modo de conversa consigo mesmo.
Restringir Skills por agente
Restringir Skills por agente
Use
agents.defaults.skills para uma base compartilhada e depois substitua agentes específicos com agents.list[].skills:- Omita
agents.defaults.skillspara Skills irrestritas por padrão. - Omita
agents.list[].skillspara herdar os padrões. - Defina
agents.list[].skills: []para não ter Skills. - Veja Skills, Skills config e a Configuration Reference.
Ajustar o monitoramento de integridade de canais do gateway
Ajustar o monitoramento de integridade de canais do gateway
Controle com que agressividade o gateway reinicia canais que parecem obsoletos:
- Defina
gateway.channelHealthCheckMinutes: 0para desativar globalmente reinicializações do monitor de integridade. channelStaleEventThresholdMinutesdeve ser maior ou igual ao intervalo de verificação.- Use
channels.<provider>.healthMonitor.enabledouchannels.<provider>.accounts.<id>.healthMonitor.enabledpara desativar reinicializações automáticas de um canal ou conta sem desativar o monitor global. - Veja Health Checks para depuração operacional e a referência completa para todos os campos.
Configurar sessões e resets
Configurar sessões e resets
Sessões controlam a continuidade e o isolamento da conversa:
dmScope:main(compartilhado) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: padrões globais para roteamento de sessão vinculado a thread (o Discord oferece suporte a/focus,/unfocus,/agents,/session idlee/session max-age).- Veja Session Management para escopo, links de identidade e política de envio.
- Veja a referência completa para todos os campos.
Ativar sandboxing
Ativar sandboxing
Execute sessões de agente em runtimes de sandbox isolados:Primeiro construa a imagem:
scripts/sandbox-setup.shVeja Sandboxing para o guia completo e a referência completa para todas as opções.Ativar push com relay para builds oficiais do iOS
Ativar push com relay para builds oficiais do iOS
O push com relay é configurado em Equivalente em CLI:O que isso faz:
openclaw.json.Defina isto na config do gateway:- Permite que o gateway envie
push.test, sinais de wake e wakes de reconexão por meio do relay externo. - Usa uma concessão de envio com escopo de registro encaminhada pelo app iOS pareado. O gateway não precisa de um token de relay válido para toda a implantação.
- Vincula cada registro com relay ao identity do gateway com o qual o app iOS foi pareado, para que outro gateway não possa reutilizar o registro armazenado.
- Mantém builds iOS locais/manuais em APNs direto. Envios com relay se aplicam apenas a builds oficiais distribuídos que se registraram por meio do relay.
- Deve corresponder à URL base do relay embutida no build iOS oficial/TestFlight, para que o tráfego de registro e envio chegue à mesma implantação de relay.
- Instale um build iOS oficial/TestFlight compilado com a mesma URL base de relay.
- Configure
gateway.push.apns.relay.baseUrlno gateway. - Faça o pareamento do app iOS com o gateway e permita que as sessões de node e operator se conectem.
- O app iOS busca o identity do gateway, registra-se no relay usando App Attest mais o recibo do app e então publica a carga
push.apns.registercom relay no gateway pareado. - O gateway armazena o handle do relay e a concessão de envio, e depois os usa para
push.test, sinais de wake e wakes de reconexão.
- Se você trocar o app iOS para um gateway diferente, reconecte o app para que ele possa publicar um novo registro de relay vinculado a esse gateway.
- Se você distribuir um novo build iOS apontando para uma implantação de relay diferente, o app atualiza seu registro de relay em cache em vez de reutilizar a origem de relay antiga.
OPENCLAW_APNS_RELAY_BASE_URLeOPENCLAW_APNS_RELAY_TIMEOUT_MSainda funcionam como substituições temporárias por env.OPENCLAW_APNS_RELAY_ALLOW_HTTP=truecontinua sendo uma rota de escape de desenvolvimento apenas para loopback; não persista URLs HTTP de relay na config.
Configurar Heartbeat (check-ins periódicos)
Configurar Heartbeat (check-ins periódicos)
every: string de duração (30m,2h). Defina0mpara desativar.target:last|none|<channel-id>(por exemplodiscord,matrix,telegramouwhatsapp)directPolicy:allow(padrão) oublockpara destinos de Heartbeat no estilo DM- Veja Heartbeat para o guia completo.
Configurar jobs de Cron
Configurar jobs de Cron
sessionRetention: remove sessões isoladas concluídas desessions.json(padrão24h; definafalsepara desativar).runLog: faz prune decron/runs/<jobId>.jsonlpor tamanho e linhas retidas.- Veja Cron jobs para a visão geral do recurso e exemplos de CLI.
Configurar Webhooks (hooks)
Configurar Webhooks (hooks)
Ative endpoints HTTP de Webhook no Gateway:Observação de segurança:
- Trate todo o conteúdo de carga de hook/Webhook como entrada não confiável.
- Use um
hooks.tokendedicado; não reutilize o token compartilhado do Gateway. - A autenticação de hook é apenas por cabeçalho (
Authorization: Bearer ...oux-openclaw-token); tokens na query string são rejeitados. hooks.pathnão pode ser/; mantenha a entrada de Webhook em um subcaminho dedicado, como/hooks.- Mantenha desativadas as flags de bypass de conteúdo inseguro (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), a menos que esteja fazendo depuração estritamente delimitada. - Se você ativar
hooks.allowRequestSessionKey, também definahooks.allowedSessionKeyPrefixespara limitar as session keys selecionadas pelo chamador. - Para agentes acionados por hook, prefira níveis fortes e modernos de modelo e política estrita de ferramentas (por exemplo, apenas mensagens mais sandboxing, quando possível).
Configurar roteamento multiagente
Configurar roteamento multiagente
Execute vários agentes isolados com workspaces e sessões separadas:Veja Multi-Agent e a referência completa para regras de binding e perfis de acesso por agente.
Dividir a config em vários arquivos ($include)
Dividir a config em vários arquivos ($include)
Use
$include para organizar configs grandes:- Arquivo único: substitui o objeto que o contém
- Array de arquivos: faz deep merge em ordem (o último vence)
- Chaves irmãs: mescladas após os includes (substituem valores incluídos)
- Includes aninhados: suportados até 10 níveis de profundidade
- Caminhos relativos: resolvidos em relação ao arquivo que inclui
- Tratamento de erros: erros claros para arquivos ausentes, erros de parse e includes circulares
Hot reload da config
O Gateway observa~/.openclaw/openclaw.json e aplica as alterações automaticamente — não é necessário reiniciar manualmente para a maioria das configurações.
Edições diretas no arquivo são tratadas como não confiáveis até serem validadas. O watcher espera
a atividade temporária de escrita/renomeação do editor se estabilizar, lê o arquivo final e rejeita
edições externas inválidas restaurando a última config válida conhecida. Gravações de config feitas
pelo OpenClaw usam o mesmo bloqueio de schema antes de gravar; substituições destrutivas como
remover gateway.mode ou reduzir o arquivo em mais da metade são rejeitadas
e salvas como .rejected.* para inspeção.
Se você vir Config auto-restored from last-known-good ou
config reload restored last-known-good config nos logs, inspecione o arquivo
.clobbered.* correspondente ao lado de openclaw.json, corrija a carga rejeitada e então execute
openclaw config validate. Veja Gateway troubleshooting
para a checklist de recuperação.
Modos de reload
| Modo | Comportamento |
|---|---|
hybrid (padrão) | Aplica alterações seguras em hot imediatamente. Reinicia automaticamente para as críticas. |
hot | Aplica em hot apenas alterações seguras. Registra um aviso quando é necessário reiniciar — você cuida disso. |
restart | Reinicia o Gateway em qualquer alteração de config, segura ou não. |
off | Desativa a observação de arquivo. As alterações entram em vigor na próxima reinicialização manual. |
O que é aplicado em hot vs o que precisa de reinicialização
A maioria dos campos é aplicada em hot sem indisponibilidade. No modohybrid, alterações que exigem reinicialização são tratadas automaticamente.
| Categoria | Campos | Precisa reiniciar? |
|---|---|---|
| Canais | channels.*, web (WhatsApp) — todos os canais integrados e de extensão | Não |
| Agente e modelos | agent, agents, models, routing | Não |
| Automação | hooks, cron, agent.heartbeat | Não |
| Sessões e mensagens | session, messages | Não |
| Ferramentas e mídia | tools, browser, skills, audio, talk | Não |
| UI e diversos | ui, logging, identity, bindings | Não |
| Servidor Gateway | gateway.* (port, bind, auth, tailscale, TLS, HTTP) | Sim |
| Infraestrutura | discovery, canvasHost, plugins | Sim |
gateway.reload e gateway.remote são exceções — alterá-los não dispara reinicialização.RPC de config (atualizações programáticas)
RPCs de escrita do plano de controle (
config.apply, config.patch, update.run) têm limite de taxa de 3 solicitações por 60 segundos por deviceId+clientIp. Quando limitado, o RPC retorna UNAVAILABLE com retryAfterMs.config.schema.lookup: inspeciona uma subárvore de config com escopo de caminho com um node raso do schema, metadados de dica correspondentes e resumos imediatos dos filhosconfig.get: busca o snapshot atual + hashconfig.patch: caminho preferido para atualizações parciaisconfig.apply: substituição de config completa apenasupdate.run: self-update + reinicialização explícitas
config.schema.lookup
e depois config.patch.
config.apply (substituição completa)
config.apply (substituição completa)
Valida + grava a config completa e reinicia o Gateway em uma única etapa.Parâmetros:
raw(string) — carga JSON5 para a config inteirabaseHash(opcional) — hash da config deconfig.get(obrigatório quando a config existe)sessionKey(opcional) — session key para o ping de wake-up após a reinicializaçãonote(opcional) — observação para o sentinel de reinicializaçãorestartDelayMs(opcional) — atraso antes da reinicialização (padrão 2000)
config.patch (atualização parcial)
config.patch (atualização parcial)
Mescla uma atualização parcial à config existente (semântica de JSON merge patch):
- Objetos são mesclados recursivamente
nullexclui uma chave- Arrays substituem
raw(string) — JSON5 apenas com as chaves a serem alteradasbaseHash(obrigatório) — hash da config deconfig.getsessionKey,note,restartDelayMs— iguais aconfig.apply
config.apply: consolidação de reinicializações pendentes mais um cooldown de 30 segundos entre ciclos de reinicialização.Variáveis de ambiente
O OpenClaw lê variáveis de ambiente do processo pai e também de:.envdo diretório de trabalho atual (se presente)~/.openclaw/.env(fallback global)
Importação de env do shell (opcional)
Importação de env do shell (opcional)
Se ativado e as chaves esperadas não estiverem definidas, o OpenClaw executa seu shell de login e importa apenas as chaves ausentes:Equivalente em variável de ambiente:
OPENCLAW_LOAD_SHELL_ENV=1Substituição de variáveis de ambiente em valores da config
Substituição de variáveis de ambiente em valores da config
Referencie variáveis de ambiente em qualquer valor de string da config com Regras:
${VAR_NAME}:- Apenas nomes em maiúsculas são aceitos:
[A-Z_][A-Z0-9_]* - Variáveis ausentes/vazias geram erro no momento do carregamento
- Escape com
$${VAR}para saída literal - Funciona dentro de arquivos
$include - Substituição inline:
"${BASE}/v1"→"https://api.example.com/v1"
Refs de segredo (env, file, exec)
Refs de segredo (env, file, exec)
Para campos que oferecem suporte a objetos SecretRef, você pode usar:Detalhes de SecretRef (incluindo
secrets.providers para env/file/exec) estão em Secrets Management.
Os caminhos de credenciais compatíveis estão listados em SecretRef Credential Surface.Referência completa
Para a referência completa campo por campo, veja Configuration Reference.Relacionado: Configuration Examples · Configuration Reference · Doctor