~/.openclaw/openclaw.json: claves, valores predeterminados y enlaces a páginas más profundas de subsistemas. Para orientación de configuración orientada a tareas, consulta Configuración. Los catálogos de comandos propiedad de canales y plugins, y los ajustes avanzados de memoria/QMD, viven en sus propias páginas, no aquí.
El formato de configuración es JSON5 (se permiten comentarios y comas finales). Todos los campos son opcionales; OpenClaw usa valores predeterminados seguros cuando se omiten.
La verdad del código prevalece sobre esta página:
openclaw config schemaimprime el JSON Schema en vivo usado para validación y Control UI, con metadatos de paquetes incluidos/plugins/canales fusionados.- Los agentes deben llamar a la acción de herramienta
gatewayconfig.schema.lookuppara obtener un nodo de esquema exacto y acotado por ruta antes de editar la configuración. pnpm config:docs:check/pnpm config:docs:genvalidan el hash de referencia de este documento contra la superficie de esquema actual.
- Referencia de configuración de memoria para
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationsy la configuración de dreaming bajoplugins.entries.memory-core.config.dreaming. - Comandos slash para el catálogo actual de comandos integrados + incluidos.
- Páginas propietarias de canales/plugins para superficies de comandos específicas de canal.
Canales
Las claves de configuración por canal viven en Configuración - canales:channels.* para Slack, Discord, Telegram, WhatsApp, Matrix, iMessage y otros canales incluidos (autenticación, control de acceso, múltiples cuentas, activación por mención).
Valores predeterminados de agentes, multiagente, sesiones y mensajes
Consulta Configuración - agentes para:agents.defaults.*(workspace, modelo, razonamiento, Heartbeat, memoria, medios, Skills, sandbox)multiAgent.*(enrutamiento y enlaces multiagente)session.*(ciclo de vida de sesión, Compaction, poda)messages.*(entrega de mensajes, TTS, renderizado de markdown)talk.*(modo Talk)talk.consultThinkingLevel: anulación del nivel de razonamiento para la ejecución completa del agente OpenClaw detrás de las consultas en tiempo real de Control UI Talktalk.consultFastMode: anulación única de modo rápido para consultas en tiempo real de Control UI Talktalk.speechLocale: id de configuración regional BCP 47 opcional para el reconocimiento de voz de Talk en iOS/macOStalk.silenceTimeoutMs: cuando no se establece, Talk mantiene la ventana de pausa predeterminada de la plataforma antes de enviar la transcripción (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: alternativa de retransmisión de Gateway para transcripciones finales en tiempo real de Talk que omitenopenclaw_agent_consult
Herramientas y proveedores personalizados
La política de herramientas, los conmutadores experimentales, la configuración de herramientas respaldadas por proveedores y la configuración de proveedores personalizados / URL base viven en Configuración - herramientas y proveedores personalizados.Modelos
Las definiciones de proveedores, las listas de modelos permitidos y la configuración de proveedores personalizados viven en Configuración - herramientas y proveedores personalizados. La raízmodels también posee el comportamiento global del catálogo de modelos.
models.mode: comportamiento del catálogo de proveedores (mergeoreplace).models.providers: mapa de proveedores personalizados indexado por id de proveedor.models.providers.*.localService: gestor de procesos opcional bajo demanda para servidores de modelos locales. OpenClaw sondea el endpoint de salud configurado, inicia elcommandabsoluto cuando es necesario, espera a que esté listo y luego envía la solicitud del modelo. Consulta Servicios de modelos locales.models.pricing.enabled: controla el arranque de precios en segundo plano que comienza después de que los sidecars y canales alcanzan la ruta lista del Gateway. Cuando esfalse, el Gateway omite las obtenciones de catálogos de precios de OpenRouter y LiteLLM; los valores configurados demodels.providers.*.models[].costsiguen funcionando para estimaciones locales de coste.
MCP
Las definiciones de servidores MCP gestionadas por OpenClaw viven bajomcp.servers y son
consumidas por OpenClaw embebido y otros adaptadores de runtime. Los comandos openclaw mcp list,
show, set y unset gestionan este bloque sin conectarse al
servidor de destino durante las ediciones de configuración.
mcp.servers: definiciones con nombre de servidores MCP stdio o remotos para runtimes que exponen herramientas MCP configuradas. Las entradas remotas usantransport: "streamable-http"otransport: "sse";type: "http"es un alias nativo de CLI queopenclaw mcp setyopenclaw doctor --fixnormalizan al campo canónicotransport.mcp.servers.<name>.enabled: establecefalsepara conservar una definición de servidor guardada mientras se excluye del descubrimiento MCP de OpenClaw embebido y de la proyección de herramientas.mcp.servers.<name>.timeout/requestTimeoutMs: tiempo de espera de solicitud MCP por servidor en segundos o milisegundos.mcp.servers.<name>.connectTimeout/connectionTimeoutMs: tiempo de espera de conexión por servidor en segundos o milisegundos.mcp.servers.<name>.supportsParallelToolCalls: indicación de concurrencia opcional para adaptadores que pueden elegir si emitir llamadas paralelas a herramientas MCP.mcp.servers.<name>.auth: establece"oauth"para servidores MCP HTTP que requieren OAuth. Ejecutaopenclaw mcp login <name>para almacenar tokens bajo el estado de OpenClaw.mcp.servers.<name>.oauth: anulaciones opcionales de alcance OAuth, URL de redirección y URL de metadatos de cliente.mcp.servers.<name>.sslVerify,clientCert,clientKey: controles TLS HTTP para endpoints privados y TLS mutuo.mcp.servers.<name>.toolFilter: selección opcional de herramientas por servidor.includelimita las herramientas MCP descubiertas a nombres coincidentes;excludeoculta nombres coincidentes. Las entradas son nombres exactos de herramientas MCP o globs simples con*. Los servidores con recursos o prompts también generan nombres de herramientas de utilidad (resources_list,resources_read,prompts_list,prompts_get), y esos nombres usan el mismo filtro.mcp.servers.<name>.codex: controles opcionales de proyección del app-server de Codex. Este bloque son metadatos de OpenClaw solo para hilos de app-server de Codex; no afecta a sesiones ACP, configuración genérica de arnés Codex ni otros adaptadores de runtime.codex.agentsno vacío limita el servidor a los ids de agentes OpenClaw listados. Las listas de agentes acotadas vacías, en blanco o inválidas son rechazadas por la validación de configuración y omitidas por la ruta de proyección de runtime en lugar de volverse globales.codex.defaultToolsApprovalModeemite eldefault_tools_approval_modenativo de Codex para ese servidor. OpenClaw elimina el bloquecodexantes de pasar la configuración nativamcp_serversa Codex. Omite el bloque para mantener el servidor proyectado para todos los agentes de app-server de Codex con el comportamiento predeterminado de aprobación MCP de Codex.mcp.sessionIdleTtlMs: TTL de inactividad para runtimes MCP incluidos con alcance de sesión. Las ejecuciones embebidas únicas solicitan limpieza al final de la ejecución; este TTL es el respaldo para sesiones de larga duración y futuros llamadores.- Los cambios bajo
mcp.*se aplican en caliente descartando runtimes MCP de sesión en caché. El siguiente descubrimiento/uso de herramientas los recrea desde la nueva configuración, por lo que las entradasmcp.serverseliminadas se recogen de inmediato en lugar de esperar al TTL de inactividad. - El descubrimiento de runtime también respeta las notificaciones de cambio de lista de herramientas MCP descartando el catálogo en caché para esa sesión. Los servidores que anuncian recursos o prompts obtienen herramientas de utilidad para listar/leer recursos y listar/obtener prompts. Los fallos repetidos de llamadas a herramientas pausan brevemente el servidor afectado antes de intentar otra llamada.
Skills
allowBundled: lista de permitidos opcional solo para skills incluidas (skills gestionadas/de workspace no afectadas).load.extraDirs: raíces compartidas adicionales de skills (menor precedencia).load.allowSymlinkTargets: raíces de destino reales de confianza en las que los symlinks de skills pueden resolverse cuando el enlace vive fuera de su raíz de origen configurada.workshop.allowSymlinkTargetWrites: permite que Skill Workshop apply escriba a través de destinos de symlink ya confiables (predeterminado: false).install.preferBrew: cuando es true, prefiere instaladores de Homebrew cuandobrewestá disponible antes de recurrir a otros tipos de instalador.install.nodeManager: preferencia de instalador de Node para especificacionesmetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: permite que clientes Gatewayoperator.adminde confianza instalen archivos zip privados preparados a través deskills.upload.*(predeterminado: false). Esto solo habilita la ruta de archivos cargados; las instalaciones normales de ClawHub no lo requieren.entries.<skillKey>.enabled: falsedeshabilita una skill incluso si está incluida/instalada.entries.<skillKey>.apiKey: comodidad para skills que declaran una variable de entorno principal (cadena de texto plano u objeto SecretRef).limits.maxCandidatesPerRoot,limits.maxSkillsLoadedPerSource,limits.maxSkillsInPrompt,limits.maxSkillsPromptChars,limits.maxSkillFileBytes: limitan el descubrimiento de skills y el prompt de skills orientado al modelo.- La configuración de autonomía/aprobación de Skill Workshop (
workshop.autonomous.enabled,workshop.approvalPolicy,workshop.maxPending,workshop.maxSkillBytes) está documentada en Configuración de Skills.
Plugins
- Cargados desde directorios de paquetes o bundles bajo
~/.openclaw/extensionsy<workspace>/.openclaw/extensions, además de archivos o directorios enumerados enplugins.load.paths. - Coloca los archivos de Plugin independientes en
plugins.load.paths; las raíces de extensiones descubiertas automáticamente ignoran los archivos.js,.mjsy.tsde nivel superior para que los scripts auxiliares en esas raíces no bloqueen el inicio. - El descubrimiento acepta Plugins nativos de OpenClaw además de bundles compatibles de Codex y bundles de Claude, incluidos bundles de Claude sin manifiesto con diseño predeterminado.
- Los cambios de configuración requieren reiniciar el Gateway.
allow: lista de permitidos opcional (solo se cargan los Plugins enumerados).denyprevalece.plugins.entries.<id>.apiKey: campo práctico de clave API a nivel de Plugin (cuando el Plugin lo admite).plugins.entries.<id>.env: mapa de variables de entorno con alcance de Plugin.plugins.entries.<id>.hooks.allowPromptInjection: cuando esfalse, el núcleo bloqueabefore_prompt_builde ignora los campos que mutan el prompt desde elbefore_agent_startheredado, mientras conserva losmodelOverrideyproviderOverrideheredados. Se aplica a hooks de Plugins nativos y a directorios de hooks proporcionados por bundles compatibles.plugins.entries.<id>.hooks.allowConversationAccess: cuando estrue, los Plugins de confianza no incluidos en bundles pueden leer contenido sin procesar de conversaciones desde hooks tipados comollm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeyagent_end.plugins.entries.<id>.subagent.allowModelOverride: confía explícitamente en este Plugin para solicitar sobrescrituras deproviderymodelpor ejecución para ejecuciones de subagentes en segundo plano.plugins.entries.<id>.subagent.allowedModels: lista de permitidos opcional de destinos canónicosprovider/modelpara sobrescrituras de subagentes de confianza. Usa"*"solo cuando quieras permitir intencionadamente cualquier modelo.plugins.entries.<id>.llm.allowModelOverride: confía explícitamente en este Plugin para solicitar sobrescrituras de modelo paraapi.runtime.llm.complete.plugins.entries.<id>.llm.allowedModels: lista de permitidos opcional de destinos canónicosprovider/modelpara sobrescrituras de finalización LLM de Plugins de confianza. Usa"*"solo cuando quieras permitir intencionadamente cualquier modelo.plugins.entries.<id>.llm.allowAgentIdOverride: confía explícitamente en este Plugin para ejecutarapi.runtime.llm.completecontra un id de agente no predeterminado.plugins.entries.<id>.config: objeto de configuración definido por el Plugin (validado por el esquema de Plugin nativo de OpenClaw cuando esté disponible).- La configuración de cuenta/tiempo de ejecución del Plugin de canal vive bajo
channels.<id>y debe describirse mediante los metadatoschannelConfigsdel manifiesto del Plugin propietario, no mediante un registro central de opciones de OpenClaw.
Configuración del Plugin de arnés de Codex
El Plugin incluidocodex es propietario de la configuración nativa del arnés del servidor de aplicaciones de Codex bajo
plugins.entries.codex.config. Consulta la
referencia del arnés de Codex para ver toda la superficie de configuración
y arnés de Codex para el modelo de tiempo de ejecución.
codexPlugins se aplica solo a sesiones que seleccionan el arnés nativo de Codex.
No habilita Plugins de Codex para ejecuciones del proveedor de OpenClaw, enlaces de conversación de ACP
ni ningún arnés que no sea Codex.
plugins.entries.codex.config.codexPlugins.enabled: habilita la compatibilidad nativa de Plugins/aplicaciones de Codex para el arnés de Codex. Valor predeterminado:false.plugins.entries.codex.config.codexPlugins.allow_all_plugins: expone cada aplicación actualmente accesible conectada a la cuenta de Codex autenticada en cada nuevo hilo nativo de Codex. Valor predeterminado:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: política predeterminada de acciones destructivas para solicitudes de aplicaciones de Plugin migradas. Usatruepara aceptar esquemas seguros de aprobación de Codex sin preguntar,falsepara rechazarlos,"auto"para enrutar las aprobaciones requeridas por Codex a través de aprobaciones de Plugins de OpenClaw, o"ask"para preguntar por cada acción de escritura/destructiva de Plugin sin aprobación duradera. El modo"ask"borra las sobrescrituras duraderas de aprobación por herramienta de Codex para la aplicación afectada y selecciona el revisor humano de aprobaciones para esa aplicación antes de que empiece el hilo de Codex. Valor predeterminado:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: habilita una entrada de Plugin migrada cuandocodexPlugins.enabledglobal también es true. Valor predeterminado:truepara entradas explícitas.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: identidad estable del marketplace. V1 solo admite"openai-curated".plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: identidad estable del Plugin de Codex desde la migración, por ejemplo"google-calendar".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: sobrescritura de acción destructiva por Plugin. Cuando se omite, se usa el valor globalallow_destructive_actions. El valor por Plugin acepta las mismas políticastrue,false,"auto"o"ask".
"ask" enruta las solicitudes de aprobación de esa aplicación
al revisor humano. Otras aplicaciones y aprobaciones de hilos que no son de aplicación conservan su
revisor configurado, por lo que las políticas mixtas de Plugins no heredan el comportamiento de "ask".
codexPlugins.enabled es la directiva global de habilitación. Las entradas explícitas de Plugin
escritas por la migración son el conjunto duradero de instalación y elegibilidad para reparación.
plugins["*"] no es compatible, no hay interruptor install, y los valores locales
marketplacePath no son campos de configuración intencionadamente porque son
específicos del host.
Las comprobaciones de preparación de app/list se almacenan en caché durante una hora y se actualizan
de forma asíncrona cuando quedan obsoletas. La configuración de aplicaciones del hilo de Codex se calcula al establecer la sesión del arnés de Codex, no en cada turno; usa /new, /reset o un reinicio del Gateway después de cambiar la configuración nativa de Plugins.
codexPlugins.allow_all_plugins captura una instantánea de cada aplicación de cuenta actualmente accesible
en cada nuevo hilo nativo de Codex. No instala Plugins ni aplicaciones, y
las aplicaciones inaccesibles permanecen excluidas. Las aplicaciones de cuenta usan la política global
codexPlugins.allow_destructive_actions. Las entradas explícitas de Plugin tienen
precedencia cuando la misma aplicación está presente en ambas rutas. Si app/list no se puede
leer, la exposición de toda la cuenta falla cerrada.
plugins.entries.firecrawl.config.webFetch: configuración del proveedor de obtención web de Firecrawl.apiKey: clave API opcional de Firecrawl para límites más altos (acepta SecretRef). Recurre aplugins.entries.firecrawl.config.webSearch.apiKey, el heredadotools.web.fetch.firecrawl.apiKeyo la variable de entornoFIRECRAWL_API_KEY.baseUrl: URL base de la API de Firecrawl (valor predeterminado:https://api.firecrawl.dev; las sobrescrituras autoalojadas deben apuntar a endpoints privados/internos).onlyMainContent: extrae solo el contenido principal de las páginas (valor predeterminado:true).maxAgeMs: antigüedad máxima de caché en milisegundos (valor predeterminado:172800000/ 2 días).timeoutSeconds: tiempo de espera de la solicitud de extracción en segundos (valor predeterminado:60).
plugins.entries.xai.config.xSearch: configuración de xAI X Search (búsqueda web de Grok).enabled: habilita el proveedor X Search.model: modelo de Grok que se usará para la búsqueda (p. ej."grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: configuración de dreaming de memoria. Consulta Dreaming para fases y umbrales.enabled: interruptor maestro de dreaming (valor predeterminadofalse).frequency: cadencia cron para cada barrido completo de dreaming ("0 3 * * *"de forma predeterminada).model: sobrescritura opcional de modelo del subagente Dream Diary. Requiereplugins.entries.memory-core.subagent.allowModelOverride: true; combínalo conallowedModelspara restringir destinos. Los errores de modelo no disponible se reintentan una vez con el modelo predeterminado de la sesión; los fallos de confianza o lista de permitidos no recurren a otro valor silenciosamente.- la política de fases y los umbrales son detalles de implementación (no claves de configuración orientadas al usuario).
- La configuración completa de memoria vive en Referencia de configuración de memoria:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Los Plugins de bundles de Claude habilitados también pueden aportar valores predeterminados incrustados de OpenClaw desde
settings.json; OpenClaw los aplica como configuración saneada del agente, no como parches de configuración sin procesar de OpenClaw. plugins.slots.memory: elige el id del Plugin de memoria activo, o"none"para deshabilitar los Plugins de memoria.plugins.slots.contextEngine: elige el id del Plugin de motor de contexto activo; el valor predeterminado es"legacy"a menos que instales y selecciones otro motor.
Compromisos
commitments controla la memoria de seguimiento inferida: OpenClaw puede detectar comprobaciones desde turnos de conversación y entregarlas mediante ejecuciones de Heartbeat.
commitments.enabled: habilita la extracción LLM oculta, el almacenamiento y la entrega por Heartbeat para compromisos de seguimiento inferidos. Valor predeterminado:false.commitments.maxPerDay: número máximo de compromisos de seguimiento inferidos entregados por sesión de agente en un día móvil. Valor predeterminado:3.
Navegador
evaluateEnabled: falsedeshabilitaact:evaluateywait --fn.tabCleanuprecupera las pestañas rastreadas del agente principal después de un tiempo de inactividad o cuando una sesión supera su límite. ConfiguraidleMinutes: 0omaxTabsPerSession: 0para deshabilitar esos modos de limpieza individuales.ssrfPolicy.dangerouslyAllowPrivateNetworkestá deshabilitado cuando no se define, por lo que la navegación del navegador permanece estricta de forma predeterminada.- Configura
ssrfPolicy.dangerouslyAllowPrivateNetwork: truesolo cuando confíes intencionalmente en la navegación del navegador por red privada. - En modo estricto, los endpoints de perfil CDP remotos (
profiles.*.cdpUrl) están sujetos al mismo bloqueo de red privada durante las comprobaciones de alcanzabilidad/descubrimiento. ssrfPolicy.allowPrivateNetworksigue siendo compatible como alias heredado.- En modo estricto, usa
ssrfPolicy.hostnameAllowlistyssrfPolicy.allowedHostnamespara excepciones explícitas. - Los perfiles remotos son solo de adjunción (inicio/detención/restablecimiento deshabilitados).
profiles.*.cdpUrlaceptahttp://,https://,ws://ywss://. Usa HTTP(S) cuando quieras que OpenClaw descubra/json/version; usa WS(S) cuando tu proveedor te dé una URL WebSocket de DevTools directa.remoteCdpTimeoutMsyremoteCdpHandshakeTimeoutMsse aplican a la alcanzabilidad CDP remota yattachOnly, además de las solicitudes de apertura de pestañas. Los perfiles de local loopback gestionados conservan los valores predeterminados locales de CDP. La enumeración persistente de pestañas remotas de Playwright usa el valor mayor como fecha límite de operación.- Si un servicio CDP gestionado externamente es alcanzable a través de loopback, configura
attachOnly: trueen ese perfil; de lo contrario, OpenClaw trata el puerto loopback como un perfil de navegador gestionado localmente y puede informar errores de propiedad del puerto local. - Los perfiles
existing-sessionusan Chrome MCP en lugar de CDP y pueden adjuntarse en el host seleccionado o a través de un nodo de navegador conectado. - Los perfiles
existing-sessionpueden configuraruserDataDirpara apuntar a un perfil específico de navegador basado en Chromium, como Brave o Edge. - Los perfiles
existing-sessionpueden configurarcdpUrlcuando Chrome ya se está ejecutando detrás de un endpoint de descubrimiento HTTP(S) de DevTools o un endpoint WS(S) directo. En ese modo, OpenClaw pasa el endpoint a Chrome MCP en lugar de usar conexión automática;userDataDirse ignora para los argumentos de inicio de Chrome MCP. - Los perfiles
existing-sessionconservan los límites de ruta actuales de Chrome MCP: acciones basadas en snapshot/ref en lugar de selección por CSS, hooks de carga de un solo archivo, sin anulaciones de tiempo de espera de diálogos, sinwait --load networkidley sinresponsebody, exportación a PDF, interceptación de descargas ni acciones por lotes. - Los perfiles locales gestionados
openclawasignan automáticamentecdpPortycdpUrl; configuracdpUrlexplícitamente solo para perfiles CDP remotos o adjunción a endpoint de existing-session. - Los perfiles locales gestionados pueden configurar
executablePathpara anular elbrowser.executablePathglobal de ese perfil. Usa esto para ejecutar un perfil en Chrome y otro en Brave. - Los perfiles locales gestionados usan
browser.localLaunchTimeoutMspara el descubrimiento HTTP de Chrome CDP después del inicio del proceso ybrowser.localCdpReadyTimeoutMspara la disponibilidad del websocket CDP posterior al inicio. Auméntalos en hosts más lentos donde Chrome se inicia correctamente pero las comprobaciones de disponibilidad compiten con el arranque. Ambos valores deben ser enteros positivos de hasta120000ms; los valores de configuración no válidos se rechazan. - Orden de autodetección: navegador predeterminado si está basado en Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathybrowser.profiles.<name>.executablePathaceptan~y~/...para el directorio de inicio de tu sistema operativo antes del inicio de Chromium.userDataDirpor perfil en perfilesexisting-sessiontambién expande la tilde.- Servicio de control: solo loopback (puerto derivado de
gateway.port, predeterminado18791). extraArgsagrega indicadores de inicio adicionales al arranque local de Chromium (por ejemplo--disable-gpu, tamaño de ventana o indicadores de depuración).
UI
seamColor: color de acento para el marco de UI de la aplicación nativa (tinte de burbuja de Talk Mode, etc.).assistant: anulación de identidad de Control UI. Recurre a la identidad del agente activo.
Gateway
Detalles de campos de Gateway
Detalles de campos de Gateway
mode:local(ejecutar Gateway) oremote(conectarse a un Gateway remoto). Gateway se niega a iniciar a menos que sealocal.port: puerto multiplexado único para WS + HTTP. Precedencia:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(predeterminado),lan(0.0.0.0),tailnet(solo IP de Tailscale) ocustom.- Alias de bind heredados: usa valores de modo bind en
gateway.bind(auto,loopback,lan,tailnet,custom), no alias de host (0.0.0.0,127.0.0.1,localhost,::,::1). - Nota sobre Docker: el bind
loopbackpredeterminado escucha en127.0.0.1dentro del contenedor. Con redes bridge de Docker (-p 18789:18789), el tráfico llega poreth0, por lo que el Gateway no es accesible. Usa--network host, o establecebind: "lan"(obind: "custom"concustomBindHost: "0.0.0.0") para escuchar en todas las interfaces. - Autenticación: requerida de forma predeterminada. Los binds que no son loopback requieren autenticación de Gateway. En la práctica, eso significa un token/contraseña compartidos o un proxy inverso con identidad y
gateway.auth.mode: "trusted-proxy". El asistente de onboarding genera un token de forma predeterminada. - Si
gateway.auth.tokenygateway.auth.passwordestán configurados (incluidos SecretRefs), establecegateway.auth.modeexplícitamente entokenopassword. Los flujos de inicio e instalación/reparación del servicio fallan cuando ambos están configurados y el modo no está establecido. gateway.auth.mode: "none": modo explícito sin autenticación. Úsalo solo para configuraciones local loopback de confianza; intencionadamente, no se ofrece en las indicaciones de onboarding.gateway.auth.mode: "trusted-proxy": delega la autenticación del navegador/usuario a un proxy inverso con identidad y confía en los encabezados de identidad degateway.trustedProxies(consulta Autenticación de proxy de confianza). Este modo espera de forma predeterminada un origen de proxy que no sea loopback; los proxies inversos loopback en el mismo host requierengateway.auth.trustedProxy.allowLoopback = trueexplícito. Los llamadores internos del mismo host pueden usargateway.auth.passwordcomo fallback directo local;gateway.auth.tokensigue siendo mutuamente excluyente con el modo trusted-proxy.gateway.auth.allowTailscale: cuando estrue, los encabezados de identidad de Tailscale Serve pueden satisfacer la autenticación de la UI de control/WebSocket (verificada mediantetailscale whois). Los endpoints de la API HTTP no usan esa autenticación de encabezado de Tailscale; en su lugar, siguen el modo de autenticación HTTP normal del Gateway. Este flujo sin token asume que el host del Gateway es de confianza. El valor predeterminado estruecuandotailscale.mode = "serve".gateway.auth.rateLimit: limitador opcional de autenticaciones fallidas. Se aplica por IP de cliente y por ámbito de autenticación (shared-secret y device-token se rastrean de forma independiente). Los intentos bloqueados devuelven429+Retry-After.- En la ruta asíncrona de la UI de control de Tailscale Serve, los intentos fallidos para el mismo
{scope, clientIp}se serializan antes de escribir el fallo. Por lo tanto, los intentos malos concurrentes del mismo cliente pueden activar el limitador en la segunda solicitud en vez de pasar ambos en carrera como simples discrepancias. gateway.auth.rateLimit.exemptLoopbacktiene como valor predeterminadotrue; establécelo enfalsecuando quieras intencionadamente que el tráfico de localhost también tenga límite de tasa (para configuraciones de prueba o despliegues de proxy estrictos).
- En la ruta asíncrona de la UI de control de Tailscale Serve, los intentos fallidos para el mismo
- Los intentos de autenticación WS con origen de navegador siempre se limitan con la exención de loopback deshabilitada (defensa en profundidad contra fuerza bruta de localhost basada en navegador).
- En loopback, esos bloqueos por origen de navegador se aíslan por valor
Originnormalizado, por lo que los fallos repetidos de un origen localhost no bloquean automáticamente un origen distinto. tailscale.mode:serve(solo tailnet, bind loopback) ofunnel(público, requiere autenticación).tailscale.serviceName: nombre opcional de servicio de Tailscale para modo Serve, comosvc:openclaw. Cuando se establece, OpenClaw lo pasa atailscale serve --servicepara que la UI de control pueda exponerse mediante un servicio con nombre en vez del hostname del dispositivo. El valor debe usar el formato de nombre de serviciosvc:<dns-label>de Tailscale; el inicio informa la URL de servicio derivada.tailscale.preserveFunnel: cuando estrueytailscale.mode = "serve", OpenClaw compruebatailscale funnel statusantes de volver a aplicar Serve al inicio y lo omite si una ruta Funnel configurada externamente ya cubre el puerto del Gateway. Valor predeterminado:false.controlUi.allowedOrigins: lista de permitidos explícita de orígenes de navegador para conexiones WebSocket de Gateway. Requerida para orígenes de navegador públicos que no sean loopback. Las cargas de UI privadas del mismo origen en LAN/Tailnet desde loopback, RFC1918/link-local,.local,.ts.neto hosts CGNAT de Tailscale se aceptan sin habilitar el fallback de encabezado Host.controlUi.chatMessageMaxWidth: ancho máximo opcional para mensajes de chat agrupados de la UI de control. Acepta valores de ancho CSS restringidos como960px,82%,min(1280px, 82%)ycalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: modo peligroso que habilita el fallback de origen de encabezado Host para despliegues que dependen intencionadamente de una política de origen basada en encabezado Host.terminal.enabled: opta por habilitar la terminal de operador con ámbito de administrador. Valor predeterminado:false. La terminal inicia un PTY del host en el espacio de trabajo del agente seleccionado, hereda el entorno del proceso Gateway y se rechaza para agentes consandbox.mode: "all". Habilítala solo para despliegues de operadores de confianza; cambiarla reinicia el Gateway y actualiza la política de seguridad de contenido de la UI de control.terminal.shell: ejecutable de shell opcional. Cuando no está establecido, OpenClaw usa$SHELLen Unix y%ComSpec%en Windows.terminal.detachedSessionTimeoutSeconds: cuánto tiempo sobrevive una sesión de terminal después de que se cae su conexión (recarga de página, suspensión del portátil), manteniéndose reconectable medianteterminal.attachcon su salida reciente reproducida. Valor predeterminado:300. Establece0para terminar las sesiones en el momento en que se cae su conexión. Las sesiones desconectadas siguen ejecutando sus comandos, así que acorta esto en hosts compartidos o expuestos.remote.transport:ssh(predeterminado) odirect(ws/wss). Paradirect,remote.urldebe serwss://para hosts públicos; el texto planows://se acepta solo para loopback, LAN, link-local,.local,.ts.nety hosts CGNAT de Tailscale.remote.remotePort: puerto del Gateway en el host SSH remoto. Valor predeterminado:18789; usa esto cuando el puerto del túnel local difiere del puerto del Gateway remoto.remote.sshHostKeyPolicy: política de clave de host del túnel SSH de macOS.strictes el valor predeterminado y requiere una clave ya confiable.opensshes una adhesión explícita a la configuración efectiva de OpenSSH para alias administrados; revisa la configuración SSH de usuario y sistema coincidente antes de usarlo. La app de macOS yconfigure-remoterestablecen esta política astrictal cambiar objetivos, a menos que se opte explícitamente de nuevo.gateway.remote.token/.passwordson campos de credenciales de cliente remoto. No configuran la autenticación del Gateway por sí mismos.gateway.push.apns.relay.baseUrl: URL HTTPS base para el relay APNs externo usado después de que las compilaciones iOS respaldadas por relay publiquen registros en el Gateway. Las compilaciones públicas de App Store usan el relay alojado de OpenClaw. Las URL de relay personalizadas deben coincidir con una ruta de compilación/despliegue iOS deliberadamente separada cuya URL de relay apunte a ese relay.gateway.push.apns.relay.timeoutMs: timeout de envío de Gateway a relay en milisegundos. Valor predeterminado:10000.- Los registros respaldados por relay se delegan a una identidad específica del Gateway. La app iOS emparejada obtiene
gateway.identity.get, incluye esa identidad en el registro del relay y reenvía al Gateway una concesión de envío con ámbito de registro. Otro Gateway no puede reutilizar ese registro almacenado. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: overrides temporales de env para la configuración de relay anterior.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: vía de escape solo de desarrollo para URL de relay HTTP loopback. Las URL de relay de producción deben permanecer en HTTPS.gateway.handshakeTimeoutMs: timeout del handshake WebSocket de Gateway previo a autenticación, en milisegundos. Valor predeterminado:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MStiene precedencia cuando está establecido. Auméntalo en hosts cargados o de baja potencia donde los clientes locales pueden conectarse mientras el calentamiento de inicio todavía se estabiliza.gateway.channelHealthCheckMinutes: intervalo del monitor de salud del canal en minutos. Establece0para deshabilitar globalmente los reinicios del monitor de salud. Valor predeterminado:5.gateway.channelStaleEventThresholdMinutes: umbral de socket obsoleto en minutos. Mantén esto mayor o igual quegateway.channelHealthCheckMinutes. Valor predeterminado:30.gateway.channelMaxRestartsPerHour: reinicios máximos del monitor de salud por canal/cuenta en una hora móvil. Valor predeterminado:10.channels.<provider>.healthMonitor.enabled: exclusión por canal de los reinicios del monitor de salud mientras el monitor global permanece habilitado.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: override por cuenta para canales multi-cuenta. Cuando se establece, tiene precedencia sobre el override a nivel de canal.- Las rutas de llamada de Gateway local pueden usar
gateway.remote.*como fallback solo cuandogateway.auth.*no está establecido. - Si
gateway.auth.token/gateway.auth.passwordestá configurado explícitamente mediante SecretRef y no se resuelve, la resolución falla cerrada (sin enmascaramiento por fallback remoto). trustedProxies: IP de proxy inverso que terminan TLS o inyectan encabezados de cliente reenviado. Lista solo proxies que controles. Las entradas loopback siguen siendo válidas para configuraciones de proxy/detección local en el mismo host (por ejemplo, Tailscale Serve o un proxy inverso local), pero no hacen que las solicitudes loopback sean elegibles paragateway.auth.mode: "trusted-proxy".allowRealIpFallback: cuando estrue, el Gateway aceptaX-Real-IPsi faltaX-Forwarded-For. Valor predeterminadofalsepara comportamiento de fallo cerrado.gateway.nodes.pairing.autoApproveCidrs: lista opcional de permitidos CIDR/IP para aprobar automáticamente el emparejamiento por primera vez de dispositivos de nodo sin ámbitos solicitados. Está deshabilitada cuando no está establecida. Esto no aprueba automáticamente emparejamientos de operador/navegador/UI de control/WebChat, y no aprueba automáticamente actualizaciones de rol, ámbito, metadatos o clave pública.gateway.nodes.allowCommands/gateway.nodes.denyCommands: conformación global de permitir/denegar para comandos de nodo declarados después del emparejamiento y la evaluación de la lista de permitidos de la plataforma. UsaallowCommandspara optar por comandos de nodo peligrosos comocamera.snap,camera.clip,screen.record,sms.searchysms.send;denyCommandselimina un comando incluso si un valor predeterminado de plataforma o una autorización explícita lo incluiría de otro modo. El permiso SMS de Android y la autorización de comandos de Gateway son independientes. Después de que un nodo cambie su lista de comandos declarados, rechaza y vuelve a aprobar ese emparejamiento de dispositivo para que el Gateway almacene la instantánea de comandos actualizada.gateway.tools.deny: nombres de herramientas adicionales bloqueados para HTTPPOST /tools/invoke(extiende la lista de denegación predeterminada).gateway.tools.allow: elimina nombres de herramientas de la lista de denegación HTTP predeterminada para llamadores owner/admin. Esto no eleva llamadores con identidadoperator.writea acceso owner/admin;cron,gatewayynodessiguen no disponibles para llamadores que no sean owner, incluso cuando están en la lista de permitidos.
Endpoints compatibles con OpenAI
- RPC HTTP de administrador: desactivado de forma predeterminada como el Plugin
admin-http-rpc. Habilita el Plugin para registrarPOST /api/v1/admin/rpc. Consulta RPC HTTP de administrador. - Chat Completions: deshabilitado de forma predeterminada. Habilítalo con
gateway.http.endpoints.chatCompletions.enabled: true. - Responses API:
gateway.http.endpoints.responses.enabled. - Endurecimiento de entrada URL de Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistLas listas de permitidos vacías se tratan como no establecidas; usagateway.http.endpoints.responses.files.allowUrl=falsey/ogateway.http.endpoints.responses.images.allowUrl=falsepara deshabilitar la obtención de URL.
- Encabezado opcional de endurecimiento de respuesta:
gateway.http.securityHeaders.strictTransportSecurity(establécelo solo para orígenes HTTPS que controles; consulta Autenticación de proxy de confianza)
Aislamiento multiinstancia
Ejecuta varios gateways en un host con puertos y directorios de estado únicos:--dev (usa ~/.openclaw-dev + puerto 19001), --profile <name> (usa ~/.openclaw-<name>).
Consulta Múltiples Gateways.
gateway.tls
enabled: habilita la terminación TLS en el listener del Gateway (HTTPS/WSS) (predeterminado:false).autoGenerate: genera automáticamente un par local de certificado/clave autofirmado cuando no se configuran archivos explícitos; solo para uso local/desarrollo.certPath: ruta del sistema de archivos al archivo de certificado TLS.keyPath: ruta del sistema de archivos al archivo de clave privada TLS; mantenla con permisos restringidos.caPath: ruta opcional del paquete de CA para verificación de clientes o cadenas de confianza personalizadas.
gateway.reload
mode: controla cómo se aplican las ediciones de configuración en tiempo de ejecución."off": ignora las ediciones en vivo; los cambios requieren un reinicio explícito."restart": reinicia siempre el proceso del Gateway ante cambios de configuración."hot": aplica los cambios dentro del proceso sin reiniciar."hybrid"(predeterminado): intenta primero la recarga en caliente; si es necesario, vuelve a reiniciar.
debounceMs: ventana de debounce en ms antes de aplicar los cambios de configuración (entero no negativo; predeterminado:300).deferralTimeoutMs: tiempo máximo opcional en ms para esperar operaciones en curso antes de forzar un reinicio o una recarga en caliente del canal. Omítelo para usar la espera limitada predeterminada (300000); establécelo en0para esperar indefinidamente y registrar advertencias periódicas de elementos aún pendientes.
Hooks
Authorization: Bearer <token> o x-openclaw-token: <token>.
Se rechazan los tokens de hook en la cadena de consulta.
Notas de validación y seguridad:
hooks.enabled=truerequiere unhooks.tokenno vacío.hooks.tokendebe ser distinto de la autenticación active shared-secret del Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENogateway.auth.password/OPENCLAW_GATEWAY_PASSWORD); el arranque registra una advertencia de seguridad no fatal cuando detecta reutilización.openclaw security auditmarca la reutilización de autenticación hook/Gateway como un hallazgo crítico, incluida la autenticación con contraseña del Gateway proporcionada solo en el momento de la auditoría (--auth password --password <password>). Ejecutaopenclaw doctor --fixpara rotar unhooks.tokenpersistido y reutilizado, y luego actualiza los emisores externos de hooks para usar el nuevo token de hook.hooks.pathno puede ser/; usa una subruta dedicada como/hooks.- Si
hooks.allowRequestSessionKey=true, limitahooks.allowedSessionKeyPrefixes(por ejemplo,["hook:"]). - Si un mapeo o preset usa un
sessionKeycon plantilla, configurahooks.allowedSessionKeyPrefixesyhooks.allowRequestSessionKey=true. Las claves de mapeo estáticas no requieren esa habilitación explícita.
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }- El
sessionKeydel payload de la solicitud se acepta solo cuandohooks.allowRequestSessionKey=true(predeterminado:false).
- El
POST /hooks/<name>→ resuelto mediantehooks.mappings- Los valores de
sessionKeyde mapeo renderizados por plantilla se tratan como suministrados externamente y también requierenhooks.allowRequestSessionKey=true.
- Los valores de
Detalles de mapeo
Detalles de mapeo
match.pathcoincide con la subruta después de/hooks(p. ej.,/hooks/gmail→gmail).match.sourcecoincide con un campo del payload para rutas genéricas.- Las plantillas como
{{messages[0].subject}}leen del payload. transformpuede apuntar a un módulo JS/TS que devuelve una acción de hook.transform.moduledebe ser una ruta relativa y permanece dentro dehooks.transformsDir(se rechazan rutas absolutas y traversal).- Mantén
hooks.transformsDirbajo~/.openclaw/hooks/transforms; se rechazan los directorios de Skills del workspace. Siopenclaw doctorinforma que esta ruta no es válida, mueve el módulo de transformación al directorio de transformaciones de hooks o eliminahooks.transformsDir.
agentIdenruta a un agente específico; los ID desconocidos vuelven al agente predeterminado.allowedAgentIds: restringe el enrutamiento efectivo de agentes, incluida la ruta del agente predeterminado cuando se omiteagentId(*u omitido = permitir todos,[]= denegar todos).defaultSessionKey: clave de sesión fija opcional para ejecuciones de agentes de hook sinsessionKeyexplícito.allowRequestSessionKey: permite que los llamadores de/hooks/agenty las claves de sesión de mapeo basadas en plantillas establezcansessionKey(predeterminado:false).allowedSessionKeyPrefixes: lista opcional de prefijos permitidos para valores explícitos desessionKey(solicitud + mapeo), p. ej.,["hook:"]. Se vuelve obligatoria cuando cualquier mapeo o preset usa unsessionKeycon plantilla.deliver: trueenvía la respuesta final a un canal;channelusalastde forma predeterminada.modelsobrescribe el LLM para esta ejecución de hook (debe estar permitido si el catálogo de modelos está configurado).
Integración con Gmail
- El preset integrado de Gmail usa
sessionKey: "hook:gmail:{{messages[0].id}}". - Si mantienes ese enrutamiento por mensaje, establece
hooks.allowRequestSessionKey: truey limitahooks.allowedSessionKeyPrefixespara que coincida con el espacio de nombres de Gmail, por ejemplo["hook:", "hook:gmail:"]. - Si necesitas
hooks.allowRequestSessionKey: false, sobrescribe el preset con unsessionKeyestático en lugar del valor predeterminado con plantilla.
- Gateway inicia automáticamente
gog gmail watch serveal arrancar cuando está configurado. EstableceOPENCLAW_SKIP_GMAIL_WATCHER=1para deshabilitarlo. - No ejecutes un
gog gmail watch serveseparado junto con el Gateway.
Host del Plugin Canvas
- Sirve HTML/CSS/JS editables por agentes y A2UI por HTTP bajo el puerto del Gateway:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Solo local: mantén
gateway.bind: "loopback"(predeterminado). - Enlaces que no son loopback: las rutas de canvas requieren autenticación del Gateway (token/contraseña/proxy de confianza), igual que otras superficies HTTP del Gateway.
- Las WebViews de Node normalmente no envían encabezados de autenticación; después de que un nodo se empareja y conecta, el Gateway anuncia URL de capacidad con alcance de nodo para acceso a canvas/A2UI.
- Las URL de capacidad están vinculadas a la sesión WS activa del nodo y caducan rápidamente. No se usa fallback basado en IP.
- Inyecta el cliente de recarga en vivo en el HTML servido.
- Crea automáticamente un
index.htmlinicial cuando está vacío. - También sirve A2UI en
/__openclaw__/a2ui/. - Los cambios requieren reiniciar el Gateway.
- Deshabilita la recarga en vivo para directorios grandes o errores
EMFILE.
Descubrimiento
mDNS (Bonjour)
minimal(predeterminado): omitecliPath+sshPortde los registros TXT.full: incluyecliPath+sshPort; la publicidad multicast de LAN aún requiere que el Pluginbonjourincluido esté habilitado.off: suprime la publicidad multicast de LAN sin cambiar la habilitación del Plugin.- El Plugin
bonjourincluido se inicia automáticamente en hosts macOS y es opcional en Linux, Windows y despliegues de Gateway en contenedores. - El nombre de host usa de forma predeterminada el nombre de host del sistema cuando es una etiqueta DNS válida, con reserva a
openclaw. Sobrescríbelo conOPENCLAW_MDNS_HOSTNAME. OPENCLAW_DISABLE_BONJOUR=1deshabilita por completo la publicidad mDNS y anuladiscovery.mdns.mode.
Área amplia (DNS-SD)
~/.openclaw/dns/. Para el descubrimiento entre redes, combínalo con un servidor DNS (se recomienda CoreDNS) + DNS dividido de Tailscale.
Configuración: openclaw dns setup --apply.
Entorno
env (variables de entorno en línea)
- Las variables de entorno en línea solo se aplican si falta la clave en el entorno del proceso.
- Archivos
.env:.envdel CWD +~/.openclaw/.env(ninguno sobrescribe variables existentes). shellEnv: importa las claves esperadas que falten desde tu perfil de shell de inicio de sesión.- Consulta Entorno para ver la precedencia completa.
Sustitución de variables de entorno
Referencia variables de entorno en cualquier cadena de configuración con${VAR_NAME}:
- Solo coinciden nombres en mayúsculas:
[A-Z_][A-Z0-9_]*. - Las variables faltantes/vacías generan un error al cargar la configuración.
- Escapa con
$${VAR}para un${VAR}literal. - Funciona con
$include.
Secretos
Las referencias a secretos son aditivas: los valores de texto sin formato siguen funcionando.SecretRef
Usa una forma de objeto:
- Patrón de
provider:^[a-z][a-z0-9_-]{0,63}$ - Patrón de id para
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - id para
source: "file": puntero JSON absoluto (por ejemplo"/providers/openai/apiKey") - Patrón de id para
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(admite selectores estilo AWSsecret#json_key) - Los ids de
source: "exec"no deben contener segmentos de ruta delimitados por barras.ni..(por ejemplo,a/../bse rechaza)
Superficie de credenciales admitida
- Matriz canónica: Superficie de credenciales de SecretRef
secrets applyapunta a rutas de credenciales admitidas deopenclaw.json.- Las referencias de
auth-profiles.jsonse incluyen en la resolución en tiempo de ejecución y en la cobertura de auditoría.
Configuración de proveedores de secretos
- El proveedor
fileadmitemode: "json"ymode: "singleValue"(iddebe ser"value"en modo singleValue). - Las rutas de los proveedores File y exec fallan en modo cerrado cuando la verificación de ACL de Windows no está disponible. Establece
allowInsecurePath: truesolo para rutas de confianza que no se puedan verificar. - El proveedor
execrequiere una ruta absoluta decommandy usa cargas de protocolo en stdin/stdout. - De forma predeterminada, se rechazan las rutas de comandos con enlaces simbólicos. Establece
allowSymlinkCommand: truepara permitir rutas con enlaces simbólicos mientras se valida la ruta de destino resuelta. - Si
trustedDirsestá configurado, la comprobación del directorio de confianza se aplica a la ruta de destino resuelta. - El entorno del proceso hijo de
execes mínimo de forma predeterminada; pasa explícitamente las variables requeridas conpassEnv. - Las referencias a secretos se resuelven en el momento de la activación en una instantánea en memoria; después, las rutas de solicitud solo leen la instantánea.
- El filtrado de superficies activas se aplica durante la activación: las referencias no resueltas en superficies habilitadas hacen fallar el inicio o la recarga, mientras que las superficies inactivas se omiten con diagnósticos.
Almacenamiento de autenticación
- Los perfiles por agente se almacenan en
<agentDir>/auth-profiles.json. auth-profiles.jsonadmite referencias a nivel de valor (keyRefparaapi_key,tokenRefparatoken) para modos de credenciales estáticas.- Los mapas planos heredados de
auth-profiles.json, como{ "provider": { "apiKey": "..." } }, no son un formato de runtime;openclaw doctor --fixlos reescribe como perfiles de clave de API canónicosprovider:defaultcon una copia de seguridad.legacy-flat.*.bak. - Los perfiles en modo OAuth (
auth.profiles.<id>.mode = "oauth") no admiten credenciales de perfil de autenticación respaldadas por SecretRef. - Las credenciales estáticas de runtime provienen de instantáneas resueltas en memoria; las entradas estáticas heredadas de
auth.jsonse limpian cuando se descubren. - Las importaciones OAuth heredadas provienen de
~/.openclaw/credentials/oauth.json. - Consulta OAuth.
- Comportamiento de runtime de secretos y herramientas
audit/configure/apply: Gestión de secretos.
auth.cooldowns
billingBackoffHours: backoff base en horas cuando un perfil falla por errores reales de facturación/crédito insuficiente (predeterminado:5). El texto explícito de facturación aún puede llegar aquí incluso en respuestas401/403, pero los comparadores de texto específicos del proveedor permanecen limitados al proveedor al que pertenecen (por ejemplo, OpenRouterKey limit exceeded). Los mensajes reintentables HTTP402de ventana de uso o límite de gasto de organización/espacio de trabajo permanecen en la rutarate_limiten su lugar.billingBackoffHoursByProvider: anulaciones opcionales por proveedor para las horas de backoff de facturación.billingMaxHours: límite en horas para el crecimiento exponencial del backoff de facturación (predeterminado:24).authPermanentBackoffMinutes: backoff base en minutos para fallosauth_permanentde alta confianza (predeterminado:10).authPermanentMaxMinutes: límite en minutos para el crecimiento del backoffauth_permanent(predeterminado:60).failureWindowHours: ventana móvil en horas usada para contadores de backoff (predeterminado:24).overloadedProfileRotations: rotaciones máximas de perfiles de autenticación del mismo proveedor para errores de sobrecarga antes de cambiar al fallback de modelo (predeterminado:1). Las formas de proveedor ocupado comoModelNotReadyExceptionllegan aquí.overloadedBackoffMs: retraso fijo antes de reintentar una rotación de proveedor/perfil sobrecargado (predeterminado:0).rateLimitedProfileRotations: rotaciones máximas de perfiles de autenticación del mismo proveedor para errores de límite de tasa antes de cambiar al fallback de modelo (predeterminado:1). Esa categoría de límite de tasa incluye texto con forma de proveedor comoToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededyresource exhausted.
Auditoría
openclaw audit o con el RPC de Gateway audit.list.
enabled: registra eventos de auditoría nuevos (predeterminado:true). El libro mayor está activado de forma predeterminada porque una pista de auditoría habilitada solo después de un incidente no puede explicar el incidente. Establecerlo enfalsedetiene de inmediato las escrituras nuevas; los registros existentes permanecen legibles hasta que caduquen. Volver a activarlo reanuda el registro desde ese punto; el hueco no se rellena retroactivamente.
Registro
- Archivo de registro predeterminado:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Establece
logging.filepara una ruta estable. consoleLevelsube adebugcuando se usa--verbose.maxFileBytes: tamaño máximo del archivo de registro activo en bytes antes de la rotación (entero positivo; predeterminado:104857600= 100 MB). OpenClaw conserva hasta cinco archivos numerados junto al archivo activo.redactSensitive/redactPatterns: enmascaramiento de mejor esfuerzo para la salida de consola, registros de archivo, registros de log OTLP y texto persistido de transcripciones de sesión.redactSensitive: "off"solo deshabilita esta política general de registros/transcripciones; las superficies de seguridad de UI/herramientas/diagnóstico siguen redactando secretos antes de emitirlos.
Diagnósticos
enabled: interruptor maestro para la salida de instrumentación (predeterminado:true).flags: arreglo de cadenas de indicadores que habilitan salida de registro dirigida (admite comodines como"telegram.*"o"*").stuckSessionWarnMs: umbral de edad sin progreso en ms para clasificar sesiones de procesamiento de larga duración comosession.long_running,session.stalledosession.stuck(predeterminado:120000). Las respuestas, herramientas, estados, bloques y progreso ACP reinician el temporizador; los diagnósticos repetidossession.stuckaplican backoff mientras no haya cambios.stuckSessionAbortMs: umbral de edad sin progreso en ms antes de que el trabajo activo detenido elegible pueda abortarse y drenarse para recuperación. Cuando no está definido, OpenClaw usa la ventana de ejecución embebida extendida más segura de al menos 5 minutos y 3 vecesstuckSessionWarnMs.memoryPressureSnapshot: captura una instantánea de estabilidad redactada previa a OOM cuando la presión de memoria alcanzacritical(predeterminado:false). Establécelo entruepara añadir el escaneo/escritura del archivo del paquete de estabilidad mientras se mantienen los eventos normales de presión de memoria.otel.enabled: habilita el pipeline de exportación OpenTelemetry (predeterminado:false). Para la configuración completa, el catálogo de señales y el modelo de privacidad, consulta Exportación OpenTelemetry.otel.endpoint: URL del collector para exportación OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: endpoints OTLP opcionales específicos de señal. Cuando se establecen, anulanotel.endpointsolo para esa señal.otel.protocol:"http/protobuf"(predeterminado) o"grpc".otel.headers: encabezados adicionales de metadatos HTTP/gRPC enviados con las solicitudes de exportación OTel.otel.serviceName: nombre del servicio para atributos de recursos.otel.traces/otel.metrics/otel.logs: habilita la exportación de trazas, métricas o registros.otel.logsExporter: destino de exportación de registros:"otlp"(predeterminado),"stdout"para un objeto JSON por línea de stdout, o"both".otel.sampleRate: tasa de muestreo de trazas0-1.otel.flushIntervalMs: intervalo periódico de vaciado de telemetría en ms.otel.captureContent: captura opcional de contenido sin procesar para atributos de spans OTEL. Desactivado de forma predeterminada. El booleanotruecaptura contenido de mensajes/herramientas que no sea del sistema; la forma de objeto permite habilitarinputMessages,outputMessages,toolInputs,toolOutputs,systemPromptytoolDefinitionsexplícitamente.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: interruptor de entorno para la forma de span de inferencia GenAI experimental más reciente, incluidos nombres de span{gen_ai.operation.name} {gen_ai.request.model}, tipo de spanCLIENTygen_ai.provider.nameen lugar delgen_ai.systemheredado. De forma predeterminada, los spans mantienenopenclaw.model.callygen_ai.systempor compatibilidad; las métricas GenAI usan atributos semánticos acotados.OPENCLAW_OTEL_PRELOADED=1: interruptor de entorno para hosts que ya registraron un SDK OpenTelemetry global. OpenClaw omite entonces el inicio/apagado del SDK propiedad del Plugin, pero mantiene activos los listeners de diagnóstico.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTyOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: variables de entorno de endpoint específicas de señal usadas cuando la clave de configuración correspondiente no está definida.cacheTrace.enabled: registra instantáneas de traza de caché para ejecuciones embebidas (predeterminado:false).cacheTrace.filePath: ruta de salida para JSONL de traza de caché (predeterminado:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: controla qué se incluye en la salida de traza de caché (todos predeterminados:true).
Actualización
channel: canal de lanzamiento:"stable","extended-stable","beta"o"dev". Extended-stable es un canal solo de paquetes, en primer plano/bajo demanda; se omite en las comprobaciones de inicio y en la actualización automática en segundo plano.checkOnStart: comprueba actualizaciones de npm cuando el gateway se inicia (predeterminado:true).auto.enabled: habilita la actualización automática en segundo plano para instalaciones de paquetes (predeterminado:false).auto.stableDelayHours: retraso mínimo en horas antes de la aplicación automática del canal estable (predeterminado:6; máx.:168).auto.stableJitterHours: ventana adicional de distribución del despliegue del canal estable en horas (predeterminado:12; máx.:168).auto.betaCheckIntervalHours: frecuencia con la que se ejecutan las comprobaciones del canal beta en horas (predeterminado:1; máx.:24).
ACP
enabled: puerta de activación global de la función ACP (predeterminado:true; establecefalsepara ocultar el despacho de ACP y las facilidades de generación).dispatch.enabled: puerta independiente para el despacho de turnos de sesión ACP (predeterminado:true). Establecefalsepara mantener disponibles los comandos ACP mientras se bloquea la ejecución.backend: id del backend de runtime ACP predeterminado (debe coincidir con un plugin de runtime ACP registrado). Instala primero el plugin de backend y, siplugins.allowestá definido, incluye el id del plugin de backend (por ejemplo,acpx) o el backend ACP no se cargará.fallbacks: lista ordenada de ids de backend ACP de respaldo que se prueban cuando el backend principal falla temprano con un error de apariencia transitoria (no disponible, limitado por tasa, cuota agotada o sobrecargado) antes de producir cualquier salida. Cada entrada debe coincidir con un backend de plugin de runtime ACP registrado.defaultAgent: id del agente de destino ACP de respaldo cuando las generaciones no especifican un destino explícito.allowedAgents: lista de permitidos de ids de agente autorizados para sesiones de runtime ACP; vacío significa que no hay restricción adicional.maxConcurrentSessions: máximo de sesiones ACP activas simultáneamente.stream.coalesceIdleMs: ventana de vaciado por inactividad en ms para texto transmitido.stream.maxChunkChars: tamaño máximo de fragmento antes de dividir la proyección de bloque transmitido.stream.repeatSuppression: suprime líneas de estado/herramienta repetidas por turno (predeterminado:true).stream.deliveryMode:"live"transmite incrementalmente;"final_only"almacena en búfer hasta los eventos terminales del turno.stream.hiddenBoundarySeparator: separador antes del texto visible después de eventos de herramienta ocultos (predeterminado:"paragraph").stream.maxOutputChars: máximo de caracteres de salida del asistente proyectados por turno ACP.stream.maxSessionUpdateChars: máximo de caracteres para líneas de estado/actualización ACP proyectadas.stream.tagVisibility: registro de nombres de etiquetas a anulaciones booleanas de visibilidad para eventos transmitidos.runtime.ttlMinutes: TTL de inactividad en minutos para workers de sesión ACP antes de que sean elegibles para limpieza.runtime.installCommand: comando de instalación opcional para ejecutar al inicializar un entorno de runtime ACP.
CLI
cli.banner.taglineModecontrola el estilo del eslogan del banner:"random"(predeterminado): eslóganes graciosos/estacionales rotativos."default": eslogan neutral fijo (All your chats, one OpenClaw.)."off": sin texto de eslogan (el título/la versión del banner aún se muestran).
- Para ocultar el banner completo (no solo los eslóganes), establece la variable de entorno
OPENCLAW_HIDE_BANNER=1.
Asistente de configuración
Metadatos escritos por flujos de configuración guiada de CLI (onboard, configure, doctor):
Identidad
Consulta los campos de identidad deagents.list en Valores predeterminados de agente.
Puente (heredado, eliminado)
Las compilaciones actuales ya no incluyen el puente TCP. Los nodos se conectan a través del WebSocket de Gateway. Las clavesbridge.* ya no forman parte del esquema de configuración (la validación falla hasta que se eliminan; openclaw doctor --fix puede quitar claves desconocidas).
Configuración de puente heredada (referencia histórica)
Configuración de puente heredada (referencia histórica)
Cron
sessionRetention: cuánto tiempo conservar las sesiones completadas de ejecuciones cron aisladas antes de podarlas desessions.json. También controla la limpieza de transcripciones cron eliminadas archivadas. Predeterminado:24h; establecefalsepara desactivar.runLog.maxBytes: aceptado por compatibilidad con registros de ejecución cron antiguos respaldados por archivos. Predeterminado:2_000_000bytes.runLog.keepLines: filas más recientes del historial de ejecución de SQLite conservadas por trabajo. Predeterminado:2000.webhookToken: token bearer usado para la entrega POST de Webhook de cron (delivery.mode = "webhook"); si se omite, no se envía ningún encabezado de autenticación.webhook: URL de Webhook de respaldo heredada y obsoleta (http/https) usada poropenclaw doctor --fixpara migrar trabajos almacenados que todavía tienennotify: true; la entrega en runtime usadelivery.mode="webhook"por trabajo másdelivery.to, odelivery.completionDestinational conservar la entrega de anuncio.
cron.retry
maxAttempts: reintentos máximos para trabajos cron ante errores transitorios (predeterminado:3; intervalo:0-10).backoffMs: arreglo de demoras de retroceso en ms para cada intento de reintento (predeterminado:[30000, 60000, 300000]; 1-10 entradas).retryOn: tipos de error que activan reintentos:"rate_limit","overloaded","network","timeout","server_error". Omítelo para reintentar todos los tipos transitorios.
cron.failureAlert
enabled: habilita alertas de fallo para trabajos cron (predeterminado:false).after: fallos consecutivos antes de que se dispare una alerta (entero positivo, mín.:1).cooldownMs: milisegundos mínimos entre alertas repetidas para el mismo trabajo (entero no negativo).includeSkipped: cuenta ejecuciones omitidas consecutivas para el umbral de alerta (predeterminado:false). Las ejecuciones omitidas se rastrean por separado y no afectan el retroceso por errores de ejecución.mode: modo de entrega:"announce"envía mediante un mensaje de canal;"webhook"publica en el Webhook configurado.accountId: id opcional de cuenta o canal para delimitar la entrega de alertas.
cron.failureDestination
- Destino predeterminado para notificaciones de fallo de cron en todos los trabajos.
mode:"announce"o"webhook"; el valor predeterminado es"announce"cuando existen datos de destino suficientes.channel: anulación de canal para entrega de anuncio."last"reutiliza el último canal de entrega conocido.to: destino de anuncio explícito o URL de Webhook. Obligatorio para el modo Webhook.accountId: anulación opcional de cuenta para la entrega.delivery.failureDestinationpor trabajo anula este valor predeterminado global.- Cuando no se define un destino de fallo global ni por trabajo, los trabajos que ya entregan mediante
announcevuelven a ese destino de anuncio principal en caso de fallo. delivery.failureDestinationsolo se admite para trabajossessionTarget="isolated"a menos que eldelivery.modeprincipal del trabajo sea"webhook".
Variables de plantilla de modelo multimedia
Marcadores de posición de plantilla expandidos entools.media.models[].args:
| Variable | Descripción |
|---|---|
{{Body}} | Cuerpo completo del mensaje entrante |
{{RawBody}} | Cuerpo sin procesar (sin envoltorios de historial/remitente) |
{{BodyStripped}} | Cuerpo con menciones de grupo quitadas |
{{From}} | Identificador del remitente |
{{To}} | Identificador de destino |
{{MessageSid}} | id de mensaje del canal |
{{SessionId}} | UUID de la sesión actual |
{{IsNewSession}} | "true" cuando se crea una nueva sesión |
{{MediaUrl}} | Pseudo-URL de multimedia entrante |
{{MediaPath}} | Ruta local de multimedia |
{{MediaType}} | Tipo de multimedia (imagen/audio/documento/…) |
{{Transcript}} | Transcripción de audio |
{{Prompt}} | Prompt multimedia resuelto para entradas de CLI |
{{MaxChars}} | Caracteres máximos de salida resueltos para entradas de CLI |
{{ChatType}} | "direct" o "group" |
{{GroupSubject}} | Asunto del grupo (mejor esfuerzo) |
{{GroupMembers}} | Vista previa de miembros del grupo (mejor esfuerzo) |
{{SenderName}} | Nombre para mostrar del remitente (mejor esfuerzo) |
{{SenderE164}} | Número de teléfono del remitente (mejor esfuerzo) |
{{Provider}} | Indicio de proveedor (whatsapp, telegram, discord, etc.) |
Inclusiones de configuración ($include)
Divide la configuración en varios archivos:
- Archivo único: reemplaza el objeto contenedor.
- Arreglo de archivos: se fusionan en profundidad en orden (los posteriores anulan los anteriores).
- Claves hermanas: se fusionan después de las inclusiones (anulan los valores incluidos).
- Inclusiones anidadas: hasta 10 niveles de profundidad.
- Rutas: se resuelven en relación con el archivo que incluye, pero deben permanecer dentro del directorio de configuración de nivel superior (
dirnamedeopenclaw.json). Las formas absolutas/../solo se permiten cuando aún se resuelven dentro de ese límite. EstableceOPENCLAW_INCLUDE_ROOTS(rutas absolutas) para permitir raíces adicionales fuera del directorio de configuración. - Límites: las rutas no deben contener bytes nulos y deben tener estrictamente menos de 4096 caracteres antes y después de la resolución; cada archivo incluido está limitado a 2 MB.
- Las escrituras propiedad de OpenClaw que cambian solo una sección de nivel superior respaldada por una inclusión de archivo único escriben directamente en ese archivo incluido. Por ejemplo,
plugins installactualizaplugins: { $include: "./plugins.json5" }enplugins.json5y dejaopenclaw.jsonintacto. - Las inclusiones raíz, los arreglos de inclusión y las inclusiones con anulaciones hermanas son de solo lectura para escrituras propiedad de OpenClaw; esas escrituras fallan de forma cerrada en lugar de aplanar la configuración.
- Errores: mensajes claros para archivos faltantes, errores de análisis, inclusiones circulares, formato de ruta no válido y longitud excesiva.