[+] agent.harness
arquitectura · no vendor · accionable 00 / 20
█▀█ █▀▀ █▀▀ █▄░█ ▀█▀  █░█ ▄▀█ █▀█ █▄░█ █▀▀ █▀ █▀
█▀█ █▄█ ██▄ █░▀█ ░█░  █▀█ █▀█ █▀▄ █░▀█ ██▄ ▄█ ▄█
v2 · vendor-neutral
[+] live

Agent
Harness.

Arquitectura para que tu IA
deje de improvisar.

[+]50 min · sin demos en vivo
[+]8 categorías · 3 implementaciones c/u
[+]te llevás un mapa · no un vendor
ponenteChorch · rojas.me
inspirado encharla de Alan Buscaglia · ampliada con otras herramientas
año2026
scroll ↓ para empezar · o P para modo presentación 00 / 20
[01] hook · empezamos por el dolor compartido

[?] 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.

[02] tres problemas operativos · sin harness, cualquier agente capaz cae acá

Un modelo bueno + cero estructura = tres dolores predecibles.

[01]

Contexto
contaminado

Arrastra conversación vieja, mezcla decisiones, pierde foco. Cada turno suma ruido al anterior.

→ no sabe qué importa hoy

[02]

Ejecución
impredecible

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

[03]

Cero
trazabilidad

¿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.

[03] definición · roadmap · disclaimer · vendor-neutral, en serio

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

  • un prompt mejor
  • un wrapper sobre la API
  • una herramienta específica

Sí es

  • dirección · qué hacer
  • memoria · qué recordar
  • proceso · en qué orden
  • verificación · cómo se sabe que terminó
  • límites · qué no puede tocar

[~] 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.

[D1] obrero · mismo obrero, resultado distinto · la analogía base

Cuando le pedís a tu agente "hacé el feature X":

[-] sin harness obrero capaz · resultado caótico
tocó api/v2/users.tsesperado
tocó api/v3/billing.ts← ¿por qué?
tocó README.md← ¿por qué??
borró tests/legacy/← ¡!
creó 5 archivos · sin tests
commit "stuff"← ?
[!]1247 líneas modificadas en 8 archivos
[!]0 tests corridos · 0 evidencia
[?]¿qué decidió? no se sabe
[+] con harness mismo obrero · resultado de ingeniería
[01]init · stack detectadoreact · vitest
[02]proposal · 1 archivoapproved
[03]spec · acceptance OK6 criterios
[04]design · 2 archivoscontract estable
[05]tasks · 3 pasosscope acotado
[06]apply · diff +120 -8aplicado
[07]verify · tests verdes ✓evidencia adjunta
[✓]128 líneas · scope acotado · 2 archivos
[✓]tests corridos · evidencia adjunta
[✓]trazable · reproducible · revisable
diagrama D1 · el flow SDD (init→proposal→spec→design→apply→verify) es un patrón genérico, no propiedad de ningún vendor

Esa diferencia se llama velocidad con dirección.

[D7] anatomía de un harness · cualquier harness · el template que vas a usar toda la charla

Cualquier harness se reduce a estas 4 decisiones.

[P] PROTOCOLO

Reglas operativas

qué hace · cuándo se invoca · qué guarda

  • vive en system prompts
  • en convenciones de equipo
  • o en instrucciones del agente
[I] INTERFACE

Cómo se conecta

tools · comandos · API · archivos

  • MCP tools
  • function calling
  • CLI / REST
  • archivos del proyecto
[R] RUNTIME

Cómo se ejecuta

binario · daemon · plugin

  • script bash
  • binario standalone
  • plugin del IDE
  • microservicio
[S] STORAGE

Dónde queda el estado

DB · archivos · memoria · cloud

  • filesystem + git
  • SQLite local
  • vector store managed
  • solo memoria de sesión

HARNESS

cualquiera

diagrama D7 · 4 decisiones · 1 template · portable a cualquier categoría
[06] el mismo template, 3 herramientas distintas · memoria persistente como caso

Un mismo harness (memoria persistente). Tres implementaciones reales.

