CLI commands
Диагностика
openclaw doctor
Проверки состояния и быстрые исправления для Gateway, каналов, плагинов, Skills, маршрутизации моделей, локального состояния и миграций конфигурации. Используйте эту команду, когда что-либо работает не так, как ожидалось, и нужно одной командой выяснить причину.
См. также:
- Устранение неполадок: Устранение неполадок
- Аудит безопасности: Безопасность
Режимы
У 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 |
Выполняет проверки совместимости плагинов после обновления; результаты выводятся в stdout; код выхода 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. Общий реестр структурированных проверок состояния служит точкой расширения: встроенные проверки и проверки на основе плагинов запускаются после основных проверок doctor, когда владеющий ими пакет регистрирует их в активном пути команды. openclaw/plugin-sdk/health предоставляет тот же контракт авторам плагинов.
Выбор проверок
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 запускает проверки совместимости плагинов для последовательного выполнения после сборки или обновления. Результаты выводятся в stdout; код выхода равен 1, если хотя бы один результат имеет level: "error". Добавьте --json, чтобы получить машиночитаемую оболочку ({ probesRun, findings }), подходящую для CI, общего навыка fork-upgrade и других инструментов быстрой проверки после обновления. Если индекс установленных плагинов отсутствует или имеет неверный формат, режим JSON всё равно выводит оболочку с результатом ошибки plugin.index_unavailable.
Запуск образа контейнера является исключением из обычного процесса «запустить doctor после
обновления». Когда openclaw gateway run запускается в новой версии OpenClaw, он
выполняет безопасное восстановление состояния и плагинов, прежде чем сообщить о готовности. Если восстановление невозможно
безопасно завершить, запуск прекращается и предлагает один раз запустить тот же образ с
openclaw doctor --fix для того же подключённого состояния и конфигурации, прежде чем перезапустить
контейнер в обычном режиме.
Сжатие общей базы данных состояния 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 до и после сжатия, а также число освобождённых байтов и
результаты quick_check и integrity_check. foreign_key_check применяется
с запретом по умолчанию и не имеет отдельного поля успешного выполнения. SQLite сообщает auto_vacuum как
0 при отсутствии, 1 для полного режима и 2 для инкрементного режима.
Сжатие завершается ошибкой без изменений, если схема устарела, новее
запущенной сборки 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
до и после. Для сжатия требуется обычный файл с текущей схемой агента,
сохранёнными метаданными владельца выбранного агента и отсутствием открытого дескриптора в процессе
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 перезаписывает устаревшие ссылки на модели
openai-codex/*в канонические ссылкиopenai/*для основных и резервных моделей, моделей генерации изображений и видео, переопределений Heartbeat, субагентов и Compaction, хуков, переопределений моделей каналов и устаревших закреплённых маршрутов сеансов.--fixтакже переносит устаревшие профили аутентификацииopenai-codex:*и записиauth.order.openai-codexвopenai:*, переносит назначение Codex в записиagentRuntime.id: "codex", привязанные к провайдеру и модели, удаляет устаревшие закрепления среды выполнения для всего агента или сеанса и сохраняет для исправленных ссылок агентов OpenAI маршрутизацию аутентификации Codex вместо прямой аутентификации OpenAI по ключу API. - Doctor сообщает о непустых списках
auth.order.<provider>, все указанные профили которых уже отсутствуют, но при этом существуют совместимые сохранённые учётные данные.doctor --fixудаляет только эти устаревшие переопределения, восстанавливая автоматический выбор учётных данных для каждого агента; явно пустые порядки, частично действующие списки и порядки без совместимых сохранённых учётных данных остаются неизменными. Если активное хранилище аутентификации SQLite недоступно для чтения или имеет некорректный формат, doctor объясняет, почему это исправление было пропущено. Если режим перезагрузки конфигурации работающего Gateway не применяет запись автоматически, перезапустите 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 предупреждает, если навыки, разрешённые для агента по умолчанию, недоступны в текущей среде выполнения (отсутствуют исполняемые файлы, переменные среды, конфигурация или требования к ОС).
doctor --fixможет отключить эти недоступные навыки с помощьюskills.entries.<skill>.enabled=false; если вы хотите оставить навык активным, вместо этого установите или настройте отсутствующее требование. - Если режим песочницы включён, но 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