Gateway
Configuração
OpenClaw lê uma configuração opcional <Tooltip tip="JSON5 supports comments and trailing commas">JSON5</Tooltip> de ~/.openclaw/openclaw.json.
O caminho da configuração ativa deve ser um arquivo regular. Layouts de openclaw.json
com link simbólico não são compatíveis com gravações pertencentes ao OpenClaw; uma gravação atômica pode substituir
o caminho em vez de preservar o link simbólico. Se você mantiver a configuração fora do
diretório de estado padrão, aponte OPENCLAW_CONFIG_PATH diretamente para o arquivo real.
Se o arquivo estiver ausente, o OpenClaw usa padrões seguros. Motivos comuns para adicionar uma configuração:
- 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
Consulte a referência completa para ver todos os campos disponíveis.
Agentes e automação devem usar config.schema.lookup para obter a documentação exata
em nível de campo antes de editar a configuração. Use esta página para orientação orientada a tarefas e a
Referência de configuração para o mapa mais amplo
de campos e padrões.
Configuração mínima
// ~/.openclaw/openclaw.json
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}
Editando a configuração
Interactive wizard
openclaw onboard # full onboarding flow
openclaw configure # config wizard
CLI (one-liners)
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset plugins.entries.brave.config.webSearch.apiKey
Control UI
Abra http://127.0.0.1:18789 e use a aba Config.
A Control UI renderiza um formulário a partir do esquema de configuração ativo, incluindo metadados de documentação
title / description dos campos, além de esquemas de Plugin e canal quando
disponíveis, com um editor Raw JSON como saída alternativa. Para UIs de detalhamento
e outras ferramentas, o Gateway também expõe config.schema.lookup para
buscar um nó de esquema com escopo de caminho mais resumos imediatos dos filhos.
Direct edit
Edite ~/.openclaw/openclaw.json diretamente. O Gateway observa o arquivo e aplica as alterações automaticamente (consulte recarga dinâmica).
Validação estrita
openclaw config schema imprime o JSON Schema canônico usado pela Control UI
e pela validação. config.schema.lookup busca um único nó com escopo de caminho, além de
resumos dos filhos, para ferramentas de detalhamento. Os metadados de documentação dos campos title/description
são propagados por objetos aninhados, curinga (*), item de array ([]) e ramificações anyOf/
oneOf/allOf. Esquemas de Plugin e canal em tempo de execução são mesclados quando o
registro de manifesto é carregado.
Quando a validação falha:
- O Gateway não inicializa
- 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
O Gateway mantém uma cópia confiável da última configuração válida conhecida após cada inicialização bem-sucedida,
mas a inicialização e a recarga dinâmica não a restauram automaticamente. Se openclaw.json
falhar na validação (incluindo validação local de Plugin), a inicialização do Gateway falha ou
a recarga é ignorada, e o runtime atual mantém a última configuração aceita.
Execute openclaw doctor --fix (ou --yes) para reparar uma configuração prefixada/sobrescrita ou
restaurar a última cópia válida conhecida. A promoção para a última configuração válida conhecida é ignorada quando um
candidato contém placeholders de segredos redigidos, como ***.
Tarefas comuns
Set up a channel (WhatsApp, Telegram, Discord, etc.)
Cada canal tem sua própria seção de configuração em channels.<provider>. Consulte a página dedicada do canal para ver 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
Todos os canais compartilham o mesmo padrão de política de DM:
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["tg:123"], // only for allowlist/open
},
},
}
Choose and configure models
Defina o modelo principal e fallbacks opcionais:
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["openai/gpt-5.4"],
},
models: {
"anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
"openai/gpt-5.4": { alias: "GPT" },
},
},
},
}
agents.defaults.modelsdefine o catálogo de modelos e atua como allowlist para/model.- Use
openclaw config set agents.defaults.models '<json>' --strict-json --mergepara adicionar entradas à allowlist sem remover modelos existentes. Substituições simples que removeriam entradas são rejeitadas, a menos que você passe--replace. - Referências de modelo usam o formato
provider/model(por exemplo,anthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxcontrola a redução de escala de imagens de transcrição/ferramenta (padrão1200); valores menores geralmente reduzem o uso de tokens de visão em execuções com muitas capturas de tela.- Consulte CLI de modelos para alternar modelos no chat e Failover de modelo para rotação de autenticação e comportamento de fallback.
- Para provedores personalizados/auto-hospedados, consulte Provedores personalizados na referência.
Controle 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": somente remetentes emallowFrom(ou no armazenamento de permissões pareado)"open": permite todas as DMs recebidas (requerallowFrom: ["*"])"disabled": ignora todas as DMs
Para grupos, use groupPolicy + groupAllowFrom ou listas de permissão específicas do canal.
Consulte a referência completa para detalhes por canal.
Configure o controle de menções em chats de grupo
Mensagens de grupo, por padrão, exigem menção. Configure padrões de acionamento por agente e mantenha respostas visíveis em salas no caminho padrão da ferramenta de mensagens, a menos que você queira intencionalmente respostas finais automáticas legadas:
{
messages: {
visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere
groupChat: {
visibleReplies: "message_tool", // default; use "automatic" for legacy room replies
},
},
agents: {
list: [
{
id: "main",
groupChat: {
mentionPatterns: ["@openclaw", "openclaw"],
},
},
],
},
channels: {
whatsapp: {
groups: { "*": { requireMention: true } },
},
},
}
- Menções de metadados: @menções nativas (toque para mencionar no WhatsApp, @bot no Telegram etc.)
- Padrões de texto: padrões regex seguros em
mentionPatterns - Respostas visíveis:
messages.visibleRepliespode exigir envios pela ferramenta de mensagens globalmente;messages.groupChat.visibleRepliessubstitui isso para grupos/canais. - Consulte a referência completa para modos de resposta visível, substituições por canal e modo de chat consigo mesmo.
Restrinja Skills por agente
Use agents.defaults.skills para uma base compartilhada e, em seguida, substitua agentes específicos com agents.list[].skills:
{
agents: {
defaults: {
skills: ["github", "weather"],
},
list: [
{ id: "writer" }, // inherits github, weather
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
{ id: "locked-down", skills: [] }, // no skills
],
},
}
- Omita
agents.defaults.skillspara Skills irrestritas por padrão. - Omita
agents.list[].skillspara herdar os padrões. - Defina
agents.list[].skills: []para nenhuma Skills. - Consulte Skills, Configuração de Skills e a Referência de Configuração.
Ajuste o monitoramento de integridade dos canais do Gateway
Controle a agressividade com que o Gateway reinicia canais que parecem obsoletos:
{
gateway: {
channelHealthCheckMinutes: 5,
channelStaleEventThresholdMinutes: 30,
channelMaxRestartsPerHour: 10,
},
channels: {
telegram: {
healthMonitor: { enabled: false },
accounts: {
alerts: {
healthMonitor: { enabled: true },
},
},
},
},
}
- Defina
gateway.channelHealthCheckMinutes: 0para desabilitar globalmente reinicializações pelo monitoramento de integridade. channelStaleEventThresholdMinutesdeve ser maior que ou igual ao intervalo de verificação.- Use
channels.<provider>.healthMonitor.enabledouchannels.<provider>.accounts.<id>.healthMonitor.enabledpara desabilitar reinicializações automáticas de um canal ou conta sem desabilitar o monitor global. - Consulte Verificações de Integridade para depuração operacional e a referência completa para todos os campos.
Ajuste o tempo limite do handshake WebSocket do Gateway
Dê a clientes locais mais tempo para concluir o handshake WebSocket de pré-autenticação em hosts carregados ou de baixa potência:
{
gateway: {
handshakeTimeoutMs: 30000,
},
}
- O padrão é
15000milissegundos. OPENCLAW_HANDSHAKE_TIMEOUT_MSainda tem precedência para substituições pontuais de serviço ou shell.- Prefira corrigir travamentos de inicialização/loop de eventos primeiro; este ajuste é para hosts que estão saudáveis, mas lentos durante o aquecimento.
Configure sessões e redefinições
Sessões controlam a continuidade e o isolamento da conversa:
{
session: {
dmScope: "per-channel-peer", // recommended for multi-user
threadBindings: {
enabled: true,
idleHours: 24,
maxAgeHours: 0,
},
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 120,
},
},
}
dmScope:main(compartilhado) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: padrões globais para roteamento de sessão vinculado a thread (Discord oferece suporte a/focus,/unfocus,/agents,/session idlee/session max-age).- Consulte Gerenciamento de Sessões para escopo, links de identidade e política de envio.
- Consulte a referência completa para todos os campos.
Ativar sandboxing
Execute sessões de agente em runtimes de sandbox isolados:
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
scope: "agent", // session | agent | shared
},
},
},
}
Crie a imagem primeiro - a partir de um checkout do código-fonte, execute scripts/sandbox-setup.sh; ou, a partir de uma instalação npm, veja o comando docker build inline em Sandboxing § Imagens e configuração.
Consulte Sandboxing para o guia completo e referência completa para todas as opções.
Ativar push com suporte de relay para builds oficiais do iOS
O push com suporte de relay é configurado em openclaw.json.
Defina isto na configuração do Gateway:
{
gateway: {
push: {
apns: {
relay: {
baseUrl: "https://relay.example.com",
// Optional. Default: 10000
timeoutMs: 10000,
},
},
},
},
}
Equivalente na CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
O que isso faz:
- Permite que o Gateway envie
push.test, sinais de ativação e ativações de reconexão pelo 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 suporte de relay à identidade do Gateway com a qual o app iOS foi pareado, para que outro Gateway não consiga reutilizar o registro armazenado.
- Mantém builds locais/manuais do iOS em APNs diretos. Envios com suporte de relay se aplicam apenas a builds oficiais distribuídos que se registraram pelo relay.
- Deve corresponder à URL base do relay incorporada ao build oficial/TestFlight do iOS, para que o tráfego de registro e envio chegue à mesma implantação de relay.
Fluxo de ponta a ponta:
- Instale um build oficial/TestFlight do iOS que foi compilado com a mesma URL base do relay.
- Configure
gateway.push.apns.relay.baseUrlno Gateway. - Pareie o app iOS com o Gateway e deixe as sessões de node e 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 suporte de relay no Gateway pareado. - O Gateway armazena o identificador do relay e a concessão de envio e depois os usa para
push.test, sinais de ativação e ativações de reconexão.
Observações operacionais:
- Se você alternar 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ê publicar um novo build do iOS que aponta 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.
Observação de compatibilidade:
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 de relay HTTP na configuração.
Consulte App iOS para o fluxo de ponta a ponta e Fluxo de autenticação e confiança para o modelo de segurança do relay.
Configurar Heartbeat (check-ins periódicos)
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
},
},
},
}
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- Consulte Heartbeat para o guia completo.
Configurar trabalhos Cron
{
cron: {
enabled: true,
maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution
sessionRetention: "24h",
runLog: {
maxBytes: "2mb",
keepLines: 2000,
},
},
}
sessionRetention: remove sessões isoladas de execuções concluídas desessions.json(padrão24h; definafalsepara desativar).runLog: reduzcron/runs/<jobId>.jsonlpor tamanho e linhas retidas.- Consulte trabalhos Cron para a visão geral do recurso e exemplos de CLI.
Configurar Webhooks (hooks)
Ative endpoints HTTP de Webhook no Gateway:
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
defaultSessionKey: "hook:ingress",
allowRequestSessionKey: false,
allowedSessionKeyPrefixes: ["hook:"],
mappings: [
{
match: { path: "gmail" },
action: "agent",
agentId: "main",
deliver: true,
},
],
},
}
Observação de segurança:
- Trate todo o 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 usa apenas 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 as flags de bypass de conteúdo inseguro desativadas (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), exceto ao fazer depuração com escopo estrito. - Se você ativar
hooks.allowRequestSessionKey, também definahooks.allowedSessionKeyPrefixespara delimitar chaves de sessão escolhidas pelo chamador. - Para agentes acionados por hook, prefira camadas de modelo modernas e fortes e uma política de ferramentas estrita (por exemplo, apenas mensagens mais sandboxing quando possível).
Consulte a referência completa para todas as opções de mapeamento e a integração com Gmail.
Configurar roteamento multiagente
Execute vários agentes isolados com workspaces e sessões separados:
{
agents: {
list: [
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
{ id: "work", workspace: "~/.openclaw/workspace-work" },
],
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
}
Consulte Multiagente e a referência completa para regras de vinculação e perfis de acesso por agente.
Dividir a configuração em vários arquivos ($include)
Use $include para organizar configurações grandes:
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
agents: { $include: "./agents.json5" },
broadcast: {
$include: ["./clients/a.json5", "./clients/b.json5"],
},
}
- Arquivo único: substitui o objeto contêiner
- Array de arquivos: mesclados profundamente em ordem (o posterior vence)
- Chaves irmãs: mescladas após includes (sobrescrevem valores incluídos)
- Includes aninhados: compatíveis com até 10 níveis de profundidade
- Caminhos relativos: resolvidos em relação ao arquivo que faz a inclusão
- Gravações pertencentes ao OpenClaw: quando uma gravação altera apenas uma seção de nível superior
apoiada por um include de arquivo único, como
plugins: { $include: "./plugins.json5" }, o OpenClaw atualiza esse arquivo incluído e deixaopenclaw.jsonintacto - Write-through sem suporte: includes na raiz, arrays de includes e includes com sobrescritas irmãs falham de modo fechado para gravações pertencentes ao OpenClaw, em vez de achatar a configuração
- Confinamento: caminhos
$includedevem resolver sob o diretório que contémopenclaw.json. Para compartilhar uma árvore entre máquinas ou usuários, definaOPENCLAW_INCLUDE_ROOTScomo uma lista de caminhos (:no POSIX,;no Windows) de diretórios adicionais que includes podem referenciar. Symlinks são resolvidos e verificados novamente, portanto um caminho que lexicalmente fica em um diretório de configuração, mas cujo destino real escapa de toda raiz permitida, ainda é rejeitado. - Tratamento de erros: erros claros para arquivos ausentes, erros de análise e includes circulares
Recarga a quente da configuração
O Gateway observa ~/.openclaw/openclaw.json e aplica alterações automaticamente - não é necessária reinicialização manual para a maioria das configurações.
Edições diretas de arquivo são tratadas como não confiáveis até serem validadas. O watcher espera
a movimentação de gravação temporária/renomeação do editor se estabilizar, lê o arquivo final e rejeita
edições externas inválidas sem regravar openclaw.json. Gravações de configuração pertencentes ao OpenClaw
usam o mesmo gate de esquema antes de gravar; sobrescritas 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 reload skipped (invalid config) ou a inicialização relatar Invalid config, inspecione a configuração, execute openclaw config validate e então execute openclaw doctor --fix para reparo. Consulte Solução de problemas do Gateway
para a checklist.
Modos de recarga
| Modo | Comportamento |
|---|---|
hybrid (padrão) |
Aplica a quente alterações seguras instantaneamente. Reinicia automaticamente para alterações críticas. |
hot |
Aplica a quente apenas alterações seguras. Registra um aviso quando uma reinicialização é necessária - você cuida disso. |
restart |
Reinicia o Gateway em qualquer alteração de configuração, segura ou não. |
off |
Desativa o monitoramento de arquivos. As alterações entram em vigor na próxima reinicialização manual. |
{
gateway: {
reload: { mode: "hybrid", debounceMs: 300 },
},
}
O que aplica a quente versus o que precisa de reinicialização
A maioria dos campos aplica a quente sem indisponibilidade. No modo hybrid, alterações que exigem reinicialização são tratadas automaticamente.
| Categoria | Campos | Precisa reiniciar? |
|---|---|---|
| Canais | channels.*, web (WhatsApp) - todos os canais integrados e de Plugin |
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, mcp, 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, plugins |
Sim |
Planejamento de recarga
Quando você edita um arquivo-fonte referenciado por meio de $include, o OpenClaw planeja
o recarregamento a partir do layout criado na fonte, não da visualização nivelada em memória.
Isso mantém as decisões de recarregamento a quente (aplicação a quente vs reinicialização) previsíveis mesmo quando uma
única seção de nível superior vive em seu próprio arquivo incluído, como
plugins: { $include: "./plugins.json5" }. O planejamento de recarregamento falha de modo fechado se o
layout da fonte for ambíguo.
RPC de configuração (atualizações programáticas)
Para ferramentas que gravam configurações pela API do Gateway, prefira este fluxo:
config.schema.lookuppara inspecionar uma subárvore (nó de esquema raso + resumos dos filhos)config.getpara buscar o snapshot atual mais ohashconfig.patchpara atualizações parciais (patch de mesclagem JSON: objetos são mesclados,nullexclui, arrays substituem)config.applysomente quando você pretende substituir a configuração inteiraupdate.runpara autoatualização explícita mais reinicialização; incluacontinuationMessagequando a sessão pós-reinicialização deve executar um turno de acompanhamentoupdate.statuspara inspecionar o sentinel de reinicialização da atualização mais recente e verificar a versão em execução após uma reinicialização
Agentes devem tratar config.schema.lookup como o primeiro ponto de consulta para documentação e restrições exatas
em nível de campo. Use Referência de configuração
quando precisarem do mapa de configuração mais amplo, padrões ou links para referências dedicadas
de subsistemas.
Exemplo de patch parcial:
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.patch --params '{
"raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
"baseHash": "<hash>"
}'
Tanto config.apply quanto config.patch aceitam raw, baseHash, sessionKey,
note e restartDelayMs. baseHash é obrigatório para ambos os métodos quando uma
configuração já existe.
Variáveis de ambiente
O OpenClaw lê variáveis de ambiente do processo pai, além de:
.envdo diretório de trabalho atual (se presente)~/.openclaw/.env(fallback global)
Nenhum dos arquivos substitui variáveis de ambiente existentes. Você também pode definir variáveis de ambiente inline na configuração:
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: { GROQ_API_KEY: "gsk-..." },
},
}
Importação de env do shell (opcional)
Se habilitado e as chaves esperadas não estiverem definidas, o OpenClaw executa seu shell de login e importa apenas as chaves ausentes:
{
env: {
shellEnv: { enabled: true, timeoutMs: 15000 },
},
}
Equivalente de variável de ambiente: OPENCLAW_LOAD_SHELL_ENV=1
Substituição de variáveis de ambiente em valores de configuração
Referencie variáveis de ambiente em qualquer valor de string de configuração com ${VAR_NAME}:
{
gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },
models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },
}
Regras:
- Apenas nomes em maiúsculas correspondem:
[A-Z_][A-Z0-9_]* - Variáveis ausentes/vazias geram um 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"
Referências secretas (env, arquivo, exec)
Para campos compatíveis com objetos SecretRef, você pode usar:
{
models: {
providers: {
openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } },
},
},
skills: {
entries: {
"image-lab": {
apiKey: {
source: "file",
provider: "filemain",
id: "/skills/entries/image-lab/apiKey",
},
},
},
},
channels: {
googlechat: {
serviceAccountRef: {
source: "exec",
provider: "vault",
id: "channels/googlechat/serviceAccount",
},
},
},
}
Detalhes de SecretRef (incluindo secrets.providers para env/file/exec) estão em Gerenciamento de segredos.
Os caminhos de credenciais compatíveis estão listados em Superfície de credenciais SecretRef.
Consulte Ambiente para precedência e fontes completas.
Referência completa
Para a referência completa campo a campo, consulte Referência de configuração.
Relacionado: Exemplos de configuração · Referência de configuração · Doctor