CLI commands
Діагностика
openclaw doctor
Перевірки працездатності та швидкі виправлення для Gateway, каналів, плагінів, навичок, маршрутизації моделей, локального стану й міграцій конфігурації. Використовуйте цю команду, коли щось працює не так, як очікується, і потрібно однією командою з’ясувати причину.
Пов’язані матеріали:
- Усунення несправностей: Усунення несправностей
- Аудит безпеки: Безпека
Режими
Doctor має п’ять режимів:
| Режим | Команда | Поведінка |
|---|---|---|
| Перевірка | openclaw doctor |
Орієнтовані на людину перевірки та інтерактивні підказки. |
| Виправлення | openclaw doctor --fix |
Застосовує підтримувані виправлення, використовуючи підказки, якщо неінтерактивне виправлення небезпечне. |
| Лінтинг | openclaw doctor --lint |
Структуровані результати лише для читання для CI, попередніх перевірок і контрольних етапів рев’ю. |
| Обслуговування спільної SQLite | openclaw doctor --state-sqlite compact |
Явно створює контрольну точку, ущільнює та перевіряє канонічну БД спільного стану. |
| Міграція SQLite сеансів | openclaw doctor --session-sqlite <mode> |
Перевіряє, імпортує, валідує, ущільнює, відновлює або повертає стан сеансів. |
Віддавайте перевагу --lint, коли автоматизації потрібен стабільний результат. Віддавайте перевагу --fix, коли оператор хоче, щоб doctor змінив конфігурацію або стан.
Приклади
openclaw doctoropenclaw doctor --lintopenclaw doctor --lint --jsonopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --deepopenclaw doctor --fixopenclaw doctor --fix --non-interactiveopenclaw doctor --generate-gateway-tokenopenclaw doctor --post-upgradeopenclaw doctor --post-upgrade --jsonopenclaw doctor --state-sqlite compactopenclaw doctor --state-sqlite compact --jsonopenclaw doctor --session-sqlite inspect --session-sqlite-all-agentsopenclaw doctor --session-sqlite dry-run --session-sqlite-agent main --jsonopenclaw doctor --session-sqlite import --session-sqlite-all-agentsopenclaw doctor --session-sqlite validate --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite compact --session-sqlite-all-agentsopenclaw doctor --session-sqlite recover --github-issueopenclaw doctor --session-sqlite restore --session-sqlite-all-agentsДля дозволів, специфічних для каналу, замість doctor використовуйте зондування каналів:
openclaw channels capabilities --channel discord --target channel:<channel-id>openclaw channels status --probechannels capabilities повідомляє фактичні дозволи бота для конкретного цільового каналу. channels status --probe перевіряє всі налаштовані канали та цілі автоматичного приєднання до голосових каналів.
Параметри
| Параметр | Результат |
|---|---|
--no-workspace-suggestions |
Вимикає пропозиції щодо пам’яті та пошуку в робочому просторі. |
--yes |
Приймає стандартні значення без запитів. |
--repair / --fix |
Застосовує рекомендовані виправлення, не пов’язані зі службами, без запитів (--fix — псевдонім). Установлення або перезапис служб Gateway однаково потребують інтерактивного підтвердження чи явних команд gateway. |
--force |
Застосовує агресивні виправлення, зокрема перезапис користувацької конфігурації служби. |
--non-interactive |
Запускається без запитів; лише безпечні міграції та виправлення, не пов’язані зі службами. |
--generate-gateway-token |
Створює та налаштовує токен Gateway. |
--allow-exec |
Дозволяє doctor виконувати налаштовані SecretRefs exec під час перевірки секретів. |
--deep |
Сканує системні служби на наявність додаткових установлень Gateway; повідомляє про нещодавні передавання керування перезапуском диспетчером Gateway. |
--lint |
Запускає модернізовані перевірки працездатності в режимі лише для читання та виводить діагностичні результати. |
--post-upgrade |
Запускає перевірки сумісності плагінів після оновлення; результати надсилаються в стандартний вивід; код завершення 1, якщо наявний хоча б один результат рівня помилки. |
--state-sqlite <mode> |
Запускає явне обслуговування SQLite спільного стану. Єдиний режим — compact. |
--session-sqlite <mode> |
Запускає цільовий режим міграції SQLite сеансів: inspect, dry-run, import, validate, compact, recover або restore. |
--session-sqlite-store <path> |
З --session-sqlite: вибирає один шлях до застарілого сховища sessions.json. |
--session-sqlite-agent <id> |
З --session-sqlite: вибирає одного налаштованого агента. |
--session-sqlite-all-agents |
З --session-sqlite: вибирає налаштовані та виявлені сховища агентів. |
--github-issue |
З --session-sqlite recover: готує очищений звіт про проблему в openclaw/openclaw; doctor створює його за допомогою gh після --yes або інтерактивного підтвердження. |
--json |
З --lint: результати у форматі JSON. З --post-upgrade: { probesRun, findings }. З --state-sqlite або --session-sqlite: звіт про обслуговування у форматі JSON. |
--severity-min <level> |
З --lint: відкидає результати нижче за info, warning або error. |
--all |
З --lint: запускає всі зареєстровані перевірки, зокрема перевірки з явним увімкненням, виключені зі стандартного набору. |
--skip <id> |
З --lint: пропускає перевірку за ідентифікатором. Можна повторювати. |
--only <id> |
З --lint: запускає лише перевірки із заданими ідентифікаторами. Можна повторювати. |
--severity-min, --all, --only і --skip приймаються лише разом із --lint; --json приймається з --lint, --post-upgrade, --state-sqlite і --session-sqlite.
Режим лінтингу
openclaw doctor --lint працює лише для читання: без запитів, виправлень і перезапису конфігурації чи стану.
openclaw doctor --lintopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --jsonopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min infoВивід для людини стислий:
doctor --lint: виконано 6 перевірок, виявлено 1 результат [warning] core/doctor/gateway-config gateway.mode - gateway.mode не задано; запуск gateway буде заблоковано. виправлення: Виконайте `openclaw configure` і задайте режим Gateway (local/remote) або виконайте `openclaw config set gateway.mode local`.Вивід JSON — це інтерфейс для сценаріїв:
{ "ok": false, "checksRun": 5, "checksSkipped": 0, "findings": [ { "checkId": "core/doctor/gateway-config", "severity": "warning", "message": "gateway.mode не задано; запуск gateway буде заблоковано.", "path": "gateway.mode", "fixHint": "Виконайте `openclaw configure` і задайте режим Gateway (local/remote) або виконайте `openclaw config set gateway.mode local`." } ]}Коди завершення:
| Код | Значення |
|---|---|
0 |
Немає результатів із вибраним або вищим рівнем серйозності. |
1 |
Принаймні один результат відповідає вибраному порогу. |
2 |
Помилка команди або середовища виконання до отримання результатів лінтингу. |
--severity-min визначає як результати, що виводяться, так і поріг завершення: openclaw doctor --lint --severity-min error може нічого не вивести й завершитися з кодом 0, навіть якщо наявні результати нижчого рівня серйозності info/warning.
--all визначає, які перевірки вибираються до фільтрування за рівнем серйозності. Стандартний запуск лінтингу виключає глибокі й історичні перевірки, а також перевірки, що частіше виявляють застарілі залишки, які можна виправити; використовуйте --all для повного переліку. --only <id> — найточніший селектор, який може запускати будь-яку зареєстровану перевірку за ідентифікатором.
core/doctor/local-audio-acceleration повідомляє автоматично вибрану локальну команду STT, окремі свідчення щодо придатного, запитаного й виявленого бекендів, а також порядок резервних варіантів без завантаження моделі розпізнавання мовлення. Вона створює інформаційний результат, тому для його відображення додайте --severity-min info.
Структуровані перевірки працездатності
Сучасні перевірки doctor використовують невеликий розділений контракт:
detect(ctx, scope?) -> HealthFinding[]repair?(ctx, findings) -> HealthRepairResultdetect() забезпечує роботу doctor --lint. repair() необов’язковий і запускається лише за doctor --fix / doctor --repair. Перевірки, які ще не перенесено на цю структуру, досі використовують застарілий механізм внесків doctor.
Контексти виправлення можуть містити запити dryRun/diff; результати виправлення можуть повертати структуровані diffs (зміни конфігурації або файлів) і effects (побічні ефекти для служб, процесів, пакетів, стану тощо), тому перетворені перевірки можуть розвиватися в напрямку doctor --fix --dry-run, не переносячи планування змін у detect().
repair() повідомляє status: "repaired" | "skipped" | "failed" (якщо статус пропущено, мається на увазі repaired). Коли виправлення повертає skipped або failed, doctor повідомляє причину та пропускає перевірку для цієї діагностики. Після успішного виправлення doctor повторно запускає detect() лише для виправлених результатів; якщо проблему все ще виявлено, doctor повідомляє попередження про виправлення, а не вважає зміну завершеною.
Результат перевірки містить:
| Поле | Призначення |
|---|---|
checkId |
Стабільний ідентифікатор для фільтрів пропуску/вибору та списків дозволів CI. |
severity |
info, warning або error. |
message |
Зрозумілий для людини опис проблеми. |
path |
Шлях до конфігурації, файлу або логічний шлях, якщо доступний. |
line / column |
Розташування у вихідному коді, якщо доступне. |
ocPath |
Точна адреса oc://, якщо перевірка може на неї указати. |
fixHint |
Рекомендована дія оператора або стислий опис виправлення. |
Модернізовані основні перевірки doctor залишаються прив’язаними до впорядкованого внеску doctor, якому належить їхня поведінка doctor / doctor --fix для користувача. Спільний структурований реєстр стану системи є точкою розширення: вбудовані перевірки та перевірки на основі Plugin виконуються після основних перевірок doctor, щойно пакети-власники зареєструють їх в активному шляху команди. openclaw/plugin-sdk/health надає той самий контракт авторам Plugin.
Вибір перевірок
openclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --skip core/doctor/skills-readinessopenclaw doctor --lint --all --skip core/doctor/session-locks--only та --skip приймають повні ідентифікатори перевірок і можуть бути вказані кілька разів. Якщо ідентифікатор --only не зареєстровано, для нього не виконується жодна перевірка; скористайтеся checksRun/checksSkipped у виводі, щоб підтвердити, що цільовий шлюз вибирає очікувані перевірки.
Режим після оновлення
openclaw doctor --post-upgrade запускає перевірки сумісності Plugin для послідовного виконання після збирання або оновлення. Результати виводяться у stdout; код завершення дорівнює 1, якщо будь-який результат має level: "error". Додайте --json для машинозчитуваної оболонки ({ probesRun, findings }), придатної для CI, спільнотного вміння fork-upgrade та інших засобів швидкої перевірки після оновлення. Якщо індекс установлених Plugin відсутній або має неправильний формат, режим JSON усе одно виводить оболонку з результатом помилки plugin.index_unavailable.
Запуск образу контейнера є винятком зі звичайного процесу «запустити doctor після
оновлення». Коли openclaw gateway run запускається з новою версією OpenClaw, він
виконує безпечні виправлення стану та Plugin, перш ніж повідомити про готовність. Якщо виправлення неможливо
безпечно завершити, запуск припиняється з указівкою один раз запустити той самий образ із
openclaw doctor --fix для того самого змонтованого стану/конфігурації, перш ніж
перезапустити контейнер у звичайному режимі.
Compaction спільного стану SQLite
openclaw doctor --state-sqlite compact — це явне автономне обслуговування
канонічної бази даних спільного стану за адресою
<state-dir>/state/openclaw.sqlite. Команда не приймає довільний шлях до бази
даних, ніколи не викликається під час звичайної роботи Gateway і не є частиною
openclaw doctor --fix. Команда отримує те саме блокування володіння станом, що й
запуск Gateway, і утримує його під час перевірки, створення контрольної точки, VACUUM та
остаточних перевірок цілісності. Вона відмовляється виконуватися, поки Gateway або інша
команда обслуговування SQLite володіє цим блокуванням. Блокування стану залишається активним, коли
OPENCLAW_ALLOW_MULTI_GATEWAY=1 пропускає окремий екземпляр Gateway для кожної конфігурації, тож
оболонці оператора не потрібно успадковувати середовище служби Gateway, щоб
виявити її під час обслуговування.
Спочатку зупиніть Gateway і створіть перевірену резервну копію:
openclaw gateway stopopenclaw backup create --verifyopenclaw doctor --state-sqlite compact --jsonopenclaw gateway startКоманда:
- Вимагає звичайний файл за канонічним шляхом спільного стану. Відсутню
базу даних позначено як
skipped, і команда успішно завершує роботу. - Перевіряє поточну підтримувану версію схеми та
schema_meta.role = "global"перед створенням контрольної точки або зміною файлу. - Вимагає, щоб
wal_checkpoint(TRUNCATE)не був зайнятий. Зупиніть усі інші процеси OpenClaw і повторіть спробу, якщо контрольна точка зайнята. - Установлює
auto_vacuumуINCREMENTAL, повністю виконуєVACUUMі знову створює контрольну точку. - Виконує
quick_check,integrity_checkтаforeign_key_check, а потім повторно застосовує дозволи лише для власника до бази даних і бічних файлів SQLite.
У виводі JSON зазначено розміри бази даних і WAL, кількість сторінок у списку вільних сторінок, розмір сторінки та
значення auto_vacuum до й після Compaction, а також кількість звільнених байтів і
результати quick_check та integrity_check. foreign_key_check застосовується
за принципом безпечної відмови та не має окремого поля успішності. SQLite повідомляє auto_vacuum як
0 для відсутнього, 1 для повного та 2 для інкрементного режиму.
Compaction завершується невдало без змін, якщо схема застаріла, новіша за
запущену збірку OpenClaw або належить базі даних агента. Спочатку запустіть
openclaw doctor --fix для застарілої схеми спільного стану. Відновіть
сумісну резервну копію або оновіть OpenClaw для новішої схеми.
Міграція SQLite сеансів
OpenClaw автоматично імпортує застарілі рядки сеансів та історію транскриптів до бази даних
SQLite кожного агента під час запуску Gateway та під час
openclaw doctor --fix. openclaw doctor --session-sqlite <mode> — це
цільовий засіб перевірки та валідації цієї міграції. Поточні рядки сеансів середовища виконання
зберігаються в
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite. Застарілі
файли sessions.json є джерелами міграції. Активні файли транскриптів JSONL
імпортуються та переміщуються до архіву за межі активного каталогу сеансів після успішного
імпорту; архівні файли JSONL залишаються артефактами підтримки, а не резервними
джерелами середовища виконання.
Режими:
| Режим | Поведінка |
|---|---|
inspect |
Зчитує кількість застарілих записів і записів SQLite, а також файлів JSONL без посилань, без імпортування. |
dry-run |
Аналізує застарілі записи та файли транскриптів JSONL, підраховує рядки, придатні для імпорту, і повідомляє про проблеми без запису рядків SQLite. |
import |
Імпортує застарілі записи та події транскриптів до SQLite для вибраних цілей. |
validate |
Порівнює вибрані застарілі джерела з рядками SQLite та кількістю подій транскриптів. |
compact |
Створює контрольні точки та виконує VACUUM для вибраних баз даних SQLite агентів, щоб звільнити вільні сторінки після значних видалень або очищення архіву. |
recover |
Відновлює останній невдалий запуск міграції, перевіряє його цілі та готує очищений звіт для проблеми GitHub. |
restore |
Відновлює заархівовані артефакти транскриптів із записаних маніфестів міграції без видалення даних SQLite. |
Селектори:
- Типово: налаштоване сховище агента за замовчуванням, якщо файл цього застарілого сховища існує.
--session-sqlite-agent <id>: один налаштований агент.--session-sqlite-all-agents: налаштовані та виявлені сховища агентів.--session-sqlite-store <path>: один явно вказаний застарілий шляхsessions.json.
Послідовність ручної перевірки:
openclaw doctor --session-sqlite inspect --session-sqlite-all-agentsopenclaw doctor --session-sqlite dry-run --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite import --session-sqlite-all-agentsopenclaw doctor --session-sqlite validate --session-sqlite-all-agents --jsonopenclaw doctor --session-sqlite compact --session-sqlite-all-agentsopenclaw doctor --session-sqlite recover --github-issueСтворіть резервну копію каталогу стану OpenClaw перед запуском import в інсталяції з
важливою історією. validate завершується з ненульовим кодом, якщо вибраний застарілий запис
відсутній у SQLite, ідентифікатор сеансу відрізняється або кількість подій транскрипту відрізняється.
Під час використання --session-sqlite-store <path> переконайтеся, що звіт містить
очікувану кількість цілей; явно вказаний неіснуючий шлях до сховища не вибирає жодної цілі.
Після видалення SQLite спочатку звільняє сторінки всередині бази даних; це не обов’язково
негайно зменшує файл бази даних. Після видалення або архівування великих
транскриптів запустіть openclaw doctor --session-sqlite compact --session-sqlite-all-agents,
щоб створити контрольні точки файлів WAL, виконати VACUUM і повідомити розміри бази даних та WAL
до й після операції. Для Compaction потрібен звичайний файл із поточною схемою агента,
стійкими метаданими власника вибраного агента та без відкритого дескриптора в процесі
doctor. Деструктивні режими import, compact, recover та restore
утримують те саме блокування володіння станом, що й запуск Gateway, протягом усієї операції;
inspect, dry-run та validate залишаються лише для читання й не отримують його. Спочатку зупиніть
Gateway. Деструктивні режими завершуються невдало замість конфлікту з активними операціями запису або
іншою командою обслуговування. Ціль деструктивного режиму --session-sqlite-store
має бути всередині активного каталогу стану; установіть OPENCLAW_STATE_DIR у
каталог стану, якому належить сховище, перш ніж обслуговувати іншу інсталяцію.
Наявні цілі з жорсткими посиланнями відхиляються, оскільки інший шлях може спільно використовувати
той самий inode бази даних за межами заблокованого каталогу стану. Ті самі перевірки
володіння охоплюють WAL SQLite, спільну пам’ять і бічні файли журналу відкочування.
Кожен імпорт записує маніфест у
~/.openclaw/session-sqlite-migration-runs/, перш ніж перемістити артефакти транскриптів
до архіву. Якщо запуск повідомляє про невдалу міграцію SQLite сеансів після
переміщення артефактів, запустіть відновлення:
openclaw doctor --session-sqlite recover --github-issueВідновлення вибирає останній невдалий маніфест міграції, відновлює лише
заархівовані артефакти з маніфесту, перевіряє відповідні цілі, оновлює
очищені звіти .failure.md та .failure.json і готує текст проблеми GitHub,
який не містить вмісту транскриптів, необробленого середовища, секретів і необмеженої
конфігурації. Якщо маніфест невдалої міграції відсутній, але вибрана база даних SQLite
агента пошкоджена, не є базою даних або має бічні файли журналу без основної
бази даних, відновлення копіює повний набір файлів до тимчасового каталогу
перевірки. SQLite може відкотити чинний активний журнал у цій одноразовій копії
перед виконанням quick_check, integrity_check та foreign_key_check, тоді як
оригінальні файли для судової експертизи залишаються незміненими. Невдалі перевірки цілісності або осиротілі
бічні файли зберігають файли DB, WAL, SHM та журналу відкочування, перейменовуючи
весь виявлений набір з одним суфіксом .corrupt-<timestamp>. Перехоплена помилка
перейменування повертає вже переміщені файли на місце до повідомлення про помилку, тому
відновлюваний набір файлів не буде непомітно розділено. Зупиніть Gateway перед відновленням;
копіювання або перейменування набору файлів SQLite, який активно змінюється, є небезпечним і має
різну поведінку в різних операційних системах. З --github-issue --yes doctor використовує
GitHub CLI для створення проблеми в openclaw/openclaw; без підтвердження
він записує локальний звіт підтримки та виводить попередньо заповнену URL-адресу проблеми.
restore залишається низькорівневою операцією скасування. Вона використовує записи
sourcePath -> archivePath маніфесту, переміщує заархівовані артефакти назад, лише коли
оригінальний шлях відсутній, повідомляє про конфлікти, коли існують обидва шляхи, і залишає
базу даних SQLite на місці.
Повернення до старішої версії після міграції SQLite сеансів
Перед запуском старішої файлової версії OpenClaw відновіть заархівовані застарілі артефакти транскриптів:
openclaw doctor --session-sqlite restore --session-sqlite-all-agentsСтаріші версії зчитують записи sessions.json і шляхи sessionFile, записані
в цих записах. Після міграції на SQLite успішні імпорти переміщують активні JSONL-
транскрипти до session-sqlite-import-archive/, тому старіше середовище виконання не може
бачити цю історію, доки відновлення не поверне ці артефакти, записані в маніфесті, до
їхніх початкових шляхів.
Відновлення не видаляє дані SQLite. Сеанси, створені після переходу на SQLite, існують лише в SQLite й не відображатимуться в старішому середовищі виконання. Якщо згодом знову оновити систему, виконайте наведену вище звичайну послідовність перевірки міграції, щоб OpenClaw міг порівняти відновлені застарілі артефакти з рядками SQLite перед імпортом.
Примітки
- У режимі Nix (
OPENCLAW_NIX_MODE=1) перевірки doctor лише для читання й надалі працюють, алеdoctor --fix,doctor --repair,doctor --yesіdoctor --generate-gateway-tokenвимкнено, оскількиopenclaw.jsonє незмінним. Натомість відредагуйте джерело Nix для цього встановлення; для nix-openclaw скористайтеся орієнтованим на агента коротким посібником. - Інтерактивні запити (виправлення зв’язки ключів/OAuth тощо) виконуються лише тоді, коли stdin є TTY і
--non-interactiveне задано. Запуски без інтерфейсу (cron, Telegram, без термінала) пропускають запити. - Неінтерактивні запуски
doctorпропускають попереднє завантаження плагінів, щоб перевірки працездатності без інтерфейсу залишалися швидкими. Інтерактивні сеанси й надалі завантажують поверхні плагінів, потрібні застарілому процесу перевірки працездатності й відновлення. --lintсуворіший за--non-interactive: завжди лише для читання, ніколи не показує запитів і ніколи не застосовує безпечних міграцій. Використовуйтеdoctor --fixабоdoctor --repair, якщо потрібно, щоб doctor вносив зміни.- За замовчуванням doctor не виконує SecretRef
execпід час перевірки секретів. Використовуйте--allow-exec(з--lintабо без нього) лише тоді, коли навмисно потрібно, щоб doctor запускав ці налаштовані засоби отримання секретів. - Будь-який запис конфігурації (зокрема виправлення
--fix) переміщує резервну копію до~/.openclaw/openclaw.json.bak(з нумерованим кільцем.bak.1...bak.4).--fixтакож видаляє невідомі ключі конфігурації, про які повідомляє перевірка за схемою, перелічуючи кожне видалення; під час оновлення ця дія пропускається, щоб частково записаний стан оновлення не було видалено до завершення його міграції. - Задайте
OPENCLAW_SERVICE_REPAIR_POLICY=external, коли життєвим циклом Gateway керує інший супервізор. Doctor і надалі повідомляє про стан Gateway/служби та застосовує виправлення, не пов’язані зі службою, але пропускає встановлення/запуск/перезапуск/початкове налаштування служби й очищення застарілої служби. - У Linux doctor ігнорує неактивні додаткові модулі systemd, подібні до Gateway, і під час виправлення не перезаписує метадані команди/точки входу для запущеної служби Gateway systemd. Спочатку зупиніть службу або скористайтеся
openclaw gateway install --force, щоб замінити активний засіб запуску. doctor --fix --non-interactiveповідомляє про відсутні або застарілі визначення служби Gateway, але не встановлює й не перезаписує їх поза режимом виправлення оновлення. Запустітьopenclaw gateway installдля відсутньої служби абоopenclaw gateway install --force, щоб замінити засіб запуску.- Перевірки цілісності стану виявляють осиротілі файли транскриптів у каталозі сеансів. Для їх архівування як
.deleted.<timestamp>потрібне інтерактивне підтвердження;--fix,--yesі запуски без інтерфейсу залишають їх на місці. - Doctor сканує
~/.openclaw/cron/jobs.json(абоcron.store) на наявність застарілих форматів завдань cron і перезаписує їх перед імпортом канонічних рядків до SQLite. - Doctor повідомляє про завдання cron із явним перевизначенням
payload.model, зокрема про кількість просторів імен постачальників і невідповідності зagents.defaults.model, щоб заплановані завдання, які не успадковують модель за замовчуванням, були видимими під час розслідувань автентифікації або виставлення рахунків. - Doctor повідомляє про завдання cron, які досі позначені як виконувані (
state.runningAtMs), через щоopenclaw cron listможе показувати їх якrunning. Ця перевірка виконується лише для читання: якщо жоден Gateway наразі не виконує позначене завдання, наступний запуск служби cron реєструє перерваний запуск і очищає позначку. - У Linux doctor попереджає, коли crontab користувача досі запускає непідтримуваний застарілий
~/.openclaw/bin/ensure-whatsapp.sh, який може неправильно повідомлятиGateway inactive, коли cron не має середовища користувацької шини systemd. - Коли WhatsApp увімкнено, doctor перевіряє, чи не погіршився цикл подій Gateway за наявності запущених локальних клієнтів
openclaw-tui.doctor --fixзупиняє лише перевірені локальні клієнти TUI, щоб відповіді WhatsApp не ставали в чергу за застарілими циклами оновлення TUI. - Doctor перезаписує застарілі посилання на моделі
codex/*іopenai-codex/*у канонічні посиланняopenai/*для основних моделей, резервних варіантів, списків дозволених моделей, моделей генерування зображень/відео, перевизначень Heartbeat/підлеглого агента/Compaction, хуків, перевизначень моделі каналу, корисних навантажень cron і застарілих прив’язок маршрутів сеансів/транскриптів.--fixтакож безпечно об’єднує застарілу конфігураціюmodels.providers.codexіmodels.providers.openai-codex, переносить застарілі профілі автентифікаціїopenai-codex:*і записиauth.order.openai-codexдоopenai:*, переносить призначення Codex до записівagentRuntime.id: "codex", прив’язаних до постачальника/моделі, видаляє застарілі прив’язки середовища виконання для всього агента/сеансу та зберігає виправлені посилання агентів OpenAI на маршрутизації автентифікації Codex замість прямої автентифікації за ключем API OpenAI. - Doctor повідомляє про непорожні списки
auth.order.<provider>, усі профілі з посиланнями в яких уже відсутні, хоча сумісні збережені облікові дані існують.doctor --fixвидаляє лише ці застарілі перевизначення, відновлюючи автоматичний вибір облікових даних для кожного агента; явно порожні порядки, частково чинні списки та порядки без сумісних збережених облікових даних залишаються незмінними. Якщо активне сховище автентифікації SQLite неможливо прочитати або воно має неправильний формат, doctor пояснює, чому пропустив це виправлення. Перезапустіть запущений Gateway перед повторною перевіркою стану автентифікації, якщо його режим перезавантаження конфігурації не застосовує запис автоматично. - Doctor очищує застарілий проміжний стан залежностей плагінів зі старіших версій OpenClaw і повторно пов’язує пакет хоста
openclawдля керованих плагінів npm, які оголошують його одноранговою залежністю. Він також відновлює відсутні завантажувані плагіни, на які посилається конфігурація (plugins.entries, налаштовані канали, налаштовані параметри постачальника/пошуку, налаштовані середовища виконання агентів). Під час оновлення пакетів doctor пропускає відновлення плагінів менеджером пакетів до завершення заміни пакета; після цього повторно запустітьopenclaw doctor --fix, якщо налаштований плагін усе ще потребує відновлення. Якщо завантаження не вдається, doctor повідомляє про помилку встановлення та зберігає запис налаштованого плагіна для наступної спроби відновлення. - Doctor виправляє застарілу конфігурацію плагінів, видаляючи ідентифікатори відсутніх плагінів із
plugins.allow/plugins.deny/plugins.entries, а також відповідну конфігурацію висячих каналів, цілі Heartbeat і перевизначення моделей каналів, коли виявлення плагінів працює належним чином. - Doctor ізолює неправильну конфігурацію плагіна, вимикаючи відповідний запис
plugins.entries.<id>і видаляючи його неправильне корисне навантаженняconfig. Під час запуску Gateway уже пропускає лише цей несправний плагін, тому інші плагіни й канали продовжують працювати. - Doctor видаляє вилучений
plugins.entries.codex.config.codexDynamicToolsProfile; сервер застосунку Codex завжди залишає нативні інструменти робочого простору Codex нативними. - Doctor автоматично переносить застарілу пласку конфігурацію Talk (
talk.voiceId,talk.modelIdтощо) доtalk.provider+talk.providers.<provider>. Повторні запускиdoctor --fixбільше не повідомляють про нормалізацію Talk і не застосовують її, коли єдиною відмінністю є порядок ключів об’єкта. - Doctor містить перевірку готовності пошуку в пам’яті та може рекомендувати
openclaw configure --section model, коли відсутні облікові дані для вбудовувань. - Doctor попереджає, коли власника команд не налаштовано. Власник команд — це обліковий запис оператора-людини, якому дозволено виконувати команди лише для власника та схвалювати небезпечні дії. Сполучення через особисті повідомлення лише дозволяє комусь спілкуватися з ботом; якщо відправника було схвалено до появи початкового налаштування першого власника, явно задайте
commands.ownerAllowFrom. - Doctor показує інформаційну примітку, коли налаштовано агентів у режимі Codex і в домашньому каталозі Codex оператора є особисті ресурси Codex CLI. Локальні запуски сервера застосунку Codex використовують ізольовані домашні каталоги для кожного агента; за потреби спочатку встановіть плагін Codex, а потім скористайтеся
openclaw migrate plan codex, щоб інвентаризувати ресурси, які слід перенести свідомо. - Doctor попереджає, коли Skills, дозволені для агента за замовчуванням, недоступні в поточному середовищі виконання (відсутні двійкові файли, змінні середовища, конфігурація або вимоги ОС).
doctor --fixможе вимкнути ці недоступні Skills за допомогоюskills.entries.<skill>.enabled=false; якщо потрібно залишити Skill активним, натомість установіть або налаштуйте відсутню вимогу. - Якщо режим пісочниці ввімкнено, але Docker недоступний, doctor показує виразне попередження зі способом усунення (
install Dockerабоopenclaw config set agents.defaults.sandbox.mode off). - Якщо наявні застарілі файли реєстру пісочниці або каталоги сегментів (
~/.openclaw/sandbox/containers.json,~/.openclaw/sandbox/browsers.json,~/.openclaw/sandbox/containers/або~/.openclaw/sandbox/browsers/), doctor повідомляє про них;--fixпереносить дійсні записи до SQLite та ізолює неправильні застарілі файли. - Якщо
gateway.auth.token/gateway.auth.passwordкеруються через SecretRef і недоступні в поточному шляху виконання команди, doctor показує попередження лише для читання та не записує резервні облікові дані у відкритому вигляді. Для SecretRef на основі exec doctor пропускає виконання, якщо немає--allow-exec. - Якщо перевірка SecretRef каналу не вдається під час виправлення, doctor продовжує роботу та показує попередження замість передчасного завершення.
- Після міграцій каталогу стану doctor попереджає, коли ввімкнені облікові записи Telegram або Discord за замовчуванням залежать від резервного отримання зі змінних середовища, а
TELEGRAM_BOT_TOKENабоDISCORD_BOT_TOKENнедоступна процесу doctor. - Автоматичне визначення імені користувача Telegram
allowFrom(doctor --fix) потребує доступного для визначення токена Telegram у поточному шляху виконання команди. Якщо перевірка токена недоступна, doctor показує попередження та пропускає автоматичне визначення під час цього проходу.
macOS: перевизначення змінних середовища launchctl
Якщо раніше було виконано launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (або ...PASSWORD), це значення перевизначає файл конфігурації та може спричиняти постійні помилки «unauthorized».
launchctl getenv OPENCLAW_GATEWAY_TOKENlaunchctl getenv OPENCLAW_GATEWAY_PASSWORD launchctl unsetenv OPENCLAW_GATEWAY_TOKENlaunchctl unsetenv OPENCLAW_GATEWAY_PASSWORD