---
read_when:
    - У вас проблемы с подключением или аутентификацией, и вам нужны пошаговые рекомендации по их устранению
    - Вы внесли изменения и хотите проверить, всё ли в порядке
summary: Справочник по CLI для `openclaw doctor` (проверки работоспособности + пошаговое устранение неполадок)
title: Диагностика
x-i18n:
    generated_at: "2026-07-13T19:37:28Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 8fa2e3fdc94237651db3fd11525173b097547abb1d1870fdcdf5b316f61eb47e
    source_path: cli/doctor.md
    workflow: 16
---

# `openclaw doctor`

Проверки состояния и быстрые исправления для Gateway, каналов, плагинов, Skills, маршрутизации моделей, локального состояния и миграций конфигурации. Используйте эту команду, когда что-либо работает не так, как ожидалось, и нужно одной командой выяснить причину.

См. также:

- Устранение неполадок: [Устранение неполадок](/ru/gateway/troubleshooting)
- Аудит безопасности: [Безопасность](/ru/gateway/security)

## Режимы

У 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 изменил конфигурацию или состояние.

## Примеры

```bash
openclaw doctor
openclaw doctor --lint
openclaw doctor --lint --json
openclaw doctor --lint --severity-min warning
openclaw doctor --lint --all
openclaw doctor --lint --allow-exec
openclaw doctor --deep
openclaw doctor --fix
openclaw doctor --fix --non-interactive
openclaw doctor --generate-gateway-token
openclaw doctor --post-upgrade
openclaw doctor --post-upgrade --json
openclaw doctor --state-sqlite compact
openclaw doctor --state-sqlite compact --json
openclaw doctor --session-sqlite inspect --session-sqlite-all-agents
openclaw doctor --session-sqlite dry-run --session-sqlite-agent main --json
openclaw doctor --session-sqlite import --session-sqlite-all-agents
openclaw doctor --session-sqlite validate --session-sqlite-all-agents --json
openclaw doctor --session-sqlite compact --session-sqlite-all-agents
openclaw doctor --session-sqlite recover --github-issue
openclaw doctor --session-sqlite restore --session-sqlite-all-agents
```

Для разрешений конкретного канала используйте проверки каналов вместо `doctor`:

```bash
openclaw channels capabilities --channel discord --target channel:<channel-id>
openclaw channels status --probe
```

`channels 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` работает только для чтения: без запросов, исправлений и перезаписи конфигурации или состояния.

```bash
openclaw doctor --lint
openclaw doctor --lint --severity-min warning
openclaw doctor --lint --json
openclaw doctor --lint --all
openclaw doctor --lint --allow-exec
openclaw doctor --lint --only core/doctor/gateway-config --json
openclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min info
```

Вывод для пользователя компактен:

```text
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 предназначен для сценариев автоматизации:

```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 используют небольшой разделённый контракт:

```ts
detect(ctx, scope?) -> HealthFinding[]
repair?(ctx, findings) -> HealthRepairResult
```

`detect()` обеспечивает работу `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` предоставляет тот же контракт авторам плагинов.

## Выбор проверок

```bash
openclaw doctor --lint --only core/doctor/gateway-config --json
openclaw doctor --lint --skip core/doctor/skills-readiness
openclaw 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 и создайте проверенную резервную копию:

```bash
openclaw gateway stop
openclaw backup create --verify
openclaw doctor --state-sqlite compact --json
openclaw gateway start
```

Команда:

1. Требует обычный файл по каноническому пути общего состояния. Отсутствующая
   база данных указывается как `skipped`, а команда успешно завершается.
2. Проверяет текущую поддерживаемую версию схемы и
   `schema_meta.role = "global"` до создания контрольной точки или изменения файла.
3. Требует незанятый `wal_checkpoint(TRUNCATE)`. Если контрольная точка занята, остановите все оставшиеся процессы OpenClaw
   и повторите попытку.
4. Устанавливает `auto_vacuum` в `INCREMENTAL`, выполняет полную операцию `VACUUM` и снова создаёт контрольную
   точку.
5. Выполняет `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`.

Последовательность ручной проверки:

```bash
openclaw doctor --session-sqlite inspect --session-sqlite-all-agents
openclaw doctor --session-sqlite dry-run --session-sqlite-all-agents --json
openclaw doctor --session-sqlite import --session-sqlite-all-agents
openclaw doctor --session-sqlite validate --session-sqlite-all-agents --json
openclaw doctor --session-sqlite compact --session-sqlite-all-agents
openclaw 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 после
перемещения артефактов, запустите восстановление:

```bash
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 восстановите архивные
устаревшие артефакты расшифровок:

```bash
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 используйте ориентированное на агента [краткое руководство](https://github.com/openclaw/nix-openclaw#quick-start).
- Интерактивные запросы (исправления связки ключей/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».

```bash
launchctl getenv OPENCLAW_GATEWAY_TOKEN
launchctl getenv OPENCLAW_GATEWAY_PASSWORD

launchctl unsetenv OPENCLAW_GATEWAY_TOKEN
launchctl unsetenv OPENCLAW_GATEWAY_PASSWORD
```

## Связанные материалы

- [Справочник CLI](/ru/cli)
- [Doctor Gateway](/ru/gateway/doctor)
