GUÍA COMPLETA v2026.5.20 MAYO 2026

La sección Ajustes
del dashboard, opción por opción.

Cada toggle, dropdown, formulario y campo oculto del Control UI explicado en detalle. Desde Quick Settings hasta los modos avanzados de autenticación del Gateway, pasando por canales, comunicaciones, automatización e infraestructura. Sin atajos.

Diego Parras
Diego Parras Educador · IA aplicada · Automatización
CeMIACE FCE-UBA
Pestañas 9 secciones
Opciones documentadas +200 campos
Config file ~/.openclaw/openclaw.json
Formato JSON5
~ $ openclaw config --show
⚙️ AJUSTES 💬 CANALES 📡 COMUNICACIONES 🎨 APARIENCIA ⚡ AUTOMATIZACIÓN 🏗️ INFRAESTRUCTURA 🤖 IA & AGENTES 🔍 DEPURACIÓN 📜 REGISTROS
00 — INTRODUCCIÓN

Cómo funciona todo esto.

Antes de meternos pestaña por pestaña, hay tres conceptos transversales que hacen falta entender: el flujo de guardado, los dos modos de edición (Form vs Raw), y cómo se taggean las opciones según su sensibilidad.

Flujo de guardado: Save → Apply → Update

Toda la sección Ajustes edita el archivo ~/.openclaw/openclaw.json. Cuando cambiás algo, el banner superior cambia de "No changes" a "X changes". Los botones disponibles son:

PASO 1
Save
Persiste cambios al disco con base-hash guard para evitar pisar ediciones concurrentes.
PASO 2
Apply
Recarga el config en caliente cuando es posible (reloadKind: hot).
PASO 3
Update
Reinicia el Gateway si el cambio requiere restart (reloadKind: restart).
PASO 4
Reconnect
El Control UI se reconecta automáticamente y verifica la versión.
Form vs Raw mode

Form mode (default) muestra cada opción con su tipo correcto: toggles para booleans, dropdowns para enums, inputs validados. Es el modo recomendado: el panel valida en tiempo real y no te deja guardar valores inválidos.

Raw mode te deja editar el JSON5 directamente. Tiene dos restricciones: (1) solo está disponible cuando el snapshot puede roundtripar (preserva comentarios, trailing commas, layout de $include), (2) si el panel detecta que no puede preservar el formato original, fuerza Form mode y muestra "Raw mode disabled (snapshot cannot safely round-trip raw text)".

El botón Reset to saved en Raw preserva el shape autoral (no flatten el snapshot), así las ediciones externas vía vim/VSCode sobreviven al reset.

Sistema de tags por sensibilidad

Cada campo en la UI viene taggeado para que sepas con qué te estás metiendo:

advanced access network reliability performance secret required experimental

advanced = no toques esto a menos que sepas qué hace · access = afecta quién puede entrar · network = afecta exposición de red · reliability = afecta uptime/estabilidad · performance = afecta latencia/throughput · secret = contiene credenciales (se enmascara) · required = no se puede dejar vacío.

01 — QUICK SETTINGS

La pestaña Ajustes.

Es el "cockpit" del Gateway. Reúne en un solo lugar las decisiones más frecuentes: qué modelo usa el agente, cuánto piensa antes de responder, qué canales están conectados, qué política de seguridad rige, cómo se ve el panel, y cuántas automatizaciones tenés activas. Si necesitás algo más profundo, en la esquina superior derecha hay un botón Advanced que abre el editor avanzado (Form + Raw, con Core, Environment, Authentication, Updates, Meta, Logging, Diagnostics, CLI, Secrets, Other).

Ajustes
Canales
Comunicaciones
Apariencia
Automatización
Infraestructura
IA y agentes
Depuración
Registros

Model & Thinking

agents.defaults.model · agents.defaults.thinking

Controla el cerebro del agente: qué LLM usa y con cuánto razonamiento. La elección impacta directamente latencia, costo y calidad de las respuestas.

Model
required

El modelo LLM por defecto para todos los agentes. Soporta cualquier proveedor configurado en la sección Models de IA y agentes. En tu caso: gpt-5.4-mini · openai. El dropdown te muestra los modelos disponibles agrupados por provider.

Tip: Para uso diario en Telegram, modelos mini/nano de OpenAI o haiku de Anthropic son lo más costo-eficiente. Para tareas técnicas largas, escalá a gpt-5.4, claude-4-sonnet, o equivalentes.
Path:agents.defaults.model
Tipo:string (provider/model)
Override:per-session, per-agent
Thinking

Nivel de razonamiento del modelo. Cuatro niveles: Off (sin reasoning extra), Low (rápido, mínimo), Medium (balance), High (deep reasoning, más lento y caro). Solo aplica si el modelo soporta extended thinking (Claude 4, GPT-5 reasoning, o1, o3).

Tip: Para charlas casuales por Telegram dejá Off o Low. Para tareas que requieren planificación multi-paso (debugging, planning, math), usá Medium o High. Cambialo por sesión con /thinking high.
Path:agents.defaults.thinking.level
Default:off
Slash:/thinking [off|low|medium|high]
Fast mode
performance

Toggle que activa modo "rápido": reduce tool calls innecesarios, suprime confirmaciones intermedias, y prioriza respuestas cortas. Útil para flujos automatizados o cuando solo querés que el agente conteste lo que le preguntaste sin "pensar en voz alta".

Path:agents.defaults.fast
Tipo:boolean
Default:false

Channels (resumen)

channels.*

Vista rápida de los canales conectados. Cada item te muestra el estado: Connected (verde, está vivo y configurado), Configured (configurado pero no necesariamente conectado), o vacío (no configurado). Para configurar a fondo cada canal, andá a la pestaña Canales.

Lista de canales activos

En tu caso aparece Telegram · Configured en verde. Cuando agregás más canales (WhatsApp, Discord, Slack, Matrix, etc.) aparecen acá con su estado en tiempo real. El número en el header X Connected es el conteo global.

Canales soportados built-in:Telegram, WhatsApp, Discord, Slack, Matrix, iMessage, Signal, Teams, Feishu, Google Chat, IRC, LINE, Mattermost, QQ Bot, Zalo

Security

gateway.auth · tools.exec · gateway.browser

La sección más crítica de Quick Settings. Define quién puede entrar al Gateway, qué puede ejecutar el agente, y qué herramientas tiene activas por defecto. El botón Configure → al lado del header te lleva al editor avanzado de seguridad.

Gateway auth
accessnetwork

Modo de autenticación del Gateway. Cuatro opciones: none (sin auth — solo loopback), token (bearer token — recomendado para VPS), password (contraseña — útil para UIs), trusted-proxy (delega auth a un proxy upstream como Tailscale, Cloudflare Access, Authelia).

⚠️ Crítico: Si tu Gateway está expuesto en internet (no solo loopback), nunca uses none. Para tu setup (VPS con túnel SSH al puerto 18789), token es lo correcto. Si configurás Tailscale Funnel o un reverse proxy, considerá trusted-proxy.
openclaw config get gateway.auth.mode
Path:gateway.auth.mode
Default:token (auto-generado en setup)
Exec policy
accessadvanced

Política global de ejecución para system.run (comandos shell). En tu caso aparece Allowlist: solo se ejecutan comandos que estén en la allowlist. Otras opciones: Deny (default — bloquea todo y pide aprobación), Ask (pregunta interactivamente), Allow (peligroso — permite todo sin preguntar).

⚠️ Crítico: El modo Allow es equivalente a darle root al agente. Solo usalo en sandboxes desechables. Para producción, Deny + allowlist explícita es lo más seguro.
openclaw approvals get
Browser enabled
access

Habilita la herramienta de control de navegador del agente. Cuando está Enabled, el agente puede abrir páginas, hacer clicks, llenar formularios, tomar screenshots y extraer contenido. Internamente usa Playwright + Chromium.

⚠️ Recursos: Chromium consume RAM (~300-500MB por instancia). Si corrés en un VPS chico, deshabilitalo cuando no lo usés.
Path:gateway.browser.enabled
Default:true
Tool profile
access

Preset de herramientas que el agente tiene activas. Cuatro niveles: minimal (solo lectura, sin exec, sin browser — para deploys sensibles), coding (read + write + exec con allowlist — para asistente de programación), messaging (read + write + canales, sin exec — para bots conversacionales), full (todo habilitado — el default).

Tip: Para tu setup de Telegram + automatización, messaging es óptimo: bloqueás exec por defecto pero el agente puede leer/escribir/buscar.
Device auth
access

Toggle del sistema de pairing de devices. Cuando está Enabled, cada dispositivo (browser, CLI, mobile app) que se conecta al Gateway debe ser aprobado manualmente desde la pestaña Nodos. Si lo deshabilitás, cualquier cliente con el token puede conectarse sin pairing.

⚠️ No deshabilites esto en producción. Es la barrera que evita que alguien con el token pueda hacerse pasar por vos.
Path:gateway.devices.enabled
Default:true

Personal

Browser-local · no se guarda en config

Aspecto visual del chat. Acá definís cómo te ve el agente (USER avatar) y cómo se ve el agente a sí mismo (ASSISTANT avatar). Importante: el USER avatar es browser-local (solo lo ves vos en este navegador), mientras que el ASSISTANT avatar es un override del IDENTITY.md del agente.

USER avatar

Tu avatar en el chat. Podés poner texto/emoji (ej: "JD" o "🦞") o subir una imagen. Se guarda en localStorage del navegador, no en el config del Gateway. Si abrís el dashboard desde otro browser, no aparece.

Storage:browser localStorage
ASSISTANT avatar

