MadoHub Docs

Detección de agentes

Cómo MadoHub identifica qué agente de IA está en ejecución y rastrea su estado.

MadoHub monitorea la salida del terminal en tiempo real para detectar qué agente de IA está en ejecución y en qué estado se encuentra. Esto alimenta los indicadores visuales en las barras de título de los tiles y activa las conexiones de enrutamiento.

Agentes admitidos

Claude Code

Se detecta mediante marcadores Unicode en la salida del terminal:

MarcadorSignificado
❯ (U+2770)Prompt de Claude Code
✽ (U+273D)Pensando / indicador giratorio
⏺ (U+23FA)Indicador de uso de herramientas

También coincide con la cadena literal "Claude Code" en la salida.

OpenAI Codex CLI

Se detecta mediante estos patrones:

  • OpenAI Codex — Línea de marca
  • codex> — Prompt de la TUI
  • openai/codex — Referencia del paquete
  • codex v[0-9] — Cadena de versión
  • > _ OpenAI Codex — Banner de inicio
  • codex --dangerously — Flag de bypass de sandbox (sin distinción de mayúsculas/minúsculas)
  • codex ... fast — Invocación de modelo rápido (sin distinción de mayúsculas/minúsculas)
  • gpt-[0-9.]+ x?high — Información del modelo

Amp y OpenCode

Amp y OpenCode también se reconocen como tipos de agente, pero no a través del detector de texto de terminal del frontend descrito arriba — ese detector solo clasifica Claude Code, Codex y shell genérico. Las sesiones de Amp y OpenCode se identifican por separado, mediante un escaneo del árbol de procesos en el backend que recorre los procesos descendientes del terminal buscando sus ejecutables.

Shell genérico

Si no se detectan marcadores de agente, el terminal se trata como una sesión de shell estándar.

Estados del agente

MadoHub rastrea siete estados para cada terminal:

EstadoDetecciónVisual
Working"esc to interrupt" en la barra de estado, o ✽/⏺ con puntos suspensivosBorde verde pulsante
Idle"? for shortcuts" en la barra de estadoSin indicador
WaitingDiálogos "Allow once" / "Allow always" / "Deny" / "Do you want to proceed?" / "(y/n)" / "requires approval"Borde naranja
StoppedPalabra clave de finalización detectada mediante lectura del terminal (ambiguo — la tarea puede haber terminado con éxito o no)Indicador rojo
CompletedFinalización exitosa confirmada, obtenida del log de sesión JSONL/DB del propio agente (p. ej. task_complete de Codex)Indicador verde
FailedFallo confirmado, obtenido del log de sesión JSONL/DB del propio agente (p. ej. turn_aborted / error de Codex)Indicador rojo
ExitedEl proceso PTY subyacente ya no existe (estado terminal)Indicador gris/atenuado

Cada estado lleva una etiqueta stateSource, ya sea pty-scrape o jsonl-watcher, de modo que la UI (y cualquier lógica de enrutamiento) pueda distinguir una suposición obtenida en vivo mediante lectura del terminal de un veredicto confirmado leyendo la transcripción de sesión del propio agente. "Stopped" siempre es pty-scrape y es inherentemente ambiguo; "Completed" y "Failed" provienen de jsonl-watcher y se tratan como autoritativos.

Detección de finalización

MadoHub detecta cuándo un agente termina una tarea haciendo coincidir una forma, no una lista fija de palabras: un glifo de spinner al inicio de línea, seguido de un verbo en participio pasado con mayúscula inicial, seguido de " for " y una duración.

El patrón regex:

/(?:^\s*[✶✽✳✢·∗*]\s*([A-Z][a-zé]+(?:ed|t))|\b(Saut[ée]*d|Cogitated))\s+for\s+(?:\d+\s*[hm]\s*)*\d+\s*[hms]\b/

Claude Code rota el verbo entre versiones (Worked, Churned, Sautéed, Cogitated, entre otros), así que el verbo en sí deliberadamente no se enumera — la coincidencia se basa en la forma en su lugar. Una coincidencia real se ve así:

✽ Worked for 2m 30s

El ancla del glifo al inicio de línea (uno de ✶✽✳✢·∗*) es lo que evita falsos positivos con prosa ordinaria como "Retried for 3s". Sautéed y Cogitated sobreviven en el patrón únicamente como un fallback heredado sin glifo, para salidas de CLI más antiguas anteriores al formato anclado por glifo.

Cuando se detecta una finalización, el estado del agente cambia a "stopped" y cualquier disparador de enrutamiento conectado puede activarse.

On this page