Los múltiples agentes y modelos de OpenClaw son dos capas distintas de un mismo archivo de configuración: varios agentes son entradas identificadas bajo agents.entries, cada una con su propio espacio de trabajo, directorio de estado y almacén de sesiones, mientras que varios modelos son valores model por agente dentro de esas entradas. Hay otras dos capas junto a ellas: bindings decide qué agente responde, y una cadena de fallback decide qué hace un agente cuando falla su modelo. Editar la capa equivocada es la razón más común por la que un cambio parece no hacer nada.
Ejecutar más agentes no cuesta nada en software. La descripción general de la documentación de OpenClaw indica que se desarrolla abiertamente por "the OpenClaw Foundation, an independent 501(c)(3)" con "No paid tier, no telemetry by default beyond a version check you can turn off, no lab owns it", y openclaw.ai añade "No subscription. No hosted tier. No token." El paquete npm openclaw tiene licencia MIT, con latest en 2026.9.5, junto a un canal extended-stable en 2026.7.35 y engines.node de >=24.16.0 <25 || >=26.1.0 (registro de npm, comprobado el 21 de septiembre de 2026). Lo que añade un segundo agente a tu factura son tokens.
Agentes múltiples de OpenClaw: cuatro capas y el síntoma de editar la equivocada
| Capa | Clave de configuración | Qué determina | Síntoma cuando esta es realmente la capa que necesitabas |
|---|---|---|---|
| Registro de agentes | agents.entries.<id> | Espacio de trabajo, directorio de estado, almacén de sesiones, skills y política de herramientas separados | Dos personas siguen leyendo las notas y el historial de la otra |
| Enrutamiento de canales | bindings[] | Qué agente responde a un mensaje entrante en qué canal o cuenta | El enrutamiento informa de AGENT_SELECTION_REQUIRED |
| Elección del modelo | agents.entries.<id>.model | En qué modelo se ejecutan los turnos de ese agente | Un cambio de /model en un chat dejó todos los demás chats sin cambios |
| Cadena de fallback | model.fallbacks, agents.defaults.model | Qué modelo toma el relevo cuando falla el proveedor | Un error de desbordamiento de contexto nunca activó el fallback, porque no es un desencadenante de failover |
Los cuatro se consultaron en la propia documentación de OpenClaw el 21 de septiembre de 2026: entries and multi-agent, agent bindings y model failover. Dos estructuras de tutoriales antiguos están obsoletas: un registro en un array agents.list es el formato heredado que migra Doctor, y el marcador default: true en una entrada está retirado; la página de entradas afirma claramente que "default is retired" y que las operaciones multiagente necesitan un binding o un destino explícito. OpenClaw también funcionó anteriormente con otros dos nombres, por lo que cualquier configuración de la era de Moltbot o Clawdbot es anterior a este esquema.
Configuración de varios agentes en OpenClaw: una configuración mínima de dos agentes y dos modelos
Este fragmento presupone que ya tienes un bloque models.providers funcional; la mejor API para OpenClaw incluye la de Kunavo, junto con api: "anthropic-messages" y la URL base publicada en Anthropic base URL. Lo que sigue es únicamente la capa de agentes y enrutamiento.
{
"agents": {
"defaults": {
"modelSelectionScope": "session",
"model": {
"primary": "kunavo/claude-haiku-4-5",
"fallbacks": [
"kunavo/claude-sonnet-5"
]
}
},
"entries": {
"ops": {
"name": "Ops",
"workspace": "~/.openclaw/workspace-ops",
"agentDir": "~/.openclaw/agents/ops/agent",
"model": "kunavo/claude-haiku-4-5",
"modelPolicy": {
"allow": [
"kunavo/claude-haiku-4-5"
]
}
},
"build": {
"name": "Build",
"workspace": "~/.openclaw/workspace-build",
"agentDir": "~/.openclaw/agents/build/agent",
"model": {
"primary": "kunavo/claude-opus-5",
"fallbacks": [
"kunavo/claude-sonnet-5"
]
},
"utilityModel": "kunavo/claude-haiku-4-5"
}
}
},
"bindings": [
{
"agentId": "build",
"match": {
"channel": "discord",
"accountId": "build"
}
},
{
"agentId": "ops",
"match": {
"channel": "discord",
"accountId": "*"
}
}
]
}Cuatro elementos de ese bloque son esenciales. Cada agente tiene su propio agentDir, porque la página multiagente advierte: "Never reuse agentDir across agents — it causes auth/session state collisions." El agente ops utiliza el formato de cadena de model, que la página de entradas define como "a strict per-agent primary with no model fallback"; así, un fallo se muestra en lugar de trasladar silenciosamente el trabajo rutinario a un nivel más caro. El agente build utiliza el formato de objeto con una lista fallbacks explícita, que es la forma de habilitar esta opción para un agente; la página de failover añade que un agente puede establecer solo model: { fallbacks: [...] } y seguir heredando el modelo principal compartido. Y el binding específico se sitúa por encima del comodín, porque dentro de un nivel de coincidencia "the first matching bindings entry wins."
Los valores predeterminados del espacio de trabajo difieren entre el agente predeterminado y el resto, y conviene establecerlos explícitamente: el espacio de trabajo del agente predeterminado es <stateDir>/workspace, mientras que el de los demás agentes es <stateDir>/workspace-<agentId> por defecto. La memoria sigue al espacio de trabajo, ya que el motor integrado de OpenClaw "remembers things by writing plain Markdown files in your agent's workspace"; por tanto, aislar los espacios de trabajo es lo que aísla la memoria. Los modos de permisos de sesión son otro eje independiente: read-only, guarded, workspace y full, donde "full requires operator.admin. The other modes require operator.write" (modos de permisos, 21 de septiembre de 2026). Un modelo barato en un agente permisivo sigue siendo un agente permisivo.
Qué separan los agentes y qué no separan
| Elemento | ¿Por agente? | Dónde se encuentra |
|---|---|---|
| Archivos del espacio de trabajo y memoria Markdown | Sí | agents.entries.*.workspace |
| Historial de chat | Sí | <agentDir>/openclaw-agent.sqlite |
| Perfiles de autenticación almacenados | Sí | agentDir; las modificaciones de autenticación requieren --agent |
| Habilidades | Sí | Una lista agents.entries.*.skills explícita sustituye los valores predeterminados en lugar de fusionarse con ellos |
| Herramientas, sandbox, privilegios elevados | Sí | Existen claves por agente, pero la precedencia difiere según la clave; tools.elevated, por ejemplo, "can only further restrict" |
| Modelo principal, fallbacks, lista de permitidos | Sí | agents.entries.*.model, .modelPolicy.allow |
Proveedor baseUrl, apiKey, dialecto | No | models.providers es global para el Gateway |
| Claves del proveedor procedentes del entorno | No | Un proceso de Gateway, un entorno |
openclaw models set | No | Global; rechaza --agent y escribe los valores predeterminados del agente |
Este es el límite que las tablas de precios pasan por alto. Las entradas separadas te proporcionan archivos, memoria, historial, política de herramientas y perfiles de autenticación almacenados separados. Por sí solas, no proporcionan a cada agente su propia clave de API para un proveedor personalizado configurado mediante el entorno; el esquema documentado por agente no tiene ningún campo baseUrl, apiKey ni providers. La ausencia en la documentación no demuestra que el código lo prohíba, así que interprétalo como no documentado; si necesitas una separación estricta de claves por tenant, ejecuta Gateways separados. Existe un límite relacionado con la identidad: el ejemplo de división de DMs de WhatsApp de OpenClaw señala que "Replies still come from the same WhatsApp number — there is no per-agent sender identity", y que "Direct chats collapse to the agent's main session key by default, so true isolation requires one agent per person." Esa frase se refiere a WhatsApp; consulta la página de tu propio canal antes de generalizarla.
Un límite de capacidad que conviene tener en cuenta al dividir roles: Kunavo no ofrece ningún modelo de texto a voz, voz a texto ni de embeddings, así que un agente que necesite salida de voz o un índice vectorial debe llamar a un proveedor externo para ese paso.
Varios modelos de OpenClaw: estricto, fallback, política y canal de utilidad
La selección de modelos por agente tiene cuatro controles que conviene configurar deliberadamente. model como cadena es estricto. { primary, fallbacks: [...] } habilita ese agente para el failover. modelPolicy.allow es una lista de permitidos que "replaces the default policy for that agent" —acepta alias, referencias exactas y comodines finales—, y es la forma de impedir que un agente rutinario llegue alguna vez a un modelo caro. Y utilityModel es un modelo independiente, normalmente más barato, para "short internal tasks such as generated session and thread titles", con una sustitución por agente.
La lista de desencadenantes documentada es específica. OpenClaw avanza por "auth failures, rate limits and cooldown exhaustion, overloaded/provider-busy errors, timeout-shaped failover errors, billing disables, model_not_found", y por otros errores no reconocidos mientras queden candidatos; pero no por errores de desbordamiento de contexto, que permanecen dentro de la lógica de compactación y reintento, ni por "explicit aborts that are not timeout/failover-shaped". Fuera de las conversaciones de grupo y canal es visible: esas superficies publican un aviso de estado con el formato Model Fallback: <fallback> (selected <primary>; <reason>) y un aviso de limpieza correspondiente, mientras que las conversaciones de grupo y canal "suppress the visible notices while retaining the same fallback state", así que no dependas de verlo en una sala compartida. Una selección explícita de sesión —/model, el selector de modelos, session_status(model=...) o sessions.patch— es estricta: si ese modelo falla antes de producir una respuesta, OpenClaw informa del fallo en lugar de responder mediante un fallback configurado. El --model de un trabajo cron no es uno de esos casos; la documentación lo denomina modelo principal del trabajo y sigue utilizando los fallbacks configurados, salvo que el trabajo establezca payload.fallbacks: [].
Otros dos mecanismos determinan si tu intención se mantiene. Los parámetros de solicitud se combinan mediante cuatro capas, desde agents.defaults.params hasta agents.entries.*.params, y las capas posteriores sobrescriben las claves anteriores. Además, el paralelismo tiene un límite calculado: agents.defaults.maxConcurrent tiene como valor predeterminado max(8, available CPU parallelism * 4) entre sesiones, mientras que cada sesión sigue serializada; dos mensajes para un mismo agente no se ejecutan a la vez. Para elegir qué modelo corresponde a cada rol, Opus vs Sonnet vs Haiku cubre el aspecto de las capacidades.
Atribución de costes por ruta, no por agente
Como ningún comando documentado informa del gasto por agente, atribúyelo por ruta. Los cálculos siguientes son ilustrativos, no una factura medida ni un límite máximo. Suponen un mes de 30 días, el valor predeterminado documentado de heartbeat 30m (1.440 ejecuciones), 300 tokens de salida por heartbeat, ninguna coincidencia de caché y un canal de conversación principal de 8M tokens de entrada y 500K tokens de salida. Las cifras de contexto de ~100K y ~2–5K por ejecución son una ilustración propia de OpenClaw sobre lo que elimina isolatedSession, no algo medido aquí; 3.000 es el punto medio. Las tarifas son precios activos del catálogo de Kunavo por millón de tokens.
| Ruta | Entrada / salida asumidas al mes | A Claude Haiku 4.5 | A Claude Opus 5 |
|---|---|---|---|
| Heartbeat en la sesión compartida, intervalo de 30m | 144.00M / 0.43M | $102.31 | $511.56 |
| El mismo heartbeat con isolatedSession: true | 4.32M / 0.43M | $4.54 | $22.68 |
| Turnos de la conversación principal | 8.00M / 0.50M | $7.35 | $36.75 |
| títulos y resúmenes de utilityModel | 0.20M / 0.02M | $0.21 | $1.05 |
Claude Haiku 4.5 muestra $0.70 / $3.50 y Claude Opus 5 muestra $3.50 / $17.50 por cada millón de tokens de entrada / salida en el catálogo activo. La lectura importante es que, bajo estos supuestos, el canal programado domina. Un heartbeat en sesión compartida con el modelo potente cuesta aproximadamente $511.56 al mes, frente a $4.54 para la misma cadencia con isolatedSession: true en el modelo barato. El propio OpenClaw lo indica: "Heartbeats run full agent turns. Shorter intervals burn more tokens", y señala isolatedSession, lightContext, un model más barato y target: "none" como palancas.
El truco del heartbeat barato tiene un modo de fallo documentado, y por eso isolatedSession es una palanca mejor que cambiar únicamente el modelo. Los heartbeats "preserve the shared session's existing runtime model after the run completes", por lo que un heartbeat que haya cambiado una sesión a un modelo más pequeño puede dejarlo activo para el siguiente turno de la sesión principal, que entonces puede informar de un desbordamiento de contexto; el mensaje de recuperación de OpenClaw denomina a esto filtración del modelo del heartbeat. El ejemplo desarrollado en la documentación utiliza un modelo local con una ventana de 32k, así que el tamaño del riesgo depende de cuánto menor sea la ventana de contexto del modelo del heartbeat respecto a lo que necesita la sesión compartida. Una nota de programación: el intervalo predeterminado documentado es 30m, y solo aumenta a 1h cuando el modo de autenticación resuelto es Anthropic OAuth/token; por tanto, una ruta con una clave de API simple mantiene 30m salvo que establezcas heartbeat.every tú mismo. Comprueba tu propio valor antes de elaborar el presupuesto.
Dos advertencias sobre las cifras en dólares. El importe del catálogo de Kunavo es un mínimo de facturación, no un límite máximo: cuando el upstream comunica su cargo, la factura es el mayor entre el coste del catálogo y el coste del upstream multiplicado por el margen aplicable. Y un proveedor personalizado declarado sin un objeto cost por modelo hace que la lectura propia de OpenClaw sea inútil: establece por defecto cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, mostrando $0 mientras el proveedor factura normalmente. Declara cost, contextWindow y maxTokens en cada modelo que añadas, y contrástalo con el registro del proveedor. La recarga mínima de Kunavo es de $10 en crédito prepago: un mínimo de financiación, no una tarifa por tarea ni una suscripción. Consulta detalles de facturación y optimización de costes de IA.
Qué ruta de compra se adapta a un Gateway multiagente
| Ruta | Cuándo gana | A qué renuncias |
|---|---|---|
| Un Gateway, un proveedor de estilo gateway | Varios agentes en varias familias de modelos, una clave y un saldo | No hay separación de claves por agente; las definiciones del proveedor y las claves del entorno se comparten |
| Un Gateway, perfiles de autenticación almacenados por agente | Quieres que cada agente lleve su propia credencial en su propio agentDir | Documentado únicamente para perfiles de autenticación; las sustituciones de endpoint por agente no aparecen en el esquema publicado |
| Gateways separados por tenant | El requisito es una separación estricta de claves, entorno y gasto | Dos procesos, dos configuraciones, dos rutas de actualización |
| Cuenta directa del proveedor por agente | Un solo proveedor todo el tiempo, y quieres las funciones propias de caché y procesamiento por lotes de ese proveedor | Otra familia implica otra cuenta; cada una tiene sus propias tarifas y controles |
| Modelo local en el canal programado | Comprobaciones de heartbeat acotadas sin cargo por solicitud | Hardware y mantenimiento, además de la advertencia anterior sobre la filtración del modelo del heartbeat |
| Agente por suscripción | El uso diario intensivo a tarifa plana te conviene más que los tokens medidos | OpenClaw no vende ninguna suscripción propia; sería otro cliente |
Una nota sobre los dialectos, porque ahí es donde está el ahorro de la caché. El bloque de Kunavo de la guía relacionada declara api: "anthropic-messages", que OpenClaw trata como un endpoint de Anthropic no directo. De ello se derivan dos consecuencias documentadas. Las cabeceras beta implícitas de Anthropic se suprimen en esos endpoints, por lo que funciones como el razonamiento intercalado deben habilitarse mediante un headers["anthropic-beta"] explícito en lugar de activarse automáticamente. Y hay que solicitar la caché: OpenClaw establece cacheRetention: "short" solo para los proveedores directos anthropic y anthropic-vertex, mientras que los "custom anthropic-messages-compatible endpoints" son compatibles "when cacheRetention is set explicitly"; por tanto, establece params.cacheRetention tú mismo en lugar de asumir un valor predeterminado (caché de prompts, 21 de septiembre de 2026). Una regla independiente cubre el otro dialecto: una ruta openai-completions hacia un endpoint no nativo envía "no prompt-cache hints". Verifica el uso de caché comunicado en tu propia ruta antes de presupuestar el contexto recurrente como coincidencias de caché. La caché de prompts cubre el aspecto de las tarifas.
Verifica que haya llegado donde querías
openclaw config validate
openclaw gateway restart
openclaw agents list --bindings
openclaw models status --agent ops --json --check
openclaw models list --agent buildLa validación de la configuración comprueba la estructura y el reinicio de la puerta de enlace la vuelve a cargar; ninguno demuestra que una solicitud facturada se haya completado correctamente. openclaw agents list --bindings muestra que el enrutamiento se cargó realmente; prefierelo a --tree, que aparece en las páginas de conceptos, pero no en la tabla de comandos de la CLI. openclaw models status --agent <id> explica el valor predeterminado configurado para ese agente y models list --agent <id> muestra su inventario. Si models set termina con un código distinto de cero debido a un proveedor desconocido, esa es la capa del modelo: el proveedor debe ser un complemento instalado o estar declarado en models.providers. Si los mensajes no llegan a ningún agente, esa es la capa de enrutamiento. Si aparecen ejecuciones duplicadas cuando varios agentes comparten un canal, OpenClaw documenta las claves de protección contra bucles de bots como mecanismo de protección; la documentación describe la prevención, no la causa raíz, así que diagnostica antes de darlo por hecho.
Después, ejecuta una tarea acotada por agente y lee el cargo que tu cuenta del proveedor registró para ella. Kunavo no ha probado OpenClaw en tiempo de ejecución, ni con un solo agente ni con varios: todo lo anterior se ha extraído de la documentación publicada de OpenClaw, y una configuración publicada no constituye una prueba de compatibilidad. Mantén disponible una ruta funcional mientras lo pruebas. Empieza por la configuración del proveedor, compara el coste operativo total en los precios de OpenClaw y crea una cuenta de Kunavo cuando estés listo para financiar una clave.
Preguntas frecuentes
¿Cómo configuro varios agentes en OpenClaw?
Añade una entrada identificada por cada agente en agents.entries, asigna a cada uno su propio espacio de trabajo y su propio agentDir, y después añade un array bindings para que los mensajes entrantes se resuelvan en un agente. La documentación de OpenClaw indica explícitamente que agentDir nunca debe compartirse: "Never reuse `agentDir` across agents — it causes auth/session state collisions." El equivalente en la CLI es `openclaw agents add <id>` con --workspace, --agent-dir, --model y un --bind que puede repetirse. Dos estructuras que puedes encontrar en tutoriales antiguos están desactualizadas: un registro agents.list es el formato heredado que migra Doctor, y el marcador `default: true` en una entrada está retirado; la selección multiagente ahora se realiza mediante un binding o un destino explícito. Consultado en docs.openclaw.ai el 21 de septiembre de 2026; no se probó en ejecución aquí.
¿Puede cada agente de OpenClaw usar un modelo diferente?
Sí. agents.entries.<id>.model establece el modelo principal de ese agente, y el formato que escribas determina si puede recurrir a un modelo alternativo. La documentación de OpenClaw indica que "String form sets a strict per-agent primary with no model fallback; object form { primary } is also strict unless you add fallbacks." Por tanto, una cadena simple en el modelo por agente hace que un error del proveedor se muestre como error, en lugar de trasladar silenciosamente ese agente a otro nivel de precios. Usa { primary, fallbacks: [...] } para habilitar esta posibilidad en un agente, y { primary, fallbacks: [] } para hacer explícito el comportamiento estricto. Las referencias de modelos siempre tienen el formato provider/model. Comprobado el 21 de septiembre de 2026.
¿Puede cada agente tener su propia clave de API o endpoint del proveedor?
El endpoint no, según el esquema documentado por agente; la credencial, sí. models.providers —donde viven baseUrl, apiKey y el dialecto de la API— es un bloque global para el Gateway, por lo que todos los agentes de un mismo Gateway comparten las mismas definiciones de proveedor, y una clave escrita allí como referencia de entorno se resuelve desde el entorno de ese único proceso del Gateway. El esquema de entrada por agente publicado el 21 de septiembre de 2026 no tiene ningún campo baseUrl, apiKey ni providers, y agents.entries.*.models solo contiene params, agentRuntime y codeMode. Lo que sí es por agente es el perfil de autenticación almacenado en el agentDir de ese agente, que contiene las credenciales api_key, token y OAuth: los subcomandos de autenticación de models aceptan --agent, y las modificaciones de autenticación lo requieren cuando hay varios agentes configurados. La ausencia en la documentación no demuestra que el código prohíba un endpoint por agente, así que considera que el aspecto del endpoint no está documentado, no que sea imposible. Si necesitas una separación estricta por tenant, ejecuta Gateways separados.
¿Por qué cambiar el modelo en el chat no cambió nada?
Porque el ámbito de escritura predeterminado es la sesión en la que escribiste. OpenClaw documenta que agents.defaults.modelSelectionScope tiene como valor predeterminado "session": "changing a model in one chat does not change other chats or the configured default, including when the caller is an owner/admin." Usa /model con -a/--agent para escribir el modelo principal del agente o -g/--global para el valor predeterminado compartido. Ten en cuenta también que la CLI `openclaw models set` es global y rechaza --agent, por lo que no puede utilizarse para establecer el modelo de un solo agente; edita agents.entries.<id>.model en su lugar. Comportamiento documentado comprobado el 21 de septiembre de 2026.
¿Qué significa AGENT_SELECTION_REQUIRED?
Significa que el enrutamiento no encontró ningún binding para ese mensaje entrante y se negó a adivinar. La documentación de OpenClaw indica que, con varios agentes configurados, "If none is available in a multi-agent setup, routing reports AGENT_SELECTION_REQUIRED and asks you to add a binding." El orden de coincidencia documentado es match.peer, match.guildId, match.teamId, una coincidencia exacta con accountId y después accountId "*"; termina en un fallback para un único agente que se aplica "only when exactly one agent is configured; explicit multi-agent fleets without a matching binding fail closed." No existe un propietario general cuando tienes dos agentes. Dentro de un nivel, "the first matching bindings entry wins", así que coloca las reglas específicas por encima de las generales. Inspecciona lo que está realmente cargado con `openclaw agents list --bindings`. Comprobado el 21 de septiembre de 2026.
¿Cómo puedo ver cuánto cuesta cada agente de OpenClaw?
Ningún comando documentado el 21 de septiembre de 2026 informa del gasto desglosado por agente, así que atribúyelo por modelo y por ruta: turnos principales, ejecuciones de heartbeat, el canal utilityModel y los subagentes generados. Dos advertencias sobre las cifras locales. Las lecturas en dólares de OpenClaw son estimaciones calculadas a partir de sus propios metadatos de precios locales; sus superficies de uso sí obtienen datos de plan y gasto comunicados por el proveedor cuando este los expone, pero el análisis de costes por sesión se deriva de la sesión; además, /usage cost advierte que sus totales Today y Last 30d pueden estar incompletos mientras la caché agregada se actualiza, ser parciales o estar obsoletos. Y para un proveedor personalizado declarado sin un objeto de coste por modelo, OpenClaw establece por defecto cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }: una lectura de $0 para solicitudes que tu proveedor está facturando normalmente. Contrástalo con el registro del proveedor, no con el pie del chat.
Documentación de OpenClaw, referencia de la CLI y entrada del registro npm comprobadas el 21 de septiembre de 2026 con la versión del paquete 2026.9.5; aquí no se ejecutó ninguna Gateway, agente, vinculación ni solicitud de pago. Las tarifas de tokens de Kunavo se leen del catálogo activo, y todas las cifras en dólares de esta página son cálculos ilustrativos de tokens, no una factura medida.