Configuración
OpenClaw lee una configuración opcional en desde~/.openclaw/openclaw.json.
Si falta el archivo, OpenClaw usa valores predeterminados seguros. Motivos comunes para añadir una configuración:
- Conectar canales y controlar quién puede enviar mensajes al bot
- Establecer modelos, herramientas, sandboxing o automatización (cron, hooks)
- Ajustar sesiones, medios, red o interfaz de usuario
Configuración mínima
Editar la configuración
- Asistente interactivo
- CLI (one-liners)
- Interfaz de usuario de Control
- Edición directa
Validación estricta
Notas sobre herramientas del esquema:openclaw config schemaimprime la misma familia de JSON Schema usada por la interfaz de usuario de Control y la validación de configuración.- Los valores
titleydescriptionde los campos se trasladan a la salida del esquema para herramientas de edición y formularios. - Las entradas de objetos anidados, comodines (
*) y elementos de arreglo ([]) heredan los mismos metadatos de documentación cuando existe documentación de campo coincidente. - Las ramas de composición
anyOf/oneOf/allOftambién heredan los mismos metadatos de documentación, por lo que las variantes de unión/intersección conservan la misma ayuda de campo. config.schema.lookupdevuelve una ruta de configuración normalizada con un nodo superficial del esquema (title,description,type,enum,const, límites comunes y campos de validación similares), metadatos coincidentes de sugerencias de interfaz y resúmenes inmediatos de sus hijos para herramientas con navegación detallada.- Los esquemas dinámicos de plugins/canales se fusionan cuando la gateway puede cargar el registro actual de manifiestos.
- La Gateway no inicia
- Solo funcionan los comandos de diagnóstico (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Ejecuta
openclaw doctorpara ver los problemas exactos - Ejecuta
openclaw doctor --fix(o--yes) para aplicar reparaciones
Tareas comunes
Configurar un canal (WhatsApp, Telegram, Discord, etc.)
Configurar un canal (WhatsApp, Telegram, Discord, etc.)
channels.<provider>. Consulta la página dedicada de cada canal para ver los pasos de configuración:- WhatsApp —
channels.whatsapp - Telegram —
channels.telegram - Discord —
channels.discord - Feishu —
channels.feishu - Google Chat —
channels.googlechat - Microsoft Teams —
channels.msteams - Slack —
channels.slack - Signal —
channels.signal - iMessage —
channels.imessage - Mattermost —
channels.mattermost
Elegir y configurar modelos
Elegir y configurar modelos
agents.defaults.modelsdefine el catálogo de modelos y actúa como la lista de permitidos para/model.- Las referencias de modelo usan el formato
provider/model(por ejemploanthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxcontrola la reducción de escala de imágenes en transcripciones/herramientas (predeterminado1200); los valores más bajos suelen reducir el uso de vision tokens en ejecuciones con muchas capturas de pantalla.- Consulta Models CLI para cambiar de modelo en el chat y Model Failover para la rotación de autenticación y el comportamiento de fallback.
- Para proveedores personalizados/autohospedados, consulta Custom providers en la referencia.
Controlar quién puede enviar mensajes al bot
Controlar quién puede enviar mensajes al bot
dmPolicy:"pairing"(predeterminado): los remitentes desconocidos reciben un código de emparejamiento de un solo uso para aprobar"allowlist": solo remitentes enallowFrom(o en el almacén de permitidos emparejado)"open": permite todos los mensajes directos entrantes (requiereallowFrom: ["*"])"disabled": ignora todos los mensajes directos
groupPolicy + groupAllowFrom o listas de permitidos específicas del canal.Consulta la referencia completa para ver detalles por canal.Configurar el filtro por mención en chats de grupo
Configurar el filtro por mención en chats de grupo
- Menciones de metadatos: menciones nativas con @ (mencionar con toque en WhatsApp, @bot en Telegram, etc.)
- Patrones de texto: patrones regex seguros en
mentionPatterns - Consulta la referencia completa para ver sobrescrituras por canal y el modo de chat propio.
Restringir Skills por agente
Restringir Skills por agente
agents.defaults.skills para una línea base compartida y luego sobrescribe agentes específicos
con agents.list[].skills:- Omite
agents.defaults.skillspara Skills sin restricciones de forma predeterminada. - Omite
agents.list[].skillspara heredar los valores predeterminados. - Establece
agents.list[].skills: []para no tener Skills. - Consulta Skills, Skills config y la Configuration Reference.
Ajustar la supervisión de salud de canales de la gateway
Ajustar la supervisión de salud de canales de la gateway
- Establece
gateway.channelHealthCheckMinutes: 0para desactivar globalmente los reinicios del monitor de salud. channelStaleEventThresholdMinutesdebe ser mayor o igual que el intervalo de comprobación.- Usa
channels.<provider>.healthMonitor.enabledochannels.<provider>.accounts.<id>.healthMonitor.enabledpara desactivar los reinicios automáticos de un canal o cuenta sin desactivar el monitor global. - Consulta Health Checks para depuración operativa y la referencia completa para todos los campos.
Configurar sesiones y reinicios
Configurar sesiones y reinicios
dmScope:main(compartido) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: valores predeterminados globales para el enrutamiento de sesiones vinculadas a hilos (Discord admite/focus,/unfocus,/agents,/session idley/session max-age).- Consulta Session Management para alcance, enlaces de identidad y política de envío.
- Consulta la referencia completa para todos los campos.
Habilitar sandboxing
Habilitar sandboxing
scripts/sandbox-setup.shConsulta Sandboxing para la guía completa y la referencia completa para todas las opciones.Habilitar push respaldado por relay para compilaciones oficiales de iOS
Habilitar push respaldado por relay para compilaciones oficiales de iOS
openclaw.json.Establece esto en la configuración de gateway:- Permite que la gateway envíe
push.test, avisos de activación y activaciones de reconexión mediante el relay externo. - Usa un permiso de envío delimitado al registro, reenviado por la app iOS emparejada. La gateway no necesita un token de relay para todo el despliegue.
- Vincula cada registro respaldado por relay a la identidad de gateway con la que se emparejó la app iOS, de modo que otra gateway no pueda reutilizar el registro almacenado.
- Mantiene las compilaciones locales/manuales de iOS en APNs directo. Los envíos respaldados por relay se aplican solo a compilaciones oficiales distribuidas que se registraron mediante el relay.
- Debe coincidir con la URL base del relay incorporada en la compilación oficial/TestFlight de iOS, para que el registro y el tráfico de envío lleguen al mismo despliegue de relay.
- Instala una compilación oficial/TestFlight de iOS compilada con la misma URL base de relay.
- Configura
gateway.push.apns.relay.baseUrlen la gateway. - Empareja la app iOS con la gateway y deja que se conecten tanto las sesiones de nodo como las de operador.
- La app iOS obtiene la identidad de la gateway, se registra con el relay usando App Attest más el recibo de la app, y luego publica la carga
push.apns.registerrespaldada por relay en la gateway emparejada. - La gateway almacena el identificador del relay y el permiso de envío, y luego los usa para
push.test, avisos de activación y activaciones de reconexión.
- Si cambias la app iOS a otra gateway, vuelve a conectar la app para que pueda publicar un nuevo registro de relay vinculado a esa gateway.
- Si distribuyes una nueva compilación iOS que apunta a un despliegue diferente de relay, la app actualiza su registro de relay almacenado en caché en lugar de reutilizar el origen de relay anterior.
OPENCLAW_APNS_RELAY_BASE_URLyOPENCLAW_APNS_RELAY_TIMEOUT_MSsiguen funcionando como sobrescrituras temporales de entorno.OPENCLAW_APNS_RELAY_ALLOW_HTTP=truesigue siendo una vía de escape de desarrollo solo para loopback; no conserves URL de relay HTTP en la configuración.
Configurar heartbeat (comprobaciones periódicas)
Configurar heartbeat (comprobaciones periódicas)
every: cadena de duración (30m,2h). Establece0mpara desactivar.target:last|none|<channel-id>(por ejemplodiscord,matrix,telegramowhatsapp)directPolicy:allow(predeterminado) oblockpara objetivos de heartbeat de estilo DM- Consulta Heartbeat para la guía completa.
Configurar cron jobs
Configurar cron jobs
sessionRetention: depura sesiones aisladas de ejecuciones completadas desessions.json(predeterminado24h; establecefalsepara desactivar).runLog: depuracron/runs/<jobId>.jsonlpor tamaño y líneas retenidas.- Consulta Cron Jobs para ver la visión general de la función y ejemplos de CLI.
Configurar webhooks (hooks)
Configurar webhooks (hooks)
- Trata todo el contenido de las cargas hook/webhook como entrada no confiable.
- Usa un
hooks.tokendedicado; no reutilices el token compartido de Gateway. - La autenticación de hooks es solo por encabezado (
Authorization: Bearer ...ox-openclaw-token); se rechazan tokens en query string. hooks.pathno puede ser/; mantén la entrada de webhooks en una subruta dedicada como/hooks.- Mantén desactivadas las banderas de omisión de contenido inseguro (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent) salvo para depuración muy delimitada. - Si habilitas
hooks.allowRequestSessionKey, establece tambiénhooks.allowedSessionKeyPrefixespara acotar las claves de sesión seleccionadas por quien llama. - Para agentes impulsados por hooks, prefiere niveles modernos de modelo fuertes y una política estricta de herramientas (por ejemplo, solo mensajería más sandboxing cuando sea posible).
Configurar enrutamiento multiagente
Configurar enrutamiento multiagente
Dividir la configuración en varios archivos ($include)
Dividir la configuración en varios archivos ($include)
$include para organizar configuraciones grandes:- Un solo archivo: reemplaza el objeto contenedor
- Arreglo de archivos: se fusionan en profundidad en orden (el último gana)
- Claves vecinas: se fusionan después de los includes (sobrescriben los valores incluidos)
- Includes anidados: compatibles hasta 10 niveles de profundidad
- Rutas relativas: se resuelven en relación con el archivo que incluye
- Manejo de errores: errores claros para archivos faltantes, errores de análisis e includes circulares
Recarga en caliente de la configuración
La Gateway observa~/.openclaw/openclaw.json y aplica los cambios automáticamente: no hace falta reiniciar manualmente para la mayoría de los ajustes.
Modos de recarga
| Modo | Comportamiento |
|---|---|
hybrid (predeterminado) | Aplica en caliente al instante los cambios seguros. Reinicia automáticamente para los críticos. |
hot | Solo aplica en caliente los cambios seguros. Registra una advertencia cuando se necesita reiniciar; tú te encargas. |
restart | Reinicia la Gateway ante cualquier cambio de configuración, seguro o no. |
off | Desactiva la observación de archivos. Los cambios se aplican en el siguiente reinicio manual. |
Qué se aplica en caliente y qué requiere reinicio
La mayoría de los campos se aplican en caliente sin tiempo de inactividad. En modohybrid, los cambios que requieren reinicio se gestionan automáticamente.
| Categoría | Campos | ¿Requiere reinicio? |
|---|---|---|
| Canales | channels.*, web (WhatsApp): todos los canales integrados y de extensión | No |
| Agente y modelos | agent, agents, models, routing | No |
| Automatización | hooks, cron, agent.heartbeat | No |
| Sesiones y mensajes | session, messages | No |
| Herramientas y medios | tools, browser, skills, audio, talk | No |
| UI y varios | ui, logging, identity, bindings | No |
| Servidor Gateway | gateway.* (port, bind, auth, tailscale, TLS, HTTP) | Sí |
| Infraestructura | discovery, canvasHost, plugins | Sí |
gateway.reload y gateway.remote son excepciones: cambiarlos no provoca reinicio.RPC de configuración (actualizaciones programáticas)
config.apply, config.patch, update.run) tienen un límite de frecuencia de 3 solicitudes por 60 segundos por deviceId+clientIp. Cuando se alcanza el límite, la RPC devuelve UNAVAILABLE con retryAfterMs.config.schema.lookup: inspecciona un subárbol de configuración delimitado a una ruta con un nodo superficial del esquema, metadatos coincidentes de sugerencias y resúmenes inmediatos de sus hijosconfig.get: obtiene la instantánea actual + hashconfig.patch: ruta preferida para actualizaciones parcialesconfig.apply: solo para reemplazo completo de configuraciónupdate.run: autoactualización explícita + reinicio
config.schema.lookup
y luego config.patch.
config.apply (reemplazo completo)
config.apply (reemplazo completo)
raw(string): carga JSON5 para toda la configuraciónbaseHash(opcional): hash de configuración deconfig.get(obligatorio cuando la configuración existe)sessionKey(opcional): clave de sesión para el ping de reactivación posterior al reinicionote(opcional): nota para el sentinel de reiniciorestartDelayMs(opcional): retraso antes del reinicio (predeterminado 2000)
config.patch (actualización parcial)
config.patch (actualización parcial)
- Los objetos se fusionan recursivamente
nullelimina una clave- Los arreglos se reemplazan
raw(string): JSON5 con solo las claves que se deben cambiarbaseHash(obligatorio): hash de configuración deconfig.getsessionKey,note,restartDelayMs: iguales que enconfig.apply
config.apply: reinicios pendientes consolidados más un tiempo de espera de 30 segundos entre ciclos de reinicio.Variables de entorno
OpenClaw lee variables de entorno del proceso padre, además de:.envdesde el directorio de trabajo actual (si existe)~/.openclaw/.env(fallback global)
Importación de entorno del shell (opcional)
Importación de entorno del shell (opcional)
OPENCLAW_LOAD_SHELL_ENV=1Sustitución de variables de entorno en valores de configuración
Sustitución de variables de entorno en valores de configuración
${VAR_NAME}:- Solo coinciden nombres en mayúsculas:
[A-Z_][A-Z0-9_]* - Variables faltantes/vacías provocan un error al cargar
- Escapa con
$${VAR}para salida literal - Funciona dentro de archivos
$include - Sustitución inline:
"${BASE}/v1"→"https://api.example.com/v1"
Refs de secretos (env, file, exec)
Refs de secretos (env, file, exec)
secrets.providers para env/file/exec) están en Secrets Management.
Las rutas de credenciales compatibles se enumeran en SecretRef Credential Surface.Referencia completa
Para la referencia completa campo por campo, consulta Configuration Reference.Relacionado: Configuration Examples · Configuration Reference · Doctor