#Agent without shell access
1 messages · Page 1 of 1 (latest)
Esto casi siempre es política de tools (te estás quedando sin exec/write/edit) y/o exec approvals bloqueando el host. Con las versiones recientes es muy fácil “capar” sin querer al agente con tools.profile + tools.allow.
1) Primero: ¿te pasa en DM o solo en canales/grupos?
Ojo que en contextos de grupo OpenClaw intenta ser más conservador, y además MEMORY.md está pensado para cargarse solo en sesión privada (DM), no en canales. Docs: https://docs.openclaw.ai/concepts/memory
2) Check rápido (pásame el output)
En el VPS:
openclaw --version
openclaw status --all
openclaw gateway status
openclaw config get tools.profile
openclaw config get tools.allow
openclaw config get tools.deny
Y si puedes, pega el bloque tools: { ... } y el agent que usas desde tu openclaw.json (sin tokens).
3) Causa más común: tools.profile quedó en “minimal/messaging”
Si tools.profile está en minimal o messaging, el modelo ni siquiera ve herramientas de runtime/fs, así que:
- no puede ejecutar shell (
exec/process) - no puede escribir archivos (y por ende “memoria” no persiste)
Solución típica: dejarlo en coding o full:
{
tools: { profile: "coding" }
// o: tools: { profile: "full" }
}
Docs de perfiles/grupos (group:fs, group:runtime, etc.): https://docs.openclaw.ai/tools
4) Si exec existe pero “se niega”: exec approvals
Aun con exec habilitado, puede bloquearse por approvals (default puede ser deny). Mira:
~/.openclaw/exec-approvals.json- o Control UI → Nodes → Exec approvals (si lo usas)
Docs: https://docs.openclaw.ai/tools/exec-approvals
Importante: si habilitas exec “full” en un canal donde otros pueden hablarle al bot, es literalmente “shell al internet”. Asegúrate de que el acceso esté limitado solo a ti.
Pega esos outputs y te digo exactamente qué clave/config te está limitando.
- El agente no tiene acceso a canales ni grupos. Solo estamos en privado vía Discord y Telegram.
- Versión: OpenClaw 2026.3.8 (3caab92)
- Confirmado. Se encuentra en "messaging"
Cómo puedo modificarlo para acceder full al VPS como venía haciéndolo hasta ahora? Porque he modificado el archivo "exec-approvals.json" con los siguientes parámetros, pero sigue sin funcionar:
{ "service": { "baseURL": "http://localhost:3333", "token": "AQUI_VA_EL_TOKEN" }, "defaults": { "exec": "full" }, "agents": { "main": { "exec": "full" } } }
Perfecto: si tools.profile está en "messaging", el modelo no recibe herramientas de filesystem/runtime, así que aunque tengas approvals “full”, el agente no puede ni escribir memoria ni hacer exec (porque esas tools ni existen para él en ese perfil).
A) Volver a “full” (o “coding”) como antes
En el VPS:
openclaw config set tools.profile "full"
openclaw config validate
openclaw gateway restart
Si prefieres algo menos “Dios-mode” pero con shell + archivos + memoria, usa:
openclaw config set tools.profile "coding"
openclaw config validate
openclaw gateway restart
Luego confirma:
openclaw config get tools.profile
Docs de tool profiles/grupos: https://docs.openclaw.ai/tools
Si sigue sin aparecer exec
Revisa si lo estás capando por otro lado:
openclaw config get tools.allow
openclaw config get tools.deny
openclaw config get tools.byProvider
openclaw config get agents.list
(Especialmente tools.byProvider o un override en agents.list[i].tools.profile, que puede volver a “minimal/messaging” solo para tu provider/model.)
B) Tu exec-approvals.json no tiene el schema actual
Ese formato con service.baseURL/token no corresponde al sistema actual de approvals, por eso “no hace nada” (y además: con tools.profile="messaging" tampoco importaría).
Lo más fiable es inspeccionarlo con la CLI:
openclaw approvals get
y si quieres reemplazarlo, usa:
openclaw approvals set --file ./exec-approvals.json
Docs: https://docs.openclaw.ai/cli/approvals y https://docs.openclaw.ai/tools/exec-approvals
Pero repito: primero arregla tools.profile, porque ahora mismo ese es el bloqueo principal.
Si me pegas el output de:
openclaw config get tools.allowopenclaw config get tools.deny
openclaw config get tools.byProvider
te digo exactamente cuál de esos te está recortando exec después de poner tools.profile en full/coding.
Fantástico. Funcionó a la perfección con la "Opción A". Muchísimas gracias, Krill. Mi agente y yo te lo agradecemos.
Buenísimo — entonces era exactamente el recorte por tools.profile: "messaging".
Si quieres un punto medio más seguro que full pero con shell + archivos + memoria, prueba tools.profile: "coding" (y deja full solo si de verdad necesitas “todo”).
Si esto ya lo dejó resuelto, ¿puedes marcar la solución en el post del foro/hilo? En Discord suele ser clic derecho en el mensaje → Apps → Mark Solution (así queda indexado y le sirve al siguiente que le pase lo mismo).