openclaw doctor é a ferramenta de reparo + migração do OpenClaw. Ela corrige configurações/estado obsoletos, verifica a integridade e fornece etapas de reparo acionáveis.
Início rápido
Modos headless e de automação
- --yes
- --fix
- --lint
- --fix --force
- --non-interactive
- --deep
Modo lint somente leitura
openclaw doctor --lint é o equivalente amigável para automação de
openclaw doctor --fix. Ambos usam verificações de integridade do doctor, mas suas posturas são
diferentes:
| Modo | Solicitações | Grava configuração/estado | Saída | Use para |
|---|---|---|---|---|
openclaw doctor | sim | não | relatório de integridade amigável | uma pessoa verificando status |
openclaw doctor --fix | às vezes | sim, com política de reparo | log de reparo amigável | aplicar reparos aprovados |
openclaw doctor --lint | não | não | achados estruturados | CI, preflight e gates de revisão |
repair().
doctor --fix aplica esses reparos quando eles existem e continua usando o
fluxo de reparo existente do doctor para verificações que ainda não foram migradas.
O contrato de reparo estruturado também separa o relatório de reparo da detecção:
detect() relata os achados atuais, enquanto repair() pode relatar alterações,
diffs de configuração/arquivo e efeitos colaterais que não envolvem arquivos. Isso mantém o caminho de migração aberto
para futuros doctor --fix --dry-run e saída de diff sem fazer verificações de lint
planejarem mutações.
Exemplos:
ok: se algum achado visível atingiu o limite de severidade selecionadochecksRun: número de verificações de integridade executadaschecksSkipped: verificações ignoradas pelo perfil selecionado,--onlyou--skipfindings: diagnósticos estruturados comcheckId,severity,messageepath,line,column,ocPathefixHintopcionais
0: nenhum achado no limite selecionado ou acima dele1: um ou mais achados atingiram o limite selecionado2: falha de comando/runtime antes que achados de lint pudessem ser emitidos
--severity-min info|warning|error para controlar tanto o que é impresso quanto o que
causa uma saída de lint diferente de zero. Use --all para executar o inventário completo de lint,
incluindo verificações mais profundas de adesão opcional excluídas do conjunto de automação padrão. Use --only <id> para gates de preflight estreitos e
--skip <id> para excluir temporariamente uma verificação ruidosa enquanto mantém o restante da
execução de lint ativa.
Opções de saída de lint como --json, --severity-min, --all, --only e
--skip devem ser combinadas com --lint; execuções regulares de doctor e reparo as rejeitam.
O que ele faz (resumo)
Integridade, UI e atualizações
Integridade, UI e atualizações
- Atualização preflight opcional para instalações via git (somente interativo).
- Verificação de atualização do protocolo da UI (recria a Control UI quando o esquema do protocolo é mais recente).
- Verificação de integridade + solicitação de reinicialização.
- Resumo de status de Skills (elegíveis/ausentes/bloqueadas) e status de plugins.
Configuração e migrações
Configuração e migrações
- Normalização de configuração para valores legados.
- Migração da configuração Talk de campos planos legados
talk.*paratalk.provider+talk.providers.<provider>. - Verificações de migração do navegador para configurações legadas da extensão do Chrome e prontidão do Chrome MCP.
- Avisos de substituição de provedor OpenCode (
models.providers.opencode/models.providers.opencode-go). - Migração de provedor/perfil legado OpenAI Codex (
openai-codex→openai) e avisos de sombreamento paramodels.providers.openai-codexobsoleto. - Verificação de pré-requisitos TLS do OAuth para perfis OAuth do OpenAI Codex.
- Avisos de allowlist de plugins/ferramentas quando
plugins.allowé restritivo, mas a política de ferramentas ainda solicita curingas ou ferramentas pertencentes a plugins. - Migração de estado legado em disco (sessions/agent dir/auth do WhatsApp).
- Migração de chaves de contrato de manifesto de plugin legado (
speechProviders,realtimeTranscriptionProviders,realtimeVoiceProviders,mediaUnderstandingProviders,imageGenerationProviders,videoGenerationProviders,webFetchProviders,webSearchProviders→contracts). - Migração de armazenamento Cron legado (
jobId,schedule.cron, campos de delivery/payload no nível superior, payloadprovider, jobs de fallback de webhooknotify: true). - Limpeza de política de runtime legada do agente inteiro; a política de runtime de provedor/modelo é o seletor de rota ativo.
- Limpeza de configuração de plugin obsoleta quando plugins estão habilitados; quando
plugins.enabled=false, referências obsoletas de plugin são tratadas como configuração de contenção inerte e são preservadas.
Estado e integridade
Estado e integridade
- Inspeção de arquivos de bloqueio de sessão e limpeza de bloqueios obsoletos.
- Reparo de transcritos de sessão para branches duplicados de reescrita de prompt criados por builds 2026.4.24 afetados.
- Detecção de tombstone de recuperação por reinicialização de subagente travado, com suporte a
--fixpara limpar flags obsoletas de recuperação abortada para que a inicialização não continue tratando o filho como abortado por reinicialização. - Verificações de integridade de estado e permissões (sessões, transcritos, diretório de estado).
- Verificações de permissão do arquivo de configuração (chmod 600) ao executar localmente.
- Integridade de autenticação de modelos: verifica expiração do OAuth, pode atualizar tokens prestes a expirar e relata estados de cooldown/desabilitado do perfil de autenticação.
Gateway, serviços e supervisores
Gateway, serviços e supervisores
- Reparo de imagem de sandbox quando sandboxing está habilitado.
- Migração de serviço legado e detecção de gateway extra.
- Migração de estado legado do canal Matrix (no modo
--fix/--repair). - Verificações de runtime do Gateway (serviço instalado, mas não em execução; rótulo launchd em cache).
- Avisos de status de canal (sondados a partir do gateway em execução).
- Verificações de permissão específicas de canal ficam em
openclaw channels capabilities; por exemplo, permissões de canal de voz do Discord são auditadas comopenclaw channels capabilities --channel discord --target channel:<channel-id>. - Verificações de responsividade do WhatsApp para integridade degradada do loop de eventos do Gateway com clientes TUI locais ainda em execução;
--fixinterrompe apenas clientes TUI locais verificados. - Reparo de rota do Codex para refs de modelo legadas
openai-codex/*em modelos primários, fallbacks, modelos de geração de imagem/vídeo, substituições de heartbeat/subagente/compaction, hooks, substituições de modelo por canal e pins de rota de sessão;--fixas reescreve paraopenai/*, migra perfis/ordem de autenticaçãoopenai-codex:*paraopenai:*, remove pins obsoletos de runtime de sessão/agente inteiro e deixa refs canônicas de agentes OpenAI no harness Codex padrão. - Auditoria de configuração de supervisor (launchd/systemd/schtasks) com reparo opcional.
- Limpeza de ambiente de proxy embutido para serviços de gateway que capturaram valores de shell
HTTP_PROXY/HTTPS_PROXY/NO_PROXYdurante a instalação ou atualização. - Verificações de práticas recomendadas de runtime do Gateway (Node vs Bun, caminhos de gerenciadores de versão).
- Diagnósticos de colisão de porta do Gateway (padrão
18789).
Autenticação, segurança e pareamento
Autenticação, segurança e pareamento
- Avisos de segurança para políticas de DM abertas.
- Verificações de autenticação do Gateway para modo de token local (oferece geração de token quando nenhuma origem de token existe; não sobrescreve configurações SecretRef de token).
- Detecção de problemas de pareamento de dispositivo (solicitações pendentes de primeiro pareamento, upgrades pendentes de papel/escopo, drift obsoleto do cache local de token de dispositivo e drift de autenticação de registro pareado).
Workspace e shell
Workspace e shell
- Verificação de linger do systemd no Linux.
- Verificação de tamanho do arquivo de bootstrap do workspace (avisos de truncamento/quase limite para arquivos de contexto).
- Verificação de prontidão de Skills para o agente padrão; relata Skills permitidas com bins, env, configuração ou requisitos de SO ausentes, e
--fixpode desabilitar Skills indisponíveis emskills.entries. - Verificação de status de conclusão do shell e instalação/upgrade automático.
- Verificação de prontidão do provedor de embeddings de busca de memória (modelo local, chave de API remota ou binário QMD).
- Verificações de instalação a partir do código-fonte (incompatibilidade de workspace pnpm, assets de UI ausentes, binário tsx ausente).
- Grava configuração atualizada + metadados do assistente.
Backfill e redefinição da UI de Dreams
A cena Dreams da Control UI inclui ações Backfill, Reset e Clear Grounded para o fluxo de trabalho de grounded dreaming. Essas ações usam métodos RPC no estilo gateway doctor, mas não fazem parte do reparo/migração da CLIopenclaw doctor.
O que elas fazem:
- Backfill examina arquivos históricos
memory/YYYY-MM-DD.mdno workspace ativo, executa a passagem de diário REM fundamentado e grava entradas de backfill reversíveis emDREAMS.md. - Reset remove apenas essas entradas de diário de backfill marcadas de
DREAMS.md. - Clear Grounded remove apenas entradas preparadas de curto prazo somente fundamentadas que vieram de replay histórico e ainda não acumularam recall ao vivo ou suporte diário.
- elas não editam
MEMORY.md - elas não executam migrações completas do doctor
- elas não preparam automaticamente candidatos fundamentados no armazenamento ativo de promoção de curto prazo, a menos que você execute explicitamente o caminho preparado da CLI primeiro
DREAMS.md como a superfície de revisão.
Comportamento detalhado e justificativa
0. Atualização opcional (instalações via git)
0. Atualização opcional (instalações via git)
1. Normalização de configuração
1. Normalização de configuração
messages.ackReaction sem uma substituição específica de canal), o doctor os normaliza para o esquema atual.Isso inclui campos planos legados do Talk. A configuração pública atual de fala do Talk é talk.provider + talk.providers.<provider>, e a configuração de voz em tempo real é talk.realtime.*. O doctor reescreve formatos antigos de talk.voiceId / talk.voiceAliases / talk.modelId / talk.outputFormat / talk.apiKey no mapa de provedor e reescreve seletores legados de tempo real no nível superior (talk.mode, talk.transport, talk.brain, talk.model, talk.voice) em talk.realtime.Doctor também avisa quando plugins.allow não está vazio e a política de ferramentas usa
entradas de ferramenta curinga ou pertencentes a plugins. tools.allow: ["*"] corresponde apenas a ferramentas
de plugins que realmente carregam; ele não ignora a lista de permissões exclusiva de plugins.2. Migrações de chaves de configuração legadas
2. Migrações de chaves de configuração legadas
openclaw doctor.Doctor irá:- Explicar quais chaves legadas foram encontradas.
- Mostrar a migração que ele aplicou.
- Reescrever
~/.openclaw/openclaw.jsoncom o esquema atualizado.
openclaw doctor --fix; ela não reescreve openclaw.json na inicialização. Migrações do armazenamento de jobs Cron também são tratadas por openclaw doctor --fix.Migrações atuais:routing.allowFrom→channels.whatsapp.allowFromrouting.groupChat.requireMention→channels.whatsapp/telegram/imessage.groups."*".requireMentionrouting.groupChat.historyLimit→messages.groupChat.historyLimitrouting.groupChat.mentionPatterns→messages.groupChat.mentionPatternschannels.telegram.requireMention→channels.telegram.groups."*".requireMention- remover
channels.webchategateway.webchatretirados routing.queue→messages.queuerouting.bindings→bindingsno nível superiorrouting.agents/routing.defaultAgentId→agents.list+agents.list[].defaulttalk.voiceId/talk.voiceAliases/talk.modelId/talk.outputFormat/talk.apiKeylegados →talk.provider+talk.providers.<provider>- seletores Talk em tempo real no nível superior legados (
talk.mode/talk.transport/talk.brain/talk.model/talk.voice) +talk.provider/talk.providers→talk.realtime routing.agentToAgent→tools.agentToAgentrouting.transcribeAudio→tools.media.audio.modelsmessages.tts.<provider>(openai/elevenlabs/microsoft/edge) →messages.tts.providers.<provider>messages.tts.provider: "edge"emessages.tts.providers.edge→messages.tts.provider: "microsoft"emessages.tts.providers.microsoft- campos de seleção de falante TTS (
voice/voiceName/voiceId) →speakerVoice/speakerVoiceId channels.discord.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.voice.tts.providers.<provider>channels.discord.accounts.<id>.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.accounts.<id>.voice.tts.providers.<provider>plugins.entries.voice-call.config.tts.<provider>(openai/elevenlabs/microsoft/edge) →plugins.entries.voice-call.config.tts.providers.<provider>plugins.entries.voice-call.config.tts.provider: "edge"eplugins.entries.voice-call.config.tts.providers.edge→provider: "microsoft"eproviders.microsoftplugins.entries.voice-call.config.provider: "log"→"mock"plugins.entries.voice-call.config.twilio.from→plugins.entries.voice-call.config.fromNumberplugins.entries.voice-call.config.streaming.sttProvider→plugins.entries.voice-call.config.streaming.providerplugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold→plugins.entries.voice-call.config.streaming.providers.openai.*bindings[].match.accountID→bindings[].match.accountId- Para canais com
accountsnomeadas, mas valores de canal de nível superior de conta única remanescentes, mover esses valores com escopo de conta para a conta promovida escolhida para esse canal (accounts.defaultpara a maioria dos canais; Matrix pode preservar um destino nomeado/padrão correspondente existente) identity→agents.list[].identityagent.*→agents.defaults+tools.*(tools/elevated/exec/sandbox/subagents)agent.model/allowedModels/modelAliases/modelFallbacks/imageModelFallbacks→agents.defaults.models+agents.defaults.model.primary/fallbacks+agents.defaults.imageModel.primary/fallbacks- remover
agents.defaults.llm; usemodels.providers.<id>.timeoutSecondspara timeouts lentos de provedor/modelo e mantenha o timeout do agente/execução acima desse valor quando a execução inteira precisar durar mais browser.ssrfPolicy.allowPrivateNetwork→browser.ssrfPolicy.dangerouslyAllowPrivateNetworkbrowser.profiles.*.driver: "extension"→"existing-session"- remover
browser.relayBindHost(configuração legada de relay da extensão) models.providers.*.api: "openai"legado →"openai-completions"(a inicialização do Gateway também ignora provedores cujoapiesteja definido como um valor de enum futuro ou desconhecido, em vez de falhar de forma fechada)- remover
plugins.entries.codex.config.codexDynamicToolsProfile; o servidor de aplicativo Codex sempre mantém ferramentas de workspace nativas do Codex como nativas
- Se duas ou mais entradas
channels.<channel>.accountsestiverem configuradas semchannels.<channel>.defaultAccountouaccounts.default, o Doctor avisa que o roteamento de fallback pode escolher uma conta inesperada. - Se
channels.<channel>.defaultAccountestiver definido como um ID de conta desconhecido, o Doctor avisa e lista os IDs de conta configurados.
2b. Substituições de provedor OpenCode
2b. Substituições de provedor OpenCode
models.providers.opencode, opencode-zen ou opencode-go manualmente, isso substitui o catálogo OpenCode integrado de openclaw/plugin-sdk/llm. Isso pode forçar modelos para a API errada ou zerar custos. O Doctor avisa para que você possa remover a substituição e restaurar o roteamento de API por modelo + custos.2d. Pré-requisitos de OAuth TLS
2d. Pré-requisitos de OAuth TLS
UNABLE_TO_GET_ISSUER_CERT_LOCALLY, certificado expirado ou certificado autoassinado), o Doctor imprime orientação de correção específica da plataforma. No macOS com Node do Homebrew, a correção geralmente é brew postinstall ca-certificates. Com --deep, a sondagem é executada mesmo que o gateway esteja saudável.2e. Substituições de provedor OAuth Codex
2e. Substituições de provedor OAuth Codex
models.providers.openai-codex, elas podem sombrear o caminho integrado do provedor OAuth Codex que versões mais recentes usam automaticamente. O Doctor avisa quando vê essas configurações de transporte antigas junto com OAuth Codex para que você possa remover ou reescrever a substituição de transporte obsoleta e recuperar o comportamento integrado de roteamento/fallback. Proxies personalizados e substituições apenas de cabeçalho ainda são compatíveis e não acionam este aviso.2f. Reparo de rota Codex
2f. Reparo de rota Codex
openai-codex/* legadas. O roteamento nativo do harness Codex usa refs de modelo canônicas openai/*; turnos de agente OpenAI passam pelo harness do servidor de aplicativo Codex em vez do caminho do provedor OpenAI do OpenClaw.No modo --fix / --repair, o Doctor reescreve refs afetadas de agente padrão e por agente, incluindo modelos primários, fallbacks, modelos de geração de imagem/vídeo, substituições de heartbeat/subagente/compaction, hooks, substituições de modelo de canal e estado de rota de sessão persistido obsoleto:openai-codex/gpt-*se tornaopenai/gpt-*.- A intenção Codex se move para entradas
agentRuntime.id: "codex"com escopo de provedor/modelo para refs de modelo de agente reparadas. - Configuração de runtime de agente inteiro obsoleta e pins de runtime de sessão persistidos são removidos porque a seleção de runtime tem escopo de provedor/modelo.
- A política de runtime de provedor/modelo existente é preservada, a menos que a ref de modelo legada reparada precise de roteamento Codex para manter o caminho de autenticação antigo.
- Listas de fallback de modelo existentes são preservadas com suas entradas legadas reescritas; configurações por modelo copiadas se movem da chave legada para a chave canônica
openai/*. modelProvider/providerOverride,model/modelOverride, avisos de fallback e pins de perfil de autenticação de sessão persistidos são reparados em todos os armazenamentos de sessão de agente descobertos./codex ...significa “controlar ou vincular uma conversa nativa do Codex a partir do chat.”/acp ...ouruntime: "acp"significa “usar o adaptador externo ACP/acpx.”
2g. Limpeza de rota de sessão
2g. Limpeza de rota de sessão
openclaw doctor --fix pode limpar estado obsoleto criado automaticamente, como pins de modelo modelOverrideSource: "auto", metadados de modelo de runtime, IDs de harness fixados, vinculações de sessão CLI e substituições automáticas de perfil de autenticação quando a rota proprietária deles não estiver mais configurada. Escolhas explícitas de modelo de usuário ou de sessão legada são relatadas para revisão manual e deixadas intactas; alterne-as com /model ..., /new ou redefina a sessão quando essa rota não for mais pretendida.3. Migrações de estado legado (layout em disco)
3. Migrações de estado legado (layout em disco)
- Armazenamento de sessões + transcrições:
- de
~/.openclaw/sessions/para~/.openclaw/agents/<agentId>/sessions/
- de
- Diretório do agente:
- de
~/.openclaw/agent/para~/.openclaw/agents/<agentId>/agent/
- de
- Estado de autenticação do WhatsApp (Baileys):
- de
~/.openclaw/credentials/*.jsonlegado (excetooauth.json) - para
~/.openclaw/credentials/whatsapp/<accountId>/...(ID de conta padrão:default)
- de
openclaw doctor. A normalização de provedor/mapa de provedores do Talk agora compara por igualdade estrutural, então diffs apenas de ordem de chaves não acionam mais alterações repetidas sem efeito de doctor --fix.3a. Migrações de manifestos de Plugin legados
3a. Migrações de manifestos de Plugin legados
speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders, webSearchProviders). Quando encontradas, ele oferece movê-las para o objeto contracts e regravar o arquivo de manifesto no local. Essa migração é idempotente; se a chave contracts já tiver os mesmos valores, a chave legada será removida sem duplicar os dados.3b. Migrações do armazenamento de Cron legado
3b. Migrações do armazenamento de Cron legado
~/.openclaw/cron/jobs.json por padrão, ou cron.store quando substituído) em busca de formatos antigos de tarefas que o agendador ainda aceita por compatibilidade.As limpezas atuais de Cron incluem:jobId→idschedule.cron→schedule.expr- campos de payload de nível superior (
message,model,thinking, …) →payload - campos de entrega de nível superior (
deliver,channel,to,provider, …) →delivery - aliases de entrega de
providerno payload →delivery.channelexplícito - tarefas legadas de fallback de Webhook com
notify: true→ entrega explícita por Webhook a partir decron.webhookquando definida; tarefas de anúncio mantêm a entrega por chat e recebemdelivery.completionDestination. Quandocron.webhooknão está definido, o marcador inerte de nível superiornotifyé removido para tarefas sem destino (a entrega existente, incluindo anúncios, é preservada), já que a entrega em tempo de execução nunca o lê
jobs-quarantine.json ao lado do armazenamento ativo antes de serem removidas de jobs.json; o Doctor relata linhas em quarentena para que você possa revisá-las ou repará-las manualmente.A inicialização do Gateway normaliza a projeção de tempo de execução e ignora o marcador de nível superior notify, mas deixa a configuração persistida de Cron para reparo pelo Doctor. Quando cron.webhook não está definido, o Doctor remove o marcador inerte de tarefas sem alvo de migração (delivery.mode nenhum/ausente, um alvo de Webhook inutilizável ou entrega existente de anúncio/chat), deixando a entrega existente intacta, para que execuções repetidas de doctor --fix não voltem a avisar sobre a mesma tarefa. Se cron.webhook estiver definido, mas não for uma URL HTTP(S) válida, o Doctor ainda avisa e deixa o marcador para que você possa corrigir a URL.No Linux, o Doctor também avisa quando o crontab do usuário ainda invoca o legado ~/.openclaw/bin/ensure-whatsapp.sh. Esse script local do host não é mantido pelo OpenClaw atual e pode gravar mensagens falsas de Gateway inactive em ~/.openclaw/logs/whatsapp-health.log quando o Cron não consegue alcançar o barramento de usuário do systemd. Remova a entrada obsoleta do crontab com crontab -e; use openclaw channels status --probe, openclaw doctor e openclaw gateway status para as verificações de integridade atuais.3c. Limpeza de bloqueios de sessão
3c. Limpeza de bloqueios de sessão
--fix / --repair, ele remove automaticamente bloqueios com proprietários mortos, órfãos, reciclados, antigos malformados ou que não sejam do OpenClaw. Bloqueios antigos que ainda pertencem a um processo OpenClaw ativo são relatados, mas mantidos no lugar para que o Doctor não interrompa um gravador de transcrição ativo.3d. Reparo de ramificações de transcrição de sessão
3d. Reparo de ramificações de transcrição de sessão
--fix / --repair, o Doctor faz backup de cada arquivo afetado ao lado do original e regrava a transcrição para a ramificação ativa, para que o histórico do Gateway e os leitores de memória não vejam mais interações duplicadas.4. Verificações de integridade de estado (persistência de sessão, roteamento e segurança)
4. Verificações de integridade de estado (persistência de sessão, roteamento e segurança)
- Diretório de estado ausente: avisa sobre perda catastrófica de estado, solicita recriar o diretório e lembra que não pode recuperar dados ausentes.
- Permissões do diretório de estado: verifica a capacidade de gravação; oferece reparar permissões (e emite uma dica de
chownquando uma incompatibilidade de proprietário/grupo é detectada). - Diretório de estado sincronizado com a nuvem no macOS: avisa quando o estado resolve para iCloud Drive (
~/Library/Mobile Documents/com~apple~CloudDocs/...) ou~/Library/CloudStorage/..., porque caminhos com sincronização podem causar E/S mais lenta e corridas de bloqueio/sincronização. - Diretório de estado em SD ou eMMC no Linux: avisa quando o estado resolve para uma origem de montagem
mmcblk*, porque E/S aleatória em SD ou eMMC pode ser mais lenta e desgastar mais rapidamente sob gravações de sessão e credenciais. - Diretório de estado volátil no Linux: avisa quando o estado resolve para
tmpfsouramfs, porque sessões, credenciais, configuração e estado SQLite com seus arquivos auxiliares WAL/journal desaparecerão na reinicialização. Montagens Dockeroverlaynão são sinalizadas intencionalmente porque suas camadas graváveis persistem entre reinicializações do host enquanto o contêiner permanece. - Diretórios de sessão ausentes:
sessions/e o diretório de armazenamento de sessões são necessários para persistir histórico e evitar falhasENOENT. - Incompatibilidade de transcrição: avisa quando entradas de sessão recentes têm arquivos de transcrição ausentes.
- Sessão principal “JSONL de 1 linha”: sinaliza quando a transcrição principal tem apenas uma linha (o histórico não está acumulando).
- Múltiplos diretórios de estado: avisa quando existem várias pastas
~/.openclawem diretórios home ou quandoOPENCLAW_STATE_DIRaponta para outro lugar (o histórico pode se dividir entre instalações). - Lembrete de modo remoto: se
gateway.mode=remote, o Doctor lembra você de executá-lo no host remoto (o estado fica lá). - Permissões do arquivo de configuração: avisa se
~/.openclaw/openclaw.jsonpode ser lido por grupo/todos e oferece restringir para600.
5. Integridade de autenticação de modelos (expiração de OAuth)
5. Integridade de autenticação de modelos (expiração de OAuth)
--non-interactive pula tentativas de atualização.Quando uma atualização de OAuth falha permanentemente (por exemplo, refresh_token_reused, invalid_grant ou um provedor dizendo para você entrar novamente), o Doctor relata que a reautenticação é necessária e imprime o comando exato openclaw models auth login --provider ... a ser executado.O Doctor também relata perfis de autenticação temporariamente inutilizáveis devido a:- pausas curtas (limites de taxa/timeouts/falhas de autenticação)
- desativações mais longas (falhas de faturamento/crédito)
openclaw doctor --fix uma vez a partir de um terminal interativo para migrar tokens legados baseados no Keychain inline para auth-profiles.json; depois disso, interações incorporadas (Telegram, Cron, despacho de subagente) os resolvem como perfis OAuth canônicos da OpenAI.6. Validação de modelo de hooks
6. Validação de modelo de hooks
hooks.gmail.model estiver definido, o Doctor valida a referência de modelo contra o catálogo e a lista de permissões e avisa quando ela não resolver ou for proibida.7. Reparo de imagem de sandbox
7. Reparo de imagem de sandbox
7b. Limpeza de instalação de Plugins
7b. Limpeza de instalação de Plugins
openclaw doctor --fix / openclaw doctor --repair. Isso cobre raízes de dependência geradas obsoletas, diretórios antigos de estágio de instalação, resíduos locais de pacote de código anterior de reparo de dependências de Plugins agrupados e cópias gerenciadas de npm órfãs ou recuperadas de Plugins @openclaw/* agrupados que podem sombrear o manifesto agrupado atual. O Doctor também relinka o pacote openclaw do host em Plugins npm gerenciados que declaram peerDependencies.openclaw, para que importações de tempo de execução locais ao pacote, como openclaw/plugin-sdk/*, continuem resolvendo após atualizações ou reparos de npm.O Doctor também pode reinstalar Plugins baixáveis ausentes quando a configuração faz referência a eles, mas o registro local de Plugins não consegue encontrá-los. Exemplos incluem plugins.entries materiais, configurações de canal/provedor/busca configuradas e runtimes de agentes configurados. Durante atualizações de pacote, o Doctor evita executar reparo de Plugin por gerenciador de pacotes enquanto o pacote principal está sendo trocado; execute openclaw doctor --fix novamente após a atualização se um Plugin configurado ainda precisar de recuperação. A inicialização do Gateway e a recarga de configuração não executam gerenciadores de pacotes; instalações de Plugin permanecem trabalho explícito de doctor/install/update.8. Migrações de serviço do Gateway e dicas de limpeza
8. Migrações de serviço do Gateway e dicas de limpeza
openclaw gateway status --deep ou openclaw doctor --deep, depois remova a duplicata ou defina OPENCLAW_SERVICE_REPAIR_POLICY=external quando um supervisor do sistema possuir o ciclo de vida do Gateway.8b. Migração de inicialização do Matrix
8b. Migração de inicialização do Matrix
--fix / --repair) cria um snapshot pré-migração e então executa as etapas de migração em melhor esforço: migração de estado legado do Matrix e preparação de estado criptografado legado. Ambas as etapas não são fatais; erros são registrados e a inicialização continua. No modo somente leitura (openclaw doctor sem --fix), essa verificação é totalmente pulada.8c. Pareamento de dispositivos e desvio de autenticação
8c. Pareamento de dispositivos e desvio de autenticação
- solicitações pendentes de pareamento inicial
- upgrades de função pendentes para dispositivos já pareados
- upgrades de escopo pendentes para dispositivos já pareados
- reparos de incompatibilidade de chave pública em que o id do dispositivo ainda corresponde, mas a identidade do dispositivo não corresponde mais ao registro aprovado
- registros pareados sem um token ativo para uma função aprovada
- tokens pareados cujos escopos desviam da linha de base de pareamento aprovada
- entradas locais em cache de token de dispositivo para a máquina atual que são anteriores a uma rotação de token no lado do Gateway ou carregam metadados de escopo obsoletos
- inspecione solicitações pendentes com
openclaw devices list - aprove a solicitação exata com
openclaw devices approve <requestId> - rotacione um token novo com
openclaw devices rotate --device <deviceId> --role <role> - remova e reaprove um registro obsoleto com
openclaw devices remove <deviceId>
9. Avisos de segurança
9. Avisos de segurança
10. systemd linger (Linux)
10. systemd linger (Linux)
11. Status do workspace (Skills, plugins e TaskFlows)
11. Status do workspace (Skills, plugins e TaskFlows)
- Status das Skills: conta Skills elegíveis, com requisitos ausentes e bloqueadas pela lista de permissões.
- Status dos plugins: conta plugins habilitados/desabilitados/com erro; lista IDs de plugins para quaisquer erros; relata capacidades de plugins do pacote.
- Avisos de compatibilidade de plugins: sinaliza plugins que têm problemas de compatibilidade com o runtime atual.
- Diagnósticos de plugins: exibe quaisquer avisos ou erros em tempo de carregamento emitidos pelo registro de plugins.
- Recuperação de TaskFlow: exibe TaskFlows gerenciados suspeitos que precisam de inspeção manual ou cancelamento.
11b. Tamanho do arquivo de bootstrap
11b. Tamanho do arquivo de bootstrap
AGENTS.md, CLAUDE.md ou outros arquivos de contexto injetados) estão próximos ou acima do orçamento de caracteres configurado. Ele relata, por arquivo, contagens de caracteres brutos vs. injetados, porcentagem de truncamento, causa do truncamento (max/file ou max/total) e total de caracteres injetados como fração do orçamento total. Quando arquivos são truncados ou estão próximos do limite, doctor imprime dicas para ajustar agents.defaults.bootstrapMaxChars e agents.defaults.bootstrapTotalMaxChars.11d. Limpeza de plugin de canal obsoleto
11d. Limpeza de plugin de canal obsoleto
openclaw doctor --fix remove um plugin de canal ausente, ele também remove a configuração pendente com escopo de canal que referenciava esse plugin: entradas channels.<id>, destinos de Heartbeat que nomeavam o canal e substituições agents.*.models["<channel>/*"]. Isso evita loops de inicialização do Gateway em que o runtime do canal não existe mais, mas a configuração ainda pede que o gateway se vincule a ele.11c. Autocompletar do shell
11c. Autocompletar do shell
- Se o perfil do shell usa um padrão lento de autocompletar dinâmico (
source <(openclaw completion ...)), doctor o atualiza para a variante mais rápida de arquivo em cache. - Se o autocompletar está configurado no perfil, mas o arquivo de cache está ausente, doctor regenera o cache automaticamente.
- Se nenhum autocompletar está configurado, doctor solicita a instalação (somente no modo interativo; ignorado com
--non-interactive).
openclaw completion --write-state para regenerar o cache manualmente.12. Verificações de autenticação do Gateway (token local)
12. Verificações de autenticação do Gateway (token local)
- Se o modo de token precisa de um token e não existe nenhuma fonte de token, doctor oferece gerar um.
- Se
gateway.auth.tokené gerenciado por SecretRef, mas está indisponível, doctor avisa e não o sobrescreve com texto simples. openclaw doctor --generate-gateway-tokenforça a geração somente quando nenhum SecretRef de token está configurado.
12b. Reparos somente leitura cientes de SecretRef
12b. Reparos somente leitura cientes de SecretRef
openclaw doctor --fixagora usa o mesmo modelo de resumo de SecretRef somente leitura dos comandos da família de status para reparos de configuração direcionados.- Exemplo: o reparo de
allowFrom/groupAllowFrom@usernamedo Telegram tenta usar credenciais de bot configuradas quando disponíveis. - Se o token do bot do Telegram está configurado via SecretRef, mas indisponível no caminho do comando atual, doctor informa que a credencial está configurada, mas indisponível, e ignora a resolução automática em vez de falhar ou informar incorretamente que o token está ausente.
13. Verificação de integridade do Gateway + reinicialização
13. Verificação de integridade do Gateway + reinicialização
13b. Prontidão da busca de memória
13b. Prontidão da busca de memória
- Backend QMD: verifica se o binário
qmdestá disponível e pode ser iniciado. Caso contrário, imprime orientação de correção, incluindo o pacote npm e uma opção de caminho manual para o binário. - Provedor local explícito: verifica se há um arquivo de modelo local ou uma URL reconhecida de modelo remoto/baixável. Se ausente, sugere mudar para um provedor remoto.
- Provedor remoto explícito (
openai,voyageetc.): verifica se uma chave de API está presente no ambiente ou no armazenamento de autenticação. Imprime dicas de correção acionáveis se estiver ausente. - Provedor automático legado: trata
memorySearch.provider: "auto"como OpenAI, verifica a prontidão da OpenAI, edoctor --fixo reescreve paraprovider: "openai".
openclaw memory status --deep para verificar a prontidão de embeddings em runtime.14. Avisos de status de canal
14. Avisos de status de canal
15. Auditoria + reparo da configuração do supervisor
15. Auditoria + reparo da configuração do supervisor
network-online do systemd e atraso de reinicialização). Quando encontra uma incompatibilidade, ele recomenda uma atualização e pode reescrever o arquivo de serviço/tarefa para os padrões atuais.Observações:openclaw doctorsolicita confirmação antes de reescrever a configuração do supervisor.openclaw doctor --yesaceita os prompts de reparo padrão.openclaw doctor --fixaplica correções recomendadas sem prompts (--repairé um alias).openclaw doctor --fix --forcesobrescreve configurações personalizadas do supervisor.OPENCLAW_SERVICE_REPAIR_POLICY=externalmantém doctor somente leitura para o ciclo de vida do serviço do gateway. Ele ainda relata a integridade do serviço e executa reparos que não são de serviço, mas ignora instalação/início/reinício/bootstrap de serviço, reescritas de configuração do supervisor e limpeza de serviço legado porque um supervisor externo é dono desse ciclo de vida.- No Linux, doctor não reescreve metadados de comando/entrypoint enquanto a unidade systemd correspondente do gateway está ativa. Ele também ignora unidades extras inativas não legadas semelhantes a gateway durante a varredura de serviços duplicados, para que arquivos de serviço companheiros não criem ruído de limpeza.
- Se a autenticação por token exige um token e
gateway.auth.tokené gerenciado por SecretRef, a instalação/reparo de serviço do doctor valida o SecretRef, mas não persiste valores de token em texto simples resolvidos nos metadados de ambiente do serviço do supervisor. - Doctor detecta valores de ambiente de serviço gerenciados por
.env/baseados em SecretRef que instalações antigas de LaunchAgent, systemd ou Tarefa Agendada do Windows incorporaram inline e reescreve os metadados do serviço para que esses valores sejam carregados da fonte de runtime em vez da definição do supervisor. - Doctor detecta quando o comando de serviço ainda fixa um
--portantigo após mudanças emgateway.porte reescreve os metadados do serviço para a porta atual. - Se a autenticação por token exige um token e o SecretRef de token configurado não está resolvido, doctor bloqueia o caminho de instalação/reparo com orientação acionável.
- Se tanto
gateway.auth.tokenquantogateway.auth.passwordestão configurados egateway.auth.modenão está definido, doctor bloqueia instalação/reparo até que o modo seja definido explicitamente. - Para unidades user-systemd no Linux, as verificações de desvio de token do doctor agora incluem fontes
Environment=eEnvironmentFile=ao comparar metadados de autenticação do serviço. - Reparos de serviço do doctor se recusam a reescrever, parar ou reiniciar um serviço de gateway de um binário OpenClaw mais antigo quando a configuração foi gravada pela última vez por uma versão mais nova. Consulte Solução de problemas do Gateway.
- Você sempre pode forçar uma reescrita completa via
openclaw gateway install --force.
16. Diagnósticos de runtime + porta do Gateway
16. Diagnósticos de runtime + porta do Gateway
18789) e relata causas prováveis (gateway já em execução, túnel SSH).17. Boas práticas de runtime do Gateway
17. Boas práticas de runtime do Gateway
nvm, fnm, volta, asdf etc.). Canais WhatsApp + Telegram exigem Node, e caminhos de gerenciadores de versão podem quebrar após upgrades porque o serviço não carrega a inicialização do seu shell. Doctor oferece migrar para uma instalação de Node do sistema quando disponível (Homebrew/apt/choco).LaunchAgents do macOS recém-instalados ou reparados usam um PATH canônico do sistema (/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin) em vez de copiar o PATH do shell interativo, para que binários do sistema gerenciados pelo Homebrew continuem disponíveis enquanto Volta, asdf, fnm, pnpm e outros diretórios de gerenciadores de versão não alterem qual Node os processos filhos resolvem. Serviços Linux ainda mantêm raízes de ambiente explícitas (NVM_DIR, FNM_DIR, VOLTA_HOME, ASDF_DATA_DIR, BUN_INSTALL, PNPM_HOME) e diretórios user-bin estáveis, mas diretórios de fallback inferidos de gerenciadores de versão só são gravados no PATH do serviço quando esses diretórios existem em disco.18. Gravação de configuração + metadados do assistente
18. Gravação de configuração + metadados do assistente
19. Dicas de workspace (backup + sistema de memória)
19. Dicas de workspace (backup + sistema de memória)