Gateway
Referencia de configuración
Referencia a nivel de campo para ~/.openclaw/openclaw.json: claves, valores predeterminados y enlaces a páginas más detalladas de los subsistemas. Para obtener instrucciones de configuración orientadas a tareas, consulta Configuración. Los catálogos de comandos administrados por canales y plugins, así como las opciones avanzadas de memoria/QMD, se encuentran 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 utiliza valores predeterminados seguros cuando se omiten.
El código prevalece sobre esta página:
openclaw config schemamuestra el esquema JSON activo que se utiliza para la validación y la interfaz de control, con los metadatos integrados, de plugins y de canales combinados.- Los agentes deben invocar la acción
config.schema.lookupde la herramientagatewaypara obtener un único nodo exacto del esquema, limitado a una ruta, antes de editar la configuración. pnpm config:docs:check/pnpm config:docs:genvalidan el hash de referencia de este documento con respecto a la superficie actual del esquema.
Referencias detalladas específicas:
- Referencia de configuración de memoria para
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationsy la configuración de Dreaming enplugins.entries.memory-core.config.dreaming. - Comandos con barra para el catálogo actual de comandos integrados y empaquetados.
- Las páginas del canal o plugin propietario para las superficies de comandos específicas de cada canal.
Canales
Las claves de configuración de cada canal se encuentran en Configuración: canales: channels.* para Slack, Discord, Telegram, WhatsApp, Matrix, iMessage y otros canales incluidos (autenticación, control de acceso, varias cuentas y restricción mediante menciones).
Valores predeterminados de los agentes, varios agentes, sesiones y mensajes
Consulte Configuración: agentes para:
agents.defaults.*(espacio de trabajo, modelo, razonamiento, Heartbeat, memoria, contenido multimedia, Skills, entorno aislado)multiAgent.*(enrutamiento y vinculaciones multiagente)session.*(ciclo de vida de la sesión, Compaction, depuración)messages.*(entrega de mensajes, TTS, renderizado de Markdown)talk.*(modo de conversación)talk.consultThinkingLevel: anulación del nivel de razonamiento para la ejecución completa del agente de OpenClaw que sustenta las consultas en tiempo real de Talk en la interfaz de controltalk.consultFastMode: anulación puntual del modo rápido para consultas en tiempo real de Talk en la interfaz de controltalk.speechLocale: identificador de configuración regional BCP 47 opcional para el reconocimiento de voz de Talk en iOS/macOStalk.silenceTimeoutMs: cuando no se establece, Talk mantiene el intervalo de pausa predeterminado de la plataforma antes de enviar la transcripción (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: mecanismo alternativo de retransmisión del Gateway para las transcripciones en tiempo real finalizadas de Talk que omitenopenclaw_agent_consult
Herramientas y proveedores personalizados
La política de herramientas, las opciones experimentales, la configuración de herramientas respaldadas por proveedores y la configuración de proveedores personalizados o URL base se encuentran en Configuración: herramientas y proveedores personalizados.
Modelos
Las definiciones de proveedores, las listas de modelos permitidos y la configuración de proveedores personalizados se encuentran en
Configuración: herramientas y proveedores personalizados.
La raíz models también controla el comportamiento global del catálogo de modelos.
{ models: { // Opcional. Valor predeterminado: true. Requiere reiniciar el Gateway cuando se modifica. pricing: { enabled: false }, },}models.mode: comportamiento del catálogo de proveedores (mergeoreplace).models.providers: mapa de proveedores personalizados indexado por el identificador del proveedor.models.providers.*.localService: administrador opcional de procesos bajo demanda para servidores de modelos locales. OpenClaw sondea el endpoint de estado configurado, inicia elcommandabsoluto cuando es necesario, espera hasta que esté listo y luego envía la solicitud del modelo. Consulte Servicios de modelos locales.models.pricing.enabled: controla la inicialización de precios en segundo plano que comienza después de que los procesos auxiliares y los canales alcanzan la ruta de disponibilidad del Gateway. Cuando esfalse, el Gateway omite las consultas de los catálogos de precios de OpenRouter y LiteLLM; los valores configurados enmodels.providers.*.models[].costsiguen funcionando para las estimaciones de costes locales.
MCP
Las definiciones de servidores MCP administrados por OpenClaw se encuentran en mcp.servers y las
consumen OpenClaw integrado y otros adaptadores de entorno de ejecución. Los comandos openclaw mcp list,
show, set y unset administran este bloque sin conectarse al
servidor de destino durante las modificaciones de configuración.
{ mcp: { // Opcional. Valor predeterminado: 600000 ms (10 minutos). Establezca 0 para deshabilitar la expulsión por inactividad. sessionIdleTtlMs: 600000, servers: { docs: { command: "npx", args: ["-y", "@modelcontextprotocol/server-fetch"], }, remote: { url: "https://example.com/mcp", transport: "streamable-http", // streamable-http | sse timeout: 20, connectTimeout: 5, supportsParallelToolCalls: true, headers: { Authorization: "Bearer ${MCP_REMOTE_TOKEN}", }, auth: "oauth", oauth: { scope: "docs.read", }, sslVerify: true, clientCert: "/path/to/client.crt", clientKey: "/path/to/client.key", toolFilter: { include: ["search_*"], exclude: ["admin_*"], }, // Controles opcionales de proyección del servidor de aplicaciones Codex. codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers: definiciones con nombre de servidores MCP stdio o remotos para entornos de ejecución que exponen las herramientas MCP configuradas. Las entradas remotas utilizantransport: "streamable-http"otransport: "sse";type: "http"es un alias nativo de la CLI queopenclaw mcp setyopenclaw doctor --fixnormalizan en el campo canónicotransport.mcp.servers.<name>.enabled: establézcalo enfalsepara conservar una definición de servidor guardada y excluirla al mismo tiempo del descubrimiento de MCP y la proyección de herramientas de OpenClaw integrado.mcp.servers.<name>.timeout/requestTimeoutMs: tiempo de espera de solicitudes 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 opcional de concurrencia para adaptadores que pueden decidir si realizan llamadas paralelas a herramientas MCP.mcp.servers.<name>.auth: establézcalo en"oauth"para los servidores MCP HTTP que requieran OAuth. Ejecuteopenclaw mcp login <name>para almacenar los tokens en el estado de OpenClaw.mcp.servers.<name>.oauth: anulaciones opcionales del ámbito de OAuth, la URL de redirección y la URL de metadatos del cliente.mcp.servers.<name>.sslVerify,clientCert,clientKey: controles TLS de HTTP para endpoints privados y TLS mutuo.mcp.servers.<name>.toolFilter: selección opcional de herramientas por servidor.includelimita las herramientas MCP descubiertas a los nombres coincidentes;excludeoculta los nombres coincidentes. Las entradas son nombres exactos de herramientas MCP o patrones glob simples con*. Los servidores con recursos o instrucciones también generan nombres de herramientas auxiliares (resources_list,resources_read,prompts_list,prompts_get), y esos nombres utilizan el mismo filtro.mcp.servers.<name>.codex: controles opcionales de proyección del servidor de aplicaciones Codex. Este bloque contiene metadatos de OpenClaw únicamente para hilos del servidor de aplicaciones Codex; no afecta a las sesiones ACP, la configuración genérica del entorno Codex ni otros adaptadores de entorno de ejecución. Un valor no vacío decodex.agentslimita el servidor a los identificadores de agentes de OpenClaw indicados. La validación de configuración rechaza las listas de agentes con ámbito vacías, en blanco o no válidas, y la ruta de proyección del entorno de ejecución las omite en lugar de convertirlas en globales.codex.defaultToolsApprovalModeemite el valor nativo de Codexdefault_tools_approval_modepara ese servidor. OpenClaw elimina el bloquecodexantes de pasar la configuración nativamcp_serversa Codex. Omita el bloque para mantener el servidor proyectado para todos los agentes del servidor de aplicaciones Codex con el comportamiento predeterminado de aprobación de MCP de Codex.mcp.sessionIdleTtlMs: TTL de inactividad para entornos MCP incluidos cuyo ámbito es la sesión. Las ejecuciones integradas únicas solicitan una limpieza al finalizar la ejecución; este TTL sirve como respaldo para sesiones de larga duración y futuros consumidores.- Los cambios en
mcp.*se aplican en caliente mediante la eliminación de los entornos MCP de sesión almacenados en caché. El siguiente descubrimiento o uso de herramientas vuelve a crearlos a partir de la nueva configuración, por lo que las entradas eliminadas demcp.serversse descartan inmediatamente en lugar de esperar al TTL de inactividad. - El descubrimiento en tiempo de ejecución también respeta las notificaciones de cambios en la lista de herramientas MCP eliminando el catálogo almacenado en caché de esa sesión. Los servidores que anuncian recursos o instrucciones obtienen herramientas auxiliares para enumerar y leer recursos, así como para enumerar y obtener instrucciones. Los fallos reiterados de llamadas a herramientas pausan brevemente el servidor afectado antes de intentar otra llamada.
Consulte MCP y Backends de la CLI para conocer el comportamiento en tiempo de ejecución.
Skills
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, workshop: { allowSymlinkTargetWrites: false, }, entries: { "image-lab": { apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // o una cadena de texto sin formato env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}allowBundled: lista opcional de elementos permitidos solo para Skills incluidos (no afecta a los Skills administrados o del espacio de trabajo).load.extraDirs: raíces adicionales de Skills compartidos (menor precedencia).load.allowSymlinkTargets: raíces de destino reales de confianza en las que pueden resolverse los enlaces simbólicos de Skills cuando el enlace se encuentra fuera de su raíz de origen configurada.workshop.allowSymlinkTargetWrites: permite que la aplicación de Skill Workshop escriba a través de destinos de enlaces simbólicos que ya son de confianza (valor predeterminado: false).install.preferBrew: cuando es true, da preferencia a los instaladores de Homebrew sibrewestá disponible antes de recurrir a otros tipos de instalador.install.nodeManager: preferencia del instalador de Node para las especificacionesmetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: permite que los clientes del Gatewayoperator.adminde confianza instalen archivos zip privados preparados medianteskills.upload.*(valor predeterminado: false). Esto solo habilita la ruta de archivos cargados; las instalaciones normales de ClawHub no lo requieren.entries.<skillKey>.enabled: falsedeshabilita un Skill incluso si está incluido o instalado.entries.<skillKey>.apiKey: opción práctica para los Skills que declaran una variable de entorno principal (cadena de texto sin formato u objeto SecretRef).limits.maxCandidatesPerRoot,limits.maxSkillsLoadedPerSource,limits.maxSkillsInPrompt,limits.maxSkillsPromptChars,limits.maxSkillFileBytes: limitan el descubrimiento de Skills y el mensaje de Skills destinado al modelo.- La configuración de autonomía y aprobación de Skill Workshop (
workshop.autonomous.enabled,workshop.approvalPolicy,workshop.maxPending,workshop.maxSkillBytes) se documenta en Configuración de Skills.
Plugins
{ plugins: { enabled: true, allow: ["voice-call"], deny: [], load: { paths: ["~/Projects/oss/voice-call-plugin"], }, entries: { "voice-call": { enabled: true, hooks: { allowPromptInjection: false, }, config: { provider: "twilio" }, }, }, },}- Se cargan desde directorios de paquetes o bundles en
~/.openclaw/extensionsy<workspace>/.openclaw/extensions, además de los archivos o directorios indicados enplugins.load.paths. - Coloque los archivos de Plugin independientes en
plugins.load.paths; las raíces de extensiones detectadas automáticamente ignoran los archivos.js,.mjsy.tsde nivel superior para que los scripts auxiliares de esas raíces no bloqueen el inicio. - La detección admite plugins nativos de OpenClaw, además de bundles compatibles de Codex y Claude, incluidos los bundles de Claude sin manifiesto que usan la disposición predeterminada.
- Los cambios de configuración requieren reiniciar el Gateway.
allow: lista de permitidos opcional (solo se cargan los plugins incluidos).denytiene prioridad.plugins.entries.<id>.apiKey: campo práctico de clave de API a nivel de Plugin (cuando el Plugin lo admite).plugins.entries.<id>.env: mapa de variables de entorno con ámbito del Plugin.plugins.entries.<id>.hooks.allowPromptInjection: cuando esfalse, el núcleo bloqueabefore_prompt_builde ignora los campos que modifican el prompt de la versión heredada debefore_agent_start, mientras conserva los valores heredadosmodelOverrideyproviderOverride. Se aplica a los hooks de plugins nativos y a los directorios de hooks proporcionados por bundles compatibles.plugins.entries.<id>.hooks.allowConversationAccess: cuando estrue, los plugins de confianza no incluidos en el bundle pueden leer el contenido sin procesar de la conversación 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 anulaciones deproviderymodelpor ejecución en ejecuciones de subagentes en segundo plano.plugins.entries.<id>.subagent.allowedModels: lista de permitidos opcional de destinos canónicosprovider/modelpara anulaciones de subagentes de confianza. Use"*"solo si desea permitir intencionadamente cualquier modelo.plugins.entries.<id>.llm.allowModelOverride: confía explícitamente en este Plugin para solicitar anulaciones de modelo paraapi.runtime.llm.complete.plugins.entries.<id>.llm.allowedModels: lista de permitidos opcional de destinos canónicosprovider/modelpara anulaciones de finalización de LLM de plugins de confianza. Use"*"solo si desea permitir intencionadamente cualquier modelo.plugins.entries.<id>.llm.allowAgentIdOverride: confía explícitamente en este Plugin para ejecutarapi.runtime.llm.completecon un identificador de agente distinto del predeterminado.plugins.entries.<id>.config: objeto de configuración definido por el Plugin (validado mediante el esquema del Plugin nativo de OpenClaw cuando esté disponible).- La configuración de cuenta y tiempo de ejecución de los plugins de canal se encuentra en
channels.<id>y debe describirse mediante los metadatoschannelConfigsdel manifiesto del Plugin propietario, no mediante un registro central de opciones de OpenClaw.
Configuración del arnés de Codex
El Plugin codex incluido es propietario de la configuración del arnés nativo del servidor de aplicaciones de Codex en
plugins.entries.codex.config. Consulte la
referencia del arnés de Codex para conocer toda la superficie de configuración
y Arnés de Codex para conocer el modelo de tiempo de ejecución.
codexPlugins se aplica únicamente a las sesiones que seleccionan el arnés nativo de Codex.
No habilita los plugins de Codex para las ejecuciones de proveedores de OpenClaw, las
vinculaciones de conversaciones ACP ni ningún arnés que no sea de Codex.
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_all_plugins: true, allow_destructive_actions: "auto", plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: habilita la compatibilidad nativa de plugins y aplicaciones de Codex para el arnés de Codex. Valor predeterminado:false.plugins.entries.codex.config.codexPlugins.allow_all_plugins: expone todas las aplicaciones accesibles actualmente conectadas 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 las solicitudes de intervención de las aplicaciones de plugins configuradas. Usetruepara aceptar los esquemas seguros de aprobación de Codex sin preguntar,falsepara rechazarlos,"auto"para enrutar las aprobaciones requeridas por Codex mediante las aprobaciones de plugins de OpenClaw, o"ask"para solicitar confirmación en cada acción de escritura o destructiva del Plugin sin una aprobación persistente. El modo"ask"borra las anulaciones persistentes de aprobación por herramienta de Codex para la aplicación afectada y selecciona al revisor humano de aprobaciones para esa aplicación antes de que se inicie el hilo de Codex. Valor predeterminado:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: habilita una entrada de Plugin configurada cuando el valor globalcodexPlugins.enabledtambién es true. Valor predeterminado:truepara las entradas explícitas.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: identidad estable del marketplace, obligatoria junto conpluginNamepara cada entrada resuelta. Admite"openai-curated"y"workspace-directory". Se ignoran las entradas a las que les falte cualquiera de los campos de identidad.plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: identidad estable del Plugin de Codex, obligatoria junto conmarketplaceName. Una entradaworkspace-directorydebe usar el valorsummary.idexacto y cualificado por el marketplace que devuelveplugin/list, por ejemplo,"example-plugin@workspace-directory".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: anulación de la 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".
Cada aplicación de Plugin admitida que use "ask" dirige las solicitudes de aprobación
de esa aplicación al revisor humano. Las demás aplicaciones y las aprobaciones de hilos
que no sean de aplicaciones conservan su revisor configurado, por lo que las políticas
mixtas de plugins no heredan el comportamiento de "ask".
codexPlugins.enabled es la directiva de habilitación global. Las entradas explícitas
de plugins escritas por la migración constituyen el conjunto persistente y seleccionado
de elegibilidad para instalación y reparación. Las entradas workspace-directory
configuradas manualmente ya deben estar instaladas y habilitadas, y sus aplicaciones
propias deben ser accesibles; OpenClaw no las instala ni las autentica. Si Codex rechaza
la solicitud explícita del catálogo del espacio de trabajo, las entradas habilitadas
del espacio de trabajo se cierran de forma segura con marketplace_missing, mientras
que las entradas seleccionadas del catálogo predeterminado siguen disponibles.
plugins["*"] no es compatible, no existe ningún interruptor install y los valores
locales marketplacePath no son intencionadamente campos de configuración porque son
específicos del host. Consulte
Plugins nativos de Codex para conocer los requisitos de
versión y disponibilidad del servidor de aplicaciones.
Las comprobaciones de disponibilidad 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 cuando se establece la sesión del arnés de Codex, no en cada
turno; use /new, /reset o reinicie el Gateway después de cambiar la configuración
nativa de plugins.
codexPlugins.allow_all_plugins captura todas las aplicaciones de la cuenta accesibles
actualmente en cada nuevo hilo nativo de Codex. No instala plugins ni aplicaciones, y las
aplicaciones inaccesibles permanecen excluidas. Las aplicaciones de la cuenta usan la
política global codexPlugins.allow_destructive_actions. Las entradas explícitas de
plugins tienen prioridad cuando la misma aplicación está presente en ambas rutas. Si no
se puede leer app/list, la exposición de toda la cuenta se cierra de forma segura.
plugins.entries.firecrawl.config.webFetch: configuración del proveedor de obtención web de Firecrawl.apiKey: clave de API opcional de Firecrawl para límites superiores (acepta SecretRef). Recurre aplugins.entries.firecrawl.config.webSearch.apiKey, al valor heredadotools.web.fetch.firecrawl.apiKeyo a la variable de entornoFIRECRAWL_API_KEY.baseUrl: URL base de la API de Firecrawl (valor predeterminado:https://api.firecrawl.dev; las anulaciones con alojamiento propio 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 la 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 (por ejemplo,"grok-4.3").
plugins.entries.memory-core.config.dreaming: configuración de Dreaming de la memoria. Consulte Dreaming para conocer las fases y los umbrales.enabled: interruptor principal de Dreaming (valor predeterminado:false).frequency: frecuencia de cron para cada recorrido completo de Dreaming ("0 3 * * *"de forma predeterminada).model: anulación opcional del modelo del subagente Dream Diary. Requiereplugins.entries.memory-core.subagent.allowModelOverride: true; combínelo conallowedModelspara restringir los destinos. Los errores de modelo no disponible vuelven a intentarse una vez con el modelo predeterminado de la sesión; los fallos de confianza o de la lista de permitidos no recurren silenciosamente a otra opción.- la política de fases y los umbrales son detalles de implementación (no son claves de configuración orientadas al usuario).
- La configuración completa de la memoria se encuentra en la referencia de configuración de memoria:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Los plugins habilitados de bundles de Claude también pueden aportar valores predeterminados integrados de OpenClaw desde
settings.json; OpenClaw los aplica como configuración saneada del agente, no como parches sin procesar de la configuración de OpenClaw. plugins.slots.memory: selecciona el identificador del Plugin de memoria activo o"none"para deshabilitar los plugins de memoria.plugins.slots.contextEngine: selecciona el identificador del Plugin activo del motor de contexto; el valor predeterminado es"legacy"a menos que instale y seleccione otro motor.
Consulte Plugins.
Compromisos
commitments controla la memoria inferida de seguimiento: OpenClaw puede detectar comprobaciones de seguimiento en los turnos de conversación y entregarlas mediante ejecuciones de Heartbeat.
commitments.enabled: habilita la extracción oculta mediante LLM, el almacenamiento y la entrega mediante Heartbeat de 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.
Consulte Compromisos inferidos.
Navegador
{ browser: { enabled: true, evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // habilitar solo para acceso de confianza a redes privadas // allowPrivateNetwork: true, // alias heredado // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, tabCleanup: { enabled: true, idleMinutes: 120, maxTabsPerSession: 8, sweepMinutes: 5, }, profiles: { openclaw: { cdpPort: 18800, color: "#FF4500" }, work: { cdpPort: 18801, color: "#0066CC", executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", }, user: { driver: "existing-session", attachOnly: true, color: "#00AA00" }, brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, }, color: "#FF4500", // headless: false, // noSandbox: false, // extraArgs: [], // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", // attachOnly: false, },}evaluateEnabled: falsedeshabilitaact:evaluateywait --fn.tabCleanuprecupera las pestañas rastreadas del agente principal después de un periodo de inactividad o cuando una sesión supera su límite. EstablezcaidleMinutes: 0omaxTabsPerSession: 0para deshabilitar individualmente esos modos de limpieza.ssrfPolicy.dangerouslyAllowPrivateNetworkestá deshabilitado cuando no se establece, por lo que la navegación del navegador permanece restringida de forma predeterminada.- Establezca
ssrfPolicy.dangerouslyAllowPrivateNetwork: truesolo cuando confíe intencionadamente en la navegación del navegador por redes privadas. - En modo estricto, los endpoints de perfiles CDP remotos (
profiles.*.cdpUrl) están sujetos al mismo bloqueo de redes privadas durante las comprobaciones de accesibilidad y detección. ssrfPolicy.allowPrivateNetworksigue siendo compatible como alias heredado.- En modo estricto, use
ssrfPolicy.hostnameAllowlistyssrfPolicy.allowedHostnamespara definir excepciones explícitas. - Los perfiles remotos solo permiten la conexión (inicio, detención y restablecimiento deshabilitados).
profiles.*.cdpUrlaceptahttp://,https://,ws://ywss://. Use HTTP(S) cuando quiera que OpenClaw detecte/json/version; use WS(S) cuando su proveedor le proporcione una URL directa de WebSocket de DevTools.remoteCdpTimeoutMsyremoteCdpHandshakeTimeoutMsse aplican a la accesibilidad CDP remota yattachOnly, así como a las solicitudes de apertura de pestañas. Los perfiles de bucle invertido administrados conservan los valores predeterminados de CDP local. La enumeración persistente de pestañas remotas de Playwright usa el valor mayor como plazo límite de la operación.- Si un servicio CDP administrado externamente es accesible mediante el bucle invertido, establezca
attachOnly: trueen ese perfil; de lo contrario, OpenClaw trata el puerto de bucle invertido como un perfil de navegador local administrado y puede informar errores de propiedad del puerto local. - Los perfiles
existing-sessionusan Chrome MCP en lugar de CDP y pueden conectarse en el host seleccionado o mediante un Node de navegador conectado. - Los perfiles
existing-sessionpueden estableceruserDataDirpara dirigirse a un perfil específico de navegador basado en Chromium, como Brave o Edge. - Los perfiles
existing-sessionpueden establecercdpUrlcuando Chrome ya se está ejecutando detrás de un endpoint de detección HTTP(S) de DevTools o un endpoint directo WS(S). En ese modo, OpenClaw pasa el endpoint a Chrome MCP en lugar de usar la conexión automática;userDataDirse ignora en los argumentos de inicio de Chrome MCP. - Los perfiles
existing-sessionmantienen los límites actuales de las rutas de Chrome MCP: acciones basadas en instantáneas y referencias en lugar de selección mediante selectores CSS, enlaces de carga de un solo archivo, sin anulaciones del 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 administrados
openclawasignan automáticamentecdpPortycdpUrl; establezcacdpUrlexplícitamente solo para perfiles CDP remotos o para la conexión mediante endpoint de una sesión existente. - Los perfiles locales administrados pueden establecer
executablePathpara sustituir el valor globalbrowser.executablePathde ese perfil. Úselo para ejecutar un perfil en Chrome y otro en Brave. - Los perfiles locales administrados usan
browser.localLaunchTimeoutMspara la detección HTTP de Chrome CDP después de iniciar el proceso ybrowser.localCdpReadyTimeoutMspara comprobar la disponibilidad del websocket CDP después del inicio. Aumente estos valores en hosts más lentos donde Chrome se inicia correctamente, pero las comprobaciones de disponibilidad se adelantan al inicio. Ambos valores deben ser enteros positivos de hasta120000ms; los valores de configuración no válidos se rechazan. - Orden de detección automática: navegador predeterminado si está basado en Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- Tanto
browser.executablePathcomobrowser.profiles.<name>.executablePathaceptan~y~/...para el directorio de inicio de su sistema operativo antes de iniciar Chromium. El valoruserDataDirpor perfil de los perfilesexisting-sessiontambién expande la virgulilla. - Servicio de control: solo bucle invertido (puerto derivado de
gateway.port, valor predeterminado18791). extraArgsañade indicadores de inicio adicionales al arranque local de Chromium (por ejemplo,--disable-gpu, dimensiones de ventana o indicadores de depuración).
Interfaz de usuario
{ ui: { seamColor: "#FF4500", assistant: { name: "OpenClaw", avatar: "CB", // emoji, texto corto, URL de imagen o URI de datos }, },}seamColor: color de énfasis de los elementos de la interfaz de usuario de la aplicación nativa (tinte de la burbuja del modo de conversación, etc.).assistant: sustitución de identidad de la interfaz de control. Si no se establece, usa la identidad del agente activo.
Gateway
{ gateway: { mode: "local", // local | remoto port: 18789, bind: "loopback", auth: { mode: "token", // ninguno | token | contraseña | proxy de confianza token: "su-token", // password: "su-contraseña", // o OPENCLAW_GATEWAY_PASSWORD // trustedProxy: { userHeader: "x-forwarded-user" }, // para mode=trusted-proxy; consulte /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000, exemptLoopback: true, }, }, tailscale: { mode: "off", // desactivado | servir | funnel resetOnExit: false, }, controlUi: { enabled: true, basePath: "/openclaw", // root: "dist/control-ui", // toolTitles: false, // títulos opcionales generados por IA sobre el propósito de las llamadas a herramientas (consume tokens del modelo de utilidad) // embedSandbox: "scripts", // estricto | scripts | de confianza // allowExternalEmbedUrls: false, // peligroso: permite URL http(s) externas absolutas para contenido incrustado // chatMessageMaxWidth: "min(1280px, 82%)", // anchura máxima opcional de la transcripción centrada del chat // allowedOrigins: ["https://control.example.com"], // obligatorio para una interfaz de control fuera del bucle invertido // dangerouslyAllowHostHeaderOriginFallback: false, // modo peligroso de reserva de origen basado en la cabecera Host // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, terminal: { enabled: false, // shell: "/bin/zsh", }, remote: { url: "ws://127.0.0.1:18789", transport: "ssh", // ssh | directo token: "su-token", // password: "su-contraseña", }, trustedProxies: ["10.0.0.1"], // Opcional. Valor predeterminado: false. allowRealIpFallback: false, nodes: { pairing: { // Opcional. Sin establecer/deshabilitado de forma predeterminada. autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], // Aprobación automática verificada mediante SSH. Valor predeterminado: habilitada (true). // Establezca false para deshabilitar únicamente la verificación SSH; esto no afecta a // autoApproveCidrs anteriormente. Para emparejar nodos solo de forma manual, establezca false Y // deje autoApproveCidrs sin establecer. Pase un objeto para ajustar: { user, identity, // timeoutMs, cidrs }. sshVerify: true, }, allowCommands: ["canvas.navigate"], denyCommands: ["system.run"], }, tools: { // Denegaciones HTTP adicionales de /tools/invoke deny: ["browser"], // Elimina herramientas de la lista predeterminada de denegación HTTP para invocadores propietarios/administradores allow: ["gateway"], }, push: { apns: { relay: { baseUrl: "https://relay.example.com", timeoutMs: 10000, }, }, }, },}Detalles de los campos de Gateway
mode:local(ejecutar el Gateway) oremote(conectarse a un Gateway remoto). El Gateway se niega a iniciarse a menos que sealocal.port: puerto único multiplexado para WS + HTTP. Precedencia:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(predeterminado),lan(0.0.0.0),tailnet(IPv4 de Tailscale cuando esté disponible; de lo contrario, loopback) ocustom(una dirección IPv4). Una direccióntailnetresuelta y cualquier direccióncustomdistinta de127.0.0.1o0.0.0.0requieren127.0.0.1en el mismo puerto para los clientes del mismo host; el inicio falla si cualquiera de los listeners no puede enlazarse. La exposición fuera de loopback permanece limitada a la interfaz seleccionada.- Alias de bind heredados: use valores de modo de 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 la red bridge de Docker (-p 18789:18789), el tráfico llega poreth0, por lo que el Gateway no es accesible. Use--network hosto establezcabind: "lan"(obind: "custom"concustomBindHost: "0.0.0.0") para escuchar en todas las interfaces. - Autenticación: obligatoria de forma predeterminada. Los binds que no sean loopback requieren autenticación del Gateway. En la práctica, esto significa un token o una contraseña compartidos, o un proxy inverso con reconocimiento de identidad y
gateway.auth.mode: "trusted-proxy". El asistente de incorporación genera un token de forma predeterminada. - Si están configurados tanto
gateway.auth.tokencomogateway.auth.password(incluidos SecretRefs), establezcagateway.auth.modeexplícitamente entokenopassword. Los flujos de inicio y de instalación o 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. Úselo solo para configuraciones loopback locales de confianza; intencionadamente, las indicaciones de incorporación no ofrecen esta opción.gateway.auth.mode: "trusted-proxy": delega la autenticación del navegador o del usuario en un proxy inverso con reconocimiento de identidad y confía en los encabezados de identidad degateway.trustedProxies(consulte Autenticación mediante proxy de confianza). Este modo espera de forma predeterminada un origen de proxy que no sea loopback; los proxies inversos loopback del mismo host requierengateway.auth.trustedProxy.allowLoopback = trueexplícito. Los llamadores internos del mismo host pueden usargateway.auth.passwordcomo alternativa local directa;gateway.auth.tokensigue siendo mutuamente excluyente con el modo de proxy de confianza.gateway.auth.allowTailscale: cuando estrue, los encabezados de identidad de Tailscale Serve pueden satisfacer la autenticación de Control UI/WebSocket (verificada mediantetailscale whois). Los endpoints de la API HTTP no usan esa autenticación mediante encabezados de Tailscale; en su lugar, siguen el modo normal de autenticación HTTP del Gateway. Este flujo sin token presupone que el host del Gateway es de confianza. El valor predeterminado estruecuandotailscale.mode = "serve".gateway.auth.rateLimit: limitador opcional de intentos de autenticación fallidos. Se aplica por IP de cliente y por ámbito de autenticación (el secreto compartido y el token de dispositivo se controlan de forma independiente). Los intentos bloqueados devuelven429+Retry-After.- En la ruta asíncrona de Control UI de Tailscale Serve, los intentos fallidos para el mismo
{scope, clientIp}se serializan antes de registrar el fallo. Por lo tanto, los intentos incorrectos simultáneos del mismo cliente pueden activar el limitador en la segunda solicitud, en lugar de que ambos avancen en una condición de carrera como simples discrepancias. - El valor predeterminado de
gateway.auth.rateLimit.exemptLoopbackestrue; establézcalo enfalsecuando se quiera limitar intencionadamente también la tasa del tráfico de localhost (para configuraciones de prueba o implementaciones de proxy estrictas). - Los intentos de autenticación WS con origen en el navegador siempre se limitan, con la exención de loopback desactivada (defensa en profundidad contra ataques de fuerza bruta a localhost desde el navegador).
- En loopback, esos bloqueos originados en el navegador se aíslan por cada valor normalizado de
Origin, por lo que los fallos repetidos desde un origen de localhost no bloquean automáticamente otro origen distinto. tailscale.mode:serve(solo tailnet, bind loopback) ofunnel(público, requiere autenticación).tailscale.serviceName: nombre opcional de Tailscale Service para el modo Serve, comosvc:openclaw. Cuando se establece, OpenClaw lo pasa atailscale serve --servicepara que Control UI pueda exponerse mediante un Service con nombre en lugar del nombre de host del dispositivo. El valor debe usar el formato de nombre de Servicesvc:<dns-label>de Tailscale; el inicio informa la URL de Service derivada.tailscale.preserveFunnel: cuando estrueytailscale.mode = "serve", OpenClaw compruebatailscale funnel statusantes de volver a aplicar Serve al inicio y lo omite si una ruta de Funnel configurada externamente ya cubre el puerto del Gateway. Valor predeterminado:false.controlUi.allowedOrigins: lista explícita de orígenes de navegador permitidos para las conexiones WebSocket del Gateway. Es obligatoria para orígenes públicos de navegador que no sean loopback. Las cargas privadas de la interfaz de usuario en la misma procedencia LAN/Tailnet desde hosts loopback, RFC1918/link-local,.local,.ts.neto CGNAT de Tailscale se aceptan sin habilitar la alternativa basada en el encabezado Host.controlUi.toolTitles: permite opcionalmente títulos de propósito generados por IA para las llamadas a herramientas en el chat de Control UI. Valor predeterminado:false(la representación de herramientas permanece completamente determinista, sin llamadas a modelos en segundo plano). Cuando está habilitado, el métodochat.toolTitlesetiqueta las llamadas complejas mediante el enrutamiento estándar del modelo de utilidad: elutilityModeldel agente (una decisión del operador que puede enviar argumentos acotados de herramientas al proveedor elegido, como cualquier tarea de utilidad) o el modelo pequeño predeterminado declarado por el proveedor de la sesión (OpenAI →gpt-5.6-luna, Anthropic →claude-haiku-4-5), y almacena los resultados en caché en la base de datos de estado de cada agente para que las visualizaciones repetidas nunca vuelvan a facturarse.utilityModel: \"\"deshabilita los títulos, como cualquier otra tarea de utilidad; los títulos nunca recurren al modelo principal como alternativa.controlUi.chatMessageMaxWidth: anchura máxima opcional para la transcripción centrada del chat de Control UI. Acepta valores de anchura CSS restringidos, como960px,82%,min(1280px, 82%)ycalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: modo peligroso que habilita la alternativa de origen basada en el encabezado Host para implementaciones que dependen intencionadamente de la política de origen del encabezado Host.terminal.enabled: habilita opcionalmente la terminal del operador con ámbito de administración. Valor predeterminado:false. La terminal inicia un PTY del host en el espacio de trabajo del agente seleccionado, hereda el entorno del proceso del Gateway y se rechaza para agentes consandbox.mode: "all". Habilítela únicamente para implementaciones de operadores de confianza; cambiarla reinicia el Gateway y actualiza la política de seguridad de contenido de Control UI.terminal.shell: ejecutable de shell opcional. Cuando no se establece, OpenClaw usa$SHELLen Unix y%ComSpec%en Windows.terminal.detachedSessionTimeoutSeconds: tiempo durante el cual sobrevive una sesión de terminal después de perderse su conexión (recarga de página, suspensión del portátil), y durante el cual puede volver a conectarse medianteterminal.attachcon su salida reciente reproducida. Valor predeterminado:300. Establezca0para finalizar las sesiones en cuanto se pierda su conexión. Las sesiones desconectadas siguen ejecutando sus comandos, por lo que conviene reducir este valor en hosts compartidos o expuestos.remote.transport:ssh(predeterminado) odirect(ws/wss). Paradirect,remote.urldebe serwss://para hosts públicos;ws://sin cifrar solo se acepta para hosts loopback, LAN, link-local,.local,.ts.nety CGNAT de Tailscale.remote.remotePort: puerto del Gateway en el host SSH remoto. El valor predeterminado es18789; úselo cuando el puerto del túnel local difiera del puerto del Gateway remoto.remote.sshHostKeyPolicy: política de claves de host del túnel SSH de macOS.strictes el valor predeterminado y requiere una clave que ya sea de confianza.opensshes una activación explícita de la configuración efectiva de OpenSSH para alias administrados; revise los ajustes de SSH coincidentes del usuario y del sistema antes de usarla. La aplicación de macOS yconfigure-remoterestablecen esta política astrictal cambiar de destino, salvo que se vuelva a activar explícitamente.gateway.remote.token/.passwordson campos de credenciales del cliente remoto. No configuran por sí solos la autenticación del Gateway.gateway.push.apns.relay.baseUrl: URL HTTPS base para el relé APNs externo que se usa después de que las compilaciones de iOS respaldadas por relé publiquen registros en el Gateway. Las compilaciones públicas de App Store usan el relé alojado de OpenClaw. Las URL de relé personalizadas deben corresponder a una ruta deliberadamente independiente de compilación o implementación de iOS cuya URL de relé apunte a dicho relé.gateway.push.apns.relay.timeoutMs: tiempo de espera de envío del Gateway al relé en milisegundos. El valor predeterminado es10000.- Los registros respaldados por relé se delegan en una identidad específica del Gateway. La aplicación de iOS emparejada obtiene
gateway.identity.get, incluye esa identidad en el registro del relé y reenvía al Gateway una autorización de envío limitada al registro. Otro Gateway no puede reutilizar ese registro almacenado. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: sustituciones temporales mediante variables de entorno para la configuración del relé anterior.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: vía de escape solo para desarrollo destinada a URL de relé HTTP loopback. Las URL de relé de producción deben mantenerse en HTTPS.gateway.handshakeTimeoutMs: tiempo de espera en milisegundos para el protocolo de enlace WebSocket del Gateway antes de la autenticación. Valor predeterminado:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MStiene precedencia cuando se establece. Aumente este valor en hosts con mucha carga o de baja potencia donde los clientes locales puedan conectarse mientras aún se estabiliza el calentamiento inicial.gateway.channelHealthCheckMinutes: intervalo del monitor de estado de los canales, en minutos. Establezca0para deshabilitar globalmente los reinicios del monitor de estado. Valor predeterminado:5.gateway.channelStaleEventThresholdMinutes: umbral de socket obsoleto en minutos. Mantenga este valor mayor o igual quegateway.channelHealthCheckMinutes. Valor predeterminado:30.gateway.channelMaxRestartsPerHour: número máximo de reinicios del monitor de estado por canal o cuenta en una hora móvil. Valor predeterminado:10.channels.<provider>.healthMonitor.enabled: exclusión por canal de los reinicios del monitor de estado, manteniendo habilitado el monitor global.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: sustitución por cuenta para canales con varias cuentas. Cuando se establece, tiene precedencia sobre la sustitución de nivel de canal.- Las rutas de llamadas del Gateway local pueden usar
gateway.remote.*como alternativa únicamente cuandogateway.auth.*no está establecido. - Si
gateway.auth.token/gateway.auth.passwordse configura explícitamente mediante SecretRef y no se resuelve, la resolución falla de forma cerrada (sin que una alternativa remota oculte el fallo). trustedProxies: IP de proxies inversos que terminan TLS o inyectan encabezados de cliente reenviado. Incluya únicamente proxies bajo su control. Las entradas loopback siguen siendo válidas para configuraciones de proxy o detección local en el mismo host (por ejemplo, Tailscale Serve o un proxy inverso local), pero no hacen que las solicitudes loopback sean aptas paragateway.auth.mode: "trusted-proxy".allowRealIpFallback: cuando estrue, el Gateway aceptaX-Real-IPsi faltaX-Forwarded-For. El valor predeterminado esfalsepara un comportamiento de fallo cerrado.gateway.nodes.pairing.autoApproveCidrs: lista opcional de CIDR/IP permitidas para aprobar automáticamente el emparejamiento inicial de dispositivos Node sin ámbitos solicitados. Está deshabilitada cuando no se establece. Esto no aprueba automáticamente el emparejamiento de operador, navegador, Control UI o WebChat, ni aprueba automáticamente actualizaciones de rol, ámbito, metadatos o clave pública.gateway.nodes.pairing.sshVerify: aprobación automática verificada mediante SSH para el emparejamiento inicial de dispositivos Node (valor predeterminado: habilitada). El Gateway se conecta por SSH al host que solicita el emparejamiento (BatchMode, claves de host estrictas) y solo lo aprueba si la clave del dispositivo coincide exactamente con la deopenclaw node identity. Se aplica el mismo nivel mínimo de elegibilidad que enautoApproveCidrs; las comprobaciones se limitan a direcciones de origen privadas/CGNAT, salvo quecidrslas sustituya. Establezcafalsepara deshabilitarla o{ user, identity, timeoutMs, cidrs }para ajustarla. Consulte Emparejamiento de Node.gateway.nodes.allowCommands/gateway.nodes.denyCommands: configuración global de permisos y denegaciones para los comandos de nodo declarados, después del emparejamiento y de evaluar la lista de permitidos de la plataforma. UseallowCommandspara habilitar explícitamente comandos de nodo peligrosos comocamera.snap,camera.clip,screen.record,health.summary,sms.searchysms.send;denyCommandselimina un comando aunque, de otro modo, estuviera incluido por un valor predeterminado de la plataforma o por un permiso explícito. El permiso de Salud de iOS, el permiso de SMS de Android y la autorización de comandos del Gateway son independientes. Después de que un nodo cambie su lista de comandos declarados, rechace y vuelva a aprobar el emparejamiento de ese dispositivo para que el Gateway almacene la instantánea actualizada de los comandos.gateway.tools.deny: nombres de herramientas adicionales bloqueados para la solicitud HTTPPOST /tools/invoke(amplía la lista de denegación predeterminada).gateway.tools.allow: elimina nombres de herramientas de la lista de denegación HTTP predeterminada para los solicitantes con rol de propietario o administrador. Esto no concede acceso de propietario o administrador a los solicitantes deoperator.writeque tienen una identidad asociada;cron,gatewayynodessiguen sin estar disponibles para los solicitantes que no sean propietarios, aunque estén en la lista de permitidos.
Endpoints compatibles con OpenAI
- RPC HTTP de administración: desactivado de forma predeterminada como el plugin
admin-http-rpc. Habilite el plugin para registrarPOST /api/v1/admin/rpc. Consulte RPC HTTP de administración. - Chat Completions: deshabilitado de forma predeterminada. Habilítelo con
gateway.http.endpoints.chatCompletions.enabled: true. - API Responses:
gateway.http.endpoints.responses.enabled. - Refuerzo de la entrada de 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 configuradas; usegateway.http.endpoints.responses.files.allowUrl=falsey/ogateway.http.endpoints.responses.images.allowUrl=falsepara deshabilitar la obtención mediante URL.
- Encabezado opcional de refuerzo de respuestas:
gateway.http.securityHeaders.strictTransportSecurity(configúrelo solo para orígenes HTTPS bajo su control; consulte Autenticación mediante proxy de confianza)
Aislamiento de múltiples instancias
Ejecute varios gateways en un host con puertos y directorios de estado únicos:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \OPENCLAW_STATE_DIR=~/.openclaw-a \openclaw gateway --port 19001Opciones prácticas: --dev (usa ~/.openclaw-dev + el puerto 19001), --profile <name> (usa ~/.openclaw-<name>).
Consulte Varios gateways.
gateway.tls
{ gateway: { tls: { enabled: false, autoGenerate: false, certPath: "/etc/openclaw/tls/server.crt", keyPath: "/etc/openclaw/tls/server.key", caPath: "/etc/openclaw/tls/ca-bundle.crt", }, },}enabled: habilita la terminación TLS en el listener del gateway (HTTPS/WSS) (valor predeterminado:false).autoGenerate: genera automáticamente un par de certificado y clave autofirmados locales cuando no se configuran archivos explícitos; solo para uso local o de desarrollo.certPath: ruta del sistema de archivos al archivo del certificado TLS.keyPath: ruta del sistema de archivos al archivo de la clave privada TLS; mantenga sus permisos restringidos.caPath: ruta opcional al paquete de CA para la verificación de clientes o cadenas de confianza personalizadas.
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: controla cómo se aplican en tiempo de ejecución las modificaciones de la configuración."off": ignora las modificaciones en vivo; los cambios requieren un reinicio explícito."restart": reinicia siempre el proceso del gateway cuando cambia la configuración."hot": aplica los cambios dentro del proceso sin reiniciarlo."hybrid"(valor predeterminado): primero intenta una recarga en caliente; si es necesario, recurre al reinicio.
debounceMs: intervalo de antirrebote en ms antes de aplicar los cambios de configuración (entero no negativo; valor predeterminado:300).deferralTimeoutMs: tiempo máximo opcional en ms que se espera a que terminen las operaciones en curso antes de forzar un reinicio o una recarga en caliente del canal. Omítalo para usar la espera limitada predeterminada (300000); configúrelo como0para esperar indefinidamente y registrar periódicamente advertencias de operaciones aún pendientes.
Entornos de trabajadores en la nube
Los trabajadores en la nube son opcionales. Si cloudWorkers está ausente o profiles está vacío, OpenClaw no acepta la creación de trabajadores nuevos. Los registros duraderos creados anteriormente siguen conciliándose y permanecen visibles; la proyección existente de gateway/Node no cambia.
Cada proveedor de trabajadores debe devolver una hostKey SSH procedente de una salida de aprovisionamiento de confianza con el formato exacto algorithm base64, sin nombre de host ni comentario. El arranque escribe esa clave en un archivo known_hosts aislado, usa StrictHostKeyChecking=yes y falla antes de abrir una conexión cuando el proveedor la omite. No existe un mecanismo alternativo de confianza en el primer uso.
La configuración del túnel se realiza bajo demanda en lugar de formar parte del aprovisionamiento. Cuando se inicia, el gateway reenvía de forma inversa un socket Unix local del trabajador a su endpoint WebSocket de bucle local. El socket reside en un directorio remoto asignado aleatoriamente y accesible solo por su propietario; a diferencia de un puerto TCP de bucle local, otras cuentas de un trabajador multiusuario no pueden acceder a él y no puede entrar en conflicto con el puerto de otro entorno. Los mensajes de mantenimiento de SSH y el retroceso de reconexión limitado solo se ejecutan mientras el propietario actual del túnel siga siéndolo. Al detener el túnel, se bloquean las reconexiones antes de cerrar el proceso SSH.
El tráfico de control y la transferencia del espacio de trabajo usan conexiones SSH independientes. Ambas reutilizan la misma identidad resuelta y el archivo known_hosts fijado y aislado, pero la transferencia del espacio de trabajo no comparte la multiplexación de conexiones SSH con el túnel de larga duración, por lo que rsync no puede bloquear el tráfico de control.
Perfil de Crabbox
El proveedor crabbox incluido aprovisiona una concesión compatible con SSH mediante la CLI local de Crabbox. El valor interno settings.provider selecciona el backend de Crabbox; es independiente del id de proveedor externo de OpenClaw.
{ cloudWorkers: { profiles: { production: { provider: "crabbox", install: "bundle", // Predeterminado; use "npm" solo para una versión publicada del gateway. settings: { provider: "aws", class: "standard", ttl: "24h", idleTimeout: "60m", // Ruta absoluta opcional. Valor predeterminado: ../crabbox/bin/crabbox del directorio adyacente y, después, PATH. binary: "/usr/local/bin/crabbox", }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}settings.provider(obligatorio): backend de Crabbox que se pasa mediante--provider. Use un backend cuya salida de inspección incluya un endpoint SSH;awsselecciona el backend directo de AWS.settings.class(obligatorio): clase de máquina de Crabbox que se pasa a--class.settings.ttlysettings.idleTimeout(obligatorios): cadenas de duración positivas de Go que se pasan a--ttly--idle-timeout. Estos mecanismos de seguridad del lado del proveedor son distintos de la políticalifetimealmacenada por OpenClaw que aparece más adelante.settings.binary: ruta absoluta opcional al ejecutable de Crabbox. Si no se especifica, OpenClaw comprueba el checkout adyacente de Crabbox, después las entradas ejecutables dePATHy, por último, invocacrabboxpara que la ausencia de la CLI siga siendo un error visible del proveedor.
Las opciones desconocidas se rechazan. Las credenciales de Crabbox y la configuración de cuenta específica del backend siguen siendo responsabilidad de Crabbox; no las incluya en settings. OpenClaw solo invoca la CLI local y este plugin no realiza llamadas de red al proveedor. El aprovisionamiento siempre pasa --keep=true; OpenClaw controla el ciclo de vida externo y destruye la concesión con crabbox stop.
Perfil de desarrollo SSH estático
{ cloudWorkers: { profiles: { development: { provider: "static-ssh", settings: { host: "worker.example.test", port: 22, user: "openclaw", hostKey: "ssh-ed25519 <base64-public-host-key>", keyRef: { source: "env", provider: "default", id: "OPENCLAW_WORKER_SSH_KEY", }, }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}profiles: perfiles de trabajadores con nombre e ids no vacíos y sin espacios en blanco al principio ni al final. Cada perfil selecciona un proveedor registrado por un plugin.provider: id no vacío del proveedor de trabajadores. Los ejemplos usan el proveedorcrabboxincluido y el proveedorstatic-sshde QA Lab.install: método de instalación del trabajador."bundle"(valor predeterminado) transfiere un paquete con hash de contenido de la compilación instalada del gateway y admite versiones publicadas, de desarrollo y no publicadas."npm"es una optimización opcional para una versión empaquetada sin modificaciones; instalaopenclaw@<exact gateway version>desde el registro público de npm y nunca instalalatest.- Los plugins de proveedor incluidos se seleccionan automáticamente cuando están configurados, pero las deshabilitaciones explícitas y
plugins.allowsiguen aplicándose. Incluya el id del proveedor (por ejemplo,crabbox) cuando haya una lista de permitidos configurada. Los plugins de proveedores externos también deben instalarse y habilitarse explícitamente. settings: JSON limitado propiedad del proveedor. El plugin seleccionado define y valida sus claves; use objetos SecretRef para los valores que contengan secretos. El proveedor SSH estático requierehost,user,hostKeyykeyRef; el valor predeterminado deportes22.hostKeydebe ser una línea de clave pública de host OpenSSH (algorithm base64) obtenida del host conocido o de otro canal de confianza, sin prefijo de opciones.lifetime.idleTimeoutMinutes: minutos expresados como entero positivo que se almacenan para una política posterior de recuperación por inactividad.lifetime.maxLifetimeMinutes: minutos expresados como entero positivo que se almacenan para una política posterior del ciclo de vida.
El trabajador debe tener ya instalado un entorno de ejecución de Node compatible (22.19+, 23.11+ o 24+). El método opcional "npm" también requiere npm y acceso HTTPS saliente al registro público de npm. La configuración de las cadenas de herramientas conectadas a la red es una política del proveedor; el arranque informa de un error accionable en lugar de instalar por sí mismo las cadenas de herramientas.
Esta base instala y verifica la compilación del gateway y proporciona el ciclo de vida de inicio y detención del túnel, pero no inicia la CLI general de OpenClaw. El punto de entrada autónomo del trabajador y el bucle se incorporarán en el siguiente hito de trabajadores en la nube.
Cada registro duradero de entorno conserva sus opciones de proveedor validadas, el método de instalación resuelto y la política de ciclo de vida en una instantánea del perfil tomada en el momento de la creación. Cambiar o eliminar un perfil con nombre afecta a las creaciones nuevas; los registros existentes continúan la conciliación del ciclo de vida con esa instantánea, siempre que el plugin propietario siga disponible.
Los valores de ciclo de vida son solo datos en la primera versión de trabajadores en la nube; la aplicación automática se incorporará con trabajos posteriores del ciclo de vida. Los cambios de perfil requieren reiniciar el gateway.
Hooks
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", maxBodyBytes: 262144, defaultSessionKey: "hook:ingress", allowRequestSessionKey: true, allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"], allowedAgentIds: ["hooks", "main"], presets: ["gmail"], transformsDir: "~/.openclaw/hooks/transforms", mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "hooks", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "De: {{messages[0].from}}\nAsunto: {{messages[0].subject}}\n{{messages[0].snippet}}", deliver: true, channel: "last", model: "openai/gpt-5.4-mini", }, ], },}Autenticación: Authorization: Bearer <token> o x-openclaw-token: <token>.
Se rechazan los tokens de hooks incluidos en la cadena de consulta.
Notas de validación y seguridad:
hooks.enabled=truerequiere un valor no vacío parahooks.token.hooks.tokendebe ser distinto de la autenticación activa mediante secreto compartido del Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENogateway.auth.password/OPENCLAW_GATEWAY_PASSWORD); al iniciarse, se registra una advertencia de seguridad no fatal cuando se detecta su reutilización.openclaw security auditseñala la reutilización de la autenticación de hooks/Gateway como un hallazgo crítico, incluida la autenticación por contraseña del Gateway proporcionada únicamente durante la auditoría (--auth password --password <password>). Ejecuteopenclaw doctor --fixpara rotar unhooks.tokenreutilizado que esté almacenado de forma persistente y, a continuación, actualice los emisores externos de hooks para que usen el nuevo token de hook.hooks.pathno puede ser/; use una subruta dedicada, como/hooks.- Si
hooks.allowRequestSessionKey=true, restrinjahooks.allowedSessionKeyPrefixes(por ejemplo,["hook:"]). - Si una asignación o un preajuste usa un
sessionKeybasado en plantilla, configurehooks.allowedSessionKeyPrefixesyhooks.allowRequestSessionKey=true. Las claves de asignación estáticas no requieren esta habilitación explícita.
Endpoints:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }- El valor de
sessionKeyde la carga útil de la solicitud solo se acepta cuandohooks.allowRequestSessionKey=true(valor predeterminado:false).
- El valor de
POST /hooks/<name>→ se resuelve mediantehooks.mappings- Los valores de
sessionKeyde asignaciones renderizados desde plantillas se consideran proporcionados externamente y también requierenhooks.allowRequestSessionKey=true.
- Los valores de
Detalles de las asignaciones
match.pathcoincide con la subruta situada después de/hooks(por ejemplo,/hooks/gmail→gmail).match.sourcecoincide con un campo de la carga útil para rutas genéricas.- Las plantillas como
{{messages[0].subject}}leen datos de la carga útil. transformpuede apuntar a un módulo JS/TS que devuelva una acción de hook.transform.moduledebe ser una ruta relativa y permanecer dentro dehooks.transformsDir(se rechazan las rutas absolutas y el recorrido de directorios).- Mantenga
hooks.transformsDirdentro de~/.openclaw/hooks/transforms; se rechazan los directorios de Skills del espacio de trabajo. Siopenclaw doctorinforma que esta ruta no es válida, mueva el módulo de transformación al directorio de transformaciones de hooks o eliminehooks.transformsDir. agentIddirige la ejecución a un agente específico; los identificadores desconocidos recurren 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 del agente mediante hooks sin unsessionKeyexplícito.allowRequestSessionKey: permite que quienes invocan/hooks/agenty las claves de sesión de asignaciones basadas en plantillas establezcansessionKey(valor predeterminado:false).allowedSessionKeyPrefixes: lista de prefijos permitidos opcional para valores desessionKeyexplícitos (solicitud + asignación), por ejemplo,["hook:"]. Pasa a ser obligatoria cuando alguna asignación o preajuste usa unsessionKeybasado en plantilla.deliver: trueenvía la respuesta final a un canal; el valor predeterminado dechanneleslast.modelsustituye el LLM para esta ejecución del hook (debe estar permitido si se configuró el catálogo de modelos).
Integración con Gmail
- El preajuste integrado de Gmail usa
sessionKey: "hook:gmail:{{messages[0].id}}". - Si mantiene ese enrutamiento por mensaje, configure
hooks.allowRequestSessionKey: truey restrinjahooks.allowedSessionKeyPrefixespara que coincida con el espacio de nombres de Gmail; por ejemplo,["hook:", "hook:gmail:"]. - Si necesita
hooks.allowRequestSessionKey: false, sustituya el preajuste por unsessionKeyestático en lugar del valor predeterminado basado en plantilla.
{ hooks: { gmail: { account: "openclaw@gmail.com", topic: "projects/<project-id>/topics/gog-gmail-watch", subscription: "gog-gmail-watch-push", pushToken: "shared-push-token", hookUrl: "http://127.0.0.1:18789/hooks/gmail", includeBody: true, maxBytes: 20000, renewEveryMinutes: 720, serve: { bind: "127.0.0.1", port: 8788, path: "/" }, tailscale: { mode: "funnel", path: "/gmail-pubsub" }, model: "openrouter/meta-llama/llama-3.3-70b-instruct:free", thinking: "off", }, },}- El Gateway inicia automáticamente
gog gmail watch serveal arrancar cuando está configurado. EstablezcaOPENCLAW_SKIP_GMAIL_WATCHER=1para deshabilitarlo. - No ejecute una instancia independiente de
gog gmail watch servejunto con el Gateway.
Host del plugin Canvas
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // habilitado: falso, // o OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- Sirve HTML/CSS/JS editable por agentes y A2UI mediante HTTP bajo el puerto del Gateway:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Solo local: mantenga
gateway.bind: "loopback"(valor predeterminado). - Enlaces que no sean de bucle invertido: las rutas de Canvas requieren autenticación del Gateway (token/contraseña/proxy de confianza), al igual que las demás superficies HTTP del Gateway.
- Las WebViews de Node normalmente no envían encabezados de autenticación; después de que un nodo se empareje y conecte, el Gateway anuncia URL de capacidades con ámbito de nodo para acceder a Canvas/A2UI.
- Las URL de capacidades están vinculadas a la sesión WS activa del nodo y caducan rápidamente. No se utiliza un mecanismo alternativo basado en IP.
- Inyecta el cliente de recarga en vivo en el HTML servido.
- Crea automáticamente un
index.htmlinicial cuando el directorio está vacío. - También sirve A2UI en
/__openclaw__/a2ui/. - Los cambios requieren reiniciar el Gateway.
- Deshabilite la recarga en vivo para directorios grandes o errores
EMFILE.
Descubrimiento
mDNS (Bonjour)
{ discovery: { mdns: { mode: "minimal", // minimal | full | off }, },}minimal(valor predeterminado): omitecliPath+sshPortde los registros TXT.full: incluyecliPath+sshPort; el anuncio multidifusión en la LAN sigue requiriendo que el pluginbonjourincluido esté habilitado.off: suprime el anuncio multidifusión en la LAN sin cambiar la habilitación del plugin.- El plugin
bonjourincluido se inicia automáticamente en hosts macOS y requiere habilitación explícita en Linux, Windows y despliegues del Gateway en contenedores. - El nombre de host utiliza de forma predeterminada el nombre de host del sistema cuando es una etiqueta DNS válida y recurre a
openclawen caso contrario. Sustitúyalo conOPENCLAW_MDNS_HOSTNAME. OPENCLAW_DISABLE_BONJOUR=1deshabilita por completo el anuncio mDNS y prevalece sobrediscovery.mdns.mode.
Área amplia (DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}Escribe una zona DNS-SD unidifusión en ~/.openclaw/dns/. Para el descubrimiento entre redes, combínela 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)
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, },}- 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 sustituye las variables existentes). shellEnv: importa las claves esperadas que falten desde el perfil del shell de inicio de sesión.- Consulte Entorno para conocer la precedencia completa.
Sustitución de variables de entorno
Haga referencia a variables de entorno en cualquier cadena de configuración mediante ${VAR_NAME}:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- Solo se aceptan nombres en mayúsculas que coincidan con:
[A-Z_][A-Z0-9_]*. - Las variables ausentes o vacías generan un error al cargar la configuración.
- Use
$${VAR}como secuencia de escape para obtener un${VAR}literal. - Funciona con
$include.
Secretos
Las referencias a secretos son aditivas: los valores de texto sin formato siguen funcionando.
SecretRef
Use una de las siguientes estructuras de objeto:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }Validación:
- Patrón de
provider:^[a-z][a-z0-9_-]{0,63}$ - Patrón de identificador para
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - Identificador para
source: "file": puntero JSON absoluto (por ejemplo,"/providers/openai/apiKey") - Patrón de identificador para
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(admite selectores de estilo AWSsecret#json_key) - Los identificadores de
source: "exec"no deben contener segmentos de ruta.o..delimitados por barras (por ejemplo, se rechazaa/../b)
Superficie de credenciales admitida
- Matriz canónica: Superficie de credenciales de SecretRef
secrets applyse aplica a las 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
{ secrets: { providers: { default: { source: "env" }, // optional explicit env provider filemain: { source: "file", path: "~/.openclaw/secrets.json", mode: "json", timeoutMs: 5000, }, vault: { source: "exec", command: "/usr/local/bin/openclaw-vault-resolver", passEnv: ["PATH", "VAULT_ADDR"], }, }, defaults: { env: "default", file: "filemain", exec: "vault", }, },}Notas:
- El proveedor
fileadmitemode: "json"ymode: "singleValue"(iddebe ser"value"en el modo singleValue). - Las rutas de los proveedores de archivos y ejecución fallan de forma segura cuando no está disponible la verificación de ACL de Windows. Establezca
allowInsecurePath: trueúnicamente para rutas de confianza que no puedan verificarse. - El proveedor
execrequiere una rutacommandabsoluta y usa cargas útiles de protocolo mediante stdin/stdout. - De forma predeterminada, se rechazan las rutas de comandos que sean enlaces simbólicos. Establezca
allowSymlinkCommand: truepara permitir rutas de enlaces simbólicos mientras se valida la ruta de destino resuelta. - Si se configura
trustedDirs, la comprobación de directorios de confianza se aplica a la ruta de destino resuelta. - De forma predeterminada, el entorno secundario de
execes mínimo; pase explícitamente las variables necesarias mediantepassEnv. - 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 esa instantánea.
- El filtrado de superficies activas se aplica durante la activación: las referencias sin resolver en superficies habilitadas hacen que fallen el inicio o la recarga, mientras que las superficies inactivas se omiten con diagnósticos.
Almacenamiento de autenticación
{ auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai:personal"], }, },}- Los perfiles por agente se almacenan en
<agentDir>/auth-profiles.json. auth-profiles.jsonadmite referencias a nivel de valor (keyRefparaapi_key,tokenRefparatoken) en los modos de credenciales estáticas.- Las asignaciones planas heredadas de
auth-profiles.json, como{ "provider": { "apiKey": "..." } }, no son un formato de tiempo de ejecución;openclaw doctor --fixlas reescribe como perfiles canónicos de clave de APIprovider:defaulty crea 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 tiempo de ejecución proceden de instantáneas resueltas en memoria; las entradas estáticas heredadas de
auth.jsonse eliminan al detectarse. - Las importaciones heredadas de OAuth proceden de
~/.openclaw/credentials/oauth.json. - Consulte OAuth.
- Comportamiento de los secretos en tiempo de ejecución y herramientas
audit/configure/apply: Gestión de secretos.
auth.cooldowns
{ auth: { cooldowns: { billingBackoffHours: 5, billingBackoffHoursByProvider: { anthropic: 3, openai: 8 }, billingMaxHours: 24, authPermanentBackoffMinutes: 10, authPermanentMaxMinutes: 60, failureWindowHours: 24, overloadedProfileRotations: 1, overloadedBackoffMs: 0, rateLimitedProfileRotations: 1, }, },}billingBackoffHours: espera base en horas cuando un perfil falla debido a errores reales de facturación/crédito insuficiente (valor predeterminado:5). El texto explícito de facturación puede terminar aquí incluso en respuestas401/403, pero los patrones de coincidencia de texto específicos del proveedor permanecen limitados al proveedor al que pertenecen (por ejemplo, en OpenRouter,Key limit exceeded). Los mensajes HTTP402reintentables sobre ventanas de uso o límites de gasto de la organización/espacio de trabajo permanecen en la rutarate_limiten su lugar.billingBackoffHoursByProvider: anulaciones opcionales por proveedor para las horas de espera por facturación.billingMaxHours: límite en horas para el crecimiento exponencial de la espera por facturación (valor predeterminado:24).authPermanentBackoffMinutes: espera base en minutos para fallosauth_permanentde alta confianza (valor predeterminado:10).authPermanentMaxMinutes: límite en minutos para el crecimiento de la esperaauth_permanent(valor predeterminado:60).failureWindowHours: ventana móvil en horas utilizada para los contadores de espera (valor predeterminado:24).overloadedProfileRotations: número máximo de rotaciones de perfiles de autenticación del mismo proveedor para errores de sobrecarga antes de cambiar al modelo alternativo (valor predeterminado:1). Los formatos que indican que el proveedor está ocupado, comoModelNotReadyException, terminan aquí.overloadedBackoffMs: retraso fijo antes de reintentar una rotación de proveedor/perfil sobrecargado (valor predeterminado:0).rateLimitedProfileRotations: número máximo de rotaciones de perfiles de autenticación del mismo proveedor para errores de límite de frecuencia antes de cambiar al modelo alternativo (valor predeterminado:1). Ese grupo de límites de frecuencia incluye texto con formatos propios del proveedor, comoToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededyresource exhausted.
Auditoría
{ audit: { enabled: true, messages: "off", // desactivado | directos | todos },}El Gateway registra eventos de auditoría solo de metadatos para las ejecuciones del agente y las
acciones de herramientas en la base de datos de estado compartida. Los metadatos del ciclo de vida de
los mensajes requieren una activación independiente. El registro almacena la identidad, los tiempos, los nombres
de las herramientas y los resultados normalizados, pero nunca las instrucciones, los cuerpos de los mensajes,
los argumentos de las herramientas, los resultados ni el texto de error sin procesar. Las filas de mensajes no
almacenan los identificadores sin procesar de cuentas de plataforma, conversaciones, mensajes ni destinos. Las
claves de sesión de ejecución/herramienta siguen disponibles para correlación y pueden contener por sí mismas
identificadores de cuentas de plataforma o de pares. Los registros
caducan después de 30 días y el registro tiene un límite de 100,000 filas. Consúltelos con
openclaw audit o mediante la RPC del Gateway
audit.activity.list. Consulte
Historial de auditoría para conocer el modelo de datos completo, la semántica de privacidad
y los límites de cobertura.
enabled: registra nuevos eventos de auditoría (valor predeterminado:true). El registro está activado de forma predeterminada porque un historial de auditoría que se habilita solo después de un incidente no puede explicar el incidente. Establecerlo enfalsedetiene la inserción de nuevos eventos después de reiniciar el Gateway; los registros existentes siguen siendo legibles hasta que caduquen. Volver a activarlo reanuda el registro desde ese momento; el intervalo no se rellena de forma retroactiva.messages: ámbito de los metadatos de mensajes (valor predeterminado:"off")."direct"registra únicamente conversaciones directas conocidas."all"también registra grupos, canales y tipos de conversación desconocidos. Ambos modos siguen sin incluir contenido y sustituyen los identificadores sin procesar por seudónimos con clave locales de la instalación cuando la correlación está disponible. Son ayudas para la correlación, no mecanismos de anonimización; la base de datos de estado almacena la clave de derivación, pero las exportaciones por RPC y CLI no la incluyen.
El Gateway en ejecución captura audit.enabled y audit.messages al iniciarse;
reinícielo después de cambiar cualquiera de estas opciones. Actualmente, la cobertura de mensajes incluye
los mensajes entrantes aceptados que llegan al despacho del núcleo y una fila terminal por
cada carga útil lógica original de respuesta saliente que llega a la entrega duradera compartida.
Las rutas locales de los Plugins y de envío directo que omiten esos límites compartidos aún no
están cubiertas. El escritor en segundo plano
con límites funciona según el mejor esfuerzo; no es un archivo de cumplimiento sin pérdidas.
Registro
{ logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", // legible | compacto | json redactSensitive: "tools", // desactivado | herramientas redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"], },}- Archivo de registro predeterminado:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Establezca
logging.filepara usar una ruta estable. consoleLevelaumenta adebugcuando se usa--verbose.maxFileBytes: tamaño máximo del archivo de registro activo en bytes antes de la rotación (entero positivo; valor predeterminado:104857600= 100 MB). OpenClaw conserva hasta cinco archivos numerados junto al archivo activo.redactSensitive/redactPatterns: enmascaramiento según el mejor esfuerzo para la salida de la consola, los registros de archivos, los registros de log OTLP y el texto persistente de las transcripciones de sesión.redactSensitive: "off"solo desactiva esta política general para registros/transcripciones; las superficies de seguridad de la interfaz, las herramientas y los diagnósticos siguen ocultando los secretos antes de emitirlos.
Diagnósticos
{ diagnostics: { enabled: true, flags: ["telegram.*"], stuckSessionWarnMs: 30000, stuckSessionAbortMs: 300000, memoryPressureSnapshot: false, otel: { enabled: false, endpoint: "https://otel-collector.example.com:4318", tracesEndpoint: "https://traces.example.com/v1/traces", metricsEndpoint: "https://metrics.example.com/v1/metrics", logsEndpoint: "https://logs.example.com/v1/logs", protocol: "http/protobuf", // http/protobuf | grpc headers: { "x-tenant-id": "my-org" }, serviceName: "openclaw-gateway", traces: true, metrics: true, logs: false, logsExporter: "otlp", sampleRate: 1.0, flushIntervalMs: 5000, captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, cacheTrace: { enabled: false, filePath: "~/.openclaw/logs/cache-trace.jsonl", includeMessages: true, includePrompt: true, includeSystem: true, }, },}enabled: interruptor principal de la salida de instrumentación (valor predeterminado:true).flags: matriz de cadenas de indicadores que habilitan la salida de registro específica (admite comodines como"telegram.*"o"*").stuckSessionWarnMs: umbral de antigüedad sin progreso en ms para clasificar las sesiones de procesamiento prolongadas comosession.long_running,session.stalledosession.stuck(valor predeterminado:120000). El progreso de respuestas, herramientas, estados, bloques y ACP reinicia el temporizador; los diagnósticossession.stuckrepetidos aumentan el intervalo mientras no haya cambios.stuckSessionAbortMs: umbral de antigüedad sin progreso en ms antes de que el trabajo activo bloqueado que cumpla los requisitos pueda drenarse mediante cancelación para su recuperación. Cuando no se establece, OpenClaw usa la ventana extendida más segura para ejecuciones integradas, de al menos 5 minutos y 3 vecesstuckSessionWarnMs.memoryPressureSnapshot: captura una instantánea de estabilidad redactada previa a un OOM cuando la presión de memoria alcanza el nivelcritical(valor predeterminado:false). Establézcalo entruepara añadir el análisis y la escritura del archivo del paquete de estabilidad, manteniendo los eventos normales de presión de memoria.otel.enabled: habilita la canalización de exportación de OpenTelemetry (valor predeterminado:false). Para consultar la configuración completa, el catálogo de señales y el modelo de privacidad, consulte Exportación de OpenTelemetry.otel.endpoint: URL del recopilador para la exportación de OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: endpoints OTLP opcionales específicos de cada señal. Cuando se establecen, reemplazanotel.endpointúnicamente para esa señal.otel.protocol:"http/protobuf"(valor predeterminado) o"grpc".otel.headers: encabezados adicionales de metadatos HTTP/gRPC enviados con las solicitudes de exportación de OTel.otel.serviceName: nombre del servicio para los atributos del recurso.otel.traces/otel.metrics/otel.logs: habilitan la exportación de trazas, métricas o registros.otel.logsExporter: destino de exportación de registros:"otlp"(valor predeterminado),"stdout"para un objeto JSON por línea de la salida estándar o"both".otel.sampleRate: tasa de muestreo de trazas de0a1.otel.flushIntervalMs: intervalo periódico de vaciado de telemetría en ms.otel.captureContent: captura opcional de contenido sin procesar para los atributos de tramos OTEL. Está desactivada de forma predeterminada. El valor booleanotruecaptura el contenido de mensajes/herramientas que no sea del sistema; la forma de objeto permite habilitar explícitamenteinputMessages,outputMessages,toolInputs,toolOutputs,systemPromptytoolDefinitions.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: selector de entorno para la forma experimental más reciente de los tramos de inferencia de IA generativa, incluidos los nombres de tramo{gen_ai.operation.name} {gen_ai.request.model}, el tipo de tramoCLIENTygen_ai.provider.nameen lugar delgen_ai.systemheredado. De forma predeterminada, los tramos mantienenopenclaw.model.callygen_ai.systempor compatibilidad; las métricas de IA generativa usan atributos semánticos acotados.OPENCLAW_OTEL_PRELOADED=1: selector de entorno para hosts que ya han registrado un SDK global de OpenTelemetry. En ese caso, OpenClaw omite el inicio y el cierre del SDK propiedad del Plugin, pero mantiene activos los escuchas de diagnóstico.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTyOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: variables de entorno de endpoints específicos de cada señal que se utilizan cuando no se ha establecido la clave de configuración correspondiente.cacheTrace.enabled: registra instantáneas de trazas de caché para ejecuciones integradas (valor predeterminado:false).cacheTrace.filePath: ruta de salida para las trazas de caché JSONL (valor predeterminado:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: controlan qué se incluye en la salida de trazas de caché (todos tienen como valor predeterminadotrue).
Actualización
{ update: { channel: "stable", // estable | estable extendido | beta | desarrollo checkOnStart: true, auto: { enabled: false, stableDelayHours: 6, stableJitterHours: 12, betaCheckIntervalHours: 1, }, },}channel: canal de publicación:"stable","extended-stable","beta"o"dev". El canal estable extendido solo se aplica a paquetes: los comandos en primer plano controlan la instalación, mientras que el Gateway puede emitir indicaciones de actualización de solo lectura.checkOnStart: comprueba si hay actualizaciones de npm cuando se inicia el Gateway (valor predeterminado:true). Las selecciones almacenadas del canal estable extendido usan la misma indicación de solo lectura y el mismo programa de indicaciones cada 24 horas.auto.enabled: habilita la actualización automática en segundo plano para instalaciones de paquetes de los canales estable y beta (valor predeterminado:false). El canal estable extendido nunca se aplica automáticamente.auto.stableDelayHours: retraso mínimo en horas antes de aplicar automáticamente una actualización del canal estable (valor predeterminado:6; máximo:168).auto.stableJitterHours: ventana adicional en horas para distribuir el despliegue del canal estable (valor predeterminado:12; máximo:168).auto.betaCheckIntervalHours: frecuencia en horas con la que se ejecutan las comprobaciones del canal beta (valor predeterminado:1; máximo:24). La demora y la variación del canal estable, así como la configuración de sondeo de beta, no se aplican al canal estable extendido.
ACP
{ acp: { enabled: true, dispatch: { enabled: true }, backend: "acpx", fallbacks: ["acpx-secondary"], defaultAgent: "main", allowedAgents: ["main", "ops"], maxConcurrentSessions: 10, stream: { coalesceIdleMs: 50, maxChunkChars: 1000, repeatSuppression: true, deliveryMode: "live", // en directo | solo final hiddenBoundarySeparator: "paragraph", // ninguno | espacio | nueva línea | párrafo maxOutputChars: 50000, maxSessionUpdateChars: 500, }, runtime: { ttlMinutes: 30, }, },}enabled: control global de la función ACP (valor predeterminado:true; establezcafalsepara ocultar las opciones de envío e inicio de ACP).dispatch.enabled: control independiente para el envío de turnos de sesión de ACP (valor predeterminado:true). Establezcafalsepara mantener disponibles los comandos de ACP y, al mismo tiempo, bloquear la ejecución.backend: id del backend de entorno de ejecución de ACP predeterminado (debe coincidir con un plugin de entorno de ejecución de ACP registrado). Instale primero el plugin del backend y, si se estableceplugins.allow, incluya el id del plugin del backend (por ejemplo,acpx) o el backend de ACP no se cargará.fallbacks: lista ordenada de ids de backend de ACP alternativos que se prueban cuando el backend principal falla anticipadamente con un error aparentemente transitorio (no disponible, límite de solicitudes alcanzado, cuota agotada o sobrecarga) antes de producir cualquier salida. Cada entrada debe coincidir con el backend de un plugin de entorno de ejecución de ACP registrado.defaultAgent: id del agente de destino alternativo de ACP cuando los inicios no especifican un destino explícito.allowedAgents: lista de permitidos de ids de agentes autorizados para sesiones del entorno de ejecución de ACP; si está vacía, no hay restricciones adicionales.maxConcurrentSessions: número máximo de sesiones de ACP activas simultáneamente.stream.coalesceIdleMs: intervalo de vaciado por inactividad en ms para texto transmitido.stream.maxChunkChars: tamaño máximo de fragmento antes de dividir la proyección de bloques transmitidos.stream.repeatSuppression: suprime las líneas repetidas de estado/herramientas por turno (valor predeterminado:true).stream.deliveryMode:"live"transmite de forma incremental;"final_only"almacena en búfer hasta los eventos terminales del turno.stream.hiddenBoundarySeparator: separador antes del texto visible posterior a eventos de herramientas ocultos (valor predeterminado:"paragraph").stream.maxOutputChars: número máximo de caracteres de salida del asistente proyectados por turno de ACP.stream.maxSessionUpdateChars: número máximo de caracteres para las líneas proyectadas de estado/actualización de ACP.stream.tagVisibility: registro de nombres de etiquetas con anulaciones booleanas de visibilidad para eventos transmitidos.runtime.ttlMinutes: TTL de inactividad en minutos para los procesos de sesión de ACP antes de que puedan limpiarse.runtime.installCommand: comando de instalación opcional que se ejecuta al inicializar un entorno de ejecución de ACP.
CLI
{ cli: { banner: { taglineMode: "off", // random | default | off }, },}cli.banner.taglineModecontrola el estilo del eslogan del banner:"random"(predeterminado): eslóganes divertidos o estacionales que van rotando."default": eslogan neutro fijo (All your chats, one OpenClaw.)."off": sin texto de eslogan (el título y la versión del banner siguen mostrándose).
- Para ocultar todo el banner (no solo los eslóganes), establezca la variable de entorno
OPENCLAW_HIDE_BANNER=1.
Asistente
Metadatos escritos por los flujos de configuración guiada de la CLI (onboard, configure, doctor):
{ wizard: { lastRunAt: "2026-01-01T00:00:00.000Z", lastRunVersion: "2026.1.4", lastRunCommit: "abc1234", lastRunCommand: "configure", lastRunMode: "local", securityAcknowledgedAt: "2026-01-01T00:00:00.000Z", },}Identidad
Consulta los campos de identidad de agents.list en Valores predeterminados del agente.
Puente (heredado, eliminado)
Las compilaciones actuales ya no incluyen el puente TCP. Los Nodes se conectan mediante el WebSocket del Gateway. Las claves bridge.* ya no forman parte del esquema de configuración (la validación falla hasta que se eliminan; openclaw doctor --fix puede quitar las claves desconocidas).
Configuración heredada del puente (referencia histórica)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // valor predeterminado; despacho de cron + ejecución aislada de turnos del agente de cron webhook: "https://example.invalid/legacy", // alternativa obsoleta para trabajos almacenados con notify:true webhookToken: "replace-with-dedicated-token", // token de portador opcional para autenticar webhooks salientes sessionRetention: "24h", // cadena de duración o false runLog: { maxBytes: "2mb", // valor predeterminado: 2_000_000 bytes keepLines: 2000, // valor predeterminado: 2000 }, },}sessionRetention: cuánto tiempo se conservan las sesiones completadas de ejecuciones aisladas de cron antes de depurar las filas de sesión de SQLite. También controla la limpieza de las transcripciones archivadas de cron eliminadas. Valor predeterminado:24h; se establece enfalsepara desactivarlo.runLog.maxBytes: se acepta por compatibilidad con registros de ejecuciones de cron antiguos respaldados por archivos. Valor predeterminado:2_000_000bytes.runLog.keepLines: filas más recientes del historial de ejecuciones de SQLite que se conservan por trabajo. Valor predeterminado:2000.webhookToken: token de portador utilizado para la entrega mediante POST de webhooks de cron (delivery.mode = "webhook"); si se omite, no se envía ninguna cabecera de autenticación.webhook: URL de Webhook heredada y obsoleta (http/https) que utilizaopenclaw doctor --fixpara migrar trabajos almacenados que aún tienennotify: true; la entrega en tiempo de ejecución utilizadelivery.mode="webhook"por trabajo junto condelivery.to, odelivery.completionDestinationcuando se conserva la entrega de anuncios.
cron.retry
{ cron: { retry: { maxAttempts: 3, backoffMs: [30000, 60000, 300000], retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"], }, },}maxAttempts: número máximo de reintentos para los trabajos Cron ante errores transitorios (valor predeterminado:3; intervalo:0-10).backoffMs: matriz de retrasos de espera en ms para cada intento de reintento (valor predeterminado:[30000, 60000, 300000]; de 1 a 10 entradas).retryOn: tipos de error que activan los reintentos:"rate_limit","overloaded","network","timeout","server_error". Omítalo para reintentar todos los tipos transitorios.
Los trabajos de ejecución única permanecen habilitados hasta que se agotan los intentos de reintento; después se deshabilitan y conservan el estado de error final. Los trabajos recurrentes usan la misma política de reintentos transitorios para volver a ejecutarse después de la espera y antes de su siguiente intervalo programado; los errores permanentes o el agotamiento de los reintentos transitorios hacen que se vuelva a la programación recurrente normal con espera tras errores.
cron.failureAlert
{ cron: { failureAlert: { enabled: false, after: 3, cooldownMs: 3600000, includeSkipped: false, mode: "announce", accountId: "main", }, },}enabled: habilita las alertas de fallos para los trabajos Cron (valor predeterminado:false).after: número de fallos consecutivos antes de que se active una alerta (entero positivo, mínimo:1).cooldownMs: cantidad mínima de milisegundos entre alertas repetidas para el mismo trabajo (entero no negativo).includeSkipped: cuenta las ejecuciones consecutivas omitidas para alcanzar el umbral de alerta (valor predeterminado:false). Las ejecuciones omitidas se registran por separado y no afectan a la espera tras errores de ejecución.mode: modo de entrega:"announce"envía mediante un mensaje de canal;"webhook"publica en el Webhook configurado.accountId: identificador opcional de cuenta o canal para limitar el ámbito de entrega de las alertas.
cron.failureDestination
{ cron: { failureDestination: { mode: "announce", channel: "last", to: "channel:C1234567890", accountId: "main", }, },}- Destino predeterminado de las notificaciones de fallos de Cron para todos los trabajos.
mode:"announce"o"webhook"; el valor predeterminado es"announce"cuando existen suficientes datos del destino.channel: anulación del canal para la entrega de anuncios."last"reutiliza el último canal de entrega conocido.to: destino explícito del anuncio o URL del Webhook. Es obligatorio para el modo Webhook.accountId: anulación opcional de la cuenta para la entrega.- El valor
delivery.failureDestinationde cada trabajo anula este valor predeterminado global. - Cuando no se establece ningún destino de fallos global ni por trabajo, los trabajos que ya realizan entregas mediante
announcerecurren a ese destino principal de anuncios en caso de fallo. delivery.failureDestinationsolo es compatible con trabajossessionTarget="isolated", salvo que el valor principal dedelivery.modedel trabajo sea"webhook".
Consulte Trabajos Cron. Las ejecuciones aisladas de Cron se registran como tareas en segundo plano.
Variables de plantilla del modelo multimedia
Marcadores de posición de plantilla expandidos en tools.media.models[].args:
| Variable | Descripción |
|---|---|
{{Body}} |
Cuerpo completo del mensaje entrante |
{{RawBody}} |
Cuerpo sin procesar (sin contenedores de historial/remitente) |
{{BodyStripped}} |
Cuerpo sin menciones de grupo |
{{From}} |
Identificador del remitente |
{{To}} |
Identificador del destino |
{{MessageSid}} |
Identificador del mensaje del canal |
{{SessionId}} |
UUID de la sesión actual |
{{IsNewSession}} |
"true" cuando se crea una sesión nueva |
{{MediaUrl}} |
Pseudo-URL del contenido multimedia entrante |
{{MediaPath}} |
Ruta local del contenido multimedia |
{{MediaType}} |
Tipo de contenido multimedia (imagen/audio/documento/…) |
{{Transcript}} |
Transcripción del audio |
{{Prompt}} |
Prompt multimedia resuelto para las entradas de la CLI |
{{MaxChars}} |
Máximo de caracteres de salida resuelto para las entradas de la CLI |
{{ChatType}} |
"direct" o "group" |
{{GroupSubject}} |
Asunto del grupo (según disponibilidad) |
{{GroupMembers}} |
Vista previa de los miembros del grupo (según disponibilidad) |
{{SenderName}} |
Nombre visible del remitente (según disponibilidad) |
{{SenderE164}} |
Número de teléfono del remitente (según disponibilidad) |
{{Provider}} |
Indicación del proveedor (whatsapp, telegram, discord, etc.) |
Inclusiones de configuración ($include)
Divida la configuración en varios archivos:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/mueller.json5", "./clients/schmidt.json5"], },}Comportamiento de la combinación:
- Archivo único: reemplaza el objeto contenedor.
- Matriz de archivos: se combinan en profundidad y en orden (los posteriores anulan a los anteriores).
- Claves hermanas: se combinan después de las inclusiones (anulan los valores incluidos).
- Inclusiones anidadas: hasta 10 niveles de profundidad.
- Rutas: se resuelven con respecto al archivo que realiza la inclusión, pero deben permanecer dentro del directorio de configuración de nivel superior (
dirnamedeopenclaw.json). Las formas absolutas o con../solo se permiten cuando siguen resolviéndose dentro de ese límite. EstablezcaOPENCLAW_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 tiene un límite de 2 MB.
- Las escrituras propiedad de OpenClaw que solo cambian 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 deja intactoopenclaw.json. - Las inclusiones raíz, las matrices de inclusiones y las inclusiones con anulaciones de claves hermanas son de solo lectura para las escrituras propiedad de OpenClaw; esas escrituras fallan de forma segura en lugar de aplanar la configuración.
- Errores: mensajes claros para archivos ausentes, errores de análisis, inclusiones circulares, formato de ruta no válido y longitud excesiva.