Avatar del agente. A diferencia del USER, este es un override del archivo IDENTITY.md que vive en el workspace del agente. Si "Clear" el avatar, vuelve al definido en IDENTITY.md (en tu caso, el cangrejito rojo por defecto de OpenClaw). "Stores a Control UI override. Clear it to return to IDENTITY.md."

Override:Control UI · ~/.openclaw/workspace/IDENTITY.md

Appearance (Quick)

controlUi.theme.* · browser-local

Atajo a las opciones más usadas de Apariencia. Configuración completa en la pestaña Apariencia.

Theme

Familia de tema. Cuatro opciones: Claw (default, naranja/rojo cangrejo), Knot (tema náutico azul), Dash (minimalista monocromo), Import (importás un tema custom de tweakcn pegando el link compartido).

Mode

Light · Dark · System. System detecta automáticamente el prefer-color-scheme del OS.

Roundness

Radio de las esquinas en toda la UI. Cinco niveles: None (cuadrado total) · Slight · Default · Round · Full (pill-shape).

Text size

Cinco niveles: S (90%) · M (default 100%) · L (110%) · XL (125%) · XXL (140%). Solo afecta el Control UI, no la app móvil ni los canales.

Automations

Quick view · counters

Resumen de automatizaciones. Cada item tiene un link Manage → que te lleva a la pestaña correspondiente.

Scheduled tasks

Cantidad de cron jobs activos. En tu caso 0 scheduled tasks porque todavía no creaste ninguno. Click en Manage → te lleva a Tareas Cron.

Skills installed

Cantidad total de skills instaladas (built-in + ClawHub + workspace). En tu caso 58 skills installed. No discrimina entre Ready y Needs Setup — para eso entrá a Skills (sidebar) o Browse.

MCP servers

Cantidad de servidores Model Context Protocol conectados. 0 MCP servers en tu caso. Los MCP servers permiten conectar herramientas externas (Linear, GitHub, Notion, etc.) que el agente puede llamar como tools nativas.

Tip: MCP es un protocolo abierto creado por Anthropic. Si ya tenés MCP servers configurados para Claude Desktop, podés reutilizarlos acá.

Context Profile

agents.defaults.bootstrap.*

Define cuánto contexto del workspace (AGENTS.md, SOUL.md, USER.md, TOOLS.md, IDENTITY.md, HEARTBEAT.md, MEMORY.md) se inyecta en cada turn del agente. Más contexto = mejor coherencia pero más tokens (= más caro y más lento).

Cuatro perfiles preconfigurados

El panel te muestra cuatro presets que cambian de un golpe los tres parámetros principales (maxCharsPerFile, maxCharsTotal, injectOn). Si tu config actual no matchea ninguno, aparece como Custom Configuration con un mensaje "Choose a profile to stage a focused change to bootstrap size and follow-up behavior."

Personal Assistant
recomendado

Balanced default for daily use. 20.000 chars per file · 150.000 chars total · Every turn. El más común. Inyecta workspace files completos en cada turn, perfecto para conversaciones de Telegram con persona y memoria coherente.

Code Agent

Highest context budget for repo work. 50.000 chars per file · 300.000 chars total · Every turn. Para cuando el agente trabaja con repos grandes y necesita mucho contexto de TOOLS.md y AGENTS.md. Caro pero potente.

Team Bot

Lean follow-ups for shared bots. 10.000 chars per file · 80.000 chars total · Skip safe follow-ups. Para bots compartidos en grupos. Ahorra tokens en respuestas de seguimiento porque ya hay contexto previo en la sesión.

Minimal

Smallest context budget and lowest cost. 5.000 chars per file · 30.000 chars total · Skip safe follow-ups. Para tareas batch donde no necesitás coherencia conversacional. Útil con cron jobs.

Current Values (resumen)

Bootstrap per file

Caracteres máximos por archivo bootstrap (AGENTS.md, SOUL.md, USER.md, etc.). En tu caso 12.000 chars. Si un archivo excede este límite, se trunca al inyectarse en el prompt.

Path:agents.defaults.bootstrapMaxChars
Default:12000
Bootstrap total

Suma máxima de TODOS los archivos bootstrap. En tu caso 60.000 chars. Si el total excede, se priorizan los archivos según orden interno (AGENTS > SOUL > IDENTITY > USER > TOOLS > HEARTBEAT > MEMORY).

Path:agents.defaults.bootstrapTotalMaxChars
Default:60000
Follow-up turns

Cuándo reinyectar el bootstrap context. Dos modos: every-turn (reinyecta siempre — mayor coherencia pero más tokens), skip-safe-followups (omite la reinyección en turns de follow-up donde el contexto ya está en la sesión).

Path:agents.defaults.contextInjection
Default:always (every-turn)

Advanced Editor (botón superior derecho)

Form · Raw · Core sections

Al apretar Advanced → en la esquina superior derecha de Quick Settings se abre el editor avanzado. Tiene dos modos (Form y Raw) y agrupa las opciones por categoría.

Core › Environment
advanced

Variables de entorno del Gateway. Acá podés definir overrides como OPENCLAW_HOME, OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_PATH, OPENCLAW_WORKSPACE_DIR. Útil para multi-tenant o cuando tenés varios Gateways en el mismo host.

Core › Authentication
accesssecret

Configuración avanzada de auth. Incluye gateway.auth.mode, gateway.auth.token, gateway.auth.password, gateway.auth.trustedProxies, gateway.auth.allowTailscale, y rate limiting.

Core › Updates

Canal de updates (stable, beta, dev), auto-update toggles, update package manager (npm, pnpm, yarn), y el comportamiento del restart post-update.

Core › Meta

Metadata del Gateway: nombre del host, descripción, tags. Aparece en los logs y en los Snapshots. No afecta funcionamiento, solo identificación.

Core › Logging

Configuración de logs: level (trace/debug/info/warn/error/fatal), logDir (default /tmp/openclaw), rotateInterval, maxFiles, format (jsonl o text).

Core › Diagnostics

Toggles para health checks periódicos, métricas de performance, telemetría opt-in, y reports de errores. Todo opt-in por privacidad.

Core › CLI

Banner del CLI: title, version line, tagline mode. Si el banner del CLI te molesta, podés deshabilitarlo acá. Mantenelo enabled para hacer fast version checks.

Core › Secrets
secret

Gestión de SecretRefs. Permite definir cómo se resuelven los secretos: env vars, archivos, proveedores externos (1Password CLI, gopass, etc.). Cada secret tiene un source, provider, e id.

openclaw config get secrets
Other

Cajón de opciones misceláneas que no caen en las otras categorías. Generalmente flags experimentales o legacy.

02 — CANALES

La pestaña Canales.

Gestión completa de los canales de mensajería. Cada canal (Telegram, WhatsApp, Discord, Slack, Matrix, iMessage, Signal, Teams, Feishu, etc.) aparece como una card con su estado, modo de operación, accounts configuradas, y opciones específicas. En tu caso solo está Telegram, pero la estructura es la misma para todos los canales.

Status fields (todos los canales)

channels.<channel>.*

Los siguientes campos aparecen en TODOS los canales. Cambia el botToken/secret/API endpoint, pero la estructura es idéntica.

Configurado

/ No. Indica si el canal tiene los campos mínimos para operar (típicamente: enabled: true + token/credenciales válidas). Configurado no implica que esté funcionando — solo que el config está completo.

En ejecución

/ No. Estado actual del proceso. Si está No aunque "Configurado: Sí", significa que algo falló al levantarse (token inválido, problema de red, conflicto de puerto). Revisá Registros para el detalle.

Modo

Cómo recibe los mensajes: polling (long polling — el agente pregunta cada X segundos; default para Telegram, no requiere puerto abierto), webhook (el canal hace POST al Gateway; requiere URL pública y SSL).

Tip: Para VPS sin dominio público, polling es lo correcto. Cuando tengas un dominio con HTTPS, webhook reduce latencia significativamente.
Último inicio

Timestamp del último arranque del adaptador. Si reiniciaste el Gateway hace 22m, vas a ver 22m ago. Te ayuda a detectar crashes silenciosos: si el "último inicio" es mucho más reciente que el "Gateway uptime" del Resumen, el canal se reinició solo.

Última prueba

Timestamp del último health check exitoso. n/d significa que nunca se hizo un test manual o que el canal no expone health check. Para Telegram, getMe es el health check; si falla, el canal se marca como En ejecución: No.

Accounts

Dropdown expandible. Lista las cuentas configuradas para ese canal. Telegram, Discord y WhatsApp soportan multi-account: podés tener varios bots/números operando desde el mismo Gateway. Cada account tiene su propio token/credencial, allowFrom, y bindings.

⚠️ Multi-account: Si tenés 2+ accounts, definí explícitamente cuál es el default con channels.telegram.defaultAccount o el dropdown va a fallar y openclaw doctor te va a tirar warnings.

Telegram — opciones específicas

channels.telegram.*

Telegram es el canal mejor documentado y más usado. Todas las opciones que voy a listar tienen su equivalente en WhatsApp, Discord, Slack (con nombres ligeramente distintos), pero los conceptos son idénticos.

botToken / tokenFile
secretrequired

Token del bot, obtenido de @BotFather. Podés especificarlo directo (botToken), apuntando a un archivo (tokenFile), o vía env var TELEGRAM_BOT_TOKEN. tokenFile debe ser un archivo regular (no symlink — Gateway rechaza symlinks por seguridad).

openclaw config get channels.telegram.botToken
apiRoot
networkadvanced

URL del root de la Bot API. Default: https://api.telegram.org. Cambialo si usás un self-hosted Bot API server o un proxy regional. No incluyas /bot<TOKEN> al final — solo el root.

