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-гейтів |
repair().
doctor --fix застосовує ці ремонти, коли вони існують, і продовжує використовувати
наявний потік ремонту doctor для перевірок, які ще не мігровано.
Структурований контракт ремонту також відокремлює звітування про ремонт від виявлення:
detect() повідомляє про поточні знахідки, тоді як repair() може повідомляти про зміни,
відмінності конфігурації/файлів і нефайлові побічні ефекти. Це залишає шлях міграції відкритим
для майбутніх doctor --fix --dry-run і виводу відмінностей, не змушуючи 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 і ремонту
відхиляють їх.
Що він робить (підсумок)
Health, UI, and updates
Health, UI, and updates
- Необов’язкове попереднє оновлення для git-встановлень (лише інтерактивно).
- Перевірка актуальності UI-протоколу (перезбирає Control UI, коли схема протоколу новіша).
- Перевірка справності + запит на перезапуск.
- Підсумок стану Skills (придатні/відсутні/заблоковані) і стан Plugin.
Config and migrations
Config and migrations
- Нормалізація конфігурації для застарілих значень.
- Міграція конфігурації 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 для профілів OpenAI Codex OAuth.
- Попередження allowlist Plugin/інструментів, коли
plugins.allowобмежувальний, але політика інструментів усе ще просить wildcard або інструменти, якими володіє Plugin. - Міграція застарілого стану на диску (sessions/agent dir/автентифікація WhatsApp).
- Міграція застарілих ключів контракту маніфесту Plugin (
speechProviders,realtimeTranscriptionProviders,realtimeVoiceProviders,mediaUnderstandingProviders,imageGenerationProviders,videoGenerationProviders,webFetchProviders,webSearchProviders→contracts). - Міграція застарілого сховища cron (
jobId,schedule.cron, поля доставки/навантаження верхнього рівня, payloadprovider, резервні webhook-завданняnotify: true). - Очищення застарілої runtime-політики всього агента; runtime-політика провайдера/моделі є активним селектором маршруту.
- Очищення застарілої конфігурації Plugin, коли plugins увімкнено; коли
plugins.enabled=false, застарілі посилання Plugin трактуються як інертна конфігурація стримування й зберігаються.
State and integrity
State and integrity
- Перевірка файлів блокування сесій і очищення застарілих блокувань.
- Ремонт транскриптів сесій для дубльованих гілок переписування промптів, створених ураженими збірками 2026.4.24.
- Виявлення tombstone для відновлення після перезапуску завислого subagent, з підтримкою
--fixдля очищення застарілих aborted recovery flags, щоб startup не продовжував трактувати child як restart-aborted. - Перевірки цілісності стану та дозволів (сесії, транскрипти, каталог стану).
- Перевірки дозволів файлу конфігурації (chmod 600) під час локального запуску.
- Справність автентифікації моделі: перевіряє строк дії OAuth, може оновлювати токени, строк яких спливає, і повідомляє про стани cooldown/disabled auth-профілю.
Gateway, services, and supervisors
Gateway, services, and supervisors
- Ремонт образу пісочниці, коли sandboxing увімкнено.
- Міграція застарілого сервісу та виявлення додаткових gateway.
- Міграція застарілого стану каналу Matrix (у режимі
--fix/--repair). - Runtime-перевірки Gateway (сервіс встановлено, але не запущено; кешована launchd-мітка).
- Попередження про стан каналу (пробуються із запущеного gateway).
- Перевірки дозволів для конкретних каналів містяться в
openclaw channels capabilities; наприклад, дозволи голосового каналу Discord перевіряються за допомогоюopenclaw channels capabilities --channel discord --target channel:<channel-id>. - Перевірки чутливості WhatsApp для погіршеного стану event-loop Gateway із локальними TUI-клієнтами, що все ще працюють;
--fixзупиняє лише перевірені локальні TUI-клієнти. - Ремонт маршруту Codex для застарілих refs моделей
openai-codex/*в основних моделях, fallback-моделях, моделях генерації зображень/відео, перевизначеннях heartbeat/subagent/compaction, hooks, перевизначеннях моделей каналів і pins маршрутів сесій;--fixпереписує їх наopenai/*, мігрує auth-профілі/порядокopenai-codex:*доopenai:*, видаляє застарілі runtime pins сесії/всього агента та залишає канонічні refs агентів OpenAI на типовому Codex harness. - Аудит конфігурації супервізора (launchd/systemd/schtasks) з необов’язковим ремонтом.
- Очищення середовища вбудованого proxy для gateway-сервісів, які захопили значення shell
HTTP_PROXY/HTTPS_PROXY/NO_PROXYпід час встановлення або оновлення. - Перевірки найкращих практик runtime Gateway (Node проти Bun, шляхи version-manager).
- Діагностика конфліктів порту Gateway (типово
18789).
Auth, security, and pairing
Auth, security, and pairing
- Попередження безпеки для відкритих політик DM.
- Перевірки автентифікації Gateway для режиму локального токена (пропонує генерацію токена, коли немає джерела токена; не перезаписує конфігурації token SecretRef).
- Виявлення проблем pairing пристрою (очікувані запити першого pairing, очікувані оновлення ролі/обсягу, дрейф застарілого кешу локального device-token і дрейф автентифікації paired-record).
Workspace and shell
Workspace and shell
- Перевірка systemd linger у Linux.
- Перевірка розміру bootstrap-файлу робочого простору (попередження про обрізання/наближення до ліміту для context-файлів).
- Перевірка готовності Skills для типового агента; повідомляє дозволені skills із відсутніми bins, env, config або вимогами ОС, а
--fixможе вимкнути недоступні skills уskills.entries. - Перевірка стану shell completion і автоматичне встановлення/оновлення.
- Перевірка готовності провайдера embeddings для пошуку пам’яті (локальна модель, ключ віддаленого API або QMD-бінарник).
- Перевірки встановлення з вихідного коду (невідповідність pnpm workspace, відсутні UI assets, відсутній tsx-бінарник).
- Записує оновлену конфігурацію + метадані wizard.
Backfill і reset у Dreams UI
Сцена Control UI Dreams містить дії Backfill, Reset і Clear Grounded для grounded dreaming workflow. Ці дії використовують RPC-методи в стилі gateway doctor, але вони не є частиною ремонту/міграції CLIopenclaw doctor.
Що вони роблять:
- Backfill сканує історичні файли
memory/YYYY-MM-DD.mdв активному робочому просторі, запускає grounded REM diary pass і записує оборотні backfill-записи вDREAMS.md. - Reset видаляє з
DREAMS.mdлише ці позначені backfill diary entries. - Clear Grounded видаляє лише staged grounded-only short-term entries, які походять з історичного replay і ще не накопичили live recall або daily support.
- вони не редагують
MEMORY.md - вони не запускають повні міграції doctor
- вони не додають автоматично grounded candidates у live short-term promotion store, якщо ви явно не запустите спочатку staged CLI path
DREAMS.md поверхнею для review.
Детальна поведінка та обґрунтування
0. Optional update (git installs)
0. Optional update (git installs)
1. Config normalization
1. Config normalization
messages.ackReaction без перевизначення для конкретного каналу), doctor нормалізує їх у поточну схему.Це включає застарілі плоскі поля Talk. Поточна публічна конфігурація мовлення Talk — це talk.provider + talk.providers.<provider>, а realtime voice config — 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.Діагностика також попереджає, коли plugins.allow непорожній, а політика інструментів використовує
wildcard або записи інструментів, що належать Plugin. tools.allow: ["*"] відповідає лише інструментам
із Plugin, які фактично завантажуються; він не обходить ексклюзивний
список дозволених Plugin.2. Міграції застарілих ключів конфігурації
2. Міграції застарілих ключів конфігурації
openclaw 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→bindingsверхнього рівняrouting.agents/routing.defaultAgentId→agents.list+agents.list[].default- застарілі
talk.voiceId/talk.voiceAliases/talk.modelId/talk.outputFormat/talk.apiKey→talk.provider+talk.providers.<provider> - застарілі селектори Talk realtime верхнього рівня (
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 може зберегти наявну відповідну іменовану/типову ціль) 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, діагностика попереджає, що резервна маршрутизація може вибрати неочікуваний обліковий запис. - Якщо
channels.<channel>.defaultAccountвстановлено на невідомий ID облікового запису, діагностика попереджає та перелічує налаштовані ID облікових записів.
2b. Перевизначення постачальника OpenCode
2b. Перевизначення постачальника OpenCode
models.providers.opencode, opencode-zen або opencode-go, це перевизначає вбудований каталог OpenCode з openclaw/plugin-sdk/llm. Це може примусово спрямувати моделі на неправильний API або обнулити витрати. Діагностика попереджає, щоб ви могли видалити перевизначення й відновити маршрутизацію 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, прострочений сертифікат або самопідписаний сертифікат), діагностика друкує платформозалежні поради щодо виправлення. На macOS із Homebrew Node виправленням зазвичай є brew postinstall ca-certificates. З --deep перевірка виконується навіть тоді, коли gateway справний.2e. Перевизначення постачальника Codex OAuth
2e. Перевизначення постачальника Codex OAuth
models.providers.openai-codex, вони можуть затіняти вбудований шлях постачальника Codex OAuth, який новіші випуски використовують автоматично. Діагностика попереджає, коли бачить ці старі налаштування транспорту поруч із Codex OAuth, щоб ви могли видалити або переписати застаріле перевизначення транспорту й повернути вбудовану маршрутизацію/резервну поведінку. Користувацькі проксі та перевизначення лише заголовків усе ще підтримуються й не спричиняють цього попередження.2f. Відновлення маршруту Codex
2f. Відновлення маршруту Codex
openai-codex/*. Нативна маршрутизація harness Codex використовує канонічні посилання на моделі openai/*; ходи агента OpenAI проходять через harness сервера застосунку Codex замість шляху постачальника OpenAI в OpenClaw.У режимі --fix / --repair діагностика переписує зачеплені посилання типового агента та окремих агентів, зокрема основні моделі, резервні моделі, моделі генерації зображень/відео, перевизначення heartbeat/subagent/compaction, hooks, перевизначення моделей каналів і застарілий збережений стан маршрутів сеансів:openai-codex/gpt-*стаєopenai/gpt-*.- Намір Codex переноситься до записів
agentRuntime.id: "codex"в області постачальника/моделі для відновлених посилань на моделі агента. - Застаріла конфігурація runtime для всього агента та збережені прив’язки runtime сеансів видаляються, оскільки вибір runtime прив’язаний до постачальника/моделі.
- Наявна політика runtime постачальника/моделі зберігається, якщо відновлене застаріле посилання на модель не потребує маршрутизації Codex, щоб зберегти старий шлях автентифікації.
- Наявні списки резервних моделей зберігаються з переписаними застарілими записами; скопійовані налаштування окремих моделей переносяться із застарілого ключа до канонічного ключа
openai/*. - Збережені сеансові
modelProvider/providerOverride,model/modelOverride, сповіщення про резервні варіанти та прив’язки профілів автентифікації відновлюються в усіх виявлених сховищах сеансів агентів. /codex ...означає “керувати або прив’язати нативну розмову Codex із чату.”/acp ...абоruntime: "acp"означає “використовувати зовнішній адаптер ACP/acpx.”
2g. Очищення маршрутів сеансів
2g. Очищення маршрутів сеансів
openclaw doctor --fix може очистити автоматично створений застарілий стан, як-от прив’язки моделей modelOverrideSource: "auto", метадані runtime моделей, закріплені ID harness, прив’язки сеансів CLI та автоматичні перевизначення профілів автентифікації, коли їхній власний маршрут більше не налаштований. Явні користувацькі або застарілі вибори моделей сеансу повідомляються для ручної перевірки й залишаються без змін; перемкніть їх за допомогою /model ..., /new або скиньте сеанс, коли цей маршрут більше не потрібен.3. Міграції застарілого стану (структура на диску)
3. Міграції застарілого стану (структура на диску)
- Сховище сеансів + транскрипти:
- з
~/.openclaw/sessions/до~/.openclaw/agents/<agentId>/sessions/
- з
- Каталог агента:
- з
~/.openclaw/agent/до~/.openclaw/agents/<agentId>/agent/
- з
- Стан автентифікації WhatsApp (Baileys):
- із застарілих
~/.openclaw/credentials/*.json(крімoauth.json) - до
~/.openclaw/credentials/whatsapp/<accountId>/...(ID типового облікового запису:default)
- із застарілих
openclaw doctor. Нормалізація постачальника/мапи постачальників Talk тепер порівнює за структурною рівністю, тому відмінності лише в порядку ключів більше не запускають повторні noop-зміни 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, коли задано; завдання оголошень зберігають свою доставку в чат і отримуютьdelivery.completionDestination. Колиcron.webhookне задано, інертний маркер верхнього рівняnotifyвидаляється для завдань без цілі (наявна доставка, включно з оголошеннями, зберігається), оскільки доставка під час виконання ніколи його не читає
jobs-quarantine.json поруч з активним сховищем перед видаленням із jobs.json; doctor повідомляє про рядки в карантині, щоб ви могли переглянути або виправити їх вручну.Запуск Gateway нормалізує проєкцію часу виконання й ігнорує маркер верхнього рівня notify, але залишає збережену конфігурацію Cron для виправлення doctor. Коли cron.webhook не задано, doctor видаляє інертний маркер для завдань без цілі міграції (delivery.mode none/відсутній, непридатна ціль Webhook або наявна доставка оголошення/чату), залишаючи наявну доставку без змін, тому повторні запуски 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/..., бо шляхи з синхронізацією можуть спричиняти повільніший I/O і перегони блокування/синхронізації. - Каталог стану Linux на SD або eMMC: попереджає, коли стан розміщується на джерелі монтування
mmcblk*, бо випадковий I/O на 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 також повідомляє про профілі автентифікації, які тимчасово непридатні через:- короткі cooldowns (обмеження частоти/тайм-аути/збої автентифікації)
- довші вимкнення (збої білінгу/кредитів)
openclaw doctor --fix один раз з інтерактивного термінала, щоб мігрувати застарілі токени з Keychain безпосередньо в auth-profiles.json; після цього вбудовані ходи (Telegram, Cron, dispatch під-агента) розв’язують їх як канонічні профілі OpenAI OAuth.6. Валідація моделі hooks
6. Валідація моделі hooks
hooks.gmail.model задано, doctor перевіряє посилання на модель за каталогом і allowlist та попереджає, коли воно не розв’яжеться або заборонене.7. Виправлення образу sandbox
7. Виправлення образу sandbox
7b. Очищення встановлення Plugin
7b. Очищення встановлення Plugin
openclaw doctor --fix / openclaw doctor --repair. Це охоплює застарілі згенеровані корені залежностей, старі каталоги етапу встановлення, локальні для пакета залишки від попереднього коду виправлення залежностей bundled-plugin, а також осиротілі або відновлені керовані npm-копії bundled @openclaw/* plugins, які можуть затіняти поточний bundled маніфест. Doctor також повторно зв’язує хостовий пакет openclaw у керовані npm plugins, які оголошують peerDependencies.openclaw, щоб локальні для пакета імпорти часу виконання, як-от openclaw/plugin-sdk/*, продовжували розв’язуватися після оновлень або виправлень npm.Doctor також може перевстановлювати відсутні завантажувані plugins, коли конфігурація посилається на них, але локальний реєстр Plugin не може їх знайти. Приклади включають матеріальні plugins.entries, налаштовані параметри каналу/провайдера/пошуку та налаштовані середовища виконання агентів. Під час оновлень пакета doctor уникає запуску виправлення Plugin через package manager, доки core package замінюється; запустіть openclaw doctor --fix знову після оновлення, якщо налаштований Plugin усе ще потребує відновлення. Запуск Gateway і перезавантаження конфігурації не запускають package managers; встановлення Plugin залишаються явною роботою doctor/install/update.8. Міграції служби Gateway і підказки з очищення
8. Міграції служби Gateway і підказки з очищення
openclaw gateway status --deep або openclaw doctor --deep, потім видаліть дублікат або задайте OPENCLAW_SERVICE_REPAIR_POLICY=external, коли системний supervisor володіє життєвим циклом Gateway.8b. Міграція Startup Matrix
8b. Міграція Startup Matrix
--fix / --repair) створює знімок перед міграцією, а потім виконує best-effort кроки міграції: міграцію застарілого стану Matrix і підготовку застарілого зашифрованого стану. Обидва кроки не є фатальними; помилки журналюються, і запуск продовжується. У режимі лише читання (openclaw doctor без --fix) ця перевірка повністю пропускається.8c. Сполучення пристроїв і дрейф автентифікації
8c. Сполучення пристроїв і дрейф автентифікації
- очікувані запити першого сполучення
- очікувані підвищення ролі для вже сполучених пристроїв
- очікувані підвищення scope для вже сполучених пристроїв
- виправлення невідповідності public-key, коли id пристрою все ще збігається, але ідентичність пристрою більше не відповідає схваленому запису
- сполучені записи, яким бракує активного токена для схваленої ролі
- сполучені токени, чиї scopes відхиляються від схваленої базової лінії сполучення
- локальні кешовані записи device-token для поточної машини, які передують ротації токена на боці Gateway або містять застарілі метадані scope
- переглянути очікувані запити за допомогою
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, plugins і TaskFlows)
11. Стан робочої області (skills, plugins і TaskFlows)
- Стан Skills: рахує eligible, missing-requirements і allowlist-blocked skills.
- Стан Plugin: рахує enabled/disabled/errored plugins; перелічує ID plugins для будь-яких помилок; повідомляє можливості bundle plugin.
- Попередження сумісності Plugin: позначає plugins, які мають проблеми сумісності з поточним runtime.
- Діагностика Plugin: показує будь-які попередження або помилки під час завантаження, видані реєстром plugin.
- Відновлення TaskFlow: показує підозрілі керовані TaskFlows, які потребують ручної перевірки або скасування.
11b. Розмір bootstrap-файлу
11b. Розмір bootstrap-файлу
AGENTS.md, CLAUDE.md або інші інжектовані файли контексту) наближаються до налаштованого бюджету символів або перевищують його. Він повідомляє для кожного файлу сирі та інжектовані кількості символів, відсоток обрізання, причину обрізання (max/file або max/total) і загальну кількість інжектованих символів як частку від загального бюджету. Коли файли обрізано або вони близькі до ліміту, doctor друкує поради щодо налаштування agents.defaults.bootstrapMaxChars і agents.defaults.bootstrapTotalMaxChars.11d. Очищення застарілого channel plugin
11d. Очищення застарілого channel plugin
openclaw doctor --fix видаляє відсутній channel plugin, він також видаляє завислу конфігурацію з областю дії каналу, яка посилалася на цей plugin: записи channels.<id>, цілі Heartbeat, які називали канал, і перевизначення agents.*.models["<channel>/*"]. Це запобігає циклам завантаження Gateway, коли runtime каналу зник, але конфігурація все ще просить gateway прив’язатися до нього.11c. Автодоповнення shell
11c. Автодоповнення shell
- Якщо профіль shell використовує повільний динамічний шаблон автодоповнення (
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: перевіряє, чи доступний і запускний binary
qmd. Якщо ні, друкує вказівки для виправлення, зокрема npm package і опцію ручного шляху до binary. - Явний локальний provider: перевіряє наявність локального файлу моделі або розпізнаної URL віддаленої/завантажуваної моделі. Якщо бракує, пропонує перемкнутися на віддалений provider.
- Явний віддалений provider (
openai,voyageтощо): перевіряє, що API key наявний у середовищі або auth store. Друкує дієві підказки для виправлення, якщо його бракує. - Застарілий auto provider: трактує
memorySearch.provider: "auto"як OpenAI, перевіряє готовність OpenAI, аdoctor --fixпереписує це наprovider: "openai".
openclaw memory status --deep, щоб перевірити готовність embedding під час runtime.14. Попередження про стан каналу
14. Попередження про стан каналу
15. Аудит конфігурації supervisor + ремонт
15. Аудит конфігурації supervisor + ремонт
openclaw doctorзапитує підтвердження перед переписуванням конфігурації supervisor.openclaw doctor --yesприймає типові запити на ремонт.openclaw doctor --fixзастосовує рекомендовані виправлення без запитів (--repairє псевдонімом).openclaw doctor --fix --forceперезаписує власні конфігурації supervisor.OPENCLAW_SERVICE_REPAIR_POLICY=externalзберігає doctor у режимі лише для читання для життєвого циклу сервісу gateway. Він усе ще повідомляє про працездатність сервісу й запускає ремонти, не пов’язані із сервісом, але пропускає install/start/restart/bootstrap сервісу, переписування конфігурації supervisor і очищення legacy service, оскільки цей життєвий цикл належить зовнішньому supervisor.- У Linux doctor не переписує command/entrypoint metadata, доки відповідний systemd gateway unit активний. Він також ігнорує неактивні non-legacy додаткові gateway-like units під час сканування duplicate-service, щоб супутні service files не створювали шум очищення.
- Якщо token auth потребує токена, а
gateway.auth.tokenкерується SecretRef, install/repair сервісу doctor перевіряє SecretRef, але не зберігає розв’язані plaintext token values у metadata середовища supervisor service. - Doctor виявляє керовані значення середовища сервісу на основі
.env/SecretRef, які старіші встановлення LaunchAgent, systemd або Windows Scheduled Task вбудували inline, і переписує metadata сервісу так, щоб ці значення завантажувалися з runtime source замість визначення supervisor. - Doctor виявляє, коли command сервісу все ще фіксує старий
--portпісля зміниgateway.port, і переписує metadata сервісу на поточний порт. - Якщо token auth потребує токена, а налаштований токен SecretRef не розв’язано, doctor блокує шлях install/repair з дієвими вказівками.
- Якщо одночасно налаштовано
gateway.auth.tokenіgateway.auth.password, аgateway.auth.modeне встановлено, doctor блокує install/repair, доки режим не буде встановлено явно. - Для Linux user-systemd units перевірки дрейфу токена doctor тепер включають джерела і
Environment=, іEnvironmentFile=під час порівняння auth metadata сервісу. - Ремонти сервісу doctor відмовляються переписувати, зупиняти або перезапускати сервіс gateway зі старішого binary OpenClaw, коли конфігурацію востаннє записала новіша версія. Див. Усунення несправностей Gateway.
- Ви завжди можете примусово виконати повне переписування через
openclaw gateway install --force.
16. Діагностика runtime Gateway + порту
16. Діагностика runtime Gateway + порту
18789) і повідомляє ймовірні причини (gateway уже запущено, SSH tunnel).17. Найкращі практики runtime Gateway
17. Найкращі практики runtime Gateway
nvm, fnm, volta, asdf тощо). Канали WhatsApp + Telegram потребують Node, а шляхи менеджера версій можуть ламатися після оновлень, бо сервіс не завантажує ваш shell init. Doctor пропонує мігрувати на системне встановлення Node, коли воно доступне (Homebrew/apt/choco).Нововстановлені або відремонтовані macOS LaunchAgents використовують канонічний системний PATH (/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin) замість копіювання PATH інтерактивного shell, тож системні binary, керовані Homebrew, залишаються доступними, тоді як каталоги Volta, asdf, fnm, pnpm та інших менеджерів версій не змінюють, який Node розв’язують дочірні процеси. Сервіси Linux все ще зберігають явні корені середовища (NVM_DIR, FNM_DIR, VOLTA_HOME, ASDF_DATA_DIR, BUN_INSTALL, PNPM_HOME) і стабільні user-bin directories, але вгадані fallback directories менеджера версій записуються до PATH сервісу лише тоді, коли ці каталоги існують на диску.18. Запис конфігурації + metadata майстра
18. Запис конфігурації + metadata майстра
19. Поради щодо робочої області (резервна копія + система пам’яті)
19. Поради щодо робочої області (резервна копія + система пам’яті)