En una tarea larga de IA, lo más inquietante no siempre es el fallo. Es el silencio.
Una persona puede terminar tareas de casa, hacer compras, comer y volver; la IA sigue mostrando “trabajando”. En ese momento hay dos posibilidades muy distintas:
- Está ejecutando una batería enorme de pruebas.
- Se quedó detenida hace horas.
Un indicador de carga no permite distinguirlas. Tampoco la ausencia de commits: pruebas, investigación, comparación, generación o esperas externas pueden pasar bastante tiempo sin producir un artefacto visible.
Por eso una IA de larga duración necesita algo además de inteligencia: observabilidad.
1. Conclusión: si una tarea puede durar bastante, conviene exponer su estado actual
Un agente de larga duración no debería informar solo al final. También conviene que su estado intermedio sea legible.
No hace falta que diga cada minuto “sigo vivo”. Basta con poder responder:
- Qué está haciendo ahora
- Qué ya terminó
- Qué falta
- Si está ejecutando pruebas
- Si hay un bloqueo
- Cuándo se confirmó por última vez que seguía activo
- Cuándo ocurrió el último cambio material
Un ejemplo práctico de configuración consiste en actualizar el Heartbeat cuando pasan unos 10 minutos sin artefactos visibles y clasificar un Heartbeat de más de 20 minutos como STALE_UNKNOWN, no como “detenido”.
El silencio significa primero “no sabemos”, no “ha fallado”.
2. Por qué el historial de commits no basta
Los commits de Git son excelentes como evidencia de cambio material, pero malos como única señal de actividad actual.
Una suite de regresión de una hora puede estar funcionando perfectamente sin generar ningún commit. Y crear un commit inútil cada diez minutos solo para demostrar vida ensucia el historial.
Conviene separar:
Heartbeat = estado actual Material change = evidencia de que código, contratos, artefactos o verificaciones cambiaron de verdad
Con lastHeartbeatAt y lastMaterialChangeAt separados se entiende perfectamente un estado como “no hubo commit en 30 minutos, pero hace 5 minutos seguía en TESTING”.
El objetivo no es tener más commits, sino poder interpretar el silencio.
3. ¿Qué conviene registrar como mínimo?
Para un run largo son útiles estos campos:
runIdstate: RUNNING / BLOCKED / COMPLETED / STALE_UNKNOWN, etc.phase: READING / IMPLEMENTING / TESTING / VERIFYING, etc.workingOnstartedAtlastHeartbeatAtlastMaterialChangeAtbranch / baseSha / headSha / PRcompletedMilestones / remainingMilestonesblockerstestsnextCheckpoint
Así un trabajo de seis horas deja de ser “una caja negra de seis horas” y pasa a leerse como:
IMPLEMENTING → TESTING → INTEGRATING → VERIFYING
Una caja negra puede ser muy inteligente, pero sigue siendo una caja negra. Y después de unas horas, da nervios.
4. Durante las pruebas el Heartbeat es especialmente importante
Una prueba larga se parece muchísimo a un agente congelado.
Antes de una prueba larga conviene registrar:
phase = TESTING- nombre de la suite
- alcance
- un conteo objetivo como
84 / 127si existe un total fijo - si ya apareció algún fallo
Hay que evitar porcentajes inventados como “82% completado” en diseño o depuración. Nadie sabe realmente qué significa el 18% restante.
Los porcentajes tienen sentido solo cuando el denominador es fijo:
- 84 / 127 tests
- 3 / 5 acceptance gates
“Implementación al 82%” es el equivalente de IA de “ya casi llego” dicho por alguien que quizá aún está en casa.
5. El “¿se paró?” se interpreta mejor por etapas
Una política práctica puede clasificar la antigüedad del Heartbeat así:
| Antigüedad | Interpretación |
|---|---|
| 0–10 minutos | CURRENT |
| 10–20 minutos | HEARTBEAT_OVERDUE |
| Más de 20 minutos | STALE_UNKNOWN |
STALE_UNKNOWN no es FAILED.
Después conviene revisar, en este orden:
- registro actual de progreso
- Check / Status
- actividad de branch / PR
- último commit
- inferencias solo al final
Si el Heartbeat está viejo pero luego aparece un PR o commit nuevo, probablemente el agente siguió trabajando y olvidó actualizar el estado.
La IA también puede hacer esto: trabajo hecho, parte de horas olvidado.
6. Errores de gestión que conviene evitar
No llenar main de commits de Heartbeat
Ensucia el historial, provoca conflictos y puede activar CI o despliegues innecesarios. Es mejor una superficie mutable y ligera: comentario de Issue, Check, Status o un área ops no productiva.
No crear un comentario nuevo por cada Heartbeat
Un registro mutable por run es más legible. Un comentario cada diez minutos convierte la revisión de progreso en arqueología.
No convertir silencio en fallo automáticamente
Si solo está desactualizado, usar STALE_UNKNOWN. Reservar el fallo para evidencia afirmativa de fallo.
No poner secretos en los logs
Nada de API keys, tokens, contraseñas, URL privadas, chats privados sin procesar, datos personales o contenido confidencial.
No detener trabajo seguro solo porque falle el canal de observabilidad
Si falla la API de progreso, usar otro sink y continuar el trabajo independiente que sea seguro continuar.
7. Plantilla práctica
State: RUNNING
Phase: TESTING
Run ID: agent-20260916-long-task
Started: 10:00
Last heartbeat: 14:05
Last material change: 13:42
Branch: feat/long-task
Head SHA: abc1234
PR: #123
Working on:
- regression tests
Completed:
- runtime implementation
- contract update
Remaining:
- regression completion
- merge verification
- production readback
Blockers:
- none
Tests:
- 84 / 127 passed so far
- no failure observed
Next checkpoint:
- finish regression, then integration
Con esto, “¿se paró?” se convierte en “vale, está probando”.
La visibilidad no sirve principalmente para meter presión a la IA. Sirve para que las personas no reinicien, interrumpan o repitan instrucciones por pura incertidumbre.
8. Resumen: diseñar por separado inteligencia y visibilidad
En tareas largas conviene distinguir:
- sin commit ≠ detenido
- con Heartbeat ≠ progreso material
- Heartbeat viejo ≠ fallo
- un blocker ≠ parada global
- silencio durante pruebas ≠ dormido
Si una IA puede trabajar seis horas, la persona no debería tener que observarla seis horas.
El mejor diseño permite volver en cualquier momento y saber inmediatamente dónde está.
El agente ideal de larga duración no es el que habla sin parar.
Trabaja en silencio, pero cuando miras, su posición es evidente.