⚠️ Error común: Si ves errores 404 en setMyCommands o deleteWebhook, probablemente pusiste el endpoint completo en lugar del root. Corregilo con openclaw doctor --fix.
dmPolicy
access

Política de DMs. Valores: pairing (default — pide pairing inicial, super seguro), allowlist (solo los usuarios en allowFrom pueden hablar — recomendado para producción), open (cualquiera puede hablar — solo para bots públicos de soporte).

⚠️ Crítico: Nunca uses open en un bot conectado a tu vida personal. Cualquier rando puede pedirle al agente que le mande tu calendario.
Allow From
access

Lista de identidades autorizadas (cuando dmPolicy: "allowlist"). Formato Telegram: tg:<userId> o @username. Click + Add en el panel para agregar. En tu caso aparece "0 items" porque usás pairing.

openclaw config get channels.telegram.allowFrom
Ack Reaction

Emoji que se manda como reacción cuando el bot recibe un mensaje (acuse de recibo). Default: 👀 (o el emoji del IDENTITY del agente). Cadena vacía para desactivar. Ayuda a saber que el bot vio el mensaje incluso si está pensando.

Path:channels.telegram.ackReaction · messages.ackReaction
Scope:controlado por messages.ackReactionScope
Actions (expandible)

Qué acciones puede hacer el bot. Toggles individuales para cada capacidad:

reactions — agregar/quitar reacciones a mensajes
sendMessage — enviar mensajes nuevos (default: true)
editMessage — editar mensajes propios (para streaming)
deleteMessage — borrar mensajes propios
sticker — enviar stickers
capabilities.inlineButtons — botones inline en respuestas
historyLimit / dmHistoryLimit

Cuántos mensajes históricos se cargan en cada turn para dar contexto. Default: 50. Más alto = más contexto pero más tokens consumidos. dmHistoryLimit es el override específico para DMs.

streaming
performance

Modo de streaming de respuestas. Valores: off (default — manda la respuesta completa al final), partial (manda chunks y edita el mismo mensaje), block (manda bloques completos a medida que se generan), progress (muestra progreso de tool calls).

Tip: Activar partial da una UX más rica pero consume tu rate limit de editMessageText. Para chats personales está bárbaro; para bots con mucho volumen, mejor off.
linkPreview

Toggle para mostrar previews de links en los mensajes del bot. Default: true. Apagalo si querés respuestas más limpias o si los previews te están rompiendo el formato.

replyToMode

Cómo el bot referencia el mensaje al que está respondiendo. Valores: off (default — sin reply nativo), first (reply solo al primer mensaje del turn), all (reply a cada mensaje individual), batched (reply solo cuando hubo varios mensajes inbound en un mismo turn).

mediaMaxMb
performance

Tamaño máximo (en MB) de archivos que el bot puede descargar. Default: 100. Si recibís archivos grandes y querés bloquearlos, bajalo.

proxy
networkadvanced

Proxy SOCKS5/HTTP para todas las requests a la Bot API. Ejemplo: socks5://user:pass@proxy-host:1080. Útil si tu VPS está en una región con egress problemático a api.telegram.org.

webhookUrl / webhookSecret / webhookPath
networksecret

Configuración para modo webhook (alternativa al polling). Requiere URL pública con HTTPS válido. webhookSecret se valida con cada request para evitar spoofing. webhookPath default: /telegram-webhook.

retry (object)
reliability

Política de retry para requests fallidas. Sub-campos: attempts (default 3), minDelayMs (400), maxDelayMs (30000), jitter (0.1). Usa exponential backoff con jitter.

network.autoSelectFamily
networkadvanced

Node 22+ feature: elige automáticamente IPv4 o IPv6 según latencia. Default: true (excepto WSL2). Si tu VPS tiene IPv6 inestable, ponelo en false y forzá IPv4 con dnsResultOrder: "ipv4first".

configWrites
access

Si true (default), permite que comandos desde Telegram modifiquen el config (ej: /config set, migración automática de supergroup IDs). Si lo ponés en false, el config solo se puede tocar desde el filesystem o el dashboard.

Tip de seguridad: Si tu bot está en grupos con usuarios menos confiables, configWrites: false previene que un admin se mande de cabeza con el config.
customCommands

Array de comandos custom que aparecen en el menú de Telegram (el botón / en la app). Formato: { command: "backup", description: "Git backup" }. Solo agrega entradas al menú — no implementa el comando. El comportamiento real lo definen las skills o plugins.

reactionNotifications

Quién recibe notificaciones cuando alguien reacciona a un mensaje del bot. off (default — no procesa reacciones), own (solo reacciones a mensajes del bot), all (todas las reacciones del grupo).

errorPolicy / errorCooldownMs
reliability

Cómo manejar errores: continue (sigue procesando — default), skip-poll (saltea el siguiente poll). errorCooldownMs es el delay entre errores consecutivos para evitar burst de retries.

Groups (configuración por grupo)

channels.telegram.groups.<chatId>

Cuando agregás el bot a grupos, podés configurar reglas por grupo específico (o el comodín "*"). Permite tener un bot que se comporta distinto en cada grupo: distintos system prompts, distintas skills habilitadas, diferentes allowlists.

requireMention
access

Si true (default para grupos), el bot solo responde cuando lo mencionan con @botname o le hacen reply. Crítico en grupos con mucho tráfico para que el bot no responda a cada mensaje.

allowFrom

Override de la allowlist por grupo. Solo los usuarios listados pueden invocar al bot en ESE grupo. Útil para grupos con muchos miembros donde solo querés que algunos puedan hablar con el bot.

systemPrompt

System prompt específico para ese grupo. Se suma al system prompt base del agente. Ej: "Keep answers brief." para grupos donde no querés respuestas largas.

topics (forum groups)

Para grupos con topics (forum), podés configurar cada topic individualmente. Sintaxis: topics["99"].requireMention, etc. También aparece en bindings de ACP con chatId:topic:topicId.

skills

Allowlist de skills habilitadas para ese grupo. Si el grupo es de soporte técnico, podés limitarlo a las skills de búsqueda/docs. Si es un grupo de imagen, dejar solo las skills de generación de imagen.

Otros canales soportados

channels.*

Cada canal tiene sus quirks pero todos comparten el patrón base (token, dmPolicy, allowFrom, actions, retry, etc.). Resumen rápido:

Discord
producción

Bot via discord.js. Soporta DMs, guilds (servidores), threads, reactions, polls, slash commands nativos. Configuración detallada por guild via guilds.<guildId>. Role-based agent routing con bindings[].match.roles.

WhatsApp
experimental

Usa Baileys (WhatsApp Web bridge). Soporta DMs, grupos, voice notes nativas (Opus 48kHz/64kbps), media. Requiere QR scan inicial.

Slack

Slack Bolt SDK. Soporta DMs, channels, threads, slash commands, modal interactivos. Multi-workspace via accounts.<wsId>.

Matrix

Federación Matrix completa. Soporta rooms, E2E encryption opcional, spaces, threads. Ideal para bots descentralizados.

iMessage / Signal
experimental

iMessage requiere macOS host (Messages.app + AppleScript bridge). Signal usa signald. Ambos son experimentales y requieren setup específico.

Teams / Feishu / Google Chat

Adaptadores para canales corporativos. Microsoft Teams via Bot Framework, Feishu (Lark) con app credentials, Google Chat via webhook. Buena opción para bots internos de empresa.

IRC / LINE / Mattermost / QQ Bot / Zalo / Tlon

Adaptadores de nicho. IRC para redes legacy. LINE para Japón/Taiwán/Tailandia. Mattermost para self-hosted Slack-alternative. QQ Bot y Zalo para audiencias en China/Vietnam. Tlon es decentralizado sobre Urbit.

03 — COMUNICACIONES

La pestaña Comunicaciones.

Esta sección controla cómo se entregan los mensajes — agnóstico al canal. Define el comportamiento de mensajería transversal: reacciones, reglas de grupos, broadcasts, voz (Talk) y audio (STT/TTS). Es donde vive la magia que hace que un mismo agente se comporte coherentemente en Telegram, WhatsApp, Discord y Slack a la vez.

Channels
Messages
Broadcast
Talk
Audio

Messages

messages.*

Configuración global del comportamiento de mensajes. Estas opciones se aplican a todos los canales por defecto, salvo override específico en channels.<name>.<option>.

Ack Reaction Emoji
advanced

Emoji global que se usa como reacción de "recibido" en todos los canales que soportan reacciones (Telegram, Discord, Slack). Cadena vacía deshabilita la reacción global. Se puede override por canal o por cuenta.

Path:messages.ackReaction
Default:👀 (o emoji del agente)
Override order:account > channel > messages > agent identity
Ack Reaction Scope
advanced

Cuándo se manda la ack reaction. Cinco valores: all (DMs + grupos), direct (solo DMs), group-all (cada mensaje de grupo), group-mentions (default — solo en grupos cuando mencionan al bot, NO en DMs), off / none (totalmente desactivado).

⚠️ Trampa común: El default group-mentions NO dispara reacciones en DMs. Si querés ack en DMs de Telegram, cambiá a direct o all. El valor se lee al startup del provider — requiere restart del Gateway.
Group Chat Rules
advanced

Reglas globales para el comportamiento en grupos. Controla mention triggers (qué cuenta como invocar al bot), history window sizing, y heurísticas de gating. Mantenelas narrow (estrictas) para evitar que el bot dispare con cada mensaje en grupos activos.

Group History Limit
performance

Cantidad máxima de mensajes previos cargados como contexto en sesiones de grupo. Default: 50. Valores más altos = mejor continuidad pero más tokens. Valores más bajos = respuestas más rápidas y baratas. Se aplica por turn, no por sesión.

