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 для тех же подключённых состояния и конфигурации, прежде чем
перезапустить контейнер в обычном режиме.
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Перед запуском import в установке с важной историей создайте резервную копию каталога состояния OpenClaw.
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 вместо прямой аутентификации 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. - Для автоматического разрешения имени пользователя
allowFromв Telegram (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