Chuleta

Chuleta del harness de agente: componentes, archivos, problemas y lista de arranque

Actualizado: · Skillaria.Top

El harness de un agente se compone de cinco subsistemas: instrucciones, herramientas, entorno, estado y retroalimentación. El conjunto mínimo de archivos es un AGENTS.md como enrutador corto, un script de comprobación (make check, verify.sh), un archivo de progreso y una lista de funcionalidades con su estado; el estado de terminado lo asigna un script, no el agente.

Cinco subsistemas del harness

SubsistemaQué esArtefactosSíntoma de avería
InstruccionesLo que el agente debe saber del proyectoAGENTS.md / CLAUDE.md, skills, docs/, ADRIncumple convenciones conocidas
HerramientasLo que el agente puede hacershell, pruebas, linter, navegador, servidores MCP«Quiere pero no puede»
EntornoDónde trabaja el agentearchivos de bloqueo, Docker/devcontainer, git worktree, entorno aislado, init.shLa sesión empieza reparando el entorno
EstadoLo que sobrevive a un reinicioPROGRESS.md, DECISIONS.md, feature_list.json, commitsUna sesión nueva no sabe por dónde iba
RetroalimentaciónCómo se entera el agente de un errormake check, E2E, hooks, arch-check, evaluador«Listo», pero no funciona

Orden para construirlo desde cero: retroalimentación → instrucciones → estado → entorno → herramientas.

Archivos del harness

ArchivoFinalidadRegla
AGENTS.md / CLAUDE.mdPunto de entrada: qué es el proyecto, cómo se ejecuta, cómo se compruebaUn enrutador corto (unas 80 líneas) con enlaces a documentos con la condición «cuándo leerlo»
docs/*.mdDetalles por temasSe leen cuando hacen falta, no completos
.claude/skills/*/SKILL.mdProcedimientos repetibles (despliegue, revisión)Se cargan cuando la tarea coincide con su descripción
PROGRESS.mdEstado, lo hecho, bloqueos, siguientes pasosActualizar al final de cada sesión
DECISIONS.mdDecisión, motivo, opciones descartadasRegistrar el camino, no solo la conclusión
feature_list.jsonFuncionalidades: comportamiento, verificación, estadoExactamente una funcionalidad activa (WIP=1)
scripts/verify.shComprueba una funcionalidad y la pasa a passingEl único que asigna passing, con el SHA del commit
scripts/arch-check.shLímites de la arquitecturaCódigo de salida 1 + POR QUÉ y CORRECCIÓN en la salida
scripts/init.shComprobación del entorno antes de trabajarEntorno, git limpio, make check en verde, una funcionalidad activa
contrato de sprintContrato sobre una funcionalidad antes del códigoDentro del alcance / fuera del alcance / preguntas abiertas
.claude/settings.jsonPermisos y hooks de Claude CodeComprobaciones en eventos, no en la memoria del agente

Esqueleto de AGENTS.md

# Proyecto: backend de pagos (FastAPI, PostgreSQL)

## Arrancar
docker compose up -d && ./scripts/init.sh

## Comprobar
make check   # lint, tipos, unitarias, arch-check
make e2e     # escenarios de extremo a extremo

## Definition of Done
- make check y make e2e — código 0
- funcionalidad pasada a passing por el script scripts/verify.sh
- PROGRESS.md actualizado

## MUST
- consultas a la base solo a través de repositorios
- secretos solo desde variables de entorno

## Documentos
- docs/payments.md — cuando la tarea afecte a pagos y devoluciones
- docs/migrations.md — cuando cambie el esquema de la base

Estados de una funcionalidad

EstadoSignificadoQuién lo cambia
pendingEn colaPlanificador
activeEn curso (solo una)Agente al empezar
passingComprobación superadaSolo verify.sh
blockedNecesita una decisión humanaAgente, con la descripción del motivo

Niveles de verificación

NivelQuéCuándo
1Lint, tiposSiempre
2Pruebas unitarias y de integraciónSiempre
3E2ECambio que afecta a más de una capa; antes de «listo»
4arch-checkNuevas importaciones entre capas

El derecho a decir «listo» se gana solo tras superar el nivel más alto. Las pruebas unitarias en verde no equivalen a estar terminado.

Convertir las reglas en mecanismos

NivelHerramientaCoste
Guardia grepScript que busca un patrón e imprime POR QUÉ/CORRECCIÓNMinutos
Regla de linterimport-linter (Python), dependency-cruiser, eslint-plugin-boundaries (JS/TS)Una hora
Prueba de arquitecturaPrueba en CI que falla si se incumplen las capasMás trabajo, pero visible en make check
#!/usr/bin/env bash
fail=0
if grep -rn "from app.db" app/services/; then
  echo "POR QUÉ: los servicios no acceden directamente a la base de datos"
  echo "CORRECCIÓN: use un repositorio de app/repositories/"
  fail=1