Path:messages.groupHistoryLimit
Default:50
queue.mode
advanced

Cómo se maneja el caso de mensajes nuevos mientras el agente está respondiendo. Cuatro modos: steer (default — abrupta el turn actual y reinicia con el nuevo mensaje), followup (espera al turn actual y agrega el nuevo como follow-up), collect (acumula múltiples mensajes en un mismo turn — useful para grupos), interrupt (cancela el turn actual con un signal de interrupción).

responsePrefix

Prefijo template que se agrega a cada respuesta del bot. Soporta variables: {model} (nombre corto del modelo), {modelFull}, {provider}, {thinkingLevel}, {identity.name}. Ejemplo: "[{provider}/{model}] ". Útil para debugging multi-agent.

Default:"" (sin prefix)
tts (subgrupo)

Configuración global de Text-to-Speech para outbound messages. Sub-campos: auto (always/off — manda audio en cada respuesta o no), provider (openai, elevenlabs, microsoft, local-cli, etc.), persona (voice ID/preset), maxLength (1500 default — más largo se resume antes de TTS), summarize (default true).

Tip: Para tu setup con ElevenLabs en español, mantené maxLength: 1500 para no quemar créditos en respuestas largas que igual son tediosas en voz.
textChunkLimit / chunkMode
advanced

textChunkLimit es el tamaño máximo de cada chunk de mensaje (Telegram tiene un límite de 4096 chars por mensaje). chunkMode define cómo partir: paragraph (default — corta por párrafos), line, sentence.

markdown rendering

Configuración del rendering markdown por canal. Telegram usa HTML-safe rendering; Discord/Slack usan sus dialectos. Si el bot rechaza HTML parseado, OpenClaw hace fallback a plain text.

Broadcast

messages.broadcast.*

Envío de mensajes a múltiples destinatarios desde un cron job, hook o llamada manual. Útil para newsletters, alertas, comandos de "todos los lunes manda esto a todos". La configuración define a quiénes incluir, rate limits, y formato.

broadcast.recipients

Lista de destinatarios. Cada entry es un objeto con channel, peer (chat ID/user ID), y opcionalmente label para identificarlo en logs.

broadcast.rateLimit
reliability

Pacing entre envíos para no triggerar rate limits del canal. Ejemplo: 1 mensaje/segundo en Telegram, 10/segundo en Slack. Default: respeta los límites recomendados por cada canal.

broadcast.template

Template del mensaje. Soporta variables del destinatario: {name}, {customField}. Útil para personalizar el broadcast por usuario.

broadcast.failureMode

Qué hacer si un envío falla: skip (sigue con los siguientes), retry (reintenta según retry policy), abort (cancela todo el broadcast).

Talk

talk.*

Conversación por voz en tiempo real. Soporta tres modos: realtime (provider-native streaming — OpenAI Realtime, Google Live), stt-tts (transcripción + LLM + síntesis — funciona con cualquier provider), transcription (solo captions/dictado, sin respuesta de voz).

talk.provider
required-para-talk

Provider de speech (STT + TTS combinados o separados). Opciones: openai (Whisper + TTS), elevenlabs (mejor calidad para voz), google (Cloud Speech + WaveNet), microsoft (Azure Speech), deepgram, assemblyai, local-cli (sin API key, usa CLI local).

Para español: ElevenLabs tiene las mejores voces masculinas neutrales en español. OpenAI funciona pero el acento es más latino-genérico.
talk.providers.<provider>
secret

Configuración específica del provider activo. Para ElevenLabs: apiKey, voiceId, modelId, stability, similarityBoost. Para OpenAI: apiKey, voice (alloy/echo/fable/onyx/nova/shimmer), speed.

talk.realtime.mode
experimental

Si está habilitado el realtime nativo del provider. Valores: realtime (usa OpenAI Realtime API o Google Live API), stt-tts (cascade), transcription (solo STT, sin TTS).

talk.realtime.transport
advanced

Transporte para realtime. webrtc (default — peer-to-peer desde browser), provider-websocket (cliente conecta directo al provider), gateway-relay (todo el audio pasa por el Gateway — para hardening de credenciales).

Talk - interrupt on speech

Default: true. Si el usuario empieza a hablar mientras el bot está respondiendo, se corta la respuesta y se procesa el nuevo input. Te da una conversación natural tipo "hablar por encima" en vez de turn-based estricto.

Voice directives

El agente puede prefijar respuestas con una línea JSON para controlar la voz: {"voice": "voice-id", "once": true}. once = solo para esta respuesta. Sin once = cambia el default. La línea JSON se elimina antes del TTS playback.

Audio

audio.* · stt.*

Configuración de inbound audio: transcripción de notas de voz que el bot recibe, plus configuración de Voice Call streaming STT.

stt.provider

Provider de Speech-to-Text para transcribir audio inbound. Opciones: openai (Whisper), deepgram, google, assemblyai, elevenlabs (transcripción), local-cli (Whisper local).

stt.language

Hint de idioma para mejorar precisión. Default: auto. Para tu setup en español: es. Algunos providers (Whisper) auto-detectan pero el hint reduce errores.

audio.summarize

Si true, después de transcribir un audio largo el bot manda un resumen del contenido transcrito en lugar de toda la transcripción. Útil para WhatsApp notes largos.

audio.maxDurationSec
performance

Duración máxima de audio que se procesa. Audio más largo se rechaza o se trunca según política. Default: 600s (10 min).

04 — APARIENCIA

La pestaña Apariencia.

Toda la parte cosmética del Control UI. Tema visual, modo light/dark, redondeo de esquinas, tamaño de texto. Importante: muchas de estas opciones se guardan en localStorage del navegador, no en el config del Gateway. Si abrís el dashboard desde otro browser, vas a tener que reconfigurar.

Theme
UI
Setup Wizard

Theme

controlUi.theme.* · browser-local

Familia de tema visual del Control UI. Cada familia define paleta de colores, tipografía, iconografía y estilo general. Cuatro opciones built-in + Import para temas custom.

Claw (default)

El tema oficial de OpenClaw. Naranja/rojo cangrejo dominante, tipografías sans modernas, esquinas redondeadas suaves. Ideal para uso diario. Es lo que viste en todas las imágenes.

Knot

Tema náutico azul/cian. Si Claw te resulta muy cálido o ruidoso, Knot es más sobrio.

Dash

Minimalista monocromo grises/negros. Para developers que quieren cero distracciones visuales. Buena opción si vas a hacer screencasts.

Import (tweakcn)

Importa un tema custom desde tweakcn.com. En tweakcn diseñás tu tema con un editor visual, hacés Share y copiás el link. Después pegás el link acá. El tema se guarda browser-local — solo lo ves vos en este navegador.

Tip: tweakcn genera CSS variables compatibles con shadcn/ui. Útil si querés personalizar branding para clase/curso.
Mode (Light/Dark/System)

Light = fondo claro permanente. Dark = fondo oscuro permanente. System = detecta automáticamente prefers-color-scheme del OS (cambia con sunset/sunrise si tenés auto-mode activado).

Roundness

Radio de las esquinas de toda la UI. Cinco niveles: None (cero radio — todo cuadrado, estética brutalist), Slight (2-4px), Default (8-12px — el más común), Round (16-20px — más friendly), Full (pill-shape máximo — para componentes button-heavy).

Text size

Escala del texto global del Control UI. Solo afecta el dashboard web, no la app móvil ni los canales. S (90%) · M (default 100%) · L (110%) · XL (125%) · XXL (140%).

Tip educativo: Para screencasts/clases, subí a L o XL para que se lea bien en proyector.

UI

controlUi.* · gateway.controlUi.*

Configuración funcional del Control UI: animaciones, accesos, sandboxing de embeds.

gateway.controlUi.enabled
access

Si false, el Control UI no se sirve. El Gateway sigue corriendo pero no podés entrar al dashboard web. Útil para deploys headless donde solo usás CLI/API.

gateway.controlUi.root
advanced

Path a un build custom del Control UI. Útil si maintains una versión localizada o brandeada. El directorio debe contener archivos estáticos y un index.html.

openclaw config patch gateway.controlUi.root "$HOME/.openclaw/control-ui-custom"
gateway.controlUi.allowedOrigins
networkaccess

Lista de orígenes permitidos para conectarse al Control UI. CORS strict. Si ves errores tipo "closed before connect... reason=origin not allowed" en los logs, agregá el origen acá. En tu caso, los logs mostraban exactamente este warning.

Default:solo loopback
gateway.controlUi.embedSandbox
access

Política de sandbox para iframes hosted via shortcode [embed ...]. Valores: strict (deshabilita scripts dentro de embeds — más seguro), normal (permite scripts pero aísla el contexto), permissive (sandboxing mínimo — solo para embeds 100% trusted).

PWA install

El Control UI incluye manifest.webmanifest y service worker para instalarse como PWA. Una vez instalado, Web Push permite recibir notificaciones aunque el tab esté cerrado. Override de VAPID keys via env vars OPENCLAW_VAPID_PUBLIC_KEY, OPENCLAW_VAPID_PRIVATE_KEY, OPENCLAW_VAPID_SUBJECT.

Animations / Motion

Toggle global de animaciones. Si te molestan o si estás en una máquina lenta, deshabilitalas. Respeta el prefers-reduced-motion del OS automáticamente.

Setup Wizard

acción manual

Re-ejecuta el wizard de onboarding inicial. Útil para reconfigurar el Gateway sin tener que editar el JSON a mano, o para guiar a alguien que está aprendiendo.

Run Setup Wizard

