Las señales de completado de Claude Code siguen cambiando. Así es como vamos siguiéndolas
Por qué la coincidencia de palabras clave sobre el banner de completado de Claude Code seguía rompiéndose, y en qué confía realmente MadoHub para saber cuando el turno de un agente terminó.
MadoHub necesita saber el instante en que un agente termina un turno — ese es el borde que dispara el enrutamiento, cambia un tile de trabajando a done, y le dice a un agente conectado que es seguro recoger la salida. Durante un tiempo, nuestra respuesta a "cómo sabemos que Claude Code terminó" fue una coincidencia literal de cadena. Funcionó, hasta que Claude Code lanzó una release con una palabra distinta, y dejó de funcionar. Esta es la historia de qué lo reemplazó, y por qué el reemplazo ni siquiera es la verdadera solución.
El problema o la idea
La lista de palabras que caducó con horario
Claude Code imprime un banner de una línea cuando termina un turno: algo como ✽ Worked for 2m 30s. La primera versión de nuestro detector coincidía con dos verbos específicos de ese banner — Sautéed y Cogitated — porque esas eran las palabras que Claude Code resultaba imprimir en aquel momento. La detección era una comprobación de palabra clave: ver la palabra, arrancar el temporizador de inactividad, disparar la ruta.
Eso aguantó exactamente mientras Claude Code siguió usando esas dos palabras. Ya no. El verbo se saca de un conjunto rotatorio y caprichoso — Worked, Churned, Sautéed, Cogitated, y otros — que cambia entre releases, aparentemente como un toque de personalidad del CLI. Cada vez que la lista de palabras cambiaba, nuestra coincidencia de palabra clave dejaba de dispararse en silencio, y cada tile que la usaba dejaba de detectar completados hasta que alguien se daba cuenta y añadía la palabra nueva.
Perseguir un objetivo en movimiento enumerándolo es un juego que se pierde. La solución fue dejar de importar qué palabra es.
Casar la forma, no la palabra
Cada banner de completado tiene la misma estructura independientemente del verbo que salga esta semana: un glifo de spinner al inicio de la línea, un verbo en pasado capitalizado, el literal for, y una duración. Cualquier verbo que salga en la próxima release, mientras encaje en esa forma, la detección sigue funcionando sin un cambio de código. El requisito del glifo importa porque la salida del terminal está llena de prosa que encaja con "verbo + for + duración" sin que el turno haya terminado — un bucle de reintento imprimiendo Retried for 3s, un paso de build registrando Waited for 5s. Requerir el glifo al inicio de la línea elimina esas coincidencias falsas.
Cómo lo gestiona MadoHub
La coincidencia del banner es aceleración, no el veredicto
Esta coincidencia de banner no es la forma principal en que MadoHub decide que un agente de Claude Code terminó — es aceleración. La señal autoritativa viene de un watcher del backend que lee la propia transcripción de sesión de Claude Code directamente: mira el último mensaje escrito al log, y si es un mensaje de asistente sin llamada a herramienta pendiente, el agente terminó; si es un mensaje de usuario, un mensaje de progreso o un mensaje de asistente a mitad de llamada a herramienta, el agente sigue trabajando. Ese veredicto se etiqueta para que el resto de la app pueda distinguir un hecho respaldado por transcripción de una suposición por raspado de pantalla.
La coincidencia del banner existe solo para recortar latencia de ese watcher para el caso común en el que estás mirando el terminal y quieres que el tile cambie en el momento en que aparece el banner, en lugar de esperar a que el watcher se ponga al día.
Por qué una coincidencia perdida no importa, pero una falsa sí
Ante la elección entre una coincidencia demasiado estricta y otra demasiado floja, MadoHub se inclina por lo estricto — un trade-off deliberado que vale la pena detallar. Una coincidencia de banner perdida es inofensiva: el watcher sigue reportando la parada real poco después. Una coincidencia falsa de banner no es inofensiva, porque puede disparar enrutamiento a un tile a mitad de turno. Así que MadoHub corre defensa en profundidad por encima de la coincidencia de pantalla: si un veredicto de "done" con fuente en pantalla aparece mientras un veredicto en vivo del watcher dice que el agente sigue trabajando, MadoHub descarta el veredicto de pantalla en lugar de actuar sobre él — la palabra del watcher sobre el completado es definitiva.
Guía práctica
- Si estás vigilando un tile de Claude Code y quieres predecir cuándo se disparará una ruta, no memorices el verbo de esta semana. Será otro distinto en unas cuantas releases. Aprende la forma en su lugar: glifo, verbo en pasado capitalizado,
for, duración, todo en una línea. Esa es la parte de la señal que Claude Code no va a dejar de imprimir, incluso mientras sigue cambiando la palabra que va en medio. - Si el estado de un tile alguna vez parece equivocarse, confía en el watcher, no en la pantalla. MadoHub lo hace — la transcripción es la señal en la que realmente confía, y la coincidencia del banner solo está para hacer el caso común más ágil. Si ves un tile cambiar a "done" y luego volver, eso es el watcher corrigiendo una coincidencia de banner demasiado entusiasta, no un bug.
- No escribas tu propio enrutamiento que dependa de un verbo específico. Si estás construyendo Flows o conexiones que se basan en completados de Claude Code, apóyate en el estado de MadoHub (working / done / failed) en lugar de casar tú el texto del banner — si no, la próxima release de Claude Code romperá tu setup en silencio igual que rompió nuestro primer detector.
- Espera un breve retraso, no cambios instantáneos, cuando el camino del watcher está ocupado. La coincidencia del banner hace el caso común instantáneo, pero en una máquina ocupada el watcher es el respaldo que siempre es correcto, y puede tardar un momento. Un segundo o dos de retraso es normal; un tile que nunca cambia no lo es.
Esto sustituye la versión resumida de este consejo de nuestro post de tips de Claude Code — aquel te aconsejaba vigilar la forma y pasar a otra cosa; este es la explicación completa de por qué esa forma es lo correcto a vigilar, y por qué, debajo, la transcripción de sesión es la señal en la que MadoHub realmente confía.