Cuadrante A · CLAUDE.md plano B · Mem0 C · Engram (gentle-ai)
[P] Protocoloedición manualsave automático por turnsave en decisiones/bugs · search antes de empezar
[I] Interfacetext editSDK Python/TS + REST19 tools MCP cross-agent
[R] Runtimefilesystem · gitSaaS managed o dockerbinario Go standalone
[S] Storagemarkdown versionadovector store + embeddingsSQLite + FTS5 local
Mejor paradecisiones establesapps de chat con memoriaworkflow real cross-agent

Tres respuestas distintas a la misma pregunta. Ahora vamos a ver las 8 preguntas que se hace cualquier agente serio.

[01/08] categoría 1 · orquestación · ¿quién coordina las fases del trabajo?

El agente hace exploración + diseño + código en el mismo turno. ¿No te pasó?

A · simple

Prompts secuenciales caseros

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

B · intermedio

Claude Code sub-agents (Task tool)

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)

C · ecosistema

gentle-ai SDD orchestrator

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.

[02/08] categoría 2 · contexto y compactación · ¿qué se le da al agente en cada turno?

Después de 30 turnos, el agente se olvidó de la decisión del principio. ¿No te pasó?

A · simple

@-mentions manuales (Cursor)

Vos elegís manualmente: @archivo.ts, @carpeta/, @docs/decision.md. Control total.

+ sabés EXACTAMENTE qué tiene · alta fricción, olvidos

B · intermedio

MCP context tools

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

C · ecosistema

gentle-ai skill digestion

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.

[03/08] categoría 3 · memoria persistente · ¿qué se conserva entre sesiones y herramientas?

Lunes definís arquitectura con Claude. Miércoles abrís Cursor. Cero memoria.

A · simple

CLAUDE.md / AGENTS.md

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

B · intermedio

Mem0

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

C · ecosistema

Engram (gentle-ai)

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.

[D8] arquitecturas de memoria comparadas · 3 respuestas a la misma pregunta

Tres arquitecturas. Tres casos. Ninguna es "mejor".

[A] markdown estático

CLAUDE.md

┌────────────────────┐
│   CLAUDE.md        │
│   (markdown · git) │
└────────────────────┘
         ↕
         read on start
         ↕
┌────────────────────┐
│   Agent (Claude)   │
└────────────────────┘
storage: filesystem + git
captura: manual
cross-agent: sí, por convención
tipo: decisiones estables
[B] vector store

Mem0

┌────────────────────┐
│   Agent            │
└────────────────────┘
         ↕
         SDK / REST
         ↕
┌────────────────────┐
│   Mem0             │
│   (vector store)   │
└────────────────────┘
storage: vector store + embeddings
captura: automática por turn
cross-agent: vía SDK
tipo: memoria semántica de chat
[C] SQLite + MCP

Engram

┌──────┐ ┌──────┐ ┌──────┐
│Claude│ │Cursor│ │Codex │
└──────┘ └──────┘ └──────┘
   └────── MCP ──────┘
            ↕
┌────────────────────┐
│   Engram (binario) │
│   SQLite + FTS5    │
└────────────────────┘
storage: SQLite + FTS5 local
captura: proactiva (save/search)
cross-agent: sí, vía MCP
tipo: memoria coding cross-tool
diagrama D8 · son respuestas distintas a la misma pregunta · elegí según tu workflow real
[04/08] categoría 4 · skills y conocimiento del proyecto · ¿cómo sabe el agente qué hacer en ESTE repo?

Cada vez que abrís el agente le explicás las mismas convenciones. Cada. Vez.

A · simple

CLAUDE.md / Cursor rules

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)

B · intermedio

Anthropic Skills

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)

C · ecosistema

gentle-ai skill registry

Í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.

[05/08] categoría 5 · verificación y evidencia · ¿cómo se sabe que terminó BIEN?

El agente dijo "terminé, todo funciona". Lo corrés. Explota. "Te juro que funcionaba".

A · simple

Git pre-commit + tests

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

B · intermedio

Claude Code hooks

PreToolUse, PostToolUse, Stop, UserPromptSubmit. Cada hook puede ejecutar un comando arbitrario.

+ granularidad por evento · nativo
solo Claude Code · requiere config