Botón que dispara el wizard interactivo. Vas paso a paso: (1) modelo LLM por defecto(2) auth (token/password)(3) canal inicial (Telegram suele ser el más rápido) → (4) skills básicas(5) primer agente.

openclaw onboard
Tip: Si vas a hacer una demo en clase, ejecutá el setup wizard en una máquina limpia. Es la mejor manera de mostrar el setup de cero en 15 minutos.
05 — AUTOMATIZACIÓN

La pestaña Automatización.

El corazón operativo del Gateway: cómo el agente ejecuta cosas por su cuenta, qué comandos puede correr, qué eventos disparan qué acciones, y cómo se ruteen los mensajes a los distintos agentes. Acá vive cron, hooks, bindings multi-agente, approvals globales y plugins.

Commands
Hooks
Bindings
Cron
Approvals
Plugins

Commands

commands.* · tools.exec.*

Slash commands y comandos del shell. Define qué comandos custom existen, quién puede usar comandos de elevated access, y cómo se comporta el bash chat command.

Command Elevated Access Rules
access

Define quién puede ejecutar comandos privilegiados por canal y sender. Use narrow provider-specific identities — no expongas comandos privilegiados a audiencias amplias. Ejemplo: solo tg:<tu-user-id> puede ejecutar /config y /system.

⚠️ Crítico: Si esta regla está vacía, los comandos privilegiados se exponen al primer cliente que sepa que existen. Configurala SIEMPRE en producción.
Custom entries

Lista de comandos slash custom que añadís al catálogo del agente. Cada entry tiene command, description, handler (skill, plugin, o bash script). Click + Add Entry en el panel.

Allow Bash Chat Command
accessadvanced

Toggle que habilita el alias ! o /bash para ejecutar shell commands desde el chat. Default: false. Requiere tools.elevated activado.

⚠️ Peligro: Cuando está habilitado, cualquier mensaje desde una identidad autorizada que empiece con ! se ejecuta como shell command. Solo activá esto si tu allowFrom es estricto y si entendés las implicaciones.
Bash Foreground Window (ms)
advanced

Tiempo (ms) que bash espera la salida del comando antes de moverlo a background. Default: 2000. Comandos rápidos (echo, ls, git status) se ejecutan en foreground y devuelven output inline. Comandos largos (compile, deploy, npm install) pasan a background y crean un task record. Con 0, todos van directo a background.

commands.native

Auto-registra comandos slash nativos en los canales que lo soporten (Discord slash commands, Telegram menu, Slack commands). Default: "auto" (habilitado para canales compatibles). false para no registrar nada (útil si manejás los menus manualmente).

commands.debug
advanced

Habilita el comando /debug que permite overrides de runtime temporales (memoria, no disco). Útil para experimentar sin tocar el config. Default: false.

Hooks

hooks.internal.entries.*

Event-driven scripts que se disparan en eventos del ciclo de vida (mensaje recibido, comando ejecutado, sesión compactada, gateway startup, etc.). Hay internal hooks (bundled, discovered de directorios) y plugin hooks (registrados por plugins instalados).

session-memory

Hook bundled que activa la memoria persistente entre sesiones. Carga el archivo MEMORY.md del workspace al boot y lo actualiza con learnings clave al final de cada sesión.

openclaw hooks enable session-memory
command-logger

Loguea todos los slash commands ejecutados a ~/.openclaw/logs/commands.log. Util para auditoría. Default: disabled.

compaction-notifier

Manda mensajes cortos a la conversación activa cuando empieza y termina la compaction de la sesión. Útil en canales de chat para que el usuario sepa que el agente está resumiendo contexto.

boot-md

Ejecuta BOOT.md del workspace activo cuando arranca el Gateway. Es como un .bashrc del agente: setea env vars, hace warm-up de skills, valida que las API keys estén bien.

Eventos disponibles
advanced

Los hooks pueden escuchar estos eventos:

command:new · command:reset · command:stop · command (catch-all)
session:compact:before · session:compact:after · session:patch
agent:bootstrap · gateway:startup · gateway:shutdown · gateway:pre-restart
message:received · message:transcribed · message:preprocessed · message:sent
load.extraDirs
advanced

Directorios adicionales donde buscar hooks. Por defecto OpenClaw busca en ~/.openclaw/hooks/ y <workspace>/hooks/. Útil para tener un repo compartido de hooks entre múltiples Gateways.

Bindings

bindings[] · multiAgent.*

Multi-agent routing. Define qué agente atiende qué canal/peer/guild/topic/rol. Si solo tenés un agente, no necesitás bindings. Si tenés varios agentes especializados (uno para coding, otro para soporte, otro para family chats), bindings te ahorran horas.

Estructura del binding

Cada binding tiene agentId (qué agente atiende) y match (qué condiciones disparan ese agente). Sub-campos del match: channel, peer, guildId, roles (array para Discord). Si más de un binding matchea, gana el más específico (peer > guild > channel).

Ejemplo: Discord role-based routing

"Los miembros del role moderators en el guild 123 hablan con el agente opus, todos los demás del guild con sonnet." Esto te permite tener un mismo bot en un servidor pero con dos modelos según el rol.

Tipos especiales: ACP

Bindings con type: "acp" configuran persistent ACP bindings para Telegram forum topics. Usá canonical chatId:topic:topicId en match.peer.id.

Cron (config global)

cron.*

Configuración global del scheduler. Los jobs individuales se crean en la sección Tareas Cron del sidebar. Acá definís el comportamiento global: webhook auth, retry policy, alertas de falla, default destinations.

cron.webhookToken
secretaccess

Bearer token para POSTs salientes de cron webhook (cuando delivery.mode = "webhook"). Si no lo seteás, no se manda auth header en los webhooks de cron.

cron.retry
reliability

Política de retry para jobs one-shot que fallan con errores transitorios. maxAttempts (default 3, max 10), backoffMs array (default [30000, 60000, 300000]), retryOn tipos de error que disparan retry (rate_limit, overloaded, network, timeout, server_error). Jobs recurrentes manejan failures aparte.

cron.failureAlert

Alertas globales para fallas de cron. Subfields: enabled (default false), after (fallas consecutivas antes de alertar, default 3), cooldownMs (mínimo ms entre alertas repetidas), includeSkipped (cuenta skips como fallas). mode: announce (manda mensaje al canal) o webhook.

cron.failureDestination

Default destination para notificaciones de fallas. mode (announce/webhook), channel (override del canal — "last" usa el último canal de entrega), to (target explícito).

cron.runLog.maxBytes / keepLines
performance

Tamaño máximo por archivo de log de cron run (cron/runs/<jobId>.jsonl). Default: maxBytes: 2_000_000, keepLines: 2000. Cuando excede, se prune al lines más recientes.

Approvals

tools.exec.approvals.* · gateway.exec.approvals.*

Políticas globales de aprobación para ejecución de tools. Acá vive la política que decide qué comandos pasan (allowlist), cuáles piden confirmación, y cuáles se bloquean.

policy
access

Política global. Valores: deny (default — bloquea todo, requiere allowlist explícita), ask (pregunta interactivamente — solo funciona si hay un canal con UI), auto (aprueba todo lo que matchee allowlist), allow (peligroso — aprueba todo sin chequear).

allowlist
access

Lista de patrones de comandos pre-aprobados. Soporta wildcards: git *, npm install, ls -*. Comandos que no matcheen ninguna entrada caen a la policy global.

openclaw approvals allowlist add "git status"
denylist
access

Lista de patrones que se rechazan SIEMPRE, sin importar la policy. Útil para bloquear permanentemente comandos peligrosos tipo rm -rf /, dd if=*, shutdown, etc.

per-node policies

Cada nodo (Mac, iPhone, Android, browser) puede tener su propia policy diferente. Ej: política auto en tu desktop pero ask en tu phone.

openclaw approvals set --node mbp16 --policy auto

Plugins

plugins.* · npm registry

Extensiones que cargan capacidades nuevas: proveedores LLM, canales, tools, hooks, channels custom. Se instalan via npm registry (no aceptan git/URL/file specs por seguridad).

Install via npm

Los plugins se instalan via openclaw plugins install <package>. Solo se aceptan especs npm con nombre + versión exacta o dist-tag. Git/URL/file/semver-ranges son rechazados.

openclaw plugins install openclaw-plugin-voicecall --pin
--ignore-scripts (default)
access

Las instalaciones de dependencias corren con --ignore-scripts por defecto, aunque tu shell tenga configurado lo contrario. Esto evita ejecución arbitraria de scripts npm en preinstall/postinstall.

allow-build-scripts
accessadvanced

Override para plugins que requieren compilation (ej: native modules con node-gyp). Lista de packages permitidos a correr scripts. Solo agregá packages que conocés y confiás.

--pin (recomendado)

Cuando instalás con --pin, la versión queda fijada y no se updatea automáticamente. Esencial para producción: te evita updates que rompan compatibilidad.

plugins.entries[]

Lista de plugins activos. Cada entry tiene name, config (config específico del plugin), enabled (toggle). Desde el panel podés enable/disable plugins sin desinstalarlos.

memory-core (bundled)

Plugin bundled con OpenClaw. Maneja toda la subsistema de memoria (Light/Deep/REM phases). Config en plugins.entries.memory-core.config.dreaming.*.

device-pair (bundled)

Plugin bundled para pairing de dispositivos. Habilita comandos como /pair, /pair pending, /pair approve.

06 — INFRAESTRUCTURA

La pestaña Infraestructura.

La sección más crítica desde el punto de vista de seguridad. Define cómo el Gateway escucha, quién puede entrar, cómo se sirve el Control UI, qué browser usa el agente, qué nodos están conectados, cómo se descubren entre sí, qué tools de generación de media están activas, y cómo se hablan los protocolos ACP/MCP.

