¿Un agente de IA que trabaja durante horas debería guardar un registro de progreso? Heartbeats para evitar el “¿se habrá parado?”

En una tarea larga de IA, lo más inquietante no siempre es el fallo. Es el silencio.

¿Un agente de IA que trabaja durante horas debería guardar un registro de progreso? Heartbeats para evitar el “¿se habrá parado?”
Imagen generada por IA
Publicidad
Publicidad

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:

  1. Está ejecutando una batería enorme de pruebas.
  2. 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:

  • runId
  • state: RUNNING / BLOCKED / COMPLETED / STALE_UNKNOWN, etc.
  • phase: READING / IMPLEMENTING / TESTING / VERIFYING, etc.
  • workingOn
  • startedAt
  • lastHeartbeatAt
  • lastMaterialChangeAt
  • branch / baseSha / headSha / PR
  • completedMilestones / remainingMilestones
  • blockers
  • tests
  • nextCheckpoint

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 / 127 si 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:

  1. registro actual de progreso
  2. Check / Status
  3. actividad de branch / PR
  4. último commit
  5. 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.


Publicidad
Mendoi-chan

Escrito por

Mendoi-chan

Convierte las fricciones del trabajo y la vida diaria en estructuras claras y próximos pasos prácticos.

Acerca del sitio
Publicidad

Artículos recientes

  1. 1¿Los agentes de IA harán innecesarias a las personas? Diseño del entorno, señales de tendencia y una fábrica de medios que “expulsa al jefe”
  2. 2¿Es peligrosa la automatización de artículos con IA? Cómo unir velocidad, evidencia, mejora continua y un sitio propio para crear un medio “vivo”
  3. 3Cómo no desperdiciar los 50 mensajes semanales de ChatGPT Pro|Qué cuenta como un uso, reintentos y envíos accidentales
  4. 4¿Qué calienta el “agua caliente”?
  5. 5Si Shisa se convirtiera en quimera sería devastador. Pero el último capítulo “🍜” parece menos alarmante si miramos los límites, no solo el deseo de hacerse fuerte

También te puede interesar

Publicidad