Que un subagente aparte escriba el test de reproducción
Tu IA califica su propia tarea. Cuando el mismo modelo, en la misma conversación, escribe el arreglo del bug y el test que lo "demuestra", los mismos supuestos se arrastran: lo que el modelo malinterpretó del bug moldea el fix y el test, y ambos coinciden — equivocadamente. La solución está a un prompt de distancia: divide el trabajo.
Por qué el test de un agente no atrapa su propio fix
Un agente se detiene cuando el trabajo parece terminado, y "parece terminado" es una señal débil cuando el verificador comparte el razonamiento del ejecutor. La guía oficial de Claude Code de Anthropic es explícita sobre el mecanismo: una verificación en un contexto nuevo funciona porque "el agente que hace el trabajo no es el que lo califica", y un revisor en contexto fresco "ve solo el diff y los criterios que le das, no el razonamiento que produjo el cambio". El mismo documento señala que un contexto nuevo mejora la revisión de código porque el modelo no está sesgado hacia el código que acaba de escribir.
En concreto, un fix autocalificado falla de dos maneras comunes y aburridas:
- El test codifica el diagnóstico equivocado. Si el agente cree que el bug es un off-by-one cuando en realidad es un problema de zona horaria, escribe un test de off-by-one — que el fix equivocado pasa sin problema.
- El test se escribe para pasar. Un agente que ya conoce el fix tiende a afirmar exactamente lo que el fix produce, no lo que el comportamiento correcto exige.
El flujo: demuestra el bug primero
| Paso | Quién | Qué |
|---|---|---|
| 1 | Subagente nuevo | Recibe solo el reporte del bug + pasos de reproducción. Escribe un test que falla. Nunca ve el fix. |
| 2 | Tú / el harness | Corre el test. Debe fallar por la razón reportada — esa falla es la reproducción. |
| 3 | Agente principal | Implementa el fix e itera hasta que el test del subagente pase. |
| 4 | Revisor opcional | Un segundo subagente nuevo revisa el diff contra el test. |
En Claude Code, los subagentes corren en su propia ventana de contexto, así que el aislamiento viene por defecto: quien escribe el test literalmente no puede espiar el razonamiento de quien arregla. El prompt es una línea:
Use a subagent to write a failing test that reproduces this bug:
users report login fails after session timeout. Give it only this
report — not the fix branch. Run it and show me the failing assertion.
Y luego, en la sesión principal: "make this test pass without modifying the test".
Verifica la falla, no solo el test
Un test que falla por la razón equivocada (error de import, fixture faltante) no demuestra nada. Exige evidencia al subagente: el comando exacto que corrió y la aserción que falló. Solo cuando la falla coincide con el síntoma reportado tienes una reproducción — entonces pásasela a quien arregla.
Trucos para usuarios avanzados
- Bloquea el archivo de test. Dile al agente que arregla que el test es de solo lectura ("make it pass without editing tests/"), o impónlo con un hook que bloquee escrituras a esa ruta. Si no, un agente atascado "arreglará" el test.
- Inviértelo para features. La misma división generador/verificador funciona hacia adelante: una sesión escribe los tests desde la especificación y otra escribe el código que los pasa — un patrón que Anthropic recomienda para sesiones paralelas.
- Escálalo con worktrees. Corre al escritor de tests y al que arregla como sesiones paralelas en git worktrees separados para que sus ediciones no colisionen.
- Restringe las herramientas del subagente. Un subagente escritor de tests necesita Read, Grep y Bash — no Edit sobre los archivos fuente. Herramientas acotadas hacen el aislamiento estructural, no solo de cortesía.
Recursos
- Best practices for Claude Code — verificación y revisión adversarial
- Create custom subagents — ventanas de contexto separadas y alcance de herramientas
- Common workflows — arreglar bugs y trabajar con tests
- Hooks — compuertas deterministas, como bloquear escrituras a los tests
¿Construyendo una funcionalidad con IA? Yeda AI diseña, audita y entrega sistemas LLM en producción.