Gateway
Web
Browser
NodeHost
Discovery
Media
ACP
MCP

Gateway

gateway.*

El servidor que escucha todas las conexiones (browser, mobile apps, CLI, canales). Acá vive el config más sensible: bind mode (qué IP escucha), auth mode (cómo se valida), rate limiting, trusted proxies.

Gateway Allow x-real-ip Fallback
accessnetworkreliability

Habilita el fallback a x-real-ip cuando falta x-forwarded-for en escenarios con proxy. Default: false. Mantenelo deshabilitado a menos que tu ingress stack lo requiera explícitamente (algunos reverse proxies legacy lo mandan).

Path:gateway.allowRealIpFallback
Gateway Auth (Mode)
accessnetworkrequired

El campo más crítico de todo el config. Cuatro modos:

none — Sin auth. Solo para loopback en máquinas single-user trusted. No es ofrecido en el wizard de onboarding.
token — Bearer token. El default que genera el wizard. Recomendado para VPS.
password — Contraseña compartida. Útil con Tailscale Funnel (que requiere password).
trusted-proxy — Delega auth a un reverse proxy upstream (Tailscale Serve, Cloudflare Access, Authelia, Pomerium).
⚠️ Crítico: Non-loopback binds REQUIEREN auth. Si configurás bind: "lan" o "tailnet" y auth.mode: "none", el Gateway se niega a arrancar. Si tenés token y password configurados al mismo tiempo, definí explícitamente auth.mode o falla el startup.
Gateway Auth Allow Tailscale Identity
accessnetwork

Si true, Tailscale Serve identity headers (verificadas con tailscale whois) satisfacen la auth del Control UI/WebSocket sin necesidad de token/password. Default: true cuando tailscale.mode = "serve". No aplica a HTTP API endpoints — esos usan auth normal.

Tip: Si usás Tailscale Serve, esta es la opción más cómoda. Si tu host es trusted, tu identidad en Tailscale ya te autoriza.
Gateway Password
secret

Contraseña compartida cuando auth.mode: "password". Override via env var OPENCLAW_GATEWAY_PASSWORD. Para shared-secret deployments donde token no es práctico (ej: usuarios la tipean en un campo).

Bind mode
networkrequired

Qué interfaz de red usa el Gateway para escuchar. Valores:

auto — Detecta automáticamente según contexto
loopback — Solo 127.0.0.1 (default — el más seguro)
lan0.0.0.0 (todas las interfaces — para Docker o LAN access)
tailnet — Solo la IP de Tailscale (para Tailscale-only access)
custom — Usá customBindHost para especificar IP
⚠️ Docker: En contenedores Docker con bridge networking (-p 18789:18789), el default loopback no funciona — el traffic llega por eth0. Usá --network host O configurá bind: "lan". En tu setup actual con Docker Swarm, probablemente esté en lan.
openclaw config get gateway.bind
Port

Puerto único multiplexado para WebSocket + HTTP. Default: 18789. Precedence: --port CLI flag > OPENCLAW_GATEWAY_PORT env > gateway.port > default.

Trusted Proxies
accessnetwork

Lista de IPs autorizadas como proxies. Cuando auth.mode: "trusted-proxy", solo requests desde estas IPs pueden pasar identity headers. Ejemplo: ["10.0.0.1", "172.17.0.1"]. Si una IP no listada manda x-forwarded-user, se ignora.

Rate Limit
reliability

Limiter de intentos de auth fallidos. Sub-campos: maxAttempts (default 10), windowMs (60000), lockoutMs (300000 — bloquea por 5 min), exemptLoopback (default true). Cuando se trigger, devuelve 429 + Retry-After.

Tailscale (mode)
network

Integración con Tailscale. Tres modos: off (no usa Tailscale), serve (Tailscale proxy local con HTTPS — recomendado para mobile/remote access), funnel (público en internet a través de Tailscale Funnel — requiere auth.mode: "password").

controlUi.allowedOrigins
networkaccess

Lista de orígenes browser autorizados a conectarse. Crítico para deploys non-loopback. Ejemplo: ["https://control.example.com", "http://127.0.0.1:5173"]. Los logs de Diego mostraban exactamente este warning: "reason=origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)".

⚠️ Nunca uses ["*"] en producción. Significa "permití cualquier browser origin", no "matchea el host actual".
controlUi.dangerouslyAllowHostHeaderOriginFallback
access

Habilita el modo "fallback al Host header" para validar origins. Es un downgrade de seguridad serio. Solo úsalo si entendés cómo se puede hacer Host header smuggling.

tls.enabled
network

Habilita TLS nativo del Gateway. Si está activo, dashboard URLs se renderizan con https:// y WebSocket con wss://. Generalmente preferís terminar TLS en un reverse proxy (Tailscale Serve, Caddy, nginx) en lugar de hacerlo en el Gateway.

nodes.pairing.autoApproveCidrs
access

CIDRs cuyo pairing se auto-aprueba sin intervención manual. Útil para LAN/tailnet trusted. Ejemplo: ["192.168.1.0/24", "fd00:1234:5678::/64"].

nodes.allowCommands / denyCommands
access

Allowlist/denylist de comandos que los nodos pueden invocar via gateway-side. Ejemplo: allowCommands: ["canvas.navigate"], denyCommands: ["system.run"].

⚠️ Diego — pendiente: En tu setup tenías denyCommands con entries inválidos. Corregilo: deben ser nombres exactos de comandos válidos (system.run, browser.click, etc.).

Web

web.* · gateway.controlUi.* (parcial)

Configuración del WebChat y PWA. El WebChat es la interfaz browser-based para hablar con el agente desde cualquier navegador autorizado.

WebChat enabled

Habilita el WebChat (interfaz de chat web). Endpoint: http://127.0.0.1:18789/chat (o equivalente). Default: true.

controlUi.basePath

Path base donde se sirve el Control UI. Default: /. Útil para servirlo en un subdirectorio: /openclaw.

controlUi.chatMessageMaxWidth

Ancho máximo de los mensajes agrupados en el chat. Default: "min(1280px, 82%)".

PWA install / VAPID

El Control UI es instalable como PWA. Para Web Push (notificaciones), configurá VAPID keys via env: OPENCLAW_VAPID_PUBLIC_KEY, OPENCLAW_VAPID_PRIVATE_KEY, OPENCLAW_VAPID_SUBJECT.

Cache TTL
performance

Tiempo de vida del caché del service worker. Default conservador para no servir UI desactualizada. Si hacés cambios constantes al build del Control UI, bajalo.

Browser

browser.* · gateway.browser.*

Configuración del browser headless que usa el agente para navegar. Internamente: Playwright + Chromium.

browser.engine

Engine del browser. Valores: chromium (default — Playwright), firefox, webkit. Chromium es el más estable y compatible.

browser.headless

true (default — sin GUI, ahorra recursos) o false (con GUI — útil para debugging). En tu VPS sin display, siempre true.

browser.profiles[]

Lista de perfiles de browser (cookies, storage, extensiones). Cada perfil es independiente. Útil si querés que el agente tenga login persistente a sitios sin reescribir credenciales cada vez.

openclaw browser profiles
browser.extraArgs
advanced

Flags adicionales para Chromium. Ejemplos: --disable-gpu (VPS sin GPU), --window-size=1920,1080, --disable-dev-shm-usage (Docker).

browser.userDataDir

Directorio donde Chromium guarda perfiles. Default: ~/.openclaw/browser/.

browser.timeoutMs
performance

Timeout default para navegaciones y operaciones. Default: 30000 (30s).

NodeHost

nodes.host.*

Configuración del nodo "local" (el mismo Gateway host actuando como nodo). Define qué capacidades expone el host para que el agente las pueda invocar.

nodeHost.enabled

Si el Gateway host actúa como nodo (expone tools tipo system.run, file system, etc.). Default: true.

nodeHost.capabilities[]

Lista de capacidades que el host expone. Defaults incluyen exec, fs, browser, media. Podés deshabilitar capacidades específicas si no querés exponerlas.

nodeHost.workspace

Path al workspace local del host. Default: ~/.openclaw/workspace/. Es donde viven los archivos bootstrap del agente (AGENTS.md, SOUL.md, etc.).

Discovery

discovery.*

Cómo se descubren entre sí el Gateway y los nodos (Mac, iPhone, Android, browsers). Soporta mDNS/Bonjour para LAN y DNS-based para WAN.

discovery.mdns.enabled

mDNS/Bonjour para descubrimiento en LAN. Default: true. Los nodos descubren al Gateway automáticamente en LANs. Deshabilitalo en redes públicas para no anunciar el servicio.

discovery.dns

DNS-based discovery para WAN. Configurás un FQDN y los nodos lo resuelven. Comando: openclaw dns setup.

discovery.advertise

Toggle global para anunciar el servicio. Si está false, el Gateway escucha pero no se promociona.

Media

media.* · plugins providers

Configuración de generación de imagen, video y música. Cada provider tiene su sub-config con API key y opciones específicas.

image_generate (providers)
secret

Providers disponibles: OpenAI (DALL-E 3), Google (Imagen 3), xAI, DeepInfra, MiniMax, Black Forest Labs (FLUX), Stability AI (SD3). Configurá API keys via env vars o SecretRefs.

video_generate (providers)
secret

Providers: Google (Veo 3), OpenAI (Sora), xAI, DeepInfra, Runway (Gen-3), Luma (Dream Machine), Kling, Pika Labs. Generación async: corre en background y postea el resultado cuando termina.

music_generate (providers)

Generación de música/audio. Provider Suno o equivalente. Async como video.

Media understanding

