openclaw doctor — это инструмент восстановления и миграции для OpenClaw. Он исправляет устаревшую конфигурацию и состояние, проверяет работоспособность и предоставляет применимые шаги восстановления.
Быстрый старт
Режимы без интерфейса и автоматизации
- --yes
- --fix
- --lint
- --fix --force
- --non-interactive
- --deep
Режим lint только для чтения
openclaw doctor --lint — это удобный для автоматизации аналог
openclaw doctor --fix. Оба используют проверки работоспособности doctor, но их режим работы
различается:
| Режим | Запросы | Записывает конфигурацию/состояние | Вывод | Для чего использовать |
|---|---|---|---|---|
openclaw doctor | да | нет | удобный отчет о состоянии | проверка состояния человеком |
openclaw doctor --fix | иногда | да, согласно политике исправлений | удобный журнал исправлений | применение одобренных исправлений |
openclaw doctor --lint | нет | нет | структурированные результаты | CI, предварительные проверки и review-gates |
repair().
doctor --fix применяет эти исправления, когда они есть, и продолжает использовать
существующий поток восстановления doctor для проверок, которые еще не были мигрированы.
Структурированный контракт восстановления также отделяет отчетность об исправлениях от обнаружения:
detect() сообщает о текущих результатах, а repair() может сообщать об изменениях,
diff конфигурации/файлов и побочных эффектах вне файлов. Это сохраняет открытым путь миграции
для будущего doctor --fix --dry-run и вывода diff, не заставляя lint-проверки
планировать мутации.
Примеры:
ok: достиг ли какой-либо видимый результат выбранного порога серьезностиchecksRun: количество выполненных проверок работоспособностиchecksSkipped: проверки, пропущенные выбранным профилем,--onlyили--skipfindings: структурированная диагностика сcheckId,severity,messageи необязательнымиpath,line,column,ocPathиfixHint
0: нет результатов на выбранном пороге или выше него1: один или несколько результатов достигли выбранного порога2: сбой команды/среды выполнения до того, как результаты lint могли быть выведены
--severity-min info|warning|error, чтобы управлять и тем, что печатается, и тем, что
вызывает ненулевой код выхода lint. Используйте --all, чтобы запускать полный набор lint-проверок,
включая более глубокие opt-in проверки, исключенные из стандартного набора автоматизации. Используйте --only <id> для узких предварительных проверок и
--skip <id>, чтобы временно исключить шумную проверку, сохранив остальную часть
lint-запуска активной.
Параметры вывода lint, такие как --json, --severity-min, --all, --only и
--skip, должны использоваться вместе с --lint; обычные запуски doctor и восстановления
их отклоняют.
Что он делает (кратко)
Работоспособность, UI и обновления
Работоспособность, UI и обновления
- Необязательное предварительное обновление для git-установок (только интерактивно).
- Проверка актуальности протокола UI (пересобирает Control UI, когда схема протокола новее).
- Проверка работоспособности и запрос на перезапуск.
- Сводка состояния Skills (доступны/отсутствуют/заблокированы) и состояние Plugin.
Конфигурация и миграции
Конфигурация и миграции
- Нормализация конфигурации для устаревших значений.
- Миграция конфигурации Talk из устаревших плоских полей
talk.*вtalk.provider+talk.providers.<provider>. - Проверки миграции браузера для устаревших конфигураций расширения Chrome и готовности Chrome MCP.
- Предупреждения о переопределении провайдера OpenCode (
models.providers.opencode/models.providers.opencode-go). - Миграция устаревшего провайдера/профиля OpenAI Codex (
openai-codex→openai) и предупреждения о затенении для устаревшегоmodels.providers.openai-codex. - Проверка предварительных условий OAuth TLS для OAuth-профилей OpenAI Codex.
- Предупреждения о allowlist Plugin/инструментов, когда
plugins.allowограничителен, но политика инструментов все еще запрашивает wildcard или инструменты, принадлежащие Plugin. - Миграция устаревшего состояния на диске (сессии/каталог агента/аутентификация WhatsApp).
- Миграция устаревших ключей контракта манифеста Plugin (
speechProviders,realtimeTranscriptionProviders,realtimeVoiceProviders,mediaUnderstandingProviders,imageGenerationProviders,videoGenerationProviders,webFetchProviders,webSearchProviders→contracts). - Миграция устаревшего хранилища cron (
jobId,schedule.cron, поля доставки/payload верхнего уровня, payloadprovider, резервные задания webhooknotify: true). - Очистка устаревшей runtime-policy для всего агента; runtime-policy провайдера/модели является активным селектором маршрута.
- Очистка устаревшей конфигурации Plugin, когда плагины включены; когда
plugins.enabled=false, устаревшие ссылки на Plugin считаются инертной containment-конфигурацией и сохраняются.
Состояние и целостность
Состояние и целостность
- Проверка lock-файлов сессий и очистка устаревших lock.
- Восстановление транскриптов сессий для дублированных веток prompt-rewrite, созданных затронутыми сборками 2026.4.24.
- Обнаружение tombstone восстановления после перезапуска зависшего subagent, с поддержкой
--fixдля очистки устаревших флагов прерванного восстановления, чтобы запуск не продолжал считать дочерний процесс restart-aborted. - Проверки целостности состояния и разрешений (сессии, транскрипты, каталог состояния).
- Проверки разрешений файла конфигурации (chmod 600) при локальном запуске.
- Работоспособность аутентификации модели: проверяет истечение OAuth, может обновлять истекающие токены и сообщает о состояниях cooldown/disabled для auth-profile.
Gateway, службы и супервизоры
Gateway, службы и супервизоры
- Восстановление образа песочницы, когда включена sandboxing.
- Миграция устаревших служб и обнаружение дополнительного Gateway.
- Миграция устаревшего состояния канала Matrix (в режиме
--fix/--repair). - Проверки среды выполнения Gateway (служба установлена, но не запущена; кэшированная метка launchd).
- Предупреждения о состоянии каналов (проверяются из работающего Gateway).
- Проверки разрешений для отдельных каналов находятся в
openclaw channels capabilities; например, разрешения голосового канала Discord проверяются с помощьюopenclaw channels capabilities --channel discord --target channel:<channel-id>. - Проверки отзывчивости WhatsApp при ухудшении здоровья event-loop Gateway, когда локальные TUI-клиенты все еще запущены;
--fixостанавливает только проверенные локальные TUI-клиенты. - Восстановление маршрутов Codex для устаревших ссылок моделей
openai-codex/*в основных моделях, fallback, моделях генерации изображений/видео, переопределениях Heartbeat/subagent/Compaction, hooks, переопределениях моделей каналов и закреплениях маршрутов сессий;--fixпереписывает их вopenai/*, мигрирует auth-профили/порядокopenai-codex:*вopenai:*, удаляет устаревшие закрепления среды выполнения сессий/всего агента и оставляет канонические ссылки агентов OpenAI на стандартном harness Codex. - Аудит конфигурации супервизора (launchd/systemd/schtasks) с необязательным исправлением.
- Очистка среды встроенного proxy для служб Gateway, которые захватили значения shell
HTTP_PROXY/HTTPS_PROXY/NO_PROXYво время установки или обновления. - Проверки лучших практик среды выполнения Gateway (Node против Bun, пути менеджеров версий).
- Диагностика конфликта порта Gateway (по умолчанию
18789).
Аутентификация, безопасность и сопряжение
Аутентификация, безопасность и сопряжение
- Предупреждения безопасности для открытых политик DM.
- Проверки аутентификации Gateway для режима локального токена (предлагает генерацию токена, когда источник токена отсутствует; не перезаписывает конфигурации token SecretRef).
- Обнаружение проблем сопряжения устройств (ожидающие первичные запросы сопряжения, ожидающие повышения роли/области, дрейф устаревшего локального кэша device-token и дрейф аутентификации paired-record).
Рабочая область и shell
Рабочая область и shell
- Проверка systemd linger в Linux.
- Проверка размера bootstrap-файла рабочей области (предупреждения об усечении/приближении к лимиту для файлов контекста).
- Проверка готовности Skills для агента по умолчанию; сообщает разрешенные навыки с отсутствующими bin, env, config или требованиями ОС, а
--fixможет отключать недоступные навыки вskills.entries. - Проверка состояния автодополнения shell и автоустановка/обновление.
- Проверка готовности провайдера embeddings для поиска в памяти (локальная модель, ключ удаленного API или бинарный файл QMD).
- Проверки установки из исходников (несоответствие pnpm workspace, отсутствующие UI-ресурсы, отсутствующий бинарный файл tsx).
- Записывает обновленную конфигурацию и метаданные мастера.
Обратное заполнение и сброс Dreams UI
Сцена Dreams в Control UI включает действия Backfill, Reset и Clear Grounded для grounded dreaming workflow. Эти действия используют RPC-методы в стиле gateway doctor, но они не являются частью CLI-восстановления/миграцииopenclaw doctor.
Что они делают:
- Backfill сканирует исторические файлы
memory/YYYY-MM-DD.mdв активной рабочей области, запускает grounded REM diary pass и записывает обратимые записи backfill вDREAMS.md. - Reset удаляет только эти помеченные записи дневника backfill из
DREAMS.md. - Clear Grounded удаляет только подготовленные краткосрочные записи только grounded, которые пришли из исторического replay и еще не накопили live recall или daily support.
- они не редактируют
MEMORY.md - они не запускают полные миграции doctor
- они не помещают автоматически grounded-кандидаты в live short-term promotion store, если вы явно не запустите сначала staged CLI path
DREAMS.md как поверхность review.
Подробное поведение и обоснование
0. Необязательное обновление (git-установки)
0. Необязательное обновление (git-установки)
1. Нормализация конфигурации
1. Нормализация конфигурации
messages.ackReaction без переопределения для конкретного канала), doctor нормализует их в текущую схему.Сюда входят устаревшие плоские поля Talk. Текущая публичная речевая конфигурация Talk — это talk.provider + talk.providers.<provider>, а конфигурация realtime voice — talk.realtime.*. Doctor переписывает старые формы talk.voiceId / talk.voiceAliases / talk.modelId / talk.outputFormat / talk.apiKey в карту провайдера и переписывает устаревшие селекторы realtime верхнего уровня (talk.mode, talk.transport, talk.brain, talk.model, talk.voice) в talk.realtime.Doctor также предупреждает, когда plugins.allow не пуст, а политика инструментов использует
wildcard или записи инструментов, принадлежащие Plugin. tools.allow: ["*"] сопоставляется только с инструментами
из Plugin, которые действительно загружены; это не обходит эксклюзивный
список разрешенных Plugin.2. Миграции устаревших ключей конфигурации
2. Миграции устаревших ключей конфигурации
openclaw doctor.Doctor выполнит следующее:- Объяснит, какие устаревшие ключи были найдены.
- Покажет примененную миграцию.
- Перезапишет
~/.openclaw/openclaw.jsonс обновленной схемой.
openclaw doctor --fix; он не перезаписывает openclaw.json при запуске. Миграции хранилища заданий Cron также выполняются через openclaw doctor --fix.Текущие миграции: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- удалить выведенные из использования
channels.webchatиgateway.webchat routing.queue→messages.queuerouting.bindings→ верхнеуровневыйbindingsrouting.agents/routing.defaultAgentId→agents.list+agents.list[].default- устаревшие
talk.voiceId/talk.voiceAliases/talk.modelId/talk.outputFormat/talk.apiKey→talk.provider+talk.providers.<provider> - устаревшие верхнеуровневые селекторы Talk в реальном времени (
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"иmessages.tts.providers.edge→messages.tts.provider: "microsoft"иmessages.tts.providers.microsoft- поля выбора говорящего 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"иplugins.entries.voice-call.config.tts.providers.edge→provider: "microsoft"иproviders.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- Для каналов с именованными
accounts, но сохраняющимися верхнеуровневыми значениями канала для одной учетной записи, переместить эти значения с областью действия учетной записи в повышенную учетную запись, выбранную для этого канала (accounts.defaultдля большинства каналов; Matrix может сохранить существующую совпадающую именованную/default-цель) 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- удалить
agents.defaults.llm; используйтеmodels.providers.<id>.timeoutSecondsдля тайм-аутов медленных провайдеров/моделей и держите тайм-аут агента/запуска выше этого значения, когда весь запуск должен длиться дольше browser.ssrfPolicy.allowPrivateNetwork→browser.ssrfPolicy.dangerouslyAllowPrivateNetworkbrowser.profiles.*.driver: "extension"→"existing-session"- удалить
browser.relayBindHost(устаревшая настройка ретранслятора расширения) - устаревшее
models.providers.*.api: "openai"→"openai-completions"(запуск Gateway также пропускает провайдеров, у которыхapiзадан как будущее или неизвестное значение enum, вместо того чтобы аварийно завершаться) - удалить
plugins.entries.codex.config.codexDynamicToolsProfile; сервер приложения Codex всегда сохраняет собственные инструменты рабочей области Codex как нативные
- Если настроены две или более записи
channels.<channel>.accountsбезchannels.<channel>.defaultAccountилиaccounts.default, doctor предупреждает, что резервная маршрутизация может выбрать неожиданную учетную запись. - Если
channels.<channel>.defaultAccountзадан как неизвестный идентификатор учетной записи, doctor предупреждает и перечисляет настроенные идентификаторы учетных записей.
2b. Переопределения провайдера OpenCode
2b. Переопределения провайдера OpenCode
models.providers.opencode, opencode-zen или opencode-go, это переопределяет встроенный каталог OpenCode из openclaw/plugin-sdk/llm. Это может принудительно направить модели на неправильный API или обнулить стоимость. Doctor предупреждает, чтобы вы могли удалить переопределение и восстановить маршрутизацию API + стоимость для каждой модели.2c. Миграция браузера и готовность Chrome MCP
2c. Миграция браузера и готовность Chrome MCP
browser.profiles.*.driver: "extension"становится"existing-session"browser.relayBindHostудаляется
defaultProfile: "user" или настроенный профиль existing-session:- проверяет, установлен ли Google Chrome на том же хосте для профилей автоматического подключения по умолчанию
- проверяет обнаруженную версию Chrome и предупреждает, если она ниже Chrome 144
- напоминает включить удаленную отладку на странице инспекции браузера (например,
chrome://inspect/#remote-debugging,brave://inspect/#remote-debuggingилиedge://inspect/#remote-debugging)
- браузер на базе Chromium 144+ на хосте gateway/node
- локально запущенный браузер
- включенную удаленную отладку в этом браузере
- подтверждение первого запроса согласия на подключение в браузере
responsebody, экспорт PDF, перехват загрузок и пакетные действия, по-прежнему требуют управляемого браузера или raw CDP-профиля.Эта проверка не применяется к Docker, sandbox, remote-browser или другим headless-потокам. Они продолжают использовать raw CDP.2d. Предварительные требования OAuth TLS
2d. Предварительные требования OAuth TLS
UNABLE_TO_GET_ISSUER_CERT_LOCALLY, истекший сертификат или самоподписанный сертификат), doctor выводит рекомендации по исправлению для конкретной платформы. На macOS с Homebrew Node исправление обычно заключается в brew postinstall ca-certificates. С --deep проверка выполняется даже если gateway исправен.2e. Переопределения провайдера Codex OAuth
2e. Переопределения провайдера Codex OAuth
models.providers.openai-codex, они могут перекрыть встроенный путь провайдера Codex OAuth, который новые выпуски используют автоматически. Doctor предупреждает, когда видит эти старые настройки транспорта рядом с Codex OAuth, чтобы вы могли удалить или переписать устаревшее переопределение транспорта и вернуть встроенное поведение маршрутизации/резервирования. Пользовательские прокси и переопределения только заголовков по-прежнему поддерживаются и не вызывают это предупреждение.2f. Восстановление маршрута Codex
2f. Восстановление маршрута Codex
openai-codex/*. Нативная маршрутизация обвязки Codex использует канонические ссылки на модели openai/*; ходы агента OpenAI проходят через обвязку сервера приложения Codex, а не через путь провайдера OpenAI в OpenClaw.В режиме --fix / --repair doctor переписывает затронутые ссылки агента по умолчанию и отдельных агентов, включая основные модели, fallback-варианты, модели генерации изображений/видео, переопределения heartbeat/subagent/compaction, hooks, переопределения моделей каналов и устаревшее сохраненное состояние маршрута сессии:openai-codex/gpt-*становитсяopenai/gpt-*.- Намерение Codex переносится в записи
agentRuntime.id: "codex"с областью действия провайдер/модель для восстановленных ссылок модели агента. - Устаревшая конфигурация среды выполнения всего агента и сохраненные привязки среды выполнения сессии удаляются, поскольку выбор среды выполнения имеет область действия провайдер/модель.
- Существующая политика среды выполнения провайдера/модели сохраняется, если только восстановленная устаревшая ссылка на модель не требует маршрутизации Codex, чтобы сохранить старый путь auth.
- Существующие списки fallback-моделей сохраняются с переписанными устаревшими записями; скопированные настройки для каждой модели переносятся из устаревшего ключа в канонический ключ
openai/*. - Сохраненные
modelProvider/providerOverride,model/modelOverride, уведомления о fallback и привязки auth-профиля сессии восстанавливаются во всех обнаруженных хранилищах сессий агентов. /codex ...означает «управлять нативным разговором Codex из чата или привязать его»./acp ...илиruntime: "acp"означает «использовать внешний адаптер ACP/acpx».
2g. Очистка маршрутов сессий
2g. Очистка маршрутов сессий
openclaw doctor --fix может очистить автоматически созданное устаревшее состояние, такое как привязки моделей modelOverrideSource: "auto", метаданные модели среды выполнения, закрепленные идентификаторы обвязок, привязки CLI-сессий и автоматические переопределения auth-профилей, когда их владеющий маршрут больше не настроен. Явные пользовательские или устаревшие выборы модели сессии сообщаются для ручной проверки и остаются без изменений; переключите их с помощью /model ..., /new или сбросьте сессию, когда этот маршрут больше не нужен.3. Миграции устаревшего состояния (разметка диска)
3. Миграции устаревшего состояния (разметка диска)
- Хранилище сессий + транскрипты:
- из
~/.openclaw/sessions/в~/.openclaw/agents/<agentId>/sessions/
- из
- Каталог агента:
- из
~/.openclaw/agent/в~/.openclaw/agents/<agentId>/agent/
- из
- Состояние auth WhatsApp (Baileys):
- из устаревших
~/.openclaw/credentials/*.json(кромеoauth.json) - в
~/.openclaw/credentials/whatsapp/<accountId>/...(идентификатор учетной записи по умолчанию:default)
- из устаревших
openclaw doctor. Нормализация провайдера/карты провайдеров Talk теперь сравнивает по структурному равенству, поэтому различия только в порядке ключей больше не вызывают повторные изменения doctor --fix без эффекта.3a. Миграции устаревших манифестов Plugin
3a. Миграции устаревших манифестов Plugin
speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders, webSearchProviders). При обнаружении он предлагает перенести их в объект contracts и переписать файл манифеста на месте. Эта миграция идемпотентна: если ключ contracts уже содержит те же значения, устаревший ключ удаляется без дублирования данных.3b. Миграции устаревшего хранилища Cron
3b. Миграции устаревшего хранилища Cron
~/.openclaw/cron/jobs.json по умолчанию или cron.store, если переопределено) на старые формы заданий, которые планировщик все еще принимает для совместимости.Текущие очистки Cron включают:jobId→idschedule.cron→schedule.expr- поля полезной нагрузки верхнего уровня (
message,model,thinking, …) →payload - поля доставки верхнего уровня (
deliver,channel,to,provider, …) →delivery - псевдонимы доставки
providerв полезной нагрузке → явныйdelivery.channel - устаревшие резервные задания Webhook с
notify: true→ явная доставка Webhook изcron.webhook, если она задана; задания announce сохраняют доставку в чат и получаютdelivery.completionDestination. Когдаcron.webhookне задан, инертный маркер верхнего уровняnotifyудаляется для заданий без цели (существующая доставка, включая announce, сохраняется), поскольку доставка во время выполнения никогда его не читает
jobs-quarantine.json рядом с активным хранилищем перед удалением из jobs.json; doctor сообщает о помещенных в карантин строках, чтобы вы могли просмотреть или исправить их вручную.Запуск Gateway нормализует проекцию времени выполнения и игнорирует маркер верхнего уровня notify, но оставляет сохраненную конфигурацию Cron для исправления через doctor. Когда cron.webhook не задан, doctor удаляет инертный маркер для заданий без цели миграции (delivery.mode none/отсутствует, непригодная цель Webhook или существующая доставка announce/chat), оставляя существующую доставку нетронутой, поэтому повторные запуски doctor --fix больше не предупреждают о том же задании. Если cron.webhook задан, но не является допустимым URL HTTP(S), doctor все равно предупреждает и оставляет маркер, чтобы вы могли исправить URL.В Linux doctor также предупреждает, когда crontab пользователя все еще вызывает устаревший ~/.openclaw/bin/ensure-whatsapp.sh. Этот локальный для хоста скрипт не поддерживается текущим OpenClaw и может записывать ложные сообщения Gateway inactive в ~/.openclaw/logs/whatsapp-health.log, когда Cron не может подключиться к пользовательской шине systemd. Удалите устаревшую запись crontab с помощью crontab -e; используйте openclaw channels status --probe, openclaw doctor и openclaw gateway status для текущих проверок состояния.3c. Очистка блокировок сеансов
3c. Очистка блокировок сеансов
--fix / --repair он автоматически удаляет блокировки с мертвыми, осиротевшими, повторно использованными, старыми некорректными владельцами или владельцами не OpenClaw. Старые блокировки, которые все еще принадлежат живому процессу OpenClaw, выводятся в отчете, но остаются на месте, чтобы doctor не отключил активный процесс записи транскрипта.3d. Исправление веток транскрипта сеанса
3d. Исправление веток транскрипта сеанса
--fix / --repair doctor создает резервную копию каждого затронутого файла рядом с оригиналом и переписывает транскрипт на активную ветку, чтобы история Gateway и считыватели памяти больше не видели дублированные ходы.4. Проверки целостности состояния (сохранение сеансов, маршрутизация и безопасность)
4. Проверки целостности состояния (сохранение сеансов, маршрутизация и безопасность)
- Каталог состояния отсутствует: предупреждает о катастрофической потере состояния, предлагает заново создать каталог и напоминает, что не может восстановить отсутствующие данные.
- Права каталога состояния: проверяет возможность записи; предлагает исправить права (и выводит подсказку
chown, когда обнаружено несоответствие владельца/группы). - Каталог состояния macOS, синхронизируемый с облаком: предупреждает, когда состояние разрешается внутри iCloud Drive (
~/Library/Mobile Documents/com~apple~CloudDocs/...) или~/Library/CloudStorage/..., потому что пути с синхронизацией могут вызывать более медленный ввод-вывод и гонки блокировок/синхронизации. - Каталог состояния Linux на SD или eMMC: предупреждает, когда состояние разрешается в источник монтирования
mmcblk*, потому что случайный ввод-вывод на SD или eMMC может быть медленнее и быстрее изнашивать носитель при записи сеансов и учетных данных. - Волатильный каталог состояния Linux: предупреждает, когда состояние разрешается в
tmpfsилиramfs, потому что сеансы, учетные данные, конфигурация и состояние SQLite с сопутствующими файлами WAL/журнала исчезнут при перезагрузке. Монтирования Dockeroverlayнамеренно не помечаются, потому что их записываемые слои сохраняются между перезагрузками хоста, пока контейнер остается. - Каталоги сеансов отсутствуют:
sessions/и каталог хранилища сеансов необходимы для сохранения истории и предотвращения сбоевENOENT. - Несоответствие транскрипта: предупреждает, когда у недавних записей сеансов отсутствуют файлы транскриптов.
- Основной сеанс “1-line JSONL”: помечает случай, когда основной транскрипт содержит только одну строку (история не накапливается).
- Несколько каталогов состояния: предупреждает, когда несколько папок
~/.openclawсуществуют в разных домашних каталогах или когдаOPENCLAW_STATE_DIRуказывает в другое место (история может разделиться между установками). - Напоминание о удаленном режиме: если
gateway.mode=remote, doctor напоминает запустить его на удаленном хосте (состояние находится там). - Права файла конфигурации: предупреждает, если
~/.openclaw/openclaw.jsonдоступен для чтения группе/всем, и предлагает ужесточить права до600.
5. Состояние аутентификации модели (истечение OAuth)
5. Состояние аутентификации модели (истечение OAuth)
--non-interactive пропускает попытки обновления.Когда обновление OAuth завершается постоянной ошибкой (например, refresh_token_reused, invalid_grant или провайдер сообщает, что нужно войти снова), doctor сообщает, что требуется повторная аутентификация, и печатает точную команду openclaw models auth login --provider ..., которую нужно выполнить.Doctor также сообщает о профилях аутентификации, которые временно непригодны из-за:- коротких периодов ожидания (лимиты частоты/тайм-ауты/сбои аутентификации)
- более длительных отключений (сбои оплаты/кредитов)
openclaw doctor --fix из интерактивного терминала, чтобы встроенно мигрировать устаревшие токены из Keychain в auth-profiles.json; после этого встроенные ходы (Telegram, Cron, диспетчеризация субагентов) разрешают их как канонические профили OAuth OpenAI.6. Проверка модели Hooks
6. Проверка модели Hooks
hooks.gmail.model задан, doctor проверяет ссылку на модель по каталогу и allowlist и предупреждает, когда она не разрешается или запрещена.7. Исправление образа песочницы
7. Исправление образа песочницы
7b. Очистка установки Plugin
7b. Очистка установки Plugin
openclaw doctor --fix / openclaw doctor --repair. Это охватывает устаревшие созданные корни зависимостей, старые каталоги этапа установки, локальный для пакета мусор от более раннего кода исправления зависимостей встроенных Plugin, а также осиротевшие или восстановленные управляемые npm-копии встроенных Plugin @openclaw/*, которые могут затенять текущий встроенный манифест. Doctor также заново связывает хост-пакет openclaw с управляемыми npm Plugin, объявляющими peerDependencies.openclaw, чтобы локальные для пакета импорты времени выполнения, такие как openclaw/plugin-sdk/*, продолжали разрешаться после обновлений или исправлений npm.Doctor также может переустановить отсутствующие загружаемые Plugin, когда конфигурация ссылается на них, но локальный реестр Plugin не может их найти. Примеры включают материальные plugins.entries, настроенные параметры канала/провайдера/поиска и настроенные среды выполнения агентов. Во время обновлений пакета doctor избегает запуска исправления Plugin через менеджер пакетов, пока основной пакет заменяется; снова запустите openclaw doctor --fix после обновления, если настроенному Plugin все еще требуется восстановление. Запуск Gateway и перезагрузка конфигурации не запускают менеджеры пакетов; установки Plugin остаются явной работой doctor/install/update.8. Миграции сервиса Gateway и подсказки по очистке
8. Миграции сервиса Gateway и подсказки по очистке
openclaw gateway status --deep или openclaw doctor --deep, затем удалите дубликат или задайте OPENCLAW_SERVICE_REPAIR_POLICY=external, когда системный супервизор управляет жизненным циклом Gateway.8b. Миграция Startup Matrix
8b. Миграция Startup Matrix
--fix / --repair) создает снимок перед миграцией, а затем выполняет шаги миграции по мере возможности: миграцию устаревшего состояния Matrix и подготовку устаревшего зашифрованного состояния. Оба шага не являются фатальными; ошибки записываются в журнал, и запуск продолжается. В режиме только чтения (openclaw doctor без --fix) эта проверка полностью пропускается.8c. Сопряжение устройств и дрейф аутентификации
8c. Сопряжение устройств и дрейф аутентификации
- ожидающие первичные запросы на сопряжение
- ожидающие повышения роли для уже сопряженных устройств
- ожидающие расширения областей доступа для уже сопряженных устройств
- исправления несоответствия открытого ключа, когда id устройства все еще совпадает, но идентичность устройства больше не соответствует одобренной записи
- сопряженные записи, у которых отсутствует активный токен для одобренной роли
- сопряженные токены, области доступа которых отклонились от одобренной базовой линии сопряжения
- локальные кэшированные записи токена устройства для текущей машины, которые предшествуют ротации токена на стороне Gateway или содержат устаревшие метаданные областей доступа
- просмотреть ожидающие запросы с помощью
openclaw devices list - одобрить точный запрос с помощью
openclaw devices approve <requestId> - ротировать свежий токен с помощью
openclaw devices rotate --device <deviceId> --role <role> - удалить и заново одобрить устаревшую запись с помощью
openclaw devices remove <deviceId>
9. Предупреждения безопасности
9. Предупреждения безопасности
10. systemd linger (Linux)
10. systemd linger (Linux)
11. Состояние рабочей области (Skills, плагины и TaskFlows)
11. Состояние рабочей области (Skills, плагины и TaskFlows)
- Состояние Skills: подсчитывает Skills, подходящие, с отсутствующими требованиями и заблокированные списком разрешений.
- Состояние Plugin: подсчитывает включенные/отключенные/ошибочные плагины; перечисляет ID плагинов для любых ошибок; сообщает возможности пакетных плагинов.
- Предупреждения совместимости Plugin: отмечает плагины, у которых есть проблемы совместимости с текущей средой выполнения.
- Диагностика Plugin: показывает любые предупреждения или ошибки времени загрузки, выданные реестром плагинов.
- Восстановление TaskFlow: показывает подозрительные управляемые TaskFlows, которые требуют ручной проверки или отмены.
11b. Размер bootstrap-файла
11b. Размер bootstrap-файла
AGENTS.md, CLAUDE.md или другие внедренные файлы контекста) близко к настроенному лимиту символов или превышают его. Он сообщает по каждому файлу количество необработанных и внедренных символов, процент усечения, причину усечения (max/file или max/total) и общее количество внедренных символов как долю общего лимита. Когда файлы усечены или близки к лимиту, doctor выводит советы по настройке agents.defaults.bootstrapMaxChars и agents.defaults.bootstrapTotalMaxChars.11d. Очистка устаревшего плагина канала
11d. Очистка устаревшего плагина канала
openclaw doctor --fix удаляет отсутствующий плагин канала, он также удаляет висящую конфигурацию в области канала, которая ссылалась на этот плагин: записи channels.<id>, цели Heartbeat, где был назван канал, и переопределения agents.*.models["<channel>/*"]. Это предотвращает циклы загрузки Gateway, когда среда выполнения канала уже отсутствует, но конфигурация все еще просит Gateway привязаться к ней.11c. Автодополнение оболочки
11c. Автодополнение оболочки
- Если профиль оболочки использует медленный динамический шаблон автодополнения (
source <(openclaw completion ...)), doctor обновляет его до более быстрого варианта с кэшированным файлом. - Если автодополнение настроено в профиле, но файл кэша отсутствует, doctor автоматически регенерирует кэш.
- Если автодополнение вообще не настроено, doctor предлагает установить его (только в интерактивном режиме; пропускается с
--non-interactive).
openclaw completion --write-state, чтобы регенерировать кэш вручную.12. Проверки аутентификации Gateway (локальный токен)
12. Проверки аутентификации Gateway (локальный токен)
- Если режим токена требует токен, а источник токена отсутствует, doctor предлагает сгенерировать его.
- Если
gateway.auth.tokenуправляется SecretRef, но недоступен, doctor предупреждает и не перезаписывает его открытым текстом. openclaw doctor --generate-gateway-tokenпринудительно генерирует токен только когда не настроен SecretRef токена.
12b. Восстановления с учетом SecretRef только для чтения
12b. Восстановления с учетом SecretRef только для чтения
openclaw doctor --fixтеперь использует ту же модель сводки SecretRef только для чтения, что и команды семейства status, для целевых исправлений конфигурации.- Пример: восстановление Telegram
allowFrom/groupAllowFrom@usernameпытается использовать настроенные учетные данные бота, когда они доступны. - Если токен бота Telegram настроен через SecretRef, но недоступен в текущем пути команды, doctor сообщает, что учетные данные настроены, но недоступны, и пропускает авторазрешение вместо сбоя или ошибочного сообщения, что токен отсутствует.
13. Проверка работоспособности Gateway + перезапуск
13. Проверка работоспособности Gateway + перезапуск
13b. Готовность поиска памяти
13b. Готовность поиска памяти
- Backend QMD: проверяет, доступен ли и запускается ли бинарный файл
qmd. Если нет, выводит рекомендации по исправлению, включая npm-пакет и вариант ручного пути к бинарному файлу. - Явный локальный провайдер: проверяет наличие локального файла модели или распознанного URL удаленной/загружаемой модели. Если он отсутствует, предлагает переключиться на удаленного провайдера.
- Явный удаленный провайдер (
openai,voyageи т. д.): проверяет наличие API-ключа в окружении или хранилище аутентификации. Выводит практичные подсказки по исправлению, если ключ отсутствует. - Устаревший автоматический провайдер: трактует
memorySearch.provider: "auto"как OpenAI, проверяет готовность OpenAI, аdoctor --fixпереписывает его вprovider: "openai".
openclaw memory status --deep, чтобы проверить готовность embeddings во время выполнения.14. Предупреждения состояния канала
14. Предупреждения состояния канала
15. Аудит и восстановление конфигурации супервизора
15. Аудит и восстановление конфигурации супервизора
openclaw doctorзапрашивает подтверждение перед перезаписью конфигурации супервизора.openclaw doctor --yesпринимает стандартные запросы на исправление.openclaw doctor --fixприменяет рекомендованные исправления без запросов (--repairявляется псевдонимом).openclaw doctor --fix --forceперезаписывает пользовательские конфигурации супервизора.OPENCLAW_SERVICE_REPAIR_POLICY=externalоставляет doctor в режиме только для чтения для жизненного цикла службы Gateway. Он по-прежнему сообщает о работоспособности службы и выполняет исправления, не связанные со службой, но пропускает установку/запуск/перезапуск/bootstrap службы, перезаписи конфигурации супервизора и очистку устаревшей службы, потому что этим жизненным циклом управляет внешний супервизор.- В Linux doctor не переписывает метаданные команды/entrypoint, пока соответствующий systemd unit Gateway активен. Он также игнорирует неактивные неустаревшие дополнительные похожие на Gateway units во время сканирования дублирующихся служб, чтобы сопутствующие файлы служб не создавали лишний шум очистки.
- Если аутентификация по токену требует токен, а
gateway.auth.tokenуправляется SecretRef, установка/восстановление службы doctor проверяет SecretRef, но не сохраняет разрешенные значения токена открытым текстом в метаданные окружения службы супервизора. - Doctor обнаруживает управляемые значения окружения службы на основе
.env/SecretRef, которые старые установки LaunchAgent, systemd или Windows Scheduled Task встроили inline, и переписывает метаданные службы так, чтобы эти значения загружались из источника среды выполнения, а не из определения супервизора. - Doctor обнаруживает, когда команда службы все еще фиксирует старый
--portпосле измененияgateway.port, и переписывает метаданные службы на текущий порт. - Если аутентификация по токену требует токен, а настроенный SecretRef токена не разрешен, doctor блокирует путь установки/восстановления с практичными рекомендациями.
- Если настроены и
gateway.auth.token, иgateway.auth.password, аgateway.auth.modeне задан, doctor блокирует установку/восстановление, пока режим не будет задан явно. - Для пользовательских units systemd в Linux проверки дрейфа токена doctor теперь учитывают источники и
Environment=, иEnvironmentFile=при сравнении метаданных аутентификации службы. - Восстановления службы doctor отказываются переписывать, останавливать или перезапускать службу Gateway из более старого бинарного файла OpenClaw, когда конфигурация в последний раз была записана более новой версией. См. Устранение неполадок Gateway.
- Вы всегда можете принудительно выполнить полную перезапись через
openclaw gateway install --force.
16. Диагностика среды выполнения Gateway + порта
16. Диагностика среды выполнения Gateway + порта
18789) и сообщает вероятные причины (Gateway уже запущен, SSH-туннель).17. Лучшие практики среды выполнения Gateway
17. Лучшие практики среды выполнения Gateway
nvm, fnm, volta, asdf и т. д.). Каналам WhatsApp + Telegram требуется Node, а пути менеджеров версий могут ломаться после обновлений, потому что служба не загружает инициализацию вашей оболочки. Doctor предлагает миграцию на системную установку Node, когда она доступна (Homebrew/apt/choco).Новоустановленные или восстановленные macOS LaunchAgents используют канонический системный PATH (/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin) вместо копирования PATH интерактивной оболочки, поэтому системные бинарные файлы, управляемые Homebrew, остаются доступны, а Volta, asdf, fnm, pnpm и другие каталоги менеджеров версий не меняют, какой Node разрешают дочерние процессы. Службы Linux по-прежнему сохраняют явные корни окружения (NVM_DIR, FNM_DIR, VOLTA_HOME, ASDF_DATA_DIR, BUN_INSTALL, PNPM_HOME) и стабильные пользовательские bin-каталоги, но предполагаемые резервные каталоги менеджеров версий записываются в PATH службы только когда эти каталоги существуют на диске.18. Запись конфигурации + метаданные мастера
18. Запись конфигурации + метаданные мастера
19. Советы по рабочей области (резервное копирование + система памяти)
19. Советы по рабочей области (резервное копирование + система памяти)