agentDir) e historial de sesiones respaldado por SQLite, además de varias cuentas de canales (por ejemplo, dos números de WhatsApp). Los mensajes entrantes se enrutan al agente correcto mediante vinculaciones.
Un agente es el ámbito completo de cada 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 sus propios elementos:- Espacio de trabajo: archivos,
AGENTS.md/SOUL.md/USER.md, notas locales y reglas de la persona. - Directorio de estado (
agentDir): perfiles de autenticación, registro de modelos y configuración por agente. - Almacén de sesiones: historial de chat y estado de enrutamiento en
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
sessions_history es la vía más segura para recuperar información entre sesiones: devuelve una vista limitada y redactada, no un volcado sin procesar de la transcripción. Elimina las firmas de los bloques de razonamiento, los detalles de la carga útil de los resultados de herramientas, la estructura auxiliar de <relevant-memories>, las etiquetas XML de llamadas a herramientas (<tool_call>, <function_call> y sus formas plurales o degradadas) y el XML de llamadas a herramientas de MiniMax; después, trunca y limita la salida por tamaño en bytes.~/.openclaw/skills, y después se filtran mediante la lista efectiva de Skills permitidas para el agente. Use agents.defaults.skills como base compartida y agents.entries.*.skills como sustitución por agente (las entradas explícitas sustituyen el valor predeterminado; no se combinan). Consulte Skills: por agente frente a compartidas y Skills: listas permitidas de agentes.
El almacenamiento propiedad de un plugin sigue la configuración de ese plugin; añadir un segundo agente
no divide automáticamente todos los almacenes globales de plugins. Por ejemplo, configure
bóvedas de Memory Wiki por agente
cuando las personas no deban compartir el conocimiento compilado de la wiki.
Nota sobre el espacio de trabajo: el espacio de trabajo de cada agente es el cwd predeterminado, no un entorno aislado estricto. Las rutas relativas se resuelven dentro del espacio de trabajo, pero las rutas absolutas pueden acceder a otras ubicaciones del host, a menos que se habilite el aislamiento. Consulte Aislamiento.
Rutas
Modo de agente único (predeterminado)
Si no configura nada, OpenClaw ejecuta un agente:agentIdtiene como valor predeterminadomain.- Las sesiones usan como clave
agent:main:<mainKey>(el valor predeterminado demainKeyesmain). - El espacio de trabajo tiene como valor predeterminado
~/.openclaw/workspace(oworkspace-<profile>cuandoOPENCLAW_PROFILEse establece en un valor distinto dedefault). - El estado tiene como valor predeterminado
~/.openclaw/agents/main/agent.
Asistente de agentes
Añada un nuevo agente aislado:--workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (repetible), --non-interactive (requiere --workspace).
Añada bindings para enrutar los mensajes entrantes (el asistente ofrece hacerlo), y después verifique:
Inicio rápido
1
Crear el espacio de trabajo de cada agente
SOUL.md, AGENTS.md y el elemento opcional USER.md, además de un agentDir dedicado y un almacén de sesiones en ~/.openclaw/agents/<agentId>.2
Crear cuentas de canales
Cree una cuenta por agente en los canales que prefiera:Consulte las guías de los canales: Discord, Telegram, WhatsApp.
- Discord: un bot por agente; habilite Message Content Intent y copie cada token.
- Telegram: un bot por agente mediante BotFather; copie cada token.
- WhatsApp: vincule cada número de teléfono por cuenta.
3
Añadir agentes, cuentas y vinculaciones
Añada agentes en
agents.entries, cuentas de canales en channels.<channel>.accounts y conéctelos mediante bindings (consulte los ejemplos siguientes).4
Reiniciar y verificar
Varios agentes, varias personas
CadaagentId configurado constituye un límite de persona distinto para el estado principal del agente:
- Cuentas diferentes por canal (por
accountId). - Personalidades diferentes (
AGENTS.md/SOUL.mdpor agente). - Autenticación y sesiones separadas, con el acceso entre agentes habilitado únicamente mediante funciones explícitas o la configuración de plugins.
Bóvedas de Memory Wiki por agente
Memory Wiki utiliza una bóveda global de forma predeterminada. Para mantener el conocimiento compilado de un agente de soporte separado del de un agente de marketing, establezcaplugins.entries.memory-wiki.config.vault.scope en agent:
~/.openclaw/wiki/support y
~/.openclaw/wiki/marketing. Las operaciones de la CLI y del Gateway con ámbito de agente requieren
un agente explícito cuando hay varios agentes configurados. Consulte
Bóvedas de Memory Wiki por agente para obtener información sobre el filtrado
del puente, la migración y los límites de confianza.
Búsqueda de memoria QMD entre agentes
Para permitir que un agente busque en las transcripciones de sesiones QMD de otro agente, añada colecciones adicionales enagents.entries.*.memory.search.qmd.extraCollections. Use memory.search.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 mantienen el ámbito del agente para que cada uno conserve su propio conjunto de búsqueda de transcripciones.
Un número de WhatsApp, varias personas (división de mensajes directos)
Enrute distintos mensajes directos de WhatsApp a distintos agentes en una cuenta de WhatsApp mediante la coincidencia del remitente E.164 (+15551234567) con peer.kind: "direct". Las respuestas siguen procediendo del mismo número de WhatsApp; no existe una identidad de remitente por agente.
Los chats directos se agrupan de forma predeterminada en la clave de sesión principal del agente, 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. Consulte Enrutamiento de canales para ver el orden completo de niveles (par exacto, par superior, comodín de par, servidor+roles, servidor, equipo, cuenta, canal, agente predeterminado). Conviene destacar aquí algunas reglas:- Si varias vinculaciones coinciden dentro del mismo nivel, gana la primera según el orden de la configuración.
- Si una vinculación establece varios campos de coincidencia (por ejemplo,
peer+guildId), todos los campos especificados deben coincidir (semántica deAND). - Una vinculación que omite
accountIdcoincide únicamente con la cuenta predeterminada, no con todas las cuentas. UseaccountId: "*"como alternativa para todo el canal oaccountId: "<name>"para una cuenta. Añadir de nuevo la misma vinculación con un identificador de cuenta explícito actualiza la vinculación existente exclusiva del 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 las sesiones.
Establezca channels.<channel>.defaultAccount para elegir la cuenta utilizada cuando se omite accountId. Si no se establece, OpenClaw recurre a default si está presente; de lo contrario, utiliza el 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 y almacén de sesiones por agente).accountId: una instancia de cuenta de canal (p. ej., la cuenta de WhatsApppersonalfrente abiz).binding: dirige los mensajes entrantes a unagentIdsegún(channel, accountId, peer)y, opcionalmente, los id. del gremio/equipo.- Los chats directos se agrupan en
agent:<agentId>:<mainKey>(la sesión «principal» por agente; consultesession.mainKey).
Ejemplos de plataformas
Bots de Discord por agente
Bots de Discord por agente
Cada cuenta de bot de Discord se asigna a un
accountId único. Vincule cada cuenta a un agente y mantenga listas de permitidos independientes para cada bot.- Invite a cada bot al gremio y habilite Message Content Intent.
- Los tokens se encuentran en
channels.discord.accounts.<id>.token(la cuenta predeterminada puede usarDISCORD_BOT_TOKEN).
Bots de Telegram por agente
Bots de Telegram por agente
- Cree un bot por agente con BotFather y copie cada token.
- Los tokens se encuentran en
channels.telegram.accounts.<id>.botToken(la cuenta predeterminada puede usarTELEGRAM_BOT_TOKEN). - Para usar varios bots en el mismo grupo de Telegram, invite a cada bot y mencione al que deba responder.
- Deshabilite BotFather Privacy Mode para cada bot de grupo (
/setprivacy-> Disable) y, a continuación, elimine y vuelva a añadir el bot para que Telegram aplique la configuración. - Permita grupos con
channels.telegram.groupso usegroupPolicy: "open"únicamente para implementaciones en grupos de confianza. - Incluya los id. de usuario de los remitentes en
groupAllowFrom. Los id. de grupos y supergrupos deben incluirse enchannels.telegram.groups, no engroupAllowFrom. - Vincule mediante
accountIdpara que cada bot dirija los mensajes a su propio agente.
Números de WhatsApp por agente
Números de WhatsApp por agente
Vincule cada cuenta antes de iniciar el Gateway:
~/.openclaw/openclaw.json (JSON5):Patrones habituales
- WhatsApp para el día a día y Telegram para trabajo en profundidad
- Mismo canal, un interlocutor dirigido a Opus
- Agente familiar vinculado a un grupo de WhatsApp
Separe por canal: dirija WhatsApp a un agente rápido para el uso cotidiano y Telegram a un agente Opus.Estos ejemplos usan
accountId: "*" para que las vinculaciones sigan funcionando si se añaden cuentas más adelante. Para dirigir un único mensaje directo/grupo a Opus y mantener el resto en el chat, añada una vinculación match.peer para ese interlocutor; las coincidencias de interlocutores siempre prevalecen sobre las reglas de todo el canal.Configuración del entorno aislado y de las herramientas por agente
Cada agente puede tener sus propias restricciones de entorno aislado y herramientas:setupCommand se encuentra en sandbox.docker y se ejecuta una vez al crear el contenedor. Los reemplazos sandbox.docker.* por agente se ignoran cuando el ámbito resuelto es "shared".- Aislamiento de seguridad: restrinja las herramientas para agentes que no sean de confianza.
- Control de recursos: aísle agentes específicos mientras mantiene los demás en el host.
- Políticas flexibles: distintos permisos para cada agente.
tools.elevated tiene una barrera global (tools.elevated.enabled/allowFrom) y otra por agente (agents.entries.*.tools.elevated.enabled/allowFrom). La barrera por agente solo puede restringir aún más la global: ambas deben permitir al remitente para que puedan ejecutarse comandos elevados. Para dirigirse a grupos, use agents.entries.*.groupChat.mentionPatterns para que las @menciones se asignen correctamente al agente previsto.Contenido relacionado
- Agentes ACP — ejecución de entornos externos de programación
- Enrutamiento de canales — cómo se enrutan los mensajes a los agentes
- Presencia — presencia y disponibilidad de los agentes
- Sesión — aislamiento y enrutamiento de sesiones
- Subagentes — inicio de ejecuciones de agentes en segundo plano