Análisis de inbound media (imágenes, videos). Usa modelos vision-capable (GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Pro) o plugins dedicados.

ACP (Agent Communication Protocol)

acp.*

Protocolo para que múltiples agentes se comuniquen entre sí (incluyendo Claude Code, Gemini CLI, otros agentes OpenClaw, etc.). ACP es bidireccional: tu agente puede invocar a otros, otros agentes pueden invocar al tuyo.

acp.enabled

Habilita el servidor ACP. Default: dependiente del wizard. Cuando está activo, expone endpoints para que otros agentes se conecten.

acp.bindings[]

Bindings persistentes para forum topics. Cuando un mensaje llega a un topic específico, se rutea via ACP a otro agente. Usar canonical chatId:topic:topicId.

acp.timeout

Timeout default para llamadas ACP. Default: 60000ms.

MCP (Model Context Protocol)

mcp.*

Cliente MCP. Permite que tu agente use tools expuestas por servers MCP externos (Linear, GitHub, Notion, Slack, Postgres, etc.). MCP es el protocolo abierto creado por Anthropic.

mcp.servers[]

Lista de MCP servers conectados. Cada entry tiene name, command (cómo se ejecuta el server), args, env. Server standard: stdin/stdout JSON-RPC.

mcp.toolPrefix

Prefijo que se agrega a los tool names exportados por MCP. Default: nombre del server. Evita colisiones cuando múltiples MCP servers exportan tools con nombres similares.

mcp.transport

Transporte para conectar con servers MCP. stdio (default — proceso local con stdin/stdout) o sse (Server-Sent Events para servers remotos).

07 — IA Y AGENTES

La pestaña IA y agentes.

El cerebro y la consciencia del sistema. Acá vive todo lo que define cómo el agente piensa: qué modelos LLM usa, cómo se carga el conocimiento (skills, tools, memory), y cómo se manejan las sesiones (compaction, pruning, lifecycle).

Agents
Models
Skills
Tools
Memory
Session

Agents

agents.defaults.* · agents.list[]

Configuración de los agentes. agents.defaults son los settings compartidos por todos. agents.list[] permite definir agentes específicos con override por agente. Si solo tenés un agente (como Logos en tu setup), no necesitás tocar agents.list.

Agent Defaults
advanced

Settings base heredados por todos los agentes salvo override en agents.list[]. Forzar comportamiento consistente desde acá reduce duplicación per-agent.

Path:agents.defaults
Legacy Default Agent Runtime
advancedlegacy

Runtime legacy del agente embedded (Pi runner). Solo aplica al embedded agent runtime, no a ACP ni CLI runtimes. Generalmente no necesitás tocarlo.

Block Streaming Break

Define en qué punto se "rompe" un bloque de streaming. Valores: text_end (al terminar el bloque de texto), message_end (al terminar el mensaje completo). Afecta cómo se entrega el output a canales con streaming.

Block Streaming Chunk

Tamaño del chunk de streaming. Más chunks pequeños = entrega más fluida pero más overhead. Default optimizado para Telegram.

Block Streaming Coalesce

Coalesce chunks consecutivos pequeños para no spamear edits. Sub-toggle del streaming. Importante para canales con rate limits estrictos.

Block Streaming Default

Streaming on/off por defecto. on (default) habilita streaming en canales que lo soportan. off espera la respuesta completa antes de enviar.

workspace path

Path al workspace del agente. Default: ~/.openclaw/workspace. Es donde viven los archivos bootstrap (AGENTS.md, SOUL.md, IDENTITY.md, USER.md, TOOLS.md, HEARTBEAT.md, MEMORY.md).

openclaw config get agents.defaults.workspace
repoRoot

Root del repositorio de código. Si tu agente trabaja con código, este path es el "current working directory" implícito para tools como fs.read, git.*, etc.

skipBootstrap

Si true, el agente arranca SIN cargar los archivos bootstrap. Útil para tareas one-shot donde no necesitás persona ni memoria. No es el comportamiento normal.

skipOptionalBootstrapFiles

Permite saltarse archivos bootstrap opcionales (HEARTBEAT.md, MEMORY.md) si no existen. Si los tenés, los carga; si no, no falla.

contextInjection
performance

Cómo se inyecta el contexto. Valores: always (default — cada turn), first-turn (solo el primer turn de la sesión), on-demand (solo cuando el agente lo pide explícitamente).

heartbeat

Configuración del heartbeat (turn periódico del agente). Sub-campos: enabled, every ("30m", "1h"), directPolicy (allow/block — manda DMs proactivos). En tu setup tenés heartbeat a 30 minutos.

runRetries
reliability

Límites del outer run loop para prevenir loops infinitos. base (24), perProfile (8), min (32), max (160). Solo aplica al embedded runtime, no a ACP/CLI.

Models

models.* · providers

Catálogo de proveedores LLM y modelos disponibles. Cada provider tiene su sub-config con API key (via SecretRefs) y opciones específicas. Tu setup usa OpenRouter como primary, Groq + DeepSeek como fallbacks.

providers (Anthropic)
secret

Claude API. Config: apiKey (env: ANTHROPIC_API_KEY), baseUrl (custom — útil con Helicone u otros gateways). Modelos: claude-4-sonnet, claude-4-haiku, claude-4-opus.

providers (OpenAI)
secret

OpenAI API. Modelos: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, o3, o3-mini. Soporta Realtime API para Talk.

providers (Google)
secret

Gemini API. Modelos: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite. Tier gratuito disponible — Gemini embeddings los usás en tu setup.

providers (OpenRouter)
secret

OpenRouter es un router multi-provider — una sola API key te da acceso a cientos de modelos (Claude, GPT, Llama, DeepSeek, Mistral, Nemotron, etc.). En tu setup es el primary, con Nemotron 120B como modelo activo.

providers (Groq)
secret

Groq es ultra-fast LPU inference. Modelos Llama 3 70B, Mixtral, etc. Latencia bajísima. En tu setup como fallback.

providers (DeepSeek)
secret

DeepSeek API. Modelos baratos y competitivos. En tu setup como fallback.

Más providers

Otros providers built-in: xAI, DeepInfra, MiniMax, Xiaomi, z.ai, Mistral, Ollama (local), llama.cpp (local), LM Studio (local), Together AI, Fireworks AI, Perplexity, Cohere.

fallbackChain
reliability

Lista de modelos a probar si el primary falla. Ej: ["openrouter/nemotron", "groq/llama3-70b", "deepseek/chat"]. Probás cada uno en orden hasta que uno responda.

SecretRefs
secret

En lugar de hardcodear API keys, podés referenciarlas como SecretRefs: apiKey: { $secret: "providers.openrouter.apiKey" }. Las secrets se resuelven en runtime desde env vars, archivos, o providers externos (1Password, gopass).

Skills

skills.* · plugins.entries.skills.*

Las skills son las "habilidades" extensibles del agente. Cada skill es una colección de prompts, scripts y configs que el agente puede invocar como una unidad de conocimiento. Built-in + ClawHub + workspace.

allowBundled

Si las skills bundled con OpenClaw se cargan automáticamente. Default: true.

load.extraDirs

Directorios adicionales para buscar skills. OpenClaw busca por defecto en ~/.openclaw/skills/ y <workspace>/skills/. Útil para tener un repo compartido de skills entre equipos.

load.allowSymlinkTargets
access

Si false (default), symlinks como skill targets se rechazan por seguridad. Si tenés un workflow que necesita symlinks (dev), ponelo en true.

load.watch

File watcher para reload automático de skills cuando cambian archivos. Útil en development. En producción mejor false para evitar surprise reloads.

install.preferBrew

En macOS, preferir Homebrew para instalar dependencies. Si false, usa el package manager por defecto del sistema.

install.nodeManager

Cuál node manager usar para skills que necesitan npm packages. Valores: npm, pnpm, yarn, bun.

install.allowUploadedArchives
access

Permite que los usuarios suban archivos .zip/.tar.gz como skills directamente. Apagalo en producción. Es vector de ataque obvio (archivos arbitrarios subidos por canal externo).

entries[]

Override por skill. Cada entry tiene id, enabled, config (config específico de la skill), approvalPolicy (auto/pending).

approvalPolicy
access

Política de aprobación para skills. pending (default — el operador aprueba cada install) o auto (instala sin preguntar). Auto solo si el workspace es trusted y el modelo no maneja contenido hostil.

Tools

tools.*

Configuración del catálogo de tools del agente. tools.profile selecciona un preset; tools.effective es el computed final; tools.loopDetection previene loops infinitos.

tools.profile
access

Preset de tools. Cuatro niveles: minimal · coding · messaging · full. Ver Quick Settings > Security para detalles.

tools.alsoAllow / alsoDeny

Override del profile. Permite agregar tools específicas sin cambiar de profile, o quitar tools del profile. Ej: profile: "messaging" + alsoAllow: ["sessions_spawn"] para multi-agent en profile messaging.

tools.exec.security
access

Settings de seguridad para system.run. Sub-campos: sandbox (off/profile/all), maxDurationSec, maxOutputBytes, denyEnv (env vars a excluir del subprocess).

⚠️ Diego — pendiente: Sandbox all no es viable en tu setup Docker Swarm (no hay Docker-in-Docker disponible). Mantenelo en off.
tools.loopDetection
reliability

Detecta llamadas idénticas repetidas a tools para prevenir loops infinitos. Emite compaction_loop_persisted errors con el nombre del tool ofensor y el conteo de llamadas idénticas.

tools.exec.approvals
access

Política de approvals — ver Automatización > Approvals para detalles. Estos defaults se pueden override por canal o por nodo.

Memory

memory.* · plugins.entries.memory-core.config.*

