agentDir) y almacén de sesiones, además de varias cuentas de canal (por ejemplo, dos números de WhatsApp). Los mensajes entrantes se enrutan al agente correcto mediante vinculaciones.
Un agente es el ámbito completo por persona: archivos del espacio de trabajo, perfiles de autenticación, registro de modelos y almacén de sesiones. Una vinculación asigna una cuenta de canal (un espacio de trabajo de Slack, un número de WhatsApp, etc.) a uno de esos agentes.
Qué es un agente
Cada agente tiene su propio:- Espacio de trabajo: archivos,
AGENTS.md/SOUL.md/USER.md, notas locales, reglas de persona. - Directorio de estado (
agentDir): perfiles de autenticación, registro de modelos, configuración por agente. - Almacén de sesiones: historial de chat y estado de enrutamiento en
~/.openclaw/agents/<agentId>/sessions.
sessions_history es la ruta más segura para recuperación entre sesiones: devuelve una vista limitada y redactada, no un volcado de transcripción sin procesar. Elimina firmas de bloques de razonamiento, detalles de cargas de resultados de herramientas, andamiaje de <relevant-memories>, etiquetas XML de llamadas a herramientas (<tool_call>, <function_call> y sus formas plurales/degradadas), y XML de llamadas a herramientas de MiniMax; luego trunca y limita la salida por tamaño en bytes.~/.openclaw/skills, y luego se filtran por la lista efectiva de Skills permitidas del agente. Usa agents.defaults.skills para una línea base compartida y agents.list[].skills para un reemplazo por agente (las entradas explícitas reemplazan el valor predeterminado, no se fusionan). Consulta Skills: por agente frente a compartidas y Skills: listas permitidas de agentes.
Nota sobre el espacio de trabajo: el espacio de trabajo de cada agente es el cwd predeterminado, no un sandbox rígido. Las rutas relativas se resuelven dentro del espacio de trabajo, pero las rutas absolutas pueden llegar a otras ubicaciones del host a menos que el sandboxing esté habilitado. Consulta Sandboxing.
Rutas
| Qué | Predeterminado | Anulación |
|---|---|---|
| Configuración | ~/.openclaw/openclaw.json | OPENCLAW_CONFIG_PATH |
| Directorio de estado | ~/.openclaw | OPENCLAW_STATE_DIR |
| Espacio de trabajo del agente predeterminado | ~/.openclaw/workspace (o workspace-<profile> cuando OPENCLAW_PROFILE está definido) | agents.list[].workspace, luego agents.defaults.workspace, o OPENCLAW_WORKSPACE_DIR |
| Espacio de trabajo de otros agentes | <stateDir>/workspace-<agentId> (o <agents.defaults.workspace>/<agentId> cuando está definido) | agents.list[].workspace |
| Directorio del agente | ~/.openclaw/agents/<agentId>/agent | agents.list[].agentDir |
| Sesiones | ~/.openclaw/agents/<agentId>/sessions | — |
Modo de agente único (predeterminado)
Si no configuras nada, OpenClaw ejecuta un agente:agentIdusamainde forma predeterminada.- Las sesiones se indexan como
agent:main:<mainKey>(elmainKeypredeterminado esmain). - El espacio de trabajo usa
~/.openclaw/workspacede forma predeterminada (oworkspace-<profile>cuandoOPENCLAW_PROFILEse define con algo distinto dedefault). - El estado usa
~/.openclaw/agents/main/agentde forma predeterminada.
Ayudante de agentes
Añade un nuevo agente aislado:--workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (repetible), --non-interactive (requiere --workspace).
Añade bindings para enrutar mensajes entrantes (el asistente ofrece hacerlo por ti) y luego verifica:
Inicio rápido
Crea cada espacio de trabajo de agente
SOUL.md, AGENTS.md y USER.md opcional, además de un agentDir dedicado y un almacén de sesiones en ~/.openclaw/agents/<agentId>.Crea cuentas de canal
Crea una cuenta por agente en tus canales preferidos:Consulta las guías de canales: Discord, Telegram, WhatsApp.
- Discord: un bot por agente, habilita la intención de contenido de mensajes, copia cada token.
- Telegram: un bot por agente mediante BotFather, copia cada token.
- WhatsApp: vincula cada número de teléfono por cuenta.
Añade agentes, cuentas y vinculaciones
Añade agentes en
agents.list, cuentas de canal en channels.<channel>.accounts y conéctalos con bindings (ejemplos abajo).Varios agentes, varias personas
CadaagentId configurado es una persona completamente aislada:
- Cuentas distintas por canal (por
accountId). - Personalidades distintas (
AGENTS.md/SOUL.mdpor agente). - Autenticación y sesiones separadas, sin comunicación cruzada a menos que se habilite explícitamente.
Búsqueda de memoria QMD entre agentes
Para permitir que un agente busque transcripciones de sesiones QMD de otro agente, añade colecciones adicionales enagents.list[].memorySearch.qmd.extraCollections. Usa agents.defaults.memorySearch.qmd.extraCollections cuando todos los agentes deban compartir las mismas colecciones.
name permanece explícito cuando la ruta está fuera del espacio de trabajo del agente. Las rutas dentro del espacio de trabajo permanecen acotadas al agente para que cada agente mantenga su propio conjunto de búsqueda de transcripciones.
Un número de WhatsApp, varias personas (división por DM)
Enruta distintos DM de WhatsApp a distintos agentes en una cuenta de WhatsApp haciendo coincidir el remitente E.164 (+15551234567) con peer.kind: "direct". Las respuestas siguen saliendo del mismo número de WhatsApp: no hay identidad de remitente por agente.
Los chats directos se reducen a la clave de sesión principal del agente de forma predeterminada, por lo que el aislamiento real requiere un agente por persona.
Reglas de enrutamiento
Las vinculaciones son deterministas y gana la más específica. Consulta Enrutamiento de canales para ver el orden completo de niveles (par exacto, par padre, comodín de par, guild+roles, guild, equipo, cuenta, canal, agente predeterminado). Algunas reglas que vale la pena destacar aquí:- Si varias vinculaciones coinciden dentro del mismo nivel, gana la primera en el orden de configuración.
- Si una vinculación define varios campos de coincidencia (por ejemplo
peer+guildId), todos los campos especificados deben coincidir (semánticaAND). - Una vinculación que omite
accountIdcoincide solo con la cuenta predeterminada, no con todas las cuentas. UsaaccountId: "*"para un respaldo de todo el canal, oaccountId: "<name>"para una cuenta. Añadir de nuevo la misma vinculación con un id de cuenta explícito actualiza la vinculación existente solo de canal en lugar de duplicarla.
Varias cuentas / números de teléfono
Los canales que admiten varias cuentas (por ejemplo, WhatsApp) usanaccountId para identificar cada inicio de sesión. Cada accountId se enruta a su propio agente, por lo que un servidor puede alojar varios números de teléfono sin mezclar sesiones.
Define channels.<channel>.defaultAccount para elegir la cuenta usada cuando se omite accountId. Cuando no está definido, OpenClaw recurre a default si está presente; de lo contrario, al primer id de cuenta configurado (ordenado).
Canales que admiten varias cuentas: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.
Conceptos
agentId: un “cerebro” (espacio de trabajo, autenticación por agente, almacén de sesiones por agente).accountId: una instancia de cuenta de canal (por ejemplo, cuenta de WhatsApppersonalfrente abiz).binding: enruta mensajes entrantes a unagentIdpor(channel, accountId, peer)y, opcionalmente, ids de guild/equipo.- Los chats directos se reducen a
agent:<agentId>:<mainKey>(“main” por agente; consultasession.mainKey).
Ejemplos de plataforma
Bots de Discord por agente
Bots de Discord por agente
Cada cuenta de bot de Discord se asigna a un
accountId único. Vincula cada cuenta a un agente y mantén listas de permitidos por bot.- Invita cada bot al servidor y habilita Message Content Intent.
- Los tokens se ubican en
channels.discord.accounts.<id>.token(la cuenta predeterminada puede usarDISCORD_BOT_TOKEN).
Telegram bots per agent
Telegram bots per agent
- Crea un bot por agente con BotFather y copia cada token.
- Los tokens se ubican en
channels.telegram.accounts.<id>.botToken(la cuenta predeterminada puede usarTELEGRAM_BOT_TOKEN). - Para varios bots en el mismo grupo de Telegram, invita cada bot y menciona el que debe responder.
- Deshabilita el modo de privacidad de BotFather para cada bot de grupo (
/setprivacy-> Disable), luego elimina y vuelve a añadir el bot para que Telegram aplique la configuración. - Permite grupos con
channels.telegram.groups, o usagroupPolicy: "open"solo para despliegues de grupos de confianza. - Coloca los ID de usuario de remitentes en
groupAllowFrom. Los ID de grupos y supergrupos pertenecen achannels.telegram.groups, no agroupAllowFrom. - Enlaza por
accountIdpara que cada bot se enrute a su propio agente.
WhatsApp numbers per agent
WhatsApp numbers per agent
Vincula cada cuenta antes de iniciar el Gateway:
~/.openclaw/openclaw.json (JSON5):Patrones comunes
- WhatsApp daily + Telegram deep work
- Same channel, one peer to Opus
- Family agent bound to a WhatsApp group
Divide por canal: enruta WhatsApp a un agente rápido de uso diario y Telegram a un agente Opus.Estos ejemplos usan
accountId: "*" para que los enlaces sigan funcionando si añades cuentas más adelante. Para enrutar un solo mensaje directo o grupo a Opus mientras mantienes el resto en chat, añade un enlace match.peer para ese par; las coincidencias de par siempre tienen prioridad sobre las reglas de todo el canal.Configuración de entorno de pruebas y herramientas por agente
Cada agente puede tener sus propias restricciones de entorno de pruebas y herramientas:setupCommand se ubica bajo sandbox.docker y se ejecuta una vez al crear el contenedor. Las anulaciones sandbox.docker.* por agente se ignoran cuando el ámbito resuelto es "shared".- Aislamiento de seguridad: restringe herramientas para agentes no confiables.
- Control de recursos: ejecuta agentes específicos en entorno de pruebas mientras mantienes otros en el host.
- Políticas flexibles: permisos diferentes por agente.
tools.elevated tiene una puerta global (tools.elevated.enabled/allowFrom) y una puerta por agente (agents.list[].tools.elevated.enabled/allowFrom). La puerta por agente solo puede restringir aún más la global: ambas deben permitir a un remitente para que se ejecuten comandos elevados. Para dirigir grupos, usa agents.list[].groupChat.mentionPatterns para que las @menciones se asignen claramente al agente previsto.Relacionado
- Agentes ACP — ejecutar arneses de programación externos
- Enrutamiento de canales — cómo se enrutan los mensajes a los agentes
- Presencia — presencia y disponibilidad del agente
- Sesión — aislamiento y enrutamiento de sesiones
- Subagentes — generar ejecuciones de agentes en segundo plano