Configuração
O OpenClaw lê uma configuração opcional em de~/.openclaw/openclaw.json.
Se o arquivo não existir, o OpenClaw usará padrões seguros. Motivos comuns para adicionar uma configuração:
- Conectar canais e controlar quem pode enviar mensagens para o bot
- Definir modelos, ferramentas, sandboxing ou automação (cron, hooks)
- Ajustar sessões, mídia, rede ou UI
Configuração mínima
Editando a configuração
- Assistente interativo
- CLI (uma linha)
- UI de controle
- Edição direta
Validação estrita
Observações sobre ferramentas de schema:openclaw config schemaimprime a mesma família de JSON Schema usada pela UI de controle e pela validação de configuração.- Os valores
titleedescriptiondos campos são levados 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 há 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 configuração normalizado com um nó de schema superficial (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 de navegação detalhada.- Schemas de plugin/canal em runtime são mesclados quando o gateway consegue carregar o registro atual de manifests.
- 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 correções
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 configuração 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 primário e fallbacks opcionais:
agents.defaults.modelsdefine o catálogo de modelos e funciona como allowlist para/model.- Refs de modelo usam o formato
provider/model(por exemploanthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxcontrola o redimensionamento de imagem para transcrição/ferramenta (padrão1200); valores menores geralmente reduzem o uso de tokens de visão em execuções com muitas capturas de tela.- Veja CLI de modelos para trocar modelos no chat e Failover de modelo para rotação de autenticação e comportamento de fallback.
- Para provedores personalizados/self-hosted, veja Provedores personalizados na referência.
Controlar quem pode enviar mensagens para o bot
Controlar quem pode enviar mensagens para o 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 pareado)"open": permite todas as DMs recebidas (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 chats de grupo
Configurar bloqueio por menção em chats de grupo
Mensagens de grupo, por padrão, exigem menção. Configure padrões por agente:
- Menções por metadados: @menções nativas (toque para mencionar no WhatsApp, @bot no Telegram etc.)
- Padrões de texto: padrões regex seguros em
mentionPatterns - Veja a referência completa para substituições por canal e modo de self-chat.
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 nenhuma Skill. - Veja Skills, Configuração de Skills e a Referência de configuração.
Ajustar o monitoramento de integridade de canais do gateway
Ajustar o monitoramento de integridade de canais do gateway
Controle quão agressivamente 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 Verificações de integridade para depuração operacional e a referência completa para todos os campos.
Configurar sessões e redefinições
Configurar sessões e redefinições
Sessões controlam continuidade e isolamento de 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 Gerenciamento de sessão 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 contêineres Docker isolados:Crie a imagem primeiro:
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 configuração do gateway:- Permite que o gateway envie
push.test, wake nudges e reconnect wakes 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 para toda a implantação.
- Vincula cada registro com relay à identidade do gateway com a qual o app iOS foi pareado, para que outro gateway não possa reutilizar o registro armazenado.
- Mantém builds locais/manuais do iOS em APNs direto. Envios com relay se aplicam apenas a builds oficiais distribuídas que se registraram pelo relay.
- Deve corresponder ao base URL do relay embutido na build oficial/TestFlight do iOS, para que o tráfego de registro e envio chegue à mesma implantação do relay.
- Instale uma build oficial/TestFlight do iOS compilada com o mesmo base URL do relay.
- Configure
gateway.push.apns.relay.baseUrlno gateway. - Faça o pareamento do app iOS com o gateway e deixe tanto as sessões de nó quanto as de operador se conectarem.
- O app iOS busca a identidade do gateway, registra-se no relay usando App Attest mais o recibo do app e, em seguida, publica o payload
push.apns.registercom relay no gateway pareado. - O gateway armazena o identificador do relay e a concessão de envio, depois os usa para
push.test, wake nudges e reconnect wakes.
- Se você trocar o app iOS para outro gateway, reconecte o app para que ele possa publicar um novo registro de relay vinculado a esse gateway.
- Se você distribuir uma nova build do iOS apontando para outra implantação de relay, o app atualiza seu registro de relay em cache em vez de reutilizar a origem antiga do relay.
OPENCLAW_APNS_RELAY_BASE_URLeOPENCLAW_APNS_RELAY_TIMEOUT_MSainda funcionam como substituições temporárias por ambiente.OPENCLAW_APNS_RELAY_ALLOW_HTTP=truecontinua sendo uma rota de escape de desenvolvimento somente para loopback; não persista URLs HTTP de relay na configuração.
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 alvos de heartbeat em estilo DM- Veja Heartbeat para o guia completo.
Configurar jobs cron
Configurar jobs cron
sessionRetention: remove sessões concluídas de execuções isoladas desessions.json(padrão24h; definafalsepara desativar).runLog: faz pruning decron/runs/<jobId>.jsonlpor tamanho e linhas retidas.- Veja Jobs cron para 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 conteúdo de payload 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 é somente por cabeçalho (
Authorization: Bearer ...oux-openclaw-token); tokens em query string são rejeitados. hooks.pathnão pode ser/; mantenha a entrada de webhook em um subcaminho dedicado, como/hooks.- Mantenha desativadas flags de bypass de conteúdo inseguro (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), a menos que esteja fazendo depuração bem delimitada. - Se você ativar
hooks.allowRequestSessionKey, também definahooks.allowedSessionKeyPrefixespara limitar chaves de sessão escolhidas pelo chamador. - Para agentes acionados por hooks, prefira camadas fortes e modernas de modelo e política estrita de ferramentas (por exemplo, apenas mensagens mais sandboxing sempre que possível).
Configurar roteamento multiagente
Configurar roteamento multiagente
Execute múltiplos agentes isolados com workspaces e sessões separados:Veja Multi-Agent e a referência completa para regras de binding e perfis de acesso por agente.
Dividir a configuração em vários arquivos ($include)
Dividir a configuração em vários arquivos ($include)
Use
$include para organizar configurações grandes:- Arquivo único: substitui o objeto que o contém
- Array de arquivos: mesclado profundamente em ordem (o posterior prevalece)
- Chaves irmãs: mescladas após os includes (substituem valores incluídos)
- Includes aninhados: compatíveis 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
Config hot reload
O Gateway observa~/.openclaw/openclaw.json e aplica alterações automaticamente — não é necessário reinício manual para a maioria das configurações.
Modos de recarga
| Modo | Comportamento |
|---|---|
hybrid (padrão) | Aplica alterações seguras a quente imediatamente. Reinicia automaticamente para as críticas. |
hot | Aplica somente alterações seguras a quente. Registra um aviso quando é necessário reiniciar — você cuida disso. |
restart | Reinicia o Gateway em qualquer alteração de configuração, segura ou não. |
off | Desativa a observação de arquivos. Alterações entram em vigor no próximo reinício manual. |
O que é aplicado a quente vs o que precisa de reinício
A maioria dos campos é aplicada a quente sem indisponibilidade. No modohybrid, alterações que exigem reinício 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 do gateway | gateway.* (porta, 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 um reinício.RPC de configuração (atualizações programáticas)
RPCs de gravação do plano de controle (
config.apply, config.patch, update.run) têm limite de taxa de 3 solicitações a cada 60 segundos por deviceId+clientIp. Quando limitado, o RPC retorna UNAVAILABLE com retryAfterMs.config.schema.lookup: inspeciona uma subárvore de configuração com escopo de caminho com um nó de schema superficial, metadados de dica correspondentes e resumos imediatos dos filhosconfig.get: busca o snapshot atual + hashconfig.patch: caminho preferido para atualização parcialconfig.apply: substituição completa da configuração apenasupdate.run: autoatualização + reinicialização explícitas
config.schema.lookup e depois config.patch.
config.apply (substituição completa)
config.apply (substituição completa)
Valida + grava a configuração completa e reinicia o Gateway em uma única etapa.Parâmetros:
raw(string) — payload JSON5 para a configuração inteirabaseHash(opcional) — hash da configuração deconfig.get(obrigatório quando a configuração existe)sessionKey(opcional) — chave de sessão para o ping de wake-up após o reinícionote(opcional) — observação para o sentinel de reiníciorestartDelayMs(opcional) — atraso antes do reinício (padrão 2000)
config.patch (atualização parcial)
config.patch (atualização parcial)
Mescla uma atualização parcial na configuração existente (semântica de JSON merge patch):
- Objetos são mesclados recursivamente
nullexclui uma chave- Arrays são substituídos
raw(string) — JSON5 somente com as chaves a alterarbaseHash(obrigatório) — hash da configuração deconfig.getsessionKey,note,restartDelayMs— iguais aconfig.apply
config.apply: reinícios pendentes consolidados mais cooldown de 30 segundos entre ciclos de reinício.Variáveis de ambiente
O OpenClaw lê variáveis de ambiente do processo pai, além de:.envdo diretório de trabalho atual (se existir)~/.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 de configuração
Substituição de variáveis de ambiente em valores de configuração
Referencie variáveis de ambiente em qualquer valor string da configuração com Regras:
${VAR_NAME}:- Apenas nomes em maiúsculas correspondem:
[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 Gerenciamento de segredos.
Caminhos de credenciais compatíveis estão listados em Superfície de credenciais SecretRef.Referência completa
Para a referência completa campo por campo, veja Referência de configuração.Relacionado: Exemplos de configuração · Referência de configuração · Doctor