Sistema de memoria persistente del agente. OpenClaw usa archivos Markdown plain como storage (MEMORY.md, memory/YYYY-MM-DD.md, DREAMS.md) + un índice SQLite/QMD/LanceDB para búsqueda.

memory.engine

Engine de memoria. Opciones:

builtin — SQLite FTS5 + sqlite-vec. Default. Zero deps.
qmd — Local-first sidecar avanzado. Mejor para datasets grandes.
honcho — AI-native cross-session memory.
lancedb — Plugin LanceDB con OpenAI-compatible embeddings.
memorySearch

Config del pipeline de búsqueda. Sub-campos: provider (embeddings provider — en tu caso Gemini), topK (cuántos resultados retornar), hybridWeight (balance entre keyword y vector search).

memory.qmd.* (si engine: qmd)
advanced

Config específico del engine QMD: paths, encoding, índice config. Ver Memory configuration reference para detalles.

memory.citations

Si se devuelven citations con cada memory recall. Útil para que el agente sepa de dónde sacó la info y referencie fuentes.

dreaming.enabled
experimental

Habilita el dreaming (consolidación background de memoria). Opt-in — default false. Cuando está activo, corre fases Light → Deep → REM en horarios programados.

Path:plugins.entries.memory-core.config.dreaming.enabled
dreaming.frequency

Cadencia del full dreaming sweep. Default: "0 3 * * *" (3 AM diario). Acepta cron expression.

dreaming.model

Override del modelo usado para el Dream Diary subagent. Útil para mantener dreaming en un modelo local barato. Requiere subagent.allowModelOverride: true.

memory.commitments

Toggle de inferred commitments. Default: opt-in. Cuando activo, OpenClaw infiere follow-ups cortos de conversaciones normales y los entrega via heartbeat.

Session

session.* · agents.defaults.compaction.*

Cómo se manejan las sesiones: lifecycle, compaction (resumen automático cuando el contexto se llena), pruning (limpieza de tool results viejos), timeouts.

session.lifecycle

Política de lifecycle de sesiones. Sub-campos: idleTimeoutMs (cuánto sin actividad antes de archivar), dailyReset (cierra sesiones del día a medianoche), maxSessionAgeDays.

compaction.threshold
performance

Cuánto del context window debe usarse antes de disparar compaction. Default: ~80%. Cuando se alcanza, OpenClaw genera un resumen y truncate la sesión.

compaction.memoryFlush.model

Modelo usado en el silent turn pre-compaction que guarda memoria importante en MEMORY.md. Mantener este turn en un modelo local barato (Ollama) ahorra costos. Default: usa el modelo activo de la sesión.

openclaw config patch agents.defaults.compaction.memoryFlush.model "ollama/qwen3:8b"
compaction.notifyUser

Si true, manda notice al canal cuando empieza/termina compaction. Default: false (silent). Útil tenerlo en true en chats interactivos para que el usuario sepa que no se colgó.

contextPruning.mode
performance

Modo de pruning de tool results viejos. off (no pruning), cache-ttl (prune con TTL — default). Solo poda in-memory context, no modifica la sesión en disco.

contextPruning.ttl

Cuánto pasa antes de que un tool result viejo se considere prunable. Default: "1h". Acepta duraciones (ms/s/m/h).

contextPruning.softTrim / hardClear
advanced

Política de pruning: softTrim conserva head + tail e inserta ... en el medio. hardClear reemplaza tool result entero con placeholder. Soft trim primero, hard clear si necesita más espacio.

session.timeout

Timeout global por sesión. Si una sesión está inactiva más que este timeout, se considera idle y eventualmente se archiva.

08 — DEPURACIÓN

La pestaña Depuración.

Instantáneas en tiempo real del estado del Gateway. Aparecen como bloques JSON crudo: Status (configuración runtime + heartbeat + canales), Health (eventLoop health + uptime), y heartbeat data. Es la herramienta de diagnóstico número uno cuando algo no anda.

Snapshots

RPC: status, health

El panel muestra dos bloques JSON: Status y Health. El botón Actualizar arriba a la derecha refresca el snapshot manualmente.

Status JSON

Snapshot completo del runtime. Campos clave en tu snapshot:

runtimeVersion — versión actual del Gateway (en tu caso "2026.5.20")
heartbeat.defaultAgentId — agente default para heartbeat ("main")
heartbeat.agents[] — lista de agentes con su agentId, enabled, every (formato humano), everyMs (millis)
channelSummary[] — estado por canal: "Telegram: configured", " - default (token:config)"
queuedSystemEvents — eventos pendientes del system event queue (vacío significa que todo está procesado)
Tip de debugging: Si el agente no responde, el primer lugar a chequear es channelSummary. Si ves algo distinto a "configured", ahí tenés la pista.
Health JSON

Health check del Gateway. Campos:

ok — boolean global (en tu caso true)
ts — timestamp Unix del check
durationMs — cuánto tardó el health check (debería ser <100ms)
eventLoop.degraded — si el event loop está degradado (true = el Gateway está saturado, requests van a llegar lentas)
eventLoop.reasons[] — razones del degradado si está degradado
eventLoop.intervalMs — interval del event loop heartbeat
⚠️ eventLoop.degraded: true es señal seria. Indica que el process está overloaded. Causas comunes: CPU al 100%, memory pressure, demasiados browser handles abiertos.
RPCs manuales
advanced

Si querés correr RPCs manuales (no solo ver snapshots), podés usar el CLI:

openclaw status
openclaw status --usage
openclaw models list
openclaw cron status
openclaw system heartbeat last
Botón Actualizar

Refresca los snapshots manualmente. Los snapshots NO se actualizan automáticamente — necesitás clickear el botón cada vez que querés ver el estado actual. Cuando algo está fallando y querés verlo en tiempo real, en lugar de spammear el botón mejor usá la pestaña Registros con Auto-follow.

09 — REGISTROS

La pestaña Registros.

Seguimiento en vivo de los logs del Gateway. JSONL streaming con filtros por nivel, búsqueda full-text, auto-follow. Es donde vas a pasar más tiempo cuando algo no anda.

Logs (JSONL en vivo)

/tmp/openclaw/openclaw-YYYY-MM-DD.log

Los logs viven en formato JSONL (un JSON por línea) en /tmp/openclaw/openclaw-YYYY-MM-DD.log (rota diariamente). El panel los lee en tiempo real con WebSocket.

Filter (search)

Búsqueda full-text en el contenido de los logs. Soporta substrings y matching case-insensitive. Filtra en tiempo real — útil para encontrar errores específicos.

Tip: Búsquedas comunes: error, warn, connection, origin not allowed, auth, telegram.
Auto-follow

Checkbox que scroll-locks la vista al final. Cuando está activo, cada log nuevo se agrega al final y el scroll baja automáticamente. Deshabilitalo cuando querés inspeccionar logs viejos sin que se te escapen.

Filtros por nivel

Seis checkboxes para los niveles de log. Cada uno con color distintivo:

trace — verbosidad máxima (debugging interno del Gateway)
debug — info detallada útil para developers
info — eventos normales del runtime (default visible)
warn — situaciones inusuales que no rompen flujos
error — errores recuperables
fatal — errores irrecuperables (el Gateway se va a caer)
File path

Path al archivo de log activo. En tu caso: /tmp/openclaw/openclaw-2026-05-24.log. Rota diariamente. Los archivos viejos se mantienen según logging.maxFiles.

Estructura de cada log entry

Cada línea es un JSON con campos: timestamp, level, source (ej: agent/embedded, gateway/ws, channel/telegram), message, y campos extra de contexto. Los campos extra varían según el source.

Tip: Los logs JSONL son grep-friendly. tail -f /tmp/openclaw/openclaw-2026-05-24.log | grep error es tu mejor amigo desde el VPS.
Export visible

Botón arriba a la derecha. Exporta los logs visibles (después de aplicar filtros) como archivo JSONL descargable. Útil para mandar logs a soporte o para guardarlos en un issue de GitHub.

Actualizar

Refresca la vista si la conexión WebSocket se rompió. Si los logs nuevos no aparecen automáticamente, click acá.

Sobre el warning recurrente de "origin not allowed"

En tus logs aparece repetidamente este warning de gateway/ws:

closed before connect conn=<id> peer=<ip>:<port> → 172.17.0.2:18789 remote=<ip> fwd=n/a origin=http://<ip>:18789 host=<ip>:18789 ua=Mozilla/5.0... code=1008 reason=origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)

Significa que estás abriendo el Control UI desde una IP/origen que no está en gateway.controlUi.allowedOrigins. Solución: agregá el origen exacto (con protocolo y puerto) a esa lista. Ej: ["http://69.6.227.126:18789"]. NO uses ["*"] en producción.

Seguir explorando

Sabés tunear cada toggle. ¿Qué falta?

Volver atrás
Componentes en VPS
Si todavía no instalaste OpenClaw, empezá por acá: cada pieza del setup (Gateway, Agent, Workspace, Channels, Skills, LLM) con diagramas y comandos exactos.
OPENCLAW-COMPONENTES.HTML
Contexto general
Ecosistema completo
Para entender el panorama: qué es OpenClaw, historia, ClawHub, Moltbook, NemoClaw, alternativas (ChatGPT Agent, Claude Code, CrewAI), riesgos de seguridad y buenas prácticas.
OPENCLAW-ECOSISTEMA.HTML

Cada campo, documentado.

9 pestañas, +200 opciones, decenas de toggles avanzados que ni siquiera aparecen en el panel pero existen en el JSON. Si llegaste hasta acá, ya sos peligroso con OpenClaw.

📄 DOCS PARA TU LLM ↗ 🦞 VOLVER AL ECOSISTEMA