#Sub agente se niega a instalar skills
1 messages · Page 1 of 1 (latest)
Esto suena a dos cosas distintas que a veces se confunden:
-
Sub-agents (subagentes) no son “otro agente completo”: por diseño corren con un system prompt “minimal” y NO reciben la secciĂłn de Skills en el prompt. O sea: aunque tengas skills instaladas, el subagente muchas veces “no sabe” que existen si no las invocas explĂcitamente. (Es comportamiento esperado.)
- Doc: https://docs.openclaw.ai/tools/subagents
- Contexto técnico: “promptMode=minimal” para subagents omite Skills: https://docs.openclaw.ai/concepts/system-prompt
-
En Discord (canales/hilos) es muy común que estés en sandbox si tienes
agents.defaults.sandbox.mode: "non-main". Y ahĂ vienen dos problemas gordos:- Por defecto
docker.networksuele estar en"none"⇒ sin salida a internet ⇒ cualquier skill que llame a una API (imágenes, etc.) falla. - Por defecto
workspaceAccess: "none"⇒ el sandbox tiene un workspace “interno” ⇒ si intentas “instalar skills” desde ahĂ, no te quedan instaladas en tu workspace real (parece que “se niega” o que “no funciona”). - Docs: https://docs.openclaw.ai/gateway/sandboxing (mira “Workspace access” y “Default docker.network is none”)
- Por defecto
Lo que necesito para ayudarte sin adivinar
Pega aquĂ:
- El error exacto que ves cuando “se niega” (una lĂnea ya ayuda mucho).
- Salida de:
openclaw --version
openclaw sandbox explain --json
- Y si puedes, el trozo relevante de tu
~/.openclaw/openclaw.jsoncon:
agents.defaults.sandboxtools.allow/tools.denytools.subagents.tools(si lo tienes)- (si quieres que agentes hablen entre sĂ)
tools.agentToAgent
Mientras tanto: checklist rápido (las 3 causas más comunes)
- ÂżEstás sandboxed en ese canal/hilo? Si sĂ:
- habilita red (
agents.defaults.sandbox.docker.network, por ejemplo"bridge") si necesitas APIs - si quieres que “instalar skills” persista, pon
agents.defaults.sandbox.workspaceAccess: "rw"
- habilita red (
- Tool policy para subagents: aunque el agente principal tenga herramientas, el subagente puede estar más restringido. Se controla con
tools.subagents.tools.allow/deny. - InteracciĂłn entre agentes (agente↔agente): eso requiere habilitar explĂcitamente:
tools.agentToAgent.enabled: trueytools.agentToAgent.allow: [...]
- Doc: https://docs.openclaw.ai/gateway/configuration-reference#toolsagenttoagent
- Multi-agent routing (si lo que quieres es “equipo de agentes”): https://docs.openclaw.ai/concepts/multi-agent
Pásame esos outputs y te digo exactamente quĂ© key te está bloqueando (sandbox vs tool policy vs prompt minimal) y cuál es el cambio mĂnimo para tu caso.
openclaw --version
openclaw sandbox explain --json
2026.2.23
│
◇ Doctor warnings ───────────────────────────────────────────────────────────────────────╮
│ │
│ - Legacy state dir is a symlink (/home/pi/.clawdbot → /home/pi/stack/Clawdbot/state); │
│ skipping auto-migration. │
│ │
├─────────────────────────────────────────────────────────────────────────────────────────╯
{
"docsUrl": "https://docs.openclaw.ai/sandbox",
"agentId": "main",
"sessionKey": "agent:main:main",
"mainSessionKey": "agent:main:main",
"sandbox": {
"mode": "off",
"scope": "agent",
"perSession": false,
"workspaceAccess": "none",
"workspaceRoot": "/home/pi/.clawdbot/sandboxes",
"sessionIsSandboxed": false,
"tools": {
"allow": [
"exec",
"process",
"read",
"write",
"edit",
"apply_patch",
"image",
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"subagents",
"session_status"
],
"deny": [
"browser",
"canvas",
"nodes",
"cron",
"gateway",
"telegram",
"whatsapp",
"discord",
"irc",
"googlechat",
"slack",
"signal",
"imessage"
],
"sources": {
"allow": {
"source": "default",
"key": "tools.sandbox.tools.allow"
},
"deny": {
"source": "default",
"key": "tools.sandbox.tools.deny"
}
}
}
},
"elevated": {
"enabled": true,
"channel": "webchat",
"allowedByConfig": false,
"alwaysAllowedByConfig": false,
"allowFrom": {
"global": []
},
"failures": [
{
"gate": "allowFrom",
"key": "tools.elevated.allowFrom.webchat"
}
]
},
"fixIt": [
"tools.sandbox.tools.allow",
"tools.sandbox.tools.deny",
"agents.list[].tools.sandbox.tools.allow",
"agents.list[].tools.sandbox.tools.deny",
"tools.elevated.enabled",
"tools.elevated.allowFrom.webchat"
]
}
BuenĂsimo, esto ya da pistas claras.
1) Ojo: tu openclaw --version NO es 2026.3.11
En lo que pegaste sale 2026.2.23. Eso significa que o no estás en la máquina/entorno que crees, o tienes dos instalaciones y el Gateway está corriendo con otra.
Para confirmar qué versión está ejecutando el servicio del Gateway, pega también:
openclaw gateway status
(En muchos “misterios raros”, el problema es simplemente CLI actualizado pero servicio viejo o viceversa.)
2) Tu sesión que inspeccionaste no está sandboxed
En el JSON:
"sandbox.mode": "off""sessionIsSandboxed": false"sessionKey": "agent:main:main"
AsĂ que no es el caso tĂpico de “en Discord va en sandbox y no tiene red / no persiste skills” (al menos no en esa sesiĂłn).
PERO: lo que has inspeccionado es la sesiĂłn main (agent:main:main). El fallo te pasa en Discord en un hilo/canal, que suele tener otro sessionKey.
Si puedes, vuelve a correr sandbox explain pero apuntando a la sesión de Discord (si no sabes el sessionKey, no pasa nada: con el error exacto también llegamos).
3) Para “subagentes se niegan a instalar skills / generar imágenes”: necesito el error exacto
Porque “se niegan” puede ser 3 cosas distintas:
- Tool policy: el subagente no tiene permitido
exec/image/web_fetch, etc. (esto se controla contools.subagents.tools.allow/deny). - Modelo del subagente: si tienes
agents.defaults.subagents.modelapuntando a un provider sin credenciales o sin soporte de imagen, elimagetool falla aunque el agente principal funcione.
- Prompt minimal (comportamiento esperado): los subagentes no reciben la secciĂłn “Skills” en el prompt, entonces no “saben” cĂłmo usar/instalar skills salvo que se lo indiques muy explĂcito.
Pégame una de estas dos cosas y lo cerramos rápido:
A) el mensaje de error del chat (tal cual), o
B) logs del subagente:
- En Discord:
/subagents listy luego/subagents log <id> tools(si tienes el id)
4) “Quiero que los agentes interactúen entre ellos”
Eso es configuraciĂłn explĂcita:
tools.agentToAgent.enabled: truetools.agentToAgent.allow: ["main", "otroAgentId", ...]
Doc: https://docs.openclaw.ai/gateway/configuration-reference#toolsagenttoagent
Si pegas (1) openclaw gateway status + (2) el error exacto (o el /subagents log ... tools) te digo exactamente cuál de las 3 causas es y qué key tocar (sin adivinar).
Ese trozo que pegaste es clave, gracias.
Lo más importante: un sub-agent “normal” corre con prompt minimal
Y ese modo omite justamente las secciones que necesitas para tu caso:
- Skills (no ve la lista de skills ni las instrucciones de “cómo cargar SKILL.md”)
- Messaging / adjuntos (no ve la regla de “para enviar un archivo hay que poner una lĂnea
MEDIA:<path>”)
Esto está documentado aquĂ: https://docs.openclaw.ai/concepts/system-prompt
Por eso se siente como que “se niega” o “no puede”, pero muchas veces es simplemente que no tiene el contexto/instrucciones para:
- instalar/usar skills por sĂ mismo
- enviar la imagen aunque la haya generado
Además en el FAQ hay un apartado literal de “generó imagen pero no se envió” (y explica lo de MEDIA:):
https://docs.openclaw.ai/help/faq#my-skill-generated-an-imagepdf-but-nothing-was-sent
Qué hacer (recomendación práctica)
A) Instalar skills: hazlo fuera del subagent
Instala con ClawHub en el host (o ponlas en ~/.openclaw/skills) y luego abre una sesiĂłn nueva para que OpenClaw recalcule skills elegibles.
Docs: https://docs.openclaw.ai/tools/skills y https://docs.openclaw.ai/tools/clawhub
B) Generar y enviar imágenes: que el main agent haga el envĂo
PatrĂłn que funciona bien:
- Sub-agent: genera la imagen y devuelve la ruta del archivo o una URL
- Main: envĂa el archivo al chat usando
MEDIA:<ruta>
En subagents, si no les dices explĂcitamente lo de MEDIA:, normalmente nunca lo van a hacer (porque no ven esa regla en su prompt minimal).
Sobre tu JSON: tools.sandbox.tools.deny incluye discord, etc.
Eso significa: si algĂşn dĂa tu sesiĂłn estuviera sandboxed, por defecto el sandbox bloquea herramientas de canal (discord, telegram, …). Eso puede romper envĂos/adjuntos y tambiĂ©n hace que “parezca” que no manda la imagen.
Pero para saber si eso te está pegando en Discord necesito 1 dato:
¿Cuál es el error exacto cuando falla?
Pega el mensaje de error del chat, o bien:
/subagents list/subagents log <id> tools
Y otro detalle: tu openclaw --version saliĂł 2026.2.23, no 2026.3.11
Aquà hay casi seguro mismatch entre lo que crees que corre y lo que corre de verdad. Pega también:
openclaw gateway status
Con eso te digo si el problema es (1) prompt minimal esperado, (2) bloqueo por tool policy (sandbox/subagents), o (3) mismatch de versiĂłn/servicio.
openclaw gateway status
🦞 OpenClaw 2026.2.23 (b817600) — Works on Android. Crazy concept, we know.
│
◇ Doctor warnings ───────────────────────────────────────────────────────────────────────╮
│ │
│ - Legacy state dir is a symlink (/home/pi/.clawdbot → /home/pi/stack/Clawdbot/state); │
│ skipping auto-migration. │
│ │
├─────────────────────────────────────────────────────────────────────────────────────────╯
│
â—‡
Service: systemd (disabled)
File logs: /tmp/openclaw/openclaw-2026-03-12.log
Service config looks out of date or non-standard.
Service config issue: Gateway service PATH is not set; the daemon should use a minimal PATH.
Recommendation: run "openclaw doctor" (or "openclaw doctor --repair").
Config (cli): ~/.clawdbot/moltbot.json
Config (service): ~/.clawdbot/moltbot.json
Gateway: bind=lan (0.0.0.0), port=18789 (env/config)
Probe target: ws://192.168.31.135:18789
Dashboard: http://192.168.31.135:18789/
Probe note: bind=lan listens on 0.0.0.0 (all interfaces); probing via 192.168.31.135.
Runtime: stopped (state inactive, sub dead, last exit 0, reason 0)
RPC probe: failed
RPC target: ws://192.168.31.135:18789
SECURITY ERROR: Gateway URL "ws://192.168.31.135:18789" uses plaintext ws:// to a non-
loopback address.
Both credentials and chat data would be exposed to network interception.
Source: cli --url
Config: /home/pi/.clawdbot/moltbot.json
Fix: Use wss:// for remote gateway URLs.
Safe remote access defaults:
- keep gateway.bind=loopback and use an SSH tunnel (ssh -N -L 18789:127.0.0.1:18789 user@gateway-host)
- or use Tailscale Serve/Funnel for HTTPS remote access
Doctor: openclaw doctor --fix
Docs: https://docs.openclaw.ai/gateway/remote
Port 18789 is already in use.
- Port is in use but process details are unavailable (install lsof or run as an admin user).
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Perfecto — este gateway status explica por quĂ© te está fallando el “RPC probe” y por quĂ© ahora mismo es difĂcil diagnosticar lo de subagents desde tu CLI.
1) Estás en OpenClaw 2026.2.23, no 2026.3.11
El propio status lo dice arriba:
🦞 OpenClaw 2026.2.23 (b817600)
AsĂ que hay mismatch con lo que creĂas. Si realmente quieres 2026.3.11, primero hay que actualizar esa instalaciĂłn (y luego reiniciar el gateway).
2) Tu Gateway (según systemd) está parado + el probe falla por un bloqueo de seguridad
En el status:
Service: systemd (disabled)Runtime: stopped …RPC probe: failed
- y lo más importante:
SECURITY ERROR: ... ws://192.168... uses plaintext ws:// to a non-loopback address
Esto Ăşltimo es intencional: en 2026.2.23+ el CLI bloquea conectar por ws:// a una IP LAN (aunque sea privada), porque serĂa tráfico en claro.
CĂłmo arreglarlo (recomendado):
- Si quieres acceso remoto/LAN: usa Tailscale Serve/Funnel o HTTPS/WSS (ver doc)
https://docs.openclaw.ai/gateway/remote - Alternativa “clásica” segura: deja
gateway.bind=loopbacky usa un SSH tunnel (la doc lo pone tal cual). - Hay un “break-glass”
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1, pero de verdad: úsalo sólo para pruebas en red privada y sabiendo lo que implica (sale también en el error).
Hasta que el CLI pueda hacer el probe, vas a ver “RPC probe failed” aunque el gateway estuviera escuchando, porque el CLI se niega a hablar por ws:// a esa IP.
3) ÂżEsto afecta a tu problema de “subagents no instalan skills / no envĂan imágenes”?
SĂ, por dos motivos:
- Si el gateway no está corriendo (o no estás mirando el gateway correcto), cualquier cosa de subagents/skills va a ser inconsistente.
- Aunque el gateway corra, los subagents usan prompt
minimaly omiten Skills + Messaging, asà que es normal que:- no “sepan” instalar/usar skills automáticamente
- generen una imagen pero no la envĂen (porque no aplican la regla
MEDIA:)
FAQ: https://docs.openclaw.ai/help/faq#my-skill-generated-an-imagepdf-but-nothing-was-sent
Siguiente paso (para destrabar de verdad)
Dime cuál de estos escenarios es el tuyo:
A) “El gateway deberĂa correr en esta Raspberry Pi 24/7”
→ entonces primero hay que instalar/rehacer el servicio y arrancarlo (tu status ya sugiere openclaw doctor --repair y la FAQ recomienda openclaw gateway install --force). Después miramos subagents.
B) “El gateway corre en otra máquina / en Docker / etc.”
→ entonces este gateway status no es del gateway que realmente está atendiendo Discord, y necesitamos el status en el host correcto.
Y para ir directo al sĂntoma original: pega un ejemplo real del error del subagent (texto o /subagents log <id> tools). Con eso te digo si es (i) prompt minimal esperado, (ii) tool policy, o (iii) falta de credenciales/modelo para imágenes.
Vale, ahora está clarĂsimo quĂ© está pasando:
1) El “SECURITY ERROR … ws://192.168…” te sale porque estás usando --url a una IP LAN
En el error pone:
Source: cli --url- y bloquea
ws://a cualquier direcciĂłn no-loopback por seguridad.
Eso significa:
-
Si estás en la misma Raspberry Pi: usa loopback, por ejemplo:
openclaw gateway status --url ws://127.0.0.1:18789(o simplemente no uses
--urlsi no estás en remote mode) -
Si estás desde otra máquina y quieres administrar el gateway remoto: no se puede con
ws://192.168...en claro. Las opciones seguras que te da el propio error son las buenas:
- SSH tunnel (recomendado)
- o Tailscale Serve/Funnel / HTTPS → wss://
Doc: https://docs.openclaw.ai/gateway/remote
- o Tailscale Serve/Funnel / HTTPS → wss://
Hay un “break-glass”
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1, pero úsalo sólo si entiendes el riesgo (LAN “de confianza” y para debug).
2) “Port 18789 is already in use” + systemd dice “stopped” = hay algo escuchando fuera de systemd
Esto suele pasar cuando el gateway está corriendo:
- en foreground (
openclaw gatewayen una terminal), - o en Docker,
- o como otro service/profile.
Como no tienes lsof, usa ss (normalmente viene instalado) para ver qué proceso está ocupando el puerto:
ss -ltnp | grep 18789
# si no sale el proceso por permisos:
sudo ss -ltnp | grep 18789
Con eso sabremos si lo que está escuchando es OpenClaw o “algo raro”.
3) Volviendo a tu tema original (sub-agents + skills + imágenes)
Aunque arreglemos lo del gateway/puerto, hay una parte que es por diseño:
- Los sub-agents corren con prompt minimal y omiten Skills y Messaging, asĂ que:
- no “saben” instalar/usar skills automáticamente
- y aunque generen una imagen, muchas veces no la envĂan porque no aplican la regla de adjuntos (
MEDIA:<path>)
FAQ de “generó imagen pero no se envió”: https://docs.openclaw.ai/help/faq#my-skill-generated-an-imagepdf-but-nothing-was-sent