fi
exit $fail

Problemas habituales y soluciones

ProblemaSubsistemaSolución
No se cumple una regla de CLAUDE.mdInstruccionesAcortar el archivo, convertir la regla en una comprobación o un hook
El agente no puede ejecutar las pruebasHerramientasPermitir el comando, instalar las dependencias en la imagen
Comportamiento distinto en cada máquinaEntornoArchivos de bloqueo, Docker/devcontainer, versiones fijadas del runtime
Amnesia entre sesionesEstadoPROGRESS.md, traspaso de sesión, lectura al empezar
Tres funcionalidades empezadas, ninguna terminadaEstadoWIP=1 en feature_list.json
«Listo», pero no funcionaRetroalimentaciónDoD, E2E, verify.sh, evaluador independiente
Las pruebas están en verde, la funcionalidad está rotaRetroalimentaciónE2E con base de datos y configuración reales
El agente copia malos patronesRetroalimentaciónarch-check desde el primer día
No se sabe qué hizo el agenteEstadoCommits pequeños, informe en PROGRESS.md, DECISIONS.md
El agente rompió el entorno durante la nocheEntornoEntorno aislado, git worktree, puntos de control, reversión con init.sh
El mismo comentario de revisión dos vecesHarness en generalConvertirlo en una comprobación de make check, quitar el texto de las instrucciones

Roles para tareas largas

RolHaceNo hace
PlanificadorFuncionalidades con criterios de aceptaciónNo escribe código
GeneradorImplementa una funcionalidad, ejecuta las pruebasNo decide si está terminada
EvaluadorVeredicto según una lista, con referencia a archivo, línea o registroNo ve el razonamiento del generador
FusiónHace commit cuando review == passEs código, no un agente

Presupuesto del trabajo autónomo

  • El objetivo cabe en una frase (por ejemplo: llevar todas las funcionalidades a passing).
  • WIP=1, un límite de tiempo y de intentos por funcionalidad.
  • La métrica crece de forma monótona; una regresión implica reversión inmediata.
  • Migraciones, infraestructura, dinero: escalado a una persona.
  • Tras varias revisiones fallidas, empezar la funcionalidad con un contexto limpio.

Lista de comprobación para arrancar al agente

  1. Existe un AGENTS.md: pila tecnológica, arranque, comando de comprobación, DoD.
  2. make check pasa en un clon limpio.
  3. El entorno es reproducible: archivos de bloqueo, Docker o devcontainer.
  4. El agente tiene los comandos que necesita; los peligrosos están prohibidos o en un entorno aislado.
  5. Hay un E2E al menos para el escenario principal.
  6. Existe un PROGRESS.md y una regla para leerlo al empezar la sesión.
  7. Las funcionalidades están en una lista con su estado; solo una está activa.
  8. El estado passing lo asigna un script.
  9. Los mensajes de comprobación contienen POR QUÉ y CORRECCIÓN.
  10. La tarea está formulada con criterios de aceptación y límites de alcance.
  11. Está definido qué requiere una decisión humana.
  12. Se ha medido la brecha de verificación antes de los cambios, como referencia.

Métricas del harness

MétricaCómo se calcula
Brecha de verificaciónProporción de «listo» sin confirmación de una comprobación, sobre 10 tareas
MTTRTiempo desde la avería hasta recuperar un estado de trabajo
Arranque en fríoSi una sesión nueva responde «dónde estamos y qué sigue» sin adivinar
AblaciónCaída al desactivar un subsistema sobre un conjunto fijo de tareas

En resumen

El harness es un circuito, no un archivo: instrucciones, herramientas, entorno, estado y retroalimentación. Empiece por las comprobaciones, mantenga AGENTS.md corto, entregue el estado de terminado a un script y revise el harness con regularidad. Todo ello se ensambla como conjunto en un proyecto de extremo a extremo en el curso de harness engineering.

Preguntas frecuentes

¿En qué se diferencia AGENTS.md de CLAUDE.md?

Por su finalidad son lo mismo: un archivo de instrucciones para el agente. CLAUDE.md lo lee Claude Code, AGENTS.md es un formato común para distintos agentes; en CLAUDE.md basta con referenciar AGENTS.md.

¿Cuántas líneas debe tener AGENTS.md?

No hay un límite fijo, pero el archivo de entrada debe ser corto, en torno a cien líneas, como un índice. Los detalles se trasladan a documentos aparte.

¿Necesito feature_list.json para un proyecto pequeño?

Para cambios puntuales no. Compensa cuando el agente trabaja en varias funcionalidades seguidas o en varias sesiones.

¿Dónde guardo los secretos a los que necesita acceder el agente?

En variables de entorno o en un gestor de secretos, no en archivos de instrucciones ni en el código. Al agente se le da acceso al entorno, no a los valores escritos en el texto.