OpenClaw: cómo optimizar el contexto, la memoria y la seguridad (lo que dice Reddit y lo que funciona de verdad)
TL;DR: Reduje el contexto inyectado de OpenClaw de 10.4 KB a 3.8 KB, activé memory-lancedb con embeddings locales, configuré context pruning, y limpié el security audit a 0 critical. La fuente: una guía de 33 capítulos en GitHub, 50+ hilos en Reddit, y mucho trial-and-error. Aquí va lo que funcionó.
La premisa: el harness importa más que el modelo
La guía de optimización de OnlyTerp (33 capítulos, 15K palabras, actualizada a mayo 2026) tiene una tesis clara:
La mayoría de la capacidad de un agente viene del harness, no de los weights.
El modelo importa. Pero las optimizaciones grandes vienen de: presupuesto de contexto, disciplina de memoria, permisos de tools, control de flujo, routing de providers, hooks, y loops de verificación. Todo lo que tú, operador, puedes controlar.
Optimización 1: adelgazar el contexto (el win más grande)
El diagnóstico
Cada vez que tu agente responde un mensaje, OpenClaw inyecta estos archivos en el system prompt:
| Archivo | Contenido | Se inyecta |
|---|---|---|
| SOUL.md | Identidad, personalidad | Cada mensaje |
| AGENTS.md | Reglas operativas | Cada mensaje |
| MEMORY.md | Hechos duraderos | Cada mensaje |
| TOOLS.md | Notas de herramientas | Cada mensaje |
| DREAMS.md | Diario de reflexión | Cada mensaje |
Mi setup inicial tenía 10.4 KB de contexto inyectado por turno. La guía recomienda < 8 KB. Reddit lo explica así: cada KB encima del óptimo paga impuestos en cada turno. Más contexto = más tokens = más lento = más caro.
La cirugía
SOUL.md (1.7 KB → 628 B): Eliminé párrafos enteros de personalidad. El agente no necesita 40 líneas para saber que es “clever, helpful, dependable”. 4 líneas bastan.
AGENTS.md (7.8 KB → 1.4 KB): Esto fue el filete. El archivo original tenía instrucciones detalladas para group chats, heartbeats, formateo por plataforma, voz… Todo interesante. Todo innecesario en el system prompt. Lo reduje a reglas duras: memory protocol, red lines, heartbeat checklist. 3 líneas por sección, nada más.
MEMORY.md (no existía → 897 B): Creé un archivo índice siguiendo el patrón “LLM Wiki” de Karpathy. MEMORY.md no es un almacén — es un índice. Los detalles van en vault/. Lo inyectado es solo punteros.
El resultado
Antes: SOUL(1.7KB) + AGENTS(7.8KB) + TOOLS(0.9KB) = 10.4 KB
Después: SOUL(0.6KB) + AGENTS(1.4KB) + MEMORY(0.9KB) + TOOLS(0.9KB) = 3.8 KB
Un 63% de reducción. El agente responde más rápido y gasta menos tokens en cada turno.
La regla de oro de Reddit
En r/clawdbot hay un post viral: “The best OpenClaw setups I’ve seen all have one thing in common: they do less”. El autor ha visto 40-50 setups. Su conclusión:
Los que siguen usando OpenClaw después de un mes tienen 1 agente, 3-5 skills, y un modelo barato. Los que abandonan a las 3 semanas tenían 8 agentes, 20 skills, Opus como default, y un setup que rompía cada 48 horas.
Haz una cosa bien. Ya.
Optimización 2: memory-lancedb con embeddings locales
El problema de memory-core
OpenClaw viene con memory-core, que usa SQLite con búsqueda de texto completo (FTS5). Funciona, pero la búsqueda es léxica — busca palabras exactas. Si tu agente recuerda “Pablo prefiere respuestas en español” y buscas “idioma favorito”, no lo encuentra.
La solución: LanceDB + embeddings
memory-lancedb es el plugin oficial de OpenClaw para vector search. Convierte texto en embeddings (vectores numéricos) y busca por similitud semántica, no por palabras exactas.
{
"plugins": {
"entries": {
"memory-lancedb": {
"enabled": true,
"config": {
"embedding": {
"provider": "openai",
"model": "text-embedding-3-small",
"baseUrl": "https://api.z.ai/api/coding/paas/v4/"
},
"autoCapture": true,
"autoRecall": true,
"dreaming": {
"enabled": true,
"schedule": "0 3 * * *"
}
}
}
}
}
}
Lo que hace:
- autoCapture: captura automáticamente información importante de las conversaciones
- autoRecall: inyecta memorias relevantes en el contexto cuando hace falta
- dreaming: a las 3AM, el agente revisa sus memorias y consolida lo importante
El lío con los embeddings locales
Intenté usar Ollama con nomic-embed-text (local, gratis, 0 latency). Pero memory-lancedb solo soporta oficialmente text-embedding-3-small y text-embedding-3-large de OpenAI. Mi modelo local dio “Unsupported embedding model”.
Workaround: uso el endpoint de z.ai (OpenAI-compatible) con text-embedding-3-small. Costo mínimo, funciona perfecto.
Optimización 3: context pruning
Esta es la optimización que menos gente conoce y más impacto tiene.
{
"agents": {
"defaults": {
"contextPruning": {
"mode": "cache-ttl",
"ttl": "5m"
}
}
}
}
Sin pruning, OpenClaw re-inyecta SOUL + AGENTS + MEMORY + TOOLS en cada turno de la conversación. Con pruning, los cachea durante 5 minutos. Si en 5 minutos no cambió nada, no los reenvía.
El efecto: en conversaciones largas, esto ahorra miles de tokens. El modelo ya tiene la información en su contexto — no necesita que se la vuelvas a enviar.
Optimización 4: security audit
OpenClaw tiene un security audit built-in:
openclaw security audit
Mi estado inicial:
Summary: 3 critical · 2 warn · 1 info
Lo que arreglé:
| Problema | Severidad | Fix |
|---|---|---|
| Gateway token de 15 chars (“agentx-lab-2026”) | Critical | Roté a 48 chars random |
| Sin rate limiting | Critical | 10 intentos / 60s / 300s lockout |
| API keys en JSON sin protección | Warn | Perms 600, pendiente 1Password plugin |
| allowedOrigins con 10 entries | Warn | Reduje a 4 (solo los necesarios) |
| Plugin codex sin integrity hash | Warn | Reinstalé con versión pinneada |
| 201 symlinks rotos en skills/ | Warn | Eliminados, instalé 3 skills reales |
| plugins.allow sin configurar | Warn | Allowlist explícito de 8 plugins |
Estado final:
Summary: 0 critical · 0 warn · 1 info
La regla de skills: calidad > cantidad
Tenía 201 symlinks en ~/.openclaw/skills/ — todos apuntando a ~/.agents/skills/. OpenClaw los ignoraba (symlink-escape security). En práctica: 0 skills funcionando.
Reemplacé con 3 skills reales instalados desde ClawHub:
openclaw skills install github
openclaw skills install obsidian
openclaw skills install session-logs
Siguiendo el “do less” de Reddit: no necesitas 200 skills. Necesitas 3 que uses.
Lo que NO apliqué (y por qué)
| Técnica | Por qué no |
|---|---|
| Task Brain / semantic approvals | Single-agent personal. No hay usuarios hostiles. Las reglas de AGENTS.md son suficiente soft enforcement. |
| API keys en env vars (SecretRef) | SecretRef requiere un secrets backend (1Password, Vault). Sin él, ${VAR} no resuelve. Las keys quedan en JSON con chmod 600. |
| Modelo local para compaction | glm-4.7 es barato. Si quisiera $0, usaría Ollama con gemma4:e4b. |
El patrón que repiten todos
Tanto la guía de OnlyTerp como Reddit como mi experiencia dicen lo mismo:
- Empieza con 1 agente y 0 skills. Habla con él una semana. Configura la personalidad.
- Añade 1 cosa a la vez. Primero web search. Luego calendar. Luego una skill.
- Mide el contexto. Si tu AGENTS.md pesa más de 2KB, recorta.
- Audita la seguridad.
openclaw security audites tu amigo. - El setup que sobrevive un mes es el setup aburrido.
El asistente más útil no es el que tiene 20 skills y 8 agentes. Es el que fiablemente te dice qué tienes en el calendario cuando se lo preguntas.