Saltar al contenido principal

Guía de Harness Engineering

Source: GitHub - walkinglabs/learn-harness-engineering

Los modelos son potentes pero seguirán fallando en las tareas si no tienen un arnés de seguridad, un entorno potente que le evite errores, a su alrededor.

EL PATRÓN DEL HARNESS
=====================
Tú --> das tarea --> Agente lee archivos del harness --> Agente ejecuta
|
el harness gobierna cada paso:
|
+--> Instrucciones: qué hacer, en qué orden
+--> Alcance: una funcionalidad a la vez, sin excederse
+--> Estado: registro de progreso, lista de funcionalidades, historial git
+--> Verificación: tests, lint, verificación de tipos, pruebas de humo
+--> Ciclo de vida: inicio al arrancar, estado limpio al finalizar
|
v
El agente se detiene solo cuando
la verificación pasa

Lo que realmente significa Harness Engineering​

No se trata de escribir mejores prompts para que el modelo "acierte" más y no falle. Se trata de construirle un arnés de seguridad dentro del cual debe operar el modelo.

Un harness tiene 5 subsistemas:

┌─────────────────────────────────────────────────────────────────┐
│ EL HARNESS │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Instrucciones │ │ Estado │ │ Verificación │ │
│ │ │ │ │ │ │ │
│ │ AGENTS.md │ │ progress.md │ │ tests + lint │ │
│ │ CLAUDE.md │ │ feature_list │ │ verif. de tipos │ │
│ │ feature_list │ │ git log │ │ pruebas de humo │ │
│ │ docs/ │ │ handoff ses. │ │ pipeline e2e │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────────────────────────────┐ │
│ │ Alcance │ │ Ciclo de Vida de Sesión │ │
│ │ │ │ │ │
│ │ una func. │ │ init.sh al inicio │ │
│ │ a la vez │ │ checklist de estado limpio al final │ │
│ │ definición │ │ nota de entrega para sig. sesión │ │
│ │ de hecho │ │ commit solo cuando es seguro reanudar│ │
│ └──────────────┘ └──────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
El MODELO decide qué código escribir.
El HARNESS gobierna cuándo, dónde y cómo lo escribe.
El harness no hace al modelo más inteligente.
Hace que la salida del modelo sea fiable.

Cada subsistema tiene una única responsabilidad:

  • Instructions — Le dicen al agente qué hacer, en qué orden y qué leer antes de comenzar. No un archivo gigante, eso nos consumiría todos los tokens; una estructura de divulgación progresiva que el agente navega según lo necesite.
  • State — Rastrea qué se ha hecho, qué está en progreso y qué sigue. Se persiste en disco para que la siguiente sesión continúe exactamente donde la anterior se quedó.
  • Verification — Solo un conjunto de tests que pasan cuenta como evidencia. El agente no puede declarar victoria sin pruebas ejecutables.
  • Scope — Limita al agente a una funcionalidad a la vez. Sin excederse. Sin dejar tres cosas a medias. Sin reescribir la lista de funcionalidades para ocultar trabajo inacabado.
  • Session Lifecycle — Inicializar al inicio. Limpiar al final. Dejar una ruta de reinicio limpia para la siguiente sesión.

Inicio Rápido:​

La idea es simple: en lugar de solo escribir prompts, dale a tu agente un conjunto de archivos estructurados que definan qué hacer, qué se ha hecho y cómo verificar el trabajo. Estos archivos viven dentro de tu repositorio, así que cada sesión comienza desde el mismo estado.

RAÍZ DE TU PROYECTO
├── AGENTS.md <-- el manual de operación del agente
├── CLAUDE.md <-- (alternativa, si usas Claude Code)
├── init.sh <-- ejecuta install + verify + start
├── feature_list.json <-- qué funcionalidades existen, cuáles están listas
├── claude-progress.md <-- qué pasó en cada sesión
└── src/ <-- tu código real

Plantillas iniciales en la Biblioteca de Recursos. Colócalas en tu proyecto. Eso es todo. Cuatro archivos, y tus sesiones de agente ya serán significativamente más estables que ejecutándolas solo con prompts.

El Ciclo de Vida de la Sesión del Agente​

La sesión del agente debe seguir un ciclo de vida estructurado, no un libre intercambio. Así es como se ve:

CICLO DE VIDA DE LA SESIÓN DEL AGENTE
=====================================
┌──────────────────────────────────────────────────────────────────┐
│ INICIO │
│ │
│ 1. Agente lee AGENTS.md / CLAUDE.md │
│ 2. Agente ejecuta init.sh (install, verify, health check) │
│ 3. Agente lee claude-progress.md (qué pasó la última vez) │
│ 4. Agente lee feature_list.json (qué está listo, qué sigue) │
│ 5. Agente revisa git log (cambios recientes) │
│ │
│ SELECCIONAR │
│ │
│ 6. Agente elige exactamente UNA funcionalidad pendiente │
│ 7. Agente trabaja solo en esa funcionalidad │
│ │
│ EJECUTAR │
│ │
│ 8. Agente implementa la funcionalidad │
│ 9. Agente ejecuta verificación (tests, lint, verif. de tipos) │
│ 10. Si la verificación falla: corregir y volver a ejecutar │
│ 11. Si la verificación pasa: registrar evidencia │
│ │
│ CERRAR │
│ │
│ 12. Agente actualiza claude-progress.md │
│ 13. Agente actualiza feature_list.json │
│ 14. Agente registra qué sigue roto o sin verificar │
│ 15. Agente hace commit (solo cuando es seguro reanudar) │
│ 16. Agente deja una ruta de reinicio limpia para la sig. sesión│
│ │
└──────────────────────────────────────────────────────────────────┘
El harness gobierna cada transición en este ciclo de vida.
El modelo decide qué código escribir en cada paso.
Sin el harness, el paso 9 se convierte en "el agente dice que se ve bien."
Con el harness, el paso 9 es "los tests pasan, el lint está limpio, los tipos verifican."