C · ecosistema

gentle-ai verify

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.

[06/08] categoría 6 · continuidad operacional · ¿cómo retomás trabajo grande entre sesiones?

Implementás 3 de 8 tasks. Cerrás el viernes. Volvés el lunes. ¿Por cuál ibas?

A · simple

TODO.md + commits

TODO.md versionado con estado de tasks + git log como diario operacional. Disciplina manual.

+ cero infra · todos lo leen
depende 100% de tu disciplina

B · intermedio

Claude Code plan mode

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

C · ecosistema

gentle-ai apply + Engram summary

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.

[07/08] categoría 7 · entrega y revisión humana · ¿cómo entregás el trabajo a un humano?

El agente entregó un PR de 1200 líneas en 18 archivos. Tu compañero te odia.

A · simple

Conventional commits + PR templates

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

B · intermedio

Stacked PRs (Graphite, git absorb)

PRs encadenados, cada uno chico. Tools: Graphite (managed), git absorb (CLI), Sapling (Meta git replacement).

+ review humano factible · rollback granular
requiere cultura + tooling extra

C · ecosistema

gentle-ai chain strategy

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.

[D5] stacked PRs vs feature branch · geometría de entrega · la geometría también es parte del harness

Dos formas de cerrar el trabajo del agente para que un humano lo revise.

[A] stacked a main cada PR a main · independientes
main PR #1 · merge ✓ PR #2 · merge ✓ PR #3 · merge ✓ ∙∙∙

[+] PRs chicos · review rápido

[+] mergea independiente

[-] si falla en prod, rollback fragmentado

startup · cultura de fix rápido · riesgo asumido

[B] feature branch PR final único · rollback en 1 click
main feature/x PR #1 PR #2 PR #3 PR final → main

[+] rollback de feature en 1 click

[+] main siempre estable

[-] PR final puede ser grande

equipos · review estricto · control de rollback

diagrama D5 · la estrategia se declara explícita · no se hereda accidental · Graphite / git absorb / Sapling automatizan el stacking pattern
[08/08] categoría 8 · seguridad y permisos · ¿qué NO puede tocar?

El agente borró tests/legacy/ porque le pareció obsoleto. No le pediste borrar.

A · simple

Claude Code settings.json

Allow/deny por tool y comando bash en .claude/settings.json. Prompts de confirmación para acciones sensibles.

+ nativo · oficial · granular
solo Claude Code

B · intermedio

.cursorignore + tool restrictions

Mismo formato que .gitignore. Archivos listados invisibles para el agente. Útil para .env, credentials, configs sensibles.

+ simple · paradigma conocido
menos granular · no bloquea comandos

C · ecosistema

MCP server-level filters

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.

[D9] el mapa que te llevás · 8 categorías × 3 implementaciones · imprimílo · sacale foto · ponelo de fondo de pantalla

8 problemas que cualquier agente serio resuelve. El mapa es tuyo.

Categoría A · empezá acá B · intermedio C · ecosistema
1 · OrquestaciónClaude Code Taskgentle-ai SDD
2 · ContextoMCP toolsgentle-ai digestion
3 · Memoria persistenteMem0Engram
4 · SkillsAnthropic Skillsgentle-ai registry
5 · VerificaciónClaude Code hooksgentle-ai verify
6 · ContinuidadClaude Code plan modegentle-ai apply + Engram
7 · EntregaGraphite · git absorbgentle-ai chain
8 · Seguridad.cursorignoreMCP 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.

[→] cómo armás tu harness · 4 pasos · learning-first · sin instalar nada todavía

No te voy a decir "instalá X". Te voy a decir esto.

  1. Identificá UN dolor recurrente esta semana. UNO. No tres, no cinco. Uno.
  2. Mapealo a UNA de las 8 categorías. Si dudás entre dos, probablemente sea memoria (3) vs continuidad (6) — son las que más se confunden.
  3. Probá la implementación A primero. Lo más simple. Sin instalar nada.
  4. Si A no alcanza, subí a B. Si B no alcanza, evaluá C. No empieces por C.
[!] confesión personal

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.

[fin] frase de cierre

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.