Guardian es un proceso liviano de Node.js que corre al lado de tu agente. No tiene IA, usa cero tokens, y tiene un solo trabajo: mantener al agente online y dejarte administrarlo desde el chat.

Qué vigila

Cada 30 segundos, Guardian:

  • Corre tmux capture-pane -p sobre la sesión del agente
  • Escanea el output capturado buscando patrones de error (API Error:, Overloaded, Could not process, etc.)
  • Busca mensajes entrantes marcados con ← discord, ← telegram, etc. para saber que el agente está recibiendo tráfico
  • Chequea indicadores de "trabajando" (Baked, Crunching, marcadores de tool-use) para distinguir atascado de idle

Si la sesión está muerta, reinicia. Si los errores se acumulan y no está pasando trabajo, marca el agente como atascado y reinicia tras un check fallido adicional.

Política de reinicios

  • Máximo 3 reinicios por cada 30 minutos. Pasado eso, Guardian deja de intentar y te pagea por tu canal.
  • Cada reinicio se loguea en ~/workspace/memory/guardian.log y el estado se escribe en /tmp/sento-guardian-<agent>.json.
  • En un reinicio limpio, Guardian manda una notificación ✅: "el agente está online de nuevo."

Alerta por canal

Guardian detecta qué canal usa tu agente (Discord, Telegram o Slack), lee el bot token del .env del plugin, y usa la API correspondiente para mandarte un mensaje directo:

  • Discord: webhook si hay configurado, si no Bot API al canal monitor
  • Telegram: sendMessage a tu chat monitor
  • Slack: chat.postMessage a tu canal monitor

Comandos interactivos desde el chat

Guardian también chequea el canal monitor por mensajes del usuario, así podés administrar el agente sin SSH:

  • restart — Guardian detiene y reinicia el agente, resetea el contador
  • logs — tira las últimas 15 líneas del output de tmux al canal
  • status — imprime un resumen de salud (vivo / atascado / contador de reinicios / estado)

Por qué no tiene IA

Porque cualquier cosa con IA puede fallar. El punto entero del Guardian es ser lo que sigue vivo cuando el agente no lo está. Node.js, regex, tmux capture-pane. Ese es el stack completo.

Archivos para conocer

  • src/templates/guardian.js en el repo de Sentō — el template del Guardian (se renderiza por agente)
  • ~/workspace/memory/guardian.log — log del Guardian
  • /tmp/sento-guardian-<agent>.json — estado persistente (lista de reinicios, flag de estado)
  • ~/.claude/channels/<canal>/.env — leído por Guardian al arrancar para agarrar el token

Cómo arranca y persiste

  • Al instalar: sento init arranca el Guardian vía nohup node guardian.js & y agrega una línea de cron @reboot para que vuelva al rebootear.
  • Al rebootear: la entrada de cron re-ejecuta el script de inicio, Guardian lanza, agente lanza.
  • Sin systemd, sin launchd por defecto — nohup + tmux + cron es el patrón confiable más simple entre distros y contenedores.