CLI commands
Doctor
openclaw doctor
Comprobaciones de estado y correcciones rápidas para el Gateway, los canales, los plugins, las Skills, el enrutamiento de modelos, el estado local y las migraciones de configuración. Úselo siempre que algo no se comporte como se espera y quiera que un solo comando explique qué ocurre.
Relacionado:
- Solución de problemas: Solución de problemas
- Auditoría de seguridad: Seguridad
Modos
Doctor tiene cinco modos:
| Modo | Comando | Comportamiento |
|---|---|---|
| Inspección | openclaw doctor |
Comprobaciones orientadas a personas e indicaciones guiadas. |
| Reparación | openclaw doctor --fix |
Aplica las reparaciones compatibles y solicita confirmación, salvo cuando la reparación no interactiva es segura. |
| Lint | openclaw doctor --lint |
Hallazgos estructurados de solo lectura para CI, comprobaciones previas y controles de revisión. |
| Mantenimiento de SQLite compartido | openclaw doctor --state-sqlite compact |
Ejecuta explícitamente un punto de control, compacta y verifica la base de datos canónica de estado compartido. |
| Migración de SQLite de sesiones | openclaw doctor --session-sqlite <mode> |
Inspecciona, importa, valida, compacta, recupera o restaura el estado de las sesiones. |
Prefiera --lint cuando la automatización necesite un resultado estable. Prefiera --fix cuando un operador humano quiera que doctor edite la configuración o el estado.
Ejemplos
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-agentsPara los permisos específicos de un canal, use las sondas de canales en lugar de doctor:
openclaw channels capabilities --channel discord --target channel:<channel-id>openclaw channels status --probechannels capabilities informa de los permisos efectivos del bot para un destino de canal específico. channels status --probe audita todos los canales configurados y los destinos de conexión automática de voz.
Opciones
| Opción | Efecto |
|---|---|
--no-workspace-suggestions |
Desactiva las sugerencias de memoria/búsqueda del espacio de trabajo. |
--yes |
Acepta los valores predeterminados sin solicitar confirmación. |
--repair / --fix |
Aplica las reparaciones recomendadas no relacionadas con servicios sin solicitar confirmación (--fix es un alias). Las instalaciones o reescrituras del servicio Gateway siguen requiriendo confirmación interactiva o comandos gateway explícitos. |
--force |
Aplica reparaciones agresivas, incluida la sobrescritura de la configuración personalizada del servicio. |
--non-interactive |
Se ejecuta sin solicitudes de confirmación; solo realiza migraciones seguras y reparaciones no relacionadas con servicios. |
--generate-gateway-token |
Genera y configura un token del Gateway. |
--allow-exec |
Permite que doctor ejecute las SecretRefs exec configuradas al verificar secretos. |
--deep |
Analiza los servicios del sistema para detectar instalaciones adicionales del Gateway e informa de las transferencias recientes de reinicio del supervisor del Gateway. |
--lint |
Ejecuta comprobaciones de estado modernizadas en modo de solo lectura y emite hallazgos de diagnóstico. |
--post-upgrade |
Ejecuta sondas de compatibilidad de plugins posteriores a la actualización; los hallazgos se envían a stdout; código de salida 1 si existe algún hallazgo de nivel de error. |
--state-sqlite <mode> |
Ejecuta el mantenimiento explícito de SQLite del estado compartido. El único modo es compact. |
--session-sqlite <mode> |
Ejecuta el modo de migración de SQLite de sesiones seleccionado: inspect, dry-run, import, validate, compact, recover o restore. |
--session-sqlite-store <path> |
Con --session-sqlite: selecciona una ruta de almacén sessions.json heredado. |
--session-sqlite-agent <id> |
Con --session-sqlite: selecciona un agente configurado. |
--session-sqlite-all-agents |
Con --session-sqlite: selecciona los almacenes de agentes configurados y detectados. |
--github-issue |
Con --session-sqlite recover: prepara un informe de incidencia saneado para openclaw/openclaw; doctor lo crea con gh después de --yes o de una confirmación interactiva. |
--json |
Con --lint: hallazgos JSON. Con --post-upgrade: { probesRun, findings }. Con --state-sqlite o --session-sqlite: el informe de mantenimiento en formato JSON. |
--severity-min <level> |
Con --lint: descarta los hallazgos por debajo de info, warning o error. |
--all |
Con --lint: ejecuta todas las comprobaciones registradas, incluidas las comprobaciones opcionales excluidas del conjunto predeterminado. |
--skip <id> |
Con --lint: omite un identificador de comprobación. Se puede repetir. |
--only <id> |
Con --lint: ejecuta solo los identificadores de comprobación indicados. Se puede repetir. |
--severity-min, --all, --only y --skip solo se aceptan junto con --lint; --json se acepta con --lint, --post-upgrade, --state-sqlite y --session-sqlite.
Modo Lint
openclaw doctor --lint es de solo lectura: no solicita confirmación, no repara ni reescribe la configuración o el estado.
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 infoLa salida para personas es compacta:
doctor --lint: se ejecutaron 6 comprobación(es), 1 hallazgo(s) [warning] core/doctor/gateway-config gateway.mode - gateway.mode no está definido; se bloqueará el inicio del gateway. corrección: Ejecute `openclaw configure` y defina el modo del Gateway (local/remoto), o `openclaw config set gateway.mode local`.La salida JSON es la interfaz para scripts:
{ "ok": false, "checksRun": 5, "checksSkipped": 0, "findings": [ { "checkId": "core/doctor/gateway-config", "severity": "warning", "message": "gateway.mode no está definido; se bloqueará el inicio del gateway.", "path": "gateway.mode", "fixHint": "Ejecute `openclaw configure` y defina el modo del Gateway (local/remoto), o `openclaw config set gateway.mode local`." } ]}Códigos de salida:
| Código | Significado |
|---|---|
0 |
No hay hallazgos iguales o superiores al umbral de gravedad seleccionado. |
1 |
Al menos un hallazgo alcanza el umbral seleccionado. |
2 |
Fallo del comando o del entorno de ejecución antes de poder generar hallazgos de lint. |
--severity-min controla tanto qué hallazgos se muestran como el umbral de salida: openclaw doctor --lint --severity-min error puede no mostrar nada y finalizar con 0 incluso cuando existan hallazgos info/warning de menor gravedad.
--all controla qué comprobaciones se seleccionan antes del filtrado por gravedad. La ejecución predeterminada de lint excluye las comprobaciones profundas, históricas o con mayor probabilidad de detectar residuos heredados reparables; use --all para obtener el inventario completo. --only <id> es el selector más preciso y puede ejecutar cualquier comprobación registrada por identificador.
core/doctor/local-audio-acceleration informa del comando STT local seleccionado automáticamente, de las pruebas separadas del backend disponible/solicitado/observado y del orden de respaldo sin cargar un modelo de voz. Emite un hallazgo informativo, por lo que debe incluir --severity-min info para mostrarlo.
Comprobaciones de estado estructuradas
Las comprobaciones modernas de doctor usan un contrato dividido y reducido:
detect(ctx, scope?) -> HealthFinding[]repair?(ctx, findings) -> HealthRepairResultdetect() sustenta doctor --lint. repair() es opcional y solo se ejecuta con doctor --fix / doctor --repair. Las comprobaciones que aún no se han migrado a esta forma siguen usando el flujo heredado de contribuciones de doctor.
Los contextos de reparación pueden incluir solicitudes dryRun/diff; los resultados de reparación pueden devolver diffs estructurados (ediciones de configuración/archivos) y effects (efectos secundarios en servicios, procesos, paquetes, estado u otros), de modo que las comprobaciones convertidas puedan evolucionar hacia doctor --fix --dry-run sin trasladar la planificación de mutaciones a detect().
repair() informa de status: "repaired" | "skipped" | "failed" (si se omite el estado, significa repaired). Cuando la reparación devuelve skipped o failed, doctor informa del motivo y omite la validación de esa comprobación. Tras una reparación correcta, doctor vuelve a ejecutar detect() limitado a los hallazgos reparados; si el hallazgo sigue presente, doctor informa de una advertencia de reparación en lugar de considerar que el cambio está completo.
Un hallazgo incluye:
| Campo | Propósito |
|---|---|
checkId |
Id. estable para filtros de omisión/exclusividad y listas permitidas de CI. |
severity |
info, warning o error. |
message |
Descripción del problema legible para personas. |
path |
Ruta de configuración, archivo o lógica, cuando esté disponible. |
line / column |
Ubicación en el código fuente, cuando esté disponible. |
ocPath |
Dirección oc:// precisa cuando una comprobación pueda señalar una. |
fixHint |
Acción sugerida para el operador o resumen de la reparación. |
Las comprobaciones modernizadas del doctor del núcleo permanecen asociadas a la contribución ordenada del doctor que controla su comportamiento visible de doctor / doctor --fix. El registro compartido de estado estructurado es el punto de extensión: las comprobaciones integradas y respaldadas por plugins se ejecutan después de las comprobaciones del doctor del núcleo una vez que su paquete propietario las registra en la ruta de comandos activa. openclaw/plugin-sdk/health expone el mismo contrato para los autores de plugins.
Selección de comprobaciones
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 y --skip aceptan identificadores completos de comprobación y pueden repetirse. Si un identificador de --only no está registrado, no se ejecuta ninguna comprobación para ese identificador; use checksRun/checksSkipped en la salida para confirmar que una puerta de control específica selecciona las comprobaciones esperadas.
Modo posterior a la actualización
openclaw doctor --post-upgrade ejecuta sondeos de compatibilidad de plugins para encadenarlos después de una compilación o actualización. Los hallazgos se envían a stdout; el código de salida es 1 si algún hallazgo tiene level: "error". Añada --json para obtener un contenedor legible por máquina ({ probesRun, findings }), adecuado para CI, la skill comunitaria fork-upgrade y otras herramientas de comprobación rápida posteriores a una actualización. Si falta el índice de plugins instalados o tiene un formato incorrecto, el modo JSON sigue emitiendo el contenedor con un hallazgo de error plugin.index_unavailable.
El inicio de una imagen de contenedor es la excepción al flujo habitual de «ejecutar doctor después de
actualizar». Cuando openclaw gateway run se inicia con una nueva versión de OpenClaw,
ejecuta reparaciones seguras del estado y de los plugins antes de indicar que está listo. Si la reparación no puede
finalizar de forma segura, el inicio termina e indica que se ejecute una vez la misma imagen con
openclaw doctor --fix sobre el mismo estado/configuración montado antes de reiniciar
el contenedor normalmente.
Compaction de SQLite del estado compartido
openclaw doctor --state-sqlite compact es un mantenimiento explícito sin conexión para
la base de datos canónica de estado compartido ubicada en
<state-dir>/state/openclaw.sqlite. No acepta una ruta arbitraria de base de datos,
nunca se invoca durante el funcionamiento normal del Gateway y no forma parte de
openclaw doctor --fix.
Detenga el Gateway y cree primero una copia de seguridad verificada:
openclaw gateway stopopenclaw backup create --verifyopenclaw doctor --state-sqlite compact --jsonopenclaw gateway startEl comando:
- Requiere un archivo normal en la ruta canónica del estado compartido. Si falta la
base de datos, se informa como
skippedy el comando finaliza correctamente. - Valida la versión actual compatible del esquema y
schema_meta.role = "global"antes de crear un punto de control o modificar el archivo. - Requiere un
wal_checkpoint(TRUNCATE)que no esté ocupado. Detenga cualquier proceso restante de OpenClaw y vuelva a intentarlo si el punto de control está ocupado. - Establece
auto_vacuumenINCREMENTAL, ejecuta unVACUUMcompleto y vuelve a crear un punto de control. - Ejecuta
quick_check,integrity_checkyforeign_key_check, y después vuelve a aplicar permisos exclusivos del propietario a la base de datos y a los archivos auxiliares de SQLite.
La salida JSON informa de los tamaños de la base de datos y del WAL, las páginas de la lista libre, el tamaño de página y
el valor de auto_vacuum antes y después de la compactación, además de los bytes recuperados y los
resultados de quick_check e integrity_check. foreign_key_check se aplica
con cierre ante fallos y no tiene un campo de éxito independiente. SQLite informa de auto_vacuum como
0 para ninguno, 1 para completo y 2 para incremental.
La compactación falla sin realizar modificaciones cuando el esquema es antiguo, más reciente que la
compilación de OpenClaw en ejecución o pertenece a una base de datos de agente. Ejecute primero
openclaw doctor --fix para un esquema antiguo del estado compartido. Restaure una
copia de seguridad compatible o actualice OpenClaw si el esquema es más reciente.
Migración de SQLite de sesiones
OpenClaw importa automáticamente las filas de sesiones heredadas y el historial de transcripciones en la
base de datos SQLite de cada agente durante el inicio del Gateway y durante
openclaw doctor --fix. openclaw doctor --session-sqlite <mode> es la
herramienta específica de inspección y validación para esa migración. Las filas de sesiones actuales en tiempo de ejecución
se encuentran en
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite. Los archivos
sessions.json heredados son fuentes de migración. Los archivos JSONL de transcripciones activas se
importan y archivan fuera del directorio de sesiones activas tras una
importación correcta; los archivos JSONL del nivel de archivo permanecen como artefactos de soporte, no como mecanismos
alternativos en tiempo de ejecución.
Modos:
| Modo | Comportamiento |
|---|---|
inspect |
Lee los recuentos heredados y de SQLite, además de los archivos JSONL sin referencia, sin importar. |
dry-run |
Analiza las entradas heredadas y los archivos JSONL de transcripciones, cuenta las filas importables e informa de problemas sin escribir filas de SQLite. |
import |
Importa entradas heredadas y eventos de transcripción en SQLite para los destinos seleccionados. |
validate |
Compara las fuentes heredadas seleccionadas con las filas de SQLite y los recuentos de eventos de transcripción. |
compact |
Crea puntos de control y ejecuta VACUUM en las bases de datos SQLite de agentes seleccionadas para recuperar páginas libres tras eliminaciones grandes o limpieza de archivos. |
recover |
Restaura la última ejecución de migración fallida, valida sus destinos y prepara un informe saneado de incidencia de GitHub. |
restore |
Restaura artefactos de transcripción archivados desde los manifiestos de migración registrados sin eliminar datos de SQLite. |
Selectores:
- Valor predeterminado: el almacén configurado del agente predeterminado, cuando exista ese archivo de almacén heredado.
--session-sqlite-agent <id>: un agente configurado.--session-sqlite-all-agents: almacenes de agentes configurados más los almacenes de agentes detectados.--session-sqlite-store <path>: una ruta explícita a un archivosessions.jsonheredado.
Secuencia de inspección manual:
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-issueRealice una copia de seguridad del directorio de estado de OpenClaw antes de ejecutar import en una instalación con
un historial importante. validate finaliza con un código distinto de cero cuando falta en
SQLite una entrada heredada seleccionada, difiere un identificador de sesión o difiere un recuento de eventos de transcripción.
Cuando use --session-sqlite-store <path>, compruebe que el informe contiene el
número esperado de destinos; una ruta explícita de almacén inexistente no selecciona ningún destino.
Las eliminaciones de SQLite recuperan primero páginas dentro de la base de datos; no necesariamente
reducen de inmediato el archivo de la base de datos. Después de eliminar o archivar
transcripciones grandes, ejecute openclaw doctor --session-sqlite compact --session-sqlite-all-agents
para crear puntos de control de los archivos WAL, ejecutar VACUUM e informar de los tamaños
de la base de datos y del WAL antes y después. La compactación requiere un archivo normal con el esquema actual del agente, los
metadatos persistentes del propietario del agente seleccionado y ningún identificador de archivo abierto en el proceso del doctor.
Este es un mantenimiento explícito sin conexión: detenga primero el Gateway para que las escrituras
normales no puedan entrar en conflicto con el punto de control ni con VACUUM.
Cada importación escribe un manifiesto en
~/.openclaw/session-sqlite-migration-runs/ antes de mover los artefactos de transcripción
al archivo. Si el inicio informa de un fallo en la migración de SQLite de sesiones después de
mover los artefactos, ejecute la recuperación:
openclaw doctor --session-sqlite recover --github-issueLa recuperación selecciona el manifiesto de migración fallida más reciente, restaura únicamente los
artefactos archivados del manifiesto, valida los destinos afectados, actualiza los
informes saneados .failure.md y .failure.json, y prepara el cuerpo de una incidencia de GitHub
que evita el contenido de las transcripciones, el entorno sin procesar, los secretos y la configuración
sin límites. Cuando no existe ningún manifiesto de migración fallida, pero la base de datos SQLite
de un agente seleccionado está dañada, no es una base de datos o tiene archivos auxiliares de diario sin una
base de datos principal, la recuperación copia el conjunto completo de archivos en un directorio temporal
de inspección. SQLite puede revertir un diario activo válido en esa copia desechable
antes de ejecutar quick_check, integrity_check y foreign_key_check, mientras que los
archivos forenses originales permanecen intactos. Las comprobaciones de integridad fallidas o los
archivos auxiliares huérfanos preservan los archivos de DB, WAL, SHM y del diario de reversión cambiando el nombre de
todo el conjunto detectado con un único sufijo .corrupt-<timestamp>. Si se detecta un fallo al cambiar el nombre,
se revierten los archivos ya movidos antes de informar del fallo, para que un
conjunto de archivos recuperable no quede dividido silenciosamente. Detenga el Gateway antes de la recuperación;
copiar o cambiar el nombre de un conjunto de archivos SQLite que está cambiando activamente no es seguro y se comporta
de manera diferente según el sistema operativo. Con --github-issue --yes, el doctor utiliza
la CLI de GitHub para crear la incidencia en openclaw/openclaw; sin confirmación,
escribe el informe de soporte local e imprime una URL de incidencia prerrellenada.
restore sigue siendo la operación de deshacer de bajo nivel. Utiliza los registros
sourcePath -> archivePath del manifiesto, devuelve los artefactos archivados únicamente cuando
falta la ruta original, informa de conflictos cuando existen ambas rutas y deja
la base de datos SQLite en su lugar.
Reversión a una versión anterior tras la migración de SQLite de sesiones
Antes de iniciar una versión anterior de OpenClaw basada en archivos, restaure los artefactos heredados de transcripción archivados:
openclaw doctor --session-sqlite restore --session-sqlite-all-agentsLas versiones anteriores leen las entradas de sessions.json y las rutas sessionFile registradas
en esas entradas. Después de la migración de SQLite, las importaciones correctas mueven las transcripciones JSONL
activas a session-sqlite-import-archive/, por lo que el entorno de ejecución anterior no puede
ver ese historial hasta que la restauración devuelva esos artefactos registrados en el manifiesto a
sus rutas originales.
La restauración no elimina datos de SQLite. Las sesiones creadas después del cambio a SQLite solo existen en SQLite y no aparecerán en el entorno de ejecución anterior. Si posteriormente vuelve a actualizar, ejecute la secuencia normal de validación de la migración anterior para que OpenClaw pueda comparar los artefactos heredados restaurados con las filas de SQLite antes de importar.
Notas
- En el modo Nix (
OPENCLAW_NIX_MODE=1), las comprobaciones de solo lectura de doctor siguen funcionando, perodoctor --fix,doctor --repair,doctor --yesydoctor --generate-gateway-tokenestán deshabilitados porqueopenclaw.jsones inmutable. Edite en su lugar la fuente de Nix de esta instalación; para nix-openclaw, use el Inicio rápido orientado primero al agente. - Los mensajes interactivos (correcciones del llavero/OAuth, etc.) solo se ejecutan cuando stdin es una TTY y no se establece
--non-interactive. Las ejecuciones sin interfaz (cron, Telegram, sin terminal) omiten los mensajes. - Las ejecuciones no interactivas de
doctoromiten la carga anticipada de plugins para que las comprobaciones de estado sin interfaz sigan siendo rápidas. Las sesiones interactivas aún cargan las superficies de plugins necesarias para el flujo heredado de estado y reparación. --lintes más estricto que--non-interactive: siempre es de solo lectura, nunca muestra mensajes ni aplica migraciones seguras. Usedoctor --fixodoctor --repaircuando quiera que doctor realice cambios.- De forma predeterminada, doctor no ejecuta SecretRefs de
execal comprobar secretos. Use--allow-exec(con o sin--lint) solo cuando quiera intencionadamente que doctor ejecute esos resolutores de secretos configurados. - Cualquier escritura de configuración (incluida una reparación con
--fix) rota una copia de seguridad a~/.openclaw/openclaw.json.bak(con un anillo numerado.bak.1...bak.4).--fixtambién elimina las claves de configuración desconocidas notificadas por la validación del esquema y enumera cada eliminación; omite esta operación mientras hay una actualización en curso para no eliminar el estado de actualización escrito parcialmente antes de que finalice su migración. - Establezca
OPENCLAW_SERVICE_REPAIR_POLICY=externalcuando otro supervisor gestione el ciclo de vida del Gateway. Doctor sigue informando sobre el estado del Gateway/servicio y aplica reparaciones ajenas al servicio, pero omite la instalación, el inicio, el reinicio y la inicialización del servicio, así como la limpieza del servicio heredado. - En Linux, doctor ignora las unidades adicionales inactivas de systemd similares al Gateway y no reescribe los metadatos del comando/punto de entrada de un servicio Gateway de systemd en ejecución durante la reparación. Detenga primero el servicio o use
openclaw gateway install --forcepara reemplazar el iniciador activo. doctor --fix --non-interactiveinforma sobre definiciones ausentes u obsoletas del servicio Gateway, pero no las instala ni reescribe fuera del modo de reparación de actualizaciones. Ejecuteopenclaw gateway installsi falta un servicio oopenclaw gateway install --forcepara reemplazar el iniciador.- Las comprobaciones de integridad del estado detectan archivos de transcripción huérfanos en el directorio de sesiones. Archivarlos como
.deleted.<timestamp>requiere confirmación interactiva;--fix,--yesy las ejecuciones sin interfaz los dejan en su lugar. - Doctor examina
~/.openclaw/cron/jobs.json(ocron.store) en busca de formatos heredados de trabajos cron y los reescribe antes de importar filas canónicas en SQLite. - Doctor informa sobre los trabajos cron con una sustitución explícita de
payload.model, incluidos los recuentos por espacio de nombres del proveedor y las discrepancias conagents.defaults.model, para que los trabajos programados que no heredan el modelo predeterminado sean visibles durante las investigaciones de autenticación o facturación. - Doctor informa sobre los trabajos cron que aún están marcados como en curso (
state.runningAtMs), lo que puede hacer queopenclaw cron listlos muestre comorunning. Esta comprobación es de solo lectura: si ningún Gateway está ejecutando actualmente un trabajo marcado, el siguiente inicio del servicio cron registra la ejecución interrumpida y borra el marcador. - En Linux, doctor advierte cuando el crontab del usuario aún ejecuta el script heredado sin mantenimiento
~/.openclaw/bin/ensure-whatsapp.sh, que puede informar erróneamenteGateway inactivecuando cron carece del entorno del bus de usuario de systemd. - Cuando WhatsApp está habilitado, doctor comprueba si hay un bucle de eventos del Gateway degradado mientras aún se ejecutan clientes locales de
openclaw-tui.doctor --fixdetiene únicamente los clientes TUI locales verificados para que las respuestas de WhatsApp no queden en cola detrás de bucles de actualización TUI obsoletos. - Doctor reescribe las referencias heredadas de modelos
openai-codex/*como referencias canónicasopenai/*en los modelos principales, las alternativas, los modelos de generación de imágenes/vídeos, las sustituciones de heartbeat/subagente/compaction, los hooks, las sustituciones de modelos de canales y los anclajes obsoletos de rutas de sesión.--fixtambién migra los perfiles de autenticación heredadosopenai-codex:*y las entradasauth.order.openai-codexaopenai:*, traslada la intención de Codex a entradasagentRuntime.id: "codex"con ámbito de proveedor/modelo, elimina anclajes obsoletos del entorno de ejecución para agentes completos/sesiones y mantiene las referencias reparadas de agentes OpenAI en el enrutamiento de autenticación de Codex en vez de usar directamente la autenticación mediante clave de API de OpenAI. - Doctor informa sobre las listas no vacías
auth.order.<provider>cuyos perfiles referenciados ya no existen, pero para las que hay credenciales almacenadas compatibles.doctor --fixelimina únicamente esas sustituciones obsoletas y restablece la selección automática de credenciales por agente; los órdenes explícitamente vacíos, las listas parcialmente vigentes y los órdenes sin credenciales almacenadas compatibles permanecen sin cambios. Si un almacén de autenticación SQLite activo no se puede leer o tiene un formato incorrecto, doctor explica por qué omitió esta reparación. Reinicie un Gateway en ejecución antes de volver a comprobar el estado de autenticación si su modo de recarga de configuración no aplica automáticamente la escritura. - Doctor limpia el estado heredado de preparación de dependencias de plugins de versiones anteriores de OpenClaw y vuelve a enlazar el paquete
openclawdel host para los plugins npm gestionados que lo declaran como dependencia de pares. También repara los plugins descargables ausentes a los que hace referencia la configuración (plugins.entries, canales configurados, ajustes configurados de proveedor/búsqueda y entornos de ejecución de agentes configurados). Durante las actualizaciones de paquetes, doctor omite la reparación de plugins mediante el gestor de paquetes hasta que finaliza el intercambio de paquetes; vuelva a ejecutaropenclaw doctor --fixdespués si un plugin configurado aún necesita recuperación. Si una descarga falla, doctor informa del error de instalación y conserva la entrada del plugin configurado para el siguiente intento de reparación. - Doctor repara la configuración obsoleta de plugins eliminando los identificadores de plugins ausentes de
plugins.allow/plugins.deny/plugins.entries, además de la configuración de canal, los destinos de heartbeat y las sustituciones de modelos de canales correspondientes que hayan quedado colgando, cuando la detección de plugins funciona correctamente. - Doctor pone en cuarentena la configuración no válida de un plugin deshabilitando la entrada
plugins.entries.<id>afectada y eliminando su carga útilconfigno válida. El inicio del Gateway ya omite únicamente ese plugin defectuoso, de modo que los demás plugins y canales siguen funcionando. - Doctor elimina el valor retirado
plugins.entries.codex.config.codexDynamicToolsProfile; el servidor de aplicaciones de Codex siempre mantiene como nativas las herramientas de espacio de trabajo propias de Codex. - Doctor migra automáticamente la configuración plana heredada de Talk (
talk.voiceId,talk.modelIdy otras relacionadas) atalk.provider+talk.providers.<provider>. Las ejecuciones repetidas dedoctor --fixya no informan ni aplican la normalización de Talk cuando la única diferencia es el orden de las claves del objeto. - Doctor incluye una comprobación de preparación de la búsqueda en memoria y puede recomendar
openclaw configure --section modelcuando faltan las credenciales de embeddings. - Doctor advierte cuando no hay ningún propietario de comandos configurado. El propietario de comandos es la cuenta del operador humano autorizada para ejecutar comandos exclusivos del propietario y aprobar acciones peligrosas. El emparejamiento por mensaje directo solo permite que alguien hable con el bot; si aprobó a un remitente antes de que existiera la inicialización del primer propietario, establezca
commands.ownerAllowFromexplícitamente. - Doctor muestra una nota informativa cuando hay agentes en modo Codex configurados y existen recursos personales de la CLI de Codex en el directorio principal de Codex del operador. Los inicios locales del servidor de aplicaciones de Codex usan directorios principales aislados por agente; instale primero el plugin de Codex si es necesario y luego use
openclaw migrate plan codexpara inventariar los recursos que deban promoverse deliberadamente. - Doctor advierte cuando las Skills permitidas para el agente predeterminado no están disponibles en el entorno de ejecución actual (faltan binarios, variables de entorno, configuración o requisitos del sistema operativo).
doctor --fixpuede deshabilitar esas Skills no disponibles conskills.entries.<skill>.enabled=false; instale o configure el requisito que falta si quiere mantener activa la Skill. - Si el modo de sandbox está habilitado pero Docker no está disponible, doctor muestra una advertencia destacada con medidas correctivas (
install Dockeroopenclaw config set agents.defaults.sandbox.mode off). - Si existen archivos heredados del registro del sandbox o directorios de fragmentos (
~/.openclaw/sandbox/containers.json,~/.openclaw/sandbox/browsers.json,~/.openclaw/sandbox/containers/o~/.openclaw/sandbox/browsers/), doctor informa sobre ellos;--fixmigra las entradas válidas a SQLite y pone en cuarentena los archivos heredados no válidos. - Si
gateway.auth.token/gateway.auth.passwordestán gestionados mediante SecretRef y no están disponibles en la ruta del comando actual, doctor muestra una advertencia de solo lectura y no escribe credenciales alternativas en texto sin formato. Para las SecretRefs respaldadas por exec, doctor omite la ejecución salvo que se incluya--allow-exec. - Si falla la inspección de SecretRef de un canal en una ruta de corrección, doctor continúa e informa de una advertencia en lugar de finalizar antes de tiempo.
- Después de las migraciones del directorio de estado, doctor advierte cuando las cuentas predeterminadas habilitadas de Telegram o Discord dependen de la alternativa mediante variables de entorno y
TELEGRAM_BOT_TOKENoDISCORD_BOT_TOKENno están disponibles para el proceso de doctor. - La resolución automática de nombres de usuario de
allowFromde Telegram (doctor --fix) requiere un token de Telegram resoluble en la ruta del comando actual. Si la inspección del token no está disponible, doctor informa de una advertencia y omite la resolución automática en esa pasada.
macOS: sustituciones del entorno de launchctl
Si anteriormente ejecutó launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (o ...PASSWORD), ese valor prevalece sobre el archivo de configuración y puede provocar errores persistentes de "no autorizado".
launchctl getenv OPENCLAW_GATEWAY_TOKENlaunchctl getenv OPENCLAW_GATEWAY_PASSWORD launchctl unsetenv OPENCLAW_GATEWAY_TOKENlaunchctl unsetenv OPENCLAW_GATEWAY_PASSWORD