Contexto
contaminado
Arrastra conversación vieja, mezcla decisiones, pierde foco. Cada turno suma ruido al anterior.
→ no sabe qué importa hoy
█▀█ █▀▀ █▀▀ █▄░█ ▀█▀ █░█ ▄▀█ █▀█ █▄░█ █▀▀ █▀ █▀ █▀█ █▄█ ██▄ █░▀█ ░█░ █▀█ █▀█ █▀▄ █░▀█ ██▄ ▄█ ▄█v2 · vendor-neutral
Arquitectura para que tu IA
deje de improvisar.
[?] no te pasó que…
le pediste algo puntual a tu agente y terminó tocando cinco archivos que no tenían nada que ver…
implementó 800 líneas que después nadie quería revisar…
se olvidó de algo que le habías dicho hace tres turnos.
Eso tiene nombre. Y no, no es que la IA esté rota.
Es que le falta un harness.
Arrastra conversación vieja, mezcla decisiones, pierde foco. Cada turno suma ruido al anterior.
→ no sabe qué importa hoy
A veces explora, a veces inventa, a veces edita lo que no debía. Cero garantía con la misma instrucción.
→ no podés repetir el resultado
¿Por qué hizo eso? ¿Qué decidió? ¿Qué probó? No se sabe. Code review a ciegas.
→ no podés auditar nada
Los modelos son hermosos. El problema no es el modelo,
es el sistema operativo alrededor del modelo.
Un Agent Harness es trabajo de ingeniería controlado alrededor de un agente. No es un producto. Es una CATEGORÍA de soluciones.
No es
Sí es
[~] disclaimer
Esta charla está inspirada en el trabajo de Alan Buscaglia (creador de gentle-ai). Yo me apoyé en su material para armarla. Pero hoy vamos a hacer algo distinto: en vez de los 20 harnesses de un solo ecosistema, vamos a recorrer 8 categorías de problemas con 3 implementaciones cada una. gentle-ai/Engram van a aparecer cuando corresponde, pero no son el sujeto de la charla.
"stuff"← ?Esa diferencia se llama velocidad con dirección.
qué hace · cuándo se invoca · qué guarda
tools · comandos · API · archivos
binario · daemon · plugin
DB · archivos · memoria · cloud
HARNESS
cualquiera
| Cuadrante | A · CLAUDE.md plano | B · Mem0 | C · Engram (gentle-ai) |
|---|---|---|---|
| [P] Protocolo | edición manual | save automático por turn | save en decisiones/bugs · search antes de empezar |
| [I] Interface | text edit | SDK Python/TS + REST | 19 tools MCP cross-agent |
| [R] Runtime | filesystem · git | SaaS managed o docker | binario Go standalone |
| [S] Storage | markdown versionado | vector store + embeddings | SQLite + FTS5 local |
| Mejor para | decisiones estables | apps de chat con memoria | workflow real cross-agent |
Tres respuestas distintas a la misma pregunta. Ahora vamos a ver las 8 preguntas que se hace cualquier agente serio.
Vos sos el orquestador. Modelás la conversación: "primero leé X, después contame Y, después decidimos juntos".
+ cero infra · − depende 100% de tu disciplina
El agente principal lanza sub-agentes con contexto aislado para tareas específicas. Aislamiento real sin instalar nada.
+ aislamiento de contexto · − proceso ad-hoc (vos decidís cuándo)
Orquestador padre + subagentes por fase (explore/spec/design/apply/verify), cada uno con su propio prompt y contexto.
+ proceso disciplinado · − curva alta (2-3 semanas)
Cuándo cada una: Solo + tarea chica → A. Aislamiento sin instalar → B. Proceso disciplinado a escala → C.
El patrón "1 orquestador + N ejecutores" también está en LangGraph, CrewAI, AutoGen. Diagrama D2 (hub) aplica al concepto, no a una herramienta.
Vos elegís manualmente: @archivo.ts, @carpeta/, @docs/decision.md. Control total.
+ sabés EXACTAMENTE qué tiene · − alta fricción, olvidos
Exponés tools (fetch_url, read_db, query_logs) y el agente las invoca on-demand. Contexto cargado dinámicamente.
+ flexible, escala · − tokens en tools innecesarias
El orquestador no pasa 10 docs gigantes al subagente — los digiere y le pasa 4 reglas concretas relevantes a la tarea.
+ contexto compactado · − capa extra de procesamiento
Cuándo cada una: Control total → A. Flexibilidad on-demand → B. Tareas largas con muchas convenciones → C.
Markdown versionado en el repo (CLAUDE.md, AGENTS.md, .cursorrules). El agente lo lee automáticamente al iniciar.
+ fricción cero · git · todo el equipo lo ve
− manual · no captura aprendizajes dinámicos
Capa de memoria para LLMs: vector store con embeddings, SDK Python/TS + REST. Captura automática por turn.
+ automática · semantic search
− requiere infra · pensado más para chat apps
Binario Go standalone con SQLite + FTS5 local y 19 tools MCP. Cross-agent: lunes Claude guarda, miércoles Cursor lee.
+ cross-agent vía MCP · local-first
− instalar · setup por agente
Cuándo cada una: Decisión estable → A. App de chat con memoria de usuario → B. Workflow real cross-agent → C.
┌────────────────────┐
│ CLAUDE.md │
│ (markdown · git) │
└────────────────────┘
↕
read on start
↕
┌────────────────────┐
│ Agent (Claude) │
└────────────────────┘ ┌────────────────────┐
│ Agent │
└────────────────────┘
↕
SDK / REST
↕
┌────────────────────┐
│ Mem0 │
│ (vector store) │
└────────────────────┘ ┌──────┐ ┌──────┐ ┌──────┐
│Claude│ │Cursor│ │Codex │
└──────┘ └──────┘ └──────┘
└────── MCP ──────┘
↕
┌────────────────────┐
│ Engram (binario) │
│ SQLite + FTS5 │
└────────────────────┘ Markdown plano por cliente. Cursor migró de .cursorrules a .cursor/rules/*.mdc. Leído automáticamente al iniciar.
+ simple · cero infra
− específico por cliente (uno por cada agente)
Formato oficial: markdown + frontmatter (name, description). Carga dinámica según relevancia. Funciona en Claude API + Claude Code.
+ cross-tool en ecosistema Anthropic · reusable
− solo Anthropic (todavía)
Índice escaneado del proyecto + usuario. El orquestador decide cuáles digerir y pasar a cada subagente según la tarea.
+ registry compartido · digestion automática
− nivel extra de complejidad
Cuándo cada una: Empezá por A. Reuso entre proyectos del mismo ecosistema → B. Que el orquestador las digiera → C.
Hooks de pre-commit que corren linters + tests (Husky, lefthook, pre-commit framework). Si fallan, no se commitea.
+ funciona con CUALQUIER agente · infra estándar
− al final del commit, no por fase
PreToolUse, PostToolUse, Stop, UserPromptSubmit. Cada hook puede ejecutar un comando arbitrario.
+ granularidad por evento · nativo
− solo Claude Code · requiere config
Fase dedicada que pide evidencia explícita: comandos corridos, outputs, tests pasados, riesgos, archivos fuera de scope.
+ evidence auditable · contrato explícito
− requiere todo el flow
Cuándo cada una: A es el mínimo, si no lo tenés, esto es lo primero. B suma granularidad si usás Claude Code. C para auditoría real.
TODO.md versionado con estado de tasks + git log como diario operacional. Disciplina manual.
+ cero infra · todos lo leen
− depende 100% de tu disciplina
El agente arma un plan estructurado, lo persiste, y al retomar la sesión lo lee. Combinado con Task tool da continuidad real.
+ nativo · persiste entre sesiones
− solo Claude Code, no cross-tool
Apply continuity guarda estado de tasks (completed/in-progress/blocked). Engram session_summary captura aprendizajes al cierre.
+ continuidad estructurada + memoria
− ecosistema completo
Cuándo cada una: Disciplina manual → A. Si usás Claude Code → B. Si trabajás multi-sesión recurrente → C.
Cuidado con el overlap con la categoría 3 (memoria): memoria son decisiones permanentes, continuidad es estado de tareas in-progress. Son distintos aunque a veces conviven en la misma herramienta.
Convención de commits semánticos (feat:, fix:) + template de PR que pide contexto, test plan, qué quedó fuera.
+ infra cero · cultura común
− no resuelve PRs grandes · solo los documenta
PRs encadenados, cada uno chico. Tools: Graphite (managed), git absorb (CLI), Sapling (Meta git replacement).
+ review humano factible · rollback granular
− requiere cultura + tooling extra
Antes de aplicar, evalúa tamaño y decide partir en PRs encadenados según estrategia: ask_on_risk, autochain, single_pr.
+ automatización + decisión por contrato
− cambia workflow de git del equipo
Cuándo cada una: Mínimo viable → A. Si tu equipo ya hace PRs chicos → B. Problema recurrente con agentes → C.
[+] PRs chicos · review rápido
[+] mergea independiente
[-] si falla en prod, rollback fragmentado
startup · cultura de fix rápido · riesgo asumido
[+] rollback de feature en 1 click
[+] main siempre estable
[-] PR final puede ser grande
equipos · review estricto · control de rollback
tests/legacy/ porque le pareció obsoleto. No le pediste borrar.settings.jsonAllow/deny por tool y comando bash en .claude/settings.json. Prompts de confirmación para acciones sensibles.
+ nativo · oficial · granular
− solo Claude Code
.cursorignore + tool restrictionsMismo formato que .gitignore. Archivos listados invisibles para el agente. Útil para .env, credentials, configs sensibles.
+ simple · paradigma conocido
− menos granular · no bloquea comandos
MCPs custom wrappeados con políticas: auth, logging, ratelimit, bloqueo de arguments peligrosos. El MCP server es tu punto de control.
+ auditable · compliance · agent-agnostic
− requiere escribir el MCP wrapper
Cuándo cada una: Empezá con A. Archivos sensibles con Cursor → sumá B. Compliance / multi-tenant / auditoría → C.
| Categoría | A · empezá acá | B · intermedio | C · ecosistema |
|---|---|---|---|
| 1 · Orquestación | prompts secuenciales | Claude Code Task | gentle-ai SDD |
| 2 · Contexto | @-mentions (Cursor) | MCP tools | gentle-ai digestion |
| 3 · Memoria persistente | CLAUDE.md / AGENTS.md | Mem0 | Engram |
| 4 · Skills | Cursor rules / CLAUDE.md | Anthropic Skills | gentle-ai registry |
| 5 · Verificación | git pre-commit + tests | Claude Code hooks | gentle-ai verify |
| 6 · Continuidad | TODO.md + commits | Claude Code plan mode | gentle-ai apply + Engram |
| 7 · Entrega | conv. commits + PR template | Graphite · git absorb | gentle-ai chain |
| 8 · Seguridad | Claude Code settings.json | .cursorignore | MCP filters |
La columna A es lo que YA podés hacer hoy con lo que ya usás. B es el paso intermedio. C son los ecosistemas instalables. Empezá por A.
No instales gentle-ai ni Engram ni Mem0 ni nada el lunes sin haber pasado por A.
Te lo digo porque yo me equivoqué. Instalé tres ecosistemas en una semana y abandoné dos. Las A te resuelven el 60% de los dolores. Las B otro 30%. C es para el 10% que realmente lo necesita.
Vimos 8 categorías. Pero el punto no es el número.
Un harness no es un producto
que comprás.
Es una arquitectura
que diseñás.
Hoy te di un mapa. Lo que armes con eso es tuyo.
Empezá por una implementación A. Una. Esta semana. Sin instalar nada nuevo.
"no necesitás mejores prompts. necesitás mejores harnesses."
Chorch · rojas.me
inspirado en el trabajo de Alan Buscaglia (Gentleman Programming) · ampliada con docs oficiales de cada herramienta