openclaw doctor
Перевірки стану + швидкі виправлення для Gateway і каналів.
Пов’язано:
- Усунення несправностей: Усунення несправностей
- Аудит безпеки: Безпека
Навіщо Це Використовувати
openclaw doctor — це поверхня перевірки стану OpenClaw. Використовуйте її, коли Gateway,
канали, плагіни, Skills, маршрутизація моделей, локальний стан або міграції конфігурації
працюють не так, як очікується, і вам потрібна одна команда, яка може пояснити, що
не так.
Doctor має три режими:
| Режим | Команда | Поведінка |
|---|---|---|
| Огляд | openclaw doctor | Перевірки, орієнтовані на людину, і керовані підказки. |
| Ремонт | openclaw doctor --fix | Застосовує підтримувані виправлення, використовуючи підказки, якщо безпечний неінтерактивний ремонт неможливий. |
| Lint | openclaw doctor --lint | Структуровані знахідки лише для читання для CI, попередніх перевірок і review gates. |
--lint, коли автоматизації потрібен стабільний результат. Надавайте перевагу --fix, коли
оператор-людина свідомо хоче, щоб doctor редагував конфігурацію або стан.
Приклади
doctor:
Опції
--no-workspace-suggestions: вимкнути пропозиції пам’яті/пошуку робочого простору--yes: приймати значення за замовчуванням без запитів--repair: застосувати рекомендовані ремонти, не пов’язані із сервісами, без запитів; встановлення та перезаписи сервісу Gateway все ще потребують інтерактивного підтвердження або явних команд Gateway--fix: псевдонім для--repair--force: застосувати агресивні ремонти, включно з перезаписом користувацької конфігурації сервісу за потреби--non-interactive: запуск без запитів; лише безпечні міграції та ремонти, не пов’язані із сервісами--generate-gateway-token: згенерувати й налаштувати токен Gateway--allow-exec: дозволити doctor виконувати налаштовані exec SecretRefs під час перевірки секретів--deep: сканувати системні сервіси на наявність додаткових встановлень Gateway і повідомляти про нещодавні передачі перезапуску супервізора Gateway--lint: запускати модернізовані перевірки стану в режимі лише для читання та виводити діагностичні знахідки--post-upgrade: запускати post-upgrade probes сумісності плагінів; виводить знахідки до stdout; завершується з кодом 1, якщо є будь-які знахідки рівня error--json: з--lintвиводити JSON-знахідки замість виводу для людини; з--post-upgradeвиводити машинозчитувану JSON-обгортку ({ probesRun, findings })--severity-min <level>: з--lintвідкидати знахідки нижчеinfo,warningабоerror--all: з--lintзапускати всі зареєстровані перевірки, включно з opt-in перевірками, виключеними з типового набору автоматизації--skip <id>: з--lintпропустити id перевірки; повторіть, щоб пропустити більше ніж одну--only <id>: з--lintзапустити лише id перевірки; повторіть, щоб запустити невеликий вибраний набір
Режим Lint
openclaw doctor --lint — це режим автоматизації лише для читання для перевірок doctor.
Він використовує структурований шлях health-check, не показує підказок і не ремонтує
та не переписує конфігурацію/стан. Використовуйте його в CI, скриптах попередньої перевірки та workflow review,
коли вам потрібні машинозчитувані знахідки замість керованих підказок ремонту.
Опції lint-виводу, як-от --json, --severity-min, --all, --only і --skip,
приймаються лише з --lint.
0: немає знахідок на вибраному порозі серйозності або вище1: принаймні одна знахідка відповідає вибраному порогу2: збій команди/середовища виконання до того, як можна створити lint-знахідки
--severity-min керує як видимими знахідками, так і порогом виходу. Наприклад,
openclaw doctor --lint --severity-min error може не надрукувати жодних знахідок і
вийти з 0, навіть коли існують знахідки нижчої серйозності info або warning.
--all керує тим, які перевірки вибираються до фільтрації за серйозністю. Типовий
lint-запуск є стабільним gate автоматизації та виключає перевірки, які
навмисно є opt-in, бо вони глибокі, історичні або з більшою ймовірністю
виявляють ремонтопридатні legacy-залишки. Використовуйте --all, коли вам потрібен повний lint
інвентар без перелічення кожного id перевірки. --only <id> залишається найточнішим
селектором і може запускати будь-яку зареєстровану перевірку за id.
Структуровані Перевірки Стану
Сучасні перевірки doctor використовують невеликий структурований контракт:detect() живить doctor --lint. repair() є необов’язковим і розглядається лише
doctor --fix / doctor --repair. Перевірки, які ще не мігрували до цієї
форми, продовжують використовувати legacy потік внеску doctor.
Цей поділ навмисний: detect() відповідає за діагностику, тоді як repair() відповідає за
звітування про те, що він змінив або змінив би. Контексти ремонту можуть нести
запити dryRun/diff, а результати ремонту можуть повертати структуровані diffs для
редагувань конфігурації/файлів плюс effects для сервісу, процесу, пакета, стану або інших
побічних ефектів. Це дає змогу конвертованим перевіркам розвиватися в напрямку doctor --fix --dry-run
і звітування diff без перенесення планування мутацій у detect().
repair() повідомляє, чи він спробував запитаний ремонт, через status: "repaired" | "skipped" | "failed". Пропущений статус означає repaired, тому простим
перевіркам ремонту потрібно повертати лише зміни. Коли repair повертає skipped або
failed, doctor повідомляє причину й не запускає валідацію для цієї перевірки.
Після успішного структурованого ремонту doctor повторно запускає detect() зі
виправленими знахідками як scope. Перевірки можуть використовувати вибрані знахідки, шляхи або значення ocPath
для сфокусованої валідації. Якщо знахідка все ще присутня, doctor повідомляє
попередження ремонту замість того, щоб мовчки вважати зміну завершеною.
Знахідка містить:
| Поле | Призначення |
|---|---|
checkId | Стабільний id для фільтрів skip/only і allowlists CI. |
severity | info, warning або error. |
message | Людинозчитуване формулювання проблеми. |
path | Конфігураційний, файловий або логічний шлях, коли доступний. |
line / column | Розташування в джерелі, коли доступне. |
ocPath | Точна адреса oc://, коли перевірка може вказати на неї. |
fixHint | Запропонована дія оператора або підсумок ремонту. |
doctor / doctor --fix. Спільний структурований
health registry є точкою розширення: bundled і plugin-backed перевірки запускаються
після core перевірок doctor, щойно їхній пакет-власник реєструє їх в активному
шляху команди. Підшлях openclaw/plugin-sdk/health надає той самий
контракт для цих споживачів розширень.
Вибір Перевірок
Використовуйте--only і --skip, коли workflow потрібен сфокусований gate:
--only і --skip приймають повні id перевірок і можуть повторюватися. Якщо id --only
не зареєстрований, для цього id не запускається жодна перевірка; використовуйте поля команди checksRun
і checksSkipped, щоб перевірити, що сфокусований gate вибирає ті перевірки, які ви
очікуєте.
Режим Post-upgrade
openclaw doctor --post-upgrade запускає probes сумісності плагінів, призначені для
ланцюжкового запуску після збірки або оновлення. Знахідки виводяться до stdout; команда
завершується з кодом 1, якщо будь-яка знахідка має level: "error". Додайте --json, щоб отримати
машинозчитувану обгортку ({ probesRun, findings }), придатну для CI,
спільнотного skill fork-upgrade та інших post-upgrade smoke інструментів. Якщо
індекс встановлених плагінів відсутній або має неправильний формат, режим JSON усе одно виводить цю
обгортку зі знахідкою помилки plugin.index_unavailable.
Примітки:
- У режимі Nix (
OPENCLAW_NIX_MODE=1) перевірки doctor лише для читання все ще працюють, алеdoctor --fix,doctor --repair,doctor --yesіdoctor --generate-gateway-tokenвимкнені, боopenclaw.jsonє незмінним. Натомість відредагуйте джерело Nix для цього встановлення; для nix-openclaw використовуйте agent-first Швидкий старт. - Інтерактивні запити (наприклад, виправлення keychain/OAuth) запускаються лише тоді, коли stdin є TTY і не задано
--non-interactive. Запуски без інтерфейсу (cron, Telegram, без термінала) пропускатимуть запити. - Продуктивність: неінтерактивні запуски
doctorпропускають завчасне завантаження plugin, щоб перевірки стану без інтерфейсу залишалися швидкими. Інтерактивні сесії doctor все ще завантажують поверхні plugin, потрібні для застарілого потоку перевірки стану й ремонту. --lintсуворіший за--non-interactive: він завжди лише для читання, ніколи не показує запитів і ніколи не застосовує безпечні міграції. Запускайтеdoctor --fixабоdoctor --repair, коли хочете, щоб doctor вносив зміни.- За замовчуванням doctor не виконує
execSecretRefs під час перевірки секретів. Використовуйтеopenclaw doctor --allow-execабоopenclaw doctor --lint --allow-execлише тоді, коли ви навмисно хочете, щоб doctor запускав ці налаштовані резолвери секретів. --fix(псевдонім для--repair) записує резервну копію в~/.openclaw/openclaw.json.bakі відкидає невідомі ключі конфігурації, перелічуючи кожне видалення.- Модернізовані перевірки стану можуть надавати шлях
repair()дляdoctor --fix; перевірки, які його не надають, продовжують виконуватися через наявний потік ремонту doctor. doctor --fix --non-interactiveповідомляє про відсутні або застарілі визначення служби gateway, але не встановлює й не перезаписує їх поза режимом ремонту оновлення. Запустітьopenclaw gateway installдля відсутньої служби абоopenclaw gateway install --force, коли навмисно хочете замінити launcher.- Перевірки цілісності стану тепер виявляють осиротілі файли transcript у каталозі sessions. Їх архівування як
.deleted.<timestamp>потребує інтерактивного підтвердження;--fix,--yesі запуски без інтерфейсу залишають їх на місці. - Doctor також сканує
~/.openclaw/cron/jobs.json(абоcron.store) на наявність застарілих форм завдань cron і переписує їх перед імпортом канонічних рядків у SQLite. - Doctor повідомляє про завдання cron з явними перевизначеннями
payload.model, включно з підрахунками просторів імен provider і невідповідностями щодоagents.defaults.model, щоб заплановані завдання, які не успадковують модель за замовчуванням, були видимими під час розслідувань auth або billing. - У Linux doctor попереджає, коли crontab користувача все ще запускає застарілий
~/.openclaw/bin/ensure-whatsapp.sh; цей скрипт більше не підтримується й може журналювати хибні збої WhatsApp gateway, коли cron не має середовища systemd user-bus. - Коли WhatsApp увімкнено, doctor перевіряє деградований цикл подій Gateway із локальними клієнтами
openclaw-tui, які все ще працюють.doctor --fixзупиняє лише перевірені локальні клієнти TUI, щоб відповіді WhatsApp не ставали в чергу за застарілими циклами оновлення TUI. - Doctor переписує застарілі посилання моделей
openai-codex/*на канонічні посиланняopenai/*у primary models, fallbacks, моделях генерації зображень/відео, перевизначеннях heartbeat/subagent/compaction, hooks, перевизначеннях моделей каналів і застарілих session route pins.--fixтакож мігрує застарілі auth-профіліopenai-codex:*і записиauth.order.openai-codexдоopenai:*, переносить намір Codex у записиagentRuntime.id: "codex"з областю provider/model, видаляє застарілі whole-agent/session runtime pins і залишає виправлені посилання агентів OpenAI на маршрутизації Codex auth замість прямої auth через OpenAI API-key. - Doctor очищає застарілий проміжний стан залежностей plugin, створений старішими версіями OpenClaw, і повторно зв’язує пакет хоста
openclawдля керованих npm plugins, які оголошують його peer dependency. Він також ремонтує відсутні завантажувані plugins, на які посилається конфігурація, як-отplugins.entries, налаштовані канали, налаштовані provider/search settings або налаштовані agent runtimes. Під час оновлень пакетів doctor пропускає ремонт plugins через package-manager, доки заміна пакета не завершиться; після цього повторно запустітьopenclaw doctor --fix, якщо налаштований plugin усе ще потребує відновлення. Якщо завантаження не вдається, doctor повідомляє про помилку встановлення й зберігає налаштований запис plugin для наступної спроби ремонту. - Doctor ремонтує застарілу конфігурацію plugin, видаляючи відсутні plugin ids з
plugins.allow/plugins.deny/plugins.entries, а також відповідну висячу конфігурацію каналів, heartbeat targets і перевизначення моделей каналів, коли виявлення plugin працює справно. - Doctor ізолює недійсну конфігурацію plugin, вимикаючи відповідний запис
plugins.entries.<id>і видаляючи його недійсне навантаженняconfig. Запуск Gateway уже пропускає лише цей несправний plugin, щоб інші plugins і канали могли продовжувати роботу. - Установіть
OPENCLAW_SERVICE_REPAIR_POLICY=external, коли інший супервізор керує життєвим циклом gateway. Doctor і далі повідомляє про стан gateway/service і застосовує ремонти, не пов’язані зі службами, але пропускає service install/start/restart/bootstrap і очищення застарілих служб. - У Linux doctor ігнорує неактивні додаткові systemd units, схожі на gateway, і не переписує метадані command/entrypoint для запущеної systemd gateway service під час ремонту. Спершу зупиніть службу або використайте
openclaw gateway install --force, коли навмисно хочете замінити активний launcher. - Doctor автоматично мігрує застарілу пласку конфігурацію Talk (
talk.voiceId,talk.modelIdта подібні) уtalk.provider+talk.providers.<provider>. - Повторні запуски
doctor --fixбільше не повідомляють і не застосовують нормалізацію Talk, коли єдина різниця полягає в порядку ключів об’єкта. - Doctor включає перевірку готовності memory-search і може рекомендувати
openclaw configure --section model, коли бракує облікових даних embedding. - Doctor попереджає, коли не налаштовано власника команд. Власник команд — це обліковий запис людини-оператора, якому дозволено запускати команди лише для власника й затверджувати небезпечні дії. З’єднання через DM лише дозволяє комусь спілкуватися з ботом; якщо ви схвалили відправника до появи bootstrap першого власника, явно задайте
commands.ownerAllowFrom. - Doctor повідомляє інформаційну примітку, коли налаштовано агентів у режимі Codex і в Codex home оператора є особисті ресурси Codex CLI. Локальні запуски Codex app-server використовують ізольовані home для кожного агента, тому за потреби спершу встановіть Codex plugin, а потім використайте
openclaw migrate plan codex, щоб інвентаризувати ресурси, які слід просувати навмисно. - Doctor видаляє вилучений
plugins.entries.codex.config.codexDynamicToolsProfile; Codex app-server завжди залишає нативні інструменти workspace Codex нативними. - Doctor попереджає, коли skills, дозволені для агента за замовчуванням, недоступні в поточному runtime-середовищі через відсутні bins, env vars, config або вимоги ОС.
doctor --fixможе вимкнути ці недоступні skills за допомогоюskills.entries.<skill>.enabled=false; натомість установіть або налаштуйте відсутню вимогу, якщо хочете залишити skill активним. - Якщо режим sandbox увімкнено, але Docker недоступний, doctor повідомляє високосигнальне попередження з діями для виправлення (
install Dockerабоopenclaw config set agents.defaults.sandbox.mode off). - Якщо наявні застарілі файли реєстру sandbox або каталоги shards (
~/.openclaw/sandbox/containers.json,~/.openclaw/sandbox/browsers.json,~/.openclaw/sandbox/containers/або~/.openclaw/sandbox/browsers/), doctor повідомляє про них;openclaw doctor --fixмігрує дійсні записи в SQLite і ізолює недійсні застарілі файли. - Якщо
gateway.auth.token/gateway.auth.passwordкеруються SecretRef і недоступні в поточному шляху команди, doctor повідомляє попередження лише для читання й не записує plaintext fallback credentials. Для SecretRefs на основі exec doctor пропускає виконання, якщо немає--allow-exec. - Якщо інспекція SecretRef каналу не вдається у шляху виправлення, doctor продовжує роботу й повідомляє попередження замість дострокового виходу.
- Після міграцій каталогу стану doctor попереджає, коли ввімкнені облікові записи Telegram або Discord за замовчуванням залежать від env fallback, а
TELEGRAM_BOT_TOKENабоDISCORD_BOT_TOKENнедоступні процесу doctor. - Автоматичне розв’язання імен користувачів Telegram
allowFrom(doctor --fix) потребує розв’язуваного токена Telegram у поточному шляху команди. Якщо інспекція токена недоступна, doctor повідомляє попередження й пропускає автоматичне розв’язання для цього проходу.
macOS: перевизначення env launchctl
Якщо ви раніше запускали launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (або ...PASSWORD), це значення перевизначає ваш конфігураційний файл і може спричиняти постійні помилки “unauthorized”.