Gateway
Configuración
OpenClaw lee una configuración opcional JSON5 de ~/.openclaw/openclaw.json. Si el archivo no existe, OpenClaw utiliza valores predeterminados seguros.
La ruta de configuración activa debe ser un archivo normal. Las escrituras realizadas por OpenClaw lo reemplazan de forma atómica (mediante un cambio de nombre sobre la ruta), por lo que, si openclaw.json es un enlace simbólico, se reemplaza su destino en lugar de escribir a través de él; evite las disposiciones de configuración con enlaces simbólicos. Si mantiene la configuración fuera del directorio de estado predeterminado, haga que OPENCLAW_CONFIG_PATH apunte directamente al archivo real.
Motivos habituales para añadir una configuración:
- Conectar canales y controlar quién puede enviar mensajes al bot
- Configurar modelos, herramientas, aislamiento o automatización (cron, hooks)
- Ajustar sesiones, contenido multimedia, redes o interfaz de usuario
Consulte la referencia completa para conocer todos los campos disponibles.
La configuración sigue una regla de dos grupos: los elementos hermanos de la raíz contienen la infraestructura y los valores predeterminados entre agentes, mientras que agents.defaults contiene el comportamiento del bucle del agente. Las entradas de agents.entries pueden sobrescribir cualquiera de los dos grupos cuando el esquema admite una sobrescritura por agente.
Los agentes y la automatización deben usar config.schema.lookup para consultar la
documentación exacta de cada campo antes de editar la configuración. Use esta página para obtener orientación por tareas y
la referencia de configuración para consultar el mapa
general de campos y valores predeterminados.
Configuración mínima
// ~/.openclaw/openclaw.json{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}Edición de la configuración
Asistente interactivo
openclaw onboard # flujo completo de incorporaciónopenclaw configure # asistente de configuraciónCLI (comandos de una línea)
openclaw config get agents.defaults.workspaceopenclaw config set agents.defaults.heartbeat.every "2h"openclaw config unset plugins.entries.brave.config.webSearch.apiKeyInterfaz de control
Abra http://127.0.0.1:18789 y use la pestaña Config.
La interfaz de control genera un formulario a partir del esquema de configuración activo, incluidos los metadatos
de documentación title / description de los campos y los esquemas de plugins y canales cuando
están disponibles, con un editor Raw JSON como vía alternativa. Para las interfaces
de exploración detallada y otras herramientas, el Gateway también expone config.schema.lookup para
obtener un nodo del esquema limitado a una ruta junto con resúmenes de sus elementos secundarios inmediatos.
Los ajustes muestran primero los campos comunes. Cada sección mantiene sus campos avanzados
en un grupo contraído Advanced (N); use Show advanced para expandir todos los
grupos. La búsqueda de ajustes siempre incluye ambos niveles y abre el grupo
avanzado correspondiente cuando es necesario.
Edición directa
Edite ~/.openclaw/openclaw.json directamente. El Gateway supervisa el archivo y aplica los cambios automáticamente (consulte la recarga en caliente).
Validación estricta
openclaw config schema imprime el JSON Schema canónico que utilizan la interfaz de control
y la validación. config.schema.lookup obtiene un único nodo limitado a una ruta junto con
resúmenes de sus elementos secundarios para las herramientas de exploración detallada. Los metadatos de documentación
title/description de los campos se propagan por los objetos anidados, los comodines (*), los elementos de matrices ([]) y las ramas anyOf/
oneOf/allOf. Los esquemas de plugins y canales en tiempo de ejecución se combinan cuando se
carga el registro de manifiestos.
Cada hoja de configuración tiene un nivel de presentación común o avanzado en uiHints.
advanced: false marca los ajustes comunes y advanced: true marca los ajustes
avanzados. Una hoja hereda el nivel del antecesor más cercano cuando no tiene una indicación directa;
las rutas sin un antecesor declarado se consideran avanzadas de forma predeterminada. Esto afecta únicamente a la presentación,
no a la validación, los valores predeterminados, el comportamiento de recarga ni a si se puede establecer la clave.
Cuando falla la validación:
- El Gateway no se inicia
- Solo funcionan los comandos de diagnóstico (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Ejecute
openclaw doctorpara ver los problemas exactos - Ejecute
openclaw doctor --fix(--repaires la misma opción;--yesomite las solicitudes de confirmación) para aplicar las reparaciones
El Gateway conserva una copia de confianza de la última configuración válida después de cada inicio correcto,
pero ni el inicio ni la recarga en caliente la restauran automáticamente; solo lo hace openclaw doctor --fix.
Si openclaw.json no supera la validación (incluida la validación local del plugin), el inicio
del Gateway falla o se omite la recarga, y el entorno de ejecución actual conserva la última
configuración aceptada. Las escrituras rechazadas también se guardan como <path>.rejected.<timestamp> para su inspección.
El Gateway bloquea las escrituras que parecen sobrescrituras accidentales —como eliminar gateway.mode,
perder el bloque meta o reducir el archivo a menos de la mitad de su tamaño—, salvo que la escritura
permita explícitamente cambios destructivos. La promoción a última configuración válida se omite cuando un
candidato contiene un marcador de posición de secreto censurado, como *** o [redacted].
Tareas habituales
Configurar un canal (WhatsApp, Telegram, Discord, etc.)
Cada canal tiene su propia sección de configuración en channels.<provider>. Consulte la página específica del canal para conocer los pasos de configuración:
- Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - iMessage -
channels.imessage - Mattermost -
channels.mattermost - Microsoft Teams -
channels.msteams - Signal -
channels.signal - Slack -
channels.slack - Telegram -
channels.telegram - WhatsApp -
channels.whatsapp
Todos los canales comparten el mismo patrón de política de mensajes directos:
{ channels: { telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["tg:123"], // solo para allowlist/open }, },}Elegir y configurar modelos
Establezca el modelo principal y las alternativas opcionales:
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["openai/gpt-5.4"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "openai/gpt-5.4": { alias: "GPT" }, }, }, },}agents.defaults.modelsalmacena alias y ajustes por modelo; añadir una entrada nunca restringe las sobrescrituras de/modelni de--model.agents.defaults.modelPolicy.allowes la lista de permitidos explícita para las sobrescrituras y los selectores de modelos. Acepta referencias exactas y comodinesprovider/*; omítala o use[]para permitir cualquier modelo.- Las referencias de modelos utilizan el formato
provider/model(por ejemplo,anthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxcontrola la reducción de escala de imágenes de transcripciones y herramientas (valor predeterminado:1200); los valores inferiores suelen reducir el uso de tokens de visión en ejecuciones con muchas capturas de pantalla.- Consulte CLI de modelos para cambiar de modelo en el chat y Conmutación por error de modelos para conocer la rotación de autenticación y el comportamiento de las alternativas.
- Para proveedores personalizados o autoalojados, consulte Proveedores personalizados en la referencia.
Controlar quién puede enviar mensajes al bot
El acceso a los mensajes directos se controla por canal mediante dmPolicy (valor predeterminado: "pairing"):
"pairing": los remitentes desconocidos reciben un código de vinculación de un solo uso para su aprobación"allowlist": solo los remitentes incluidos enallowFrom(o en el almacén de permitidos vinculados)"open": permite todos los mensajes directos entrantes (requiereallowFrom: ["*"])"disabled": ignora todos los mensajes directos
Para los grupos, use groupPolicy ("allowlist" | "open" | "disabled") junto con groupAllowFrom o las listas de permitidos específicas del canal.
Consulte la referencia completa para obtener información específica de cada canal.
Configurar el requisito de menciones en chats grupales
De forma predeterminada, los mensajes de grupo requieren una mención. Configure los patrones de activación por agente. Las respuestas normales de grupos y canales se publican automáticamente; active la ruta de la herramienta de mensajes para las salas compartidas en las que el agente deba decidir cuándo intervenir:
{ messages: { visibleReplies: "automatic", // establezca "message_tool" para exigir envíos con la herramienta de mensajes en todas partes groupChat: { visibleReplies: "message_tool", // opcional; la salida visible requiere message(action=send) unmentionedInbound: "room_event", // la conversación grupal continua sin menciones sirve como contexto silencioso }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- Menciones mediante metadatos: menciones @ nativas (mención mediante toque en WhatsApp, @bot en Telegram, etc.)
- Patrones de texto: patrones de expresiones regulares seguros en
mentionPatterns - Respuestas visibles:
messages.visibleRepliespuede exigir globalmente los envíos con la herramienta de mensajes;messages.groupChat.visibleRepliessobrescribe ese comportamiento para grupos y canales. - Consulte la referencia completa para conocer los modos de respuesta visible, las sobrescrituras por canal y el modo de chat con uno mismo.
Restringir Skills por agente
Use agents.defaults.skills como base compartida y, después, sobrescriba agentes
específicos con agents.entries.*.skills:
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // hereda github, weather { id: "docs", skills: ["docs-search"] }, // sustituye los valores predeterminados { id: "locked-down", skills: [] }, // sin skills ], },}- Omita
agents.defaults.skillspara permitir de forma predeterminada Skills sin restricciones. - Omita
agents.entries.*.skillspara heredar los valores predeterminados. - Establezca
agents.entries.*.skills: []para no permitir ninguna Skill. - Consulte Skills, Configuración de Skills y la referencia de configuración.
Configurar la supervisión del estado por canal
Desactive o active los reinicios automáticos por estado para un canal o una cuenta:
{ channels: { telegram: { healthMonitor: { enabled: false }, accounts: { alerts: { healthMonitor: { enabled: true }, }, }, }, },}- Use
channels.<provider>.healthMonitor.enabledochannels.<provider>.accounts.<id>.healthMonitor.enabledpara controlar los reinicios automáticos de un canal o una cuenta. - Consulte Comprobaciones de estado para la depuración operativa y la referencia completa para conocer todos los campos.
Configurar sesiones y restablecimientos
Las sesiones controlan la continuidad y el aislamiento de las conversaciones:
{ session: { dmScope: "per-channel-peer", // recomendado para varios usuarios threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, }, reset: { mode: "daily", atHour: 4, idleMinutes: 120, }, },}dmScope:main(compartido) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: valores predeterminados globales para el enrutamiento de sesiones vinculadas a hilos./focus,/unfocus,/agents,/session idley/session max-agevinculan, desvinculan, enumeran y ajustan esta configuración por sesión (Discord vincula hilos; Telegram vincula temas/conversaciones).- Consulte Gestión de sesiones para obtener información sobre el ámbito, los vínculos de identidad y la política de envío.
- Consulte la referencia completa para conocer todos los campos.
Habilitar el aislamiento
Ejecute las sesiones de agentes en entornos aislados:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}Primero compile la imagen: desde una copia de trabajo del código fuente, ejecute scripts/sandbox-setup.sh; si se instaló mediante npm, consulte el comando docker build incluido en Aislamiento § Imágenes y configuración.
Consulte Aislamiento para ver la guía completa y la referencia completa para conocer todas las opciones.
Habilitar notificaciones push mediante retransmisión para compilaciones oficiales de iOS
Las notificaciones push mediante retransmisión para las compilaciones públicas de App Store utilizan el servicio de retransmisión alojado de OpenClaw: https://ios-push-relay.openclaw.ai.
Las implementaciones de retransmisión personalizadas requieren una ruta de compilación e implementación de iOS deliberadamente independiente cuya URL de retransmisión coincida con la URL de retransmisión del Gateway. Si se utiliza una compilación de retransmisión personalizada, establezca lo siguiente en la configuración del Gateway:
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", // Opcional. Valor predeterminado: 10000 timeoutMs: 10000, }, }, }, },}Equivalente en la CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.comFunción de esta configuración:
- Permite que el Gateway envíe
push.test, avisos de activación y activaciones de reconexión mediante el servicio de retransmisión externo. - Utiliza una autorización de envío limitada al registro y reenviada por la aplicación iOS emparejada. El Gateway no necesita un token de retransmisión para toda la implementación.
- Vincula cada registro mediante retransmisión con la identidad del Gateway con el que se emparejó la aplicación iOS, de modo que ningún otro Gateway pueda reutilizar el registro almacenado.
- Mantiene las compilaciones locales/manuales de iOS en APNs directas. Los envíos mediante retransmisión solo se aplican a las compilaciones distribuidas oficialmente que se registraron mediante el servicio de retransmisión.
- Debe coincidir con la URL base de retransmisión integrada en la compilación de iOS, de modo que el tráfico de registro y envío llegue a la misma implementación de retransmisión.
Flujo de extremo a extremo:
- Instale la aplicación oficial de iOS.
- Opcional: configure
gateway.push.apns.relay.baseUrlen el Gateway únicamente cuando utilice una compilación de retransmisión personalizada deliberadamente independiente. - Empareje la aplicación iOS con el Gateway y permita que se conecten tanto las sesiones de Node como las del operador.
- La aplicación iOS obtiene la identidad del Gateway, se registra en el servicio de retransmisión mediante App Attest y el recibo de la aplicación y, a continuación, publica la carga útil
push.apns.registermediante retransmisión en el Gateway emparejado. - El Gateway almacena el identificador de retransmisión y la autorización de envío y, a continuación, los utiliza para
push.test, los avisos de activación y las activaciones de reconexión.
Notas operativas:
- Si se cambia la aplicación iOS a un Gateway diferente, vuelva a conectar la aplicación para que pueda publicar un nuevo registro de retransmisión vinculado a ese Gateway.
- Si se distribuye una nueva compilación de iOS que apunta a una implementación de retransmisión diferente, la aplicación actualiza su registro de retransmisión almacenado en caché en lugar de reutilizar el origen de retransmisión anterior.
Nota de compatibilidad:
OPENCLAW_APNS_RELAY_BASE_URLyOPENCLAW_APNS_RELAY_TIMEOUT_MSsiguen funcionando como sustituciones temporales mediante variables de entorno.- Las URL de retransmisión personalizadas del Gateway deben coincidir con la URL base de retransmisión integrada en la compilación de iOS; el canal de publicación pública de App Store rechaza las sustituciones personalizadas de la URL de retransmisión de iOS.
OPENCLAW_APNS_RELAY_ALLOW_HTTP=truesigue siendo una vía de escape de desarrollo limitada a la interfaz de bucle invertido; no conserve URL de retransmisión HTTP en la configuración.
Consulte Aplicación iOS para ver el flujo de extremo a extremo y Flujo de autenticación y confianza para conocer el modelo de seguridad del servicio de retransmisión.
Configurar Heartbeat (comprobaciones periódicas)
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", }, }, },}every: cadena de duración (30m,2h). Establezca0mpara deshabilitarlo. Valor predeterminado:30m.target:last|none|<channel-id>(por ejemplo,discord,matrix,telegramowhatsapp)directPolicy:allow(valor predeterminado) oblockpara destinos de Heartbeat al estilo de mensajes directos- Consulte Heartbeat para ver la guía completa.
Configurar tareas Cron
{ cron: { enabled: true, sessionRetention: "24h", },}sessionRetention: elimina de las filas de sesiones de SQLite las sesiones finalizadas de ejecuciones aisladas (valor predeterminado:24h; establezcafalsepara deshabilitarlo).- El historial de ejecuciones conserva automáticamente las 2000 filas de terminal más recientes por tarea; las filas perdidas mantienen su periodo de limpieza de 24 horas.
- Consulte Tareas Cron para ver una descripción general de la función y ejemplos de la CLI.
Configurar Webhooks (hooks)
Habilite los puntos de conexión HTTP de Webhook en el Gateway:
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: false, allowedSessionKeyPrefixes: ["hook:"], mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "main", deliver: true, }, ], },}Nota de seguridad:
- Trate todo el contenido de las cargas útiles de hooks/Webhook como entrada no fiable.
- Utilice un
hooks.tokenespecífico; no reutilice secretos de autenticación activos del Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENogateway.auth.password/OPENCLAW_GATEWAY_PASSWORD). - La autenticación de hooks solo admite encabezados (
Authorization: Bearer ...ox-openclaw-token); se rechazan los tokens en la cadena de consulta. hooks.pathno puede ser/; mantenga la entrada de Webhook en una subruta específica, como/hooks.- Mantenga deshabilitadas las opciones para omitir la protección frente a contenido no seguro (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), salvo durante una depuración con un ámbito estrictamente limitado. - Si habilita
hooks.allowRequestSessionKey, establezca tambiénhooks.allowedSessionKeyPrefixespara limitar las claves de sesión seleccionadas por el emisor de la llamada. - Para agentes controlados mediante hooks, se recomienda utilizar niveles de modelos modernos y potentes, además de una política de herramientas estricta (por ejemplo, solo mensajería y aislamiento cuando sea posible).
Consulte la referencia completa para conocer todas las opciones de asignación y la integración con Gmail.
Configurar el enrutamiento multiagente
Ejecute varios agentes aislados con espacios de trabajo y sesiones independientes:
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}Consulte Multiagente y la referencia completa para conocer las reglas de vinculación y los perfiles de acceso de cada agente.
Dividir la configuración en varios archivos ($include)
Utilice $include para organizar configuraciones extensas:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- Archivo único: sustituye el objeto contenedor
- Matriz de archivos: se combinan en profundidad por orden (el último prevalece), hasta 10 niveles anidados
- Claves hermanas: se combinan después de las inclusiones (sustituyen los valores incluidos)
- Rutas relativas: se resuelven con respecto al archivo que realiza la inclusión
- Formato de ruta: las rutas de inclusión no deben contener bytes nulos y deben tener estrictamente menos de 4096 caracteres antes y después de su resolución
- Escrituras propiedad de OpenClaw: cuando una escritura modifica únicamente una sección de nivel superior
respaldada por una inclusión de un solo archivo, como
plugins: { $include: "./plugins.json5" }, OpenClaw actualiza ese archivo incluido y dejaopenclaw.jsonintacto - Escritura directa no admitida: las inclusiones raíz, las matrices de inclusiones y las inclusiones con sustituciones en claves hermanas producen un fallo seguro en las escrituras propiedad de OpenClaw, en lugar de aplanar la configuración
- Confinamiento: las rutas
$includedeben resolverse dentro del directorio que contieneopenclaw.json. Para compartir un árbol entre máquinas o usuarios, establezcaOPENCLAW_INCLUDE_ROOTSen una lista de rutas (:en POSIX,;en Windows) de directorios adicionales a los que puedan hacer referencia las inclusiones. Los enlaces simbólicos se resuelven y vuelven a comprobarse, por lo que una ruta que léxicamente se encuentre en un directorio de configuración, pero cuyo destino real quede fuera de todas las raíces permitidas, también se rechaza. - Gestión de errores: errores claros para archivos ausentes, errores de análisis, inclusiones circulares, formatos de ruta no válidos y longitudes excesivas
Recarga en caliente de la configuración
El Gateway supervisa ~/.openclaw/openclaw.json y aplica los cambios automáticamente; la mayoría de los ajustes no requieren un reinicio manual.
Las modificaciones directas de archivos se consideran no fiables hasta que se validan. El supervisor espera
a que terminen las operaciones temporales de escritura y cambio de nombre del editor, lee el archivo final y rechaza
las modificaciones externas no válidas sin sobrescribir openclaw.json. Las escrituras de configuración
propiedad de OpenClaw utilizan la misma validación del esquema antes de escribir (consulte Validación estricta
para conocer las reglas de sobrescritura y reversión aplicables a cada escritura).
Si aparece config reload skipped (invalid config) o el inicio informa de Invalid config, inspeccione la configuración, ejecute openclaw config validate y, a continuación, ejecute openclaw doctor --fix para repararla. Consulte Solución de problemas del Gateway
para ver la lista de comprobación.
Modos de recarga
| Modo | Comportamiento |
|---|---|
hybrid (predeterminado) |
Aplica al instante y sin reiniciar los cambios seguros. Se reinicia automáticamente para los cambios críticos. |
hot |
Solo aplica sin reiniciar los cambios seguros. Registra una advertencia cuando es necesario reiniciar; el reinicio debe realizarse manualmente. |
restart |
Reinicia el Gateway ante cualquier cambio de configuración, sea seguro o no. |
off |
Desactiva la supervisión de archivos. Los cambios surten efecto en el siguiente reinicio manual. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}Qué se aplica sin reiniciar y qué requiere un reinicio
La mayoría de los campos se aplican sin reiniciar ni interrumpir el servicio; algunas secciones que se aplican de este modo reinician únicamente ese
subsistema (canal, Cron, Heartbeat, monitor de estado) en lugar de todo el Gateway. En el
modo hybrid, los cambios que requieren reiniciar el Gateway se gestionan automáticamente.
| Categoría | Campos | ¿Es necesario reiniciar el Gateway? |
|---|---|---|
| Canales | channels.*, web (WhatsApp): todos los canales integrados y de plugins |
No (reinicia ese canal) |
| Agente y modelos | agent, agents, models, routing |
No |
| Automatización | hooks, cron, agent.heartbeat |
No (reinicia ese subsistema) |
| Sesiones y mensajes | session, messages |
No |
| Herramientas y contenido multimedia | tools, skills, mcp, audio, talk |
No |
| Configuración de plugins | plugins.entries.*, plugins.allow, plugins.deny, plugins.enabled |
No (recarga el entorno de ejecución del plugin) |
| Interfaz de usuario y otros | ui, logging, identity, bindings |
No |
| Servidor del Gateway | gateway.* (puerto, enlace, autenticación, Tailscale, TLS, HTTP, envío) |
Sí |
| Infraestructura | discovery, browser, plugins.load, plugins.installs |
Sí |
Planificación de la recarga
Cuando se edita un archivo fuente al que se hace referencia mediante $include, OpenClaw planifica
la recarga a partir de la estructura definida en el código fuente, no de la vista aplanada en memoria.
Esto mantiene predecibles las decisiones de recarga en caliente (aplicar sin reiniciar frente a reiniciar), incluso cuando una
sola sección de nivel superior reside en su propio archivo incluido, como
plugins: { $include: "./plugins.json5" }. La planificación de la recarga falla de forma segura si la
estructura del código fuente es ambigua.
RPC de configuración (actualizaciones mediante programación)
Para las herramientas que escriben la configuración mediante la API del Gateway, se recomienda este flujo:
config.schema.lookuppara inspeccionar un subárbol (nodo de esquema superficial y resúmenes de sus elementos secundarios)config.getpara obtener la instantánea actual junto conhashconfig.patchpara actualizaciones parciales (parche de combinación JSON: los objetos se combinan,nullelimina y los arreglos se reemplazan cuando se confirma explícitamente mediantereplacePathssi se eliminarían entradas)config.applysolo cuando se pretende reemplazar toda la configuraciónupdate.runpara realizar una autoactualización explícita seguida de un reinicio; incluyacontinuationMessagecuando la sesión posterior al reinicio deba ejecutar un turno de seguimientoupdate.statuspara inspeccionar el indicador de reinicio de la actualización más reciente y verificar la versión en ejecución después de un reinicio
Los agentes deben consultar primero config.schema.lookup para obtener la documentación y las restricciones exactas
de cada campo. Use la referencia de configuración
cuando necesite el mapa de configuración más amplio, los valores predeterminados o enlaces a referencias
específicas de los subsistemas.
Ejemplo de parche parcial:
openclaw gateway call config.get --params '{}' # capturar payload.hashopenclaw gateway call config.patch --params '{ "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }", "baseHash": "<hash>"}'Tanto config.apply como config.patch aceptan raw, baseHash, sessionKey,
note y restartDelayMs. baseHash es obligatorio para ambos métodos cuando ya
existe un archivo de configuración (en una primera escritura sin configuración existente se omite la comprobación).
config.patch también acepta replacePaths, un arreglo de rutas de configuración cuyo reemplazo de arreglos
es intencional. Si un parche reemplazara o eliminara un arreglo existente
con menos entradas, el Gateway rechaza la escritura a menos que esa ruta exacta aparezca
en replacePaths; los arreglos anidados dentro de entradas de arreglos usan [], como
agents.entries.*.skills. Esto evita que las instantáneas truncadas de config.get
sobrescriban silenciosamente los arreglos de enrutamiento o de listas de elementos permitidos. Use config.apply cuando se
pretenda reemplazar toda la configuración.
Variables de entorno
OpenClaw lee las variables de entorno del proceso principal, además de:
.envdesde el directorio de trabajo actual (si está presente)~/.openclaw/.env(alternativa global)
Ninguno de los archivos anula las variables de entorno existentes. También se pueden definir variables de entorno en línea en la configuración:
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-..." }, },}Importación del entorno del shell (opcional)
Si está habilitada y las claves esperadas no están definidas, OpenClaw ejecuta el shell de inicio de sesión e importa únicamente las claves que faltan:
{env: { shellEnv: { enabled: true, timeoutMs: 15000 },},}Variable de entorno equivalente: OPENCLAW_LOAD_SHELL_ENV=1. Valor predeterminado de timeoutMs: 15000.
Sustitución de variables de entorno en valores de configuración
Haga referencia a variables de entorno en cualquier valor de cadena de configuración mediante ${VAR_NAME}:
{gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },}Reglas:
- Solo se admiten nombres en mayúsculas:
[A-Z_][A-Z0-9_]* - Las variables ausentes o vacías generan un error durante la carga
- Use
$${VAR}como escape para generar una salida literal - Funciona dentro de archivos
$include - Sustitución en línea:
"${BASE}/v1"→"https://api.example.com/v1"
Referencias a secretos (entorno, archivo y ejecución)
Para los campos que admiten objetos SecretRef, se puede usar:
{models: { providers: { openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } }, },},skills: { entries: { "image-lab": { apiKey: { source: "file", provider: "filemain", id: "/skills/entries/image-lab/apiKey", }, }, },},channels: { googlechat: { serviceAccount: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, },},}Los detalles de SecretRef (incluido secrets.providers para env/file/exec) se encuentran en Gestión de secretos.
Las rutas de credenciales compatibles se enumeran en Superficie de credenciales de SecretRef.
Consulte Entorno para conocer todas las precedencias y fuentes.
Referencia completa
Para consultar la referencia completa campo por campo, consulte la Referencia de configuración.
Relacionado: Ejemplos de configuración · Referencia de configuración · Doctor