SwarmUp
Una IA a los mandos de un apagón en cascada
Un agente autónomo que recibe cientos de señales, decide cuáles importan, reparte una flota que nunca alcanza, llama por teléfono a los responsables y replanifica cuando la situación cambia.
Lo construimos en 48 horas sobre calles reales de Getafe. Un operador humano puede intervenir en cualquier momento.
Réplica animada de la interfaz real. Pausa, reinicia o inyecta una avería con los botones de la barra superior. En pantallas estrechas, desliza para verla entera.
Por qué un apagón
HappyRobot proponía inundaciones o incendios. Nos salimos de la lista: el apagón del año pasado lo teníamos muy fresco, y también lo que fallaron los servicios de emergencia.
HackSpain 2026 reunió a 250 desarrolladores y cinco startups en Madrid, organizado por Exponential. Elegimos el reto de HappyRobot: ¿puede una IA gestionar una crisis?
Siempre hay menos unidades que problemas
Es la demanda frente a la flota disponible en cada ejecución. Nunca hay para todos, así que el agente tiene que priorizar y explicar por qué.
Hospital sin luz
Diésel para los generadores
No aguanta más de 8 minutos sin red.
Semáforos apagados
Policía para dirigir el tráfico
Si no, nada de lo que mandamos llega.
Soporte vital en casa
Generador portátil a domicilio
Llama alguien: un familiar depende de una máquina.
Torre de teleco
Generador, ya
Sin baterías, el agente se queda sin teléfono.
Detrás hay dos grafos: uno de topología, con qué hospitales, centrales y torres dependen de cada subestación, y otro de soluciones, con sus reglas y sus pesos. Cada ejecución sortea una crisis distinta a partir de una semilla, así que nada está guionizado.
Dos horas de crisis, comprimidas en minutos
El dashboard en plena crisis: subestaciones que caen, hospitales sin luz y unidades enrutadas por las calles de verdad.

Cómo piensa el agente
Cada tick pasa por tres capas. Lo barato y determinista va primero; el modelo solo entra cuando hace falta pensar.
Reglas, en torno a 1 ms
Detecta
Filtra el ruido y calcula prioridades. Solo despierta al LLM si algo cambia de verdad: un umbral cruzado, una llegada que falla o una llamada rechazada.
LLM, de 8 a 20 s
Decide
Recibe el mundo, las reglas, la topología y los incidentes parecidos. Devuelve un plan estructurado: qué descarta, qué hace y a quién llama.
Reglas duras
Actúa
Las reglas vetan lo que rompe una restricción y le devuelven el motivo al modelo. Lo que pasa el filtro se ejecuta: unidades en marcha y llamadas.
El LLM propone, las reglas mandan.
Nunca se congela
Si el modelo no responde a tiempo, un playbook de contingencia toma el mando y la simulación sigue.
Aprende de cada crisis
Cada incidente resuelto se guarda en Chroma y se recupera en la siguiente deliberación. El agente cita los incidentes pasados que ha usado.
Un humano siempre al lado
Desde la consola, un operador puede inyectar eventos, pausar o corregir el plan en cualquier momento.
Y llama por teléfono de verdad
Las decisiones no se quedan en la pantalla. El agente llama a los responsables con HappyRobot, sin guion fijo, y lo que contestan cambia el plan.
El Bercial está sin red. Enviamos el generador, con llegada en unos cinco minutos. ¿Lo aceptan?
Lo acepto.
¿Cuántos minutos necesitan para activar el respaldo?
Diez.Registrado: 10 min para activar el respaldo
Confirma lo entendido, cuelga, resume la llamada y el resultado vuelve al agente. Si alguien dice «en media hora», entiende 30 minutos.
- El agente lanza la misión por webhook
- HappyRobot llama al contacto y sigue el promptUna cola reparte las llamadas entre un pool de contactos.
- La IA resume la llamada en un JSON
- Se envía a un Cloudflare Worker con Hono y D1Sin nube propia, el Worker hizo de micro backend de eventos.
- El backend lo lee y reaccionaUn no o un retraso disparan una replanificación.
El proveedor que nos indicó la organización no conectaba por SIP. El viernes de madrugada, conectamos un teléfono IP propio, apuntó el SIP trunk a HappyRobot y empezamos a hacer llamadas reales. La ventaja duró hasta que el resto de equipos se topó con lo mismo y la organización habilitó otro proveedor.
Hecho en un fin de semana, con tests
| Frontend | React 19, Vite 8 y MapLibre GL, con unidades enrutadas por calles reales de OpenStreetMap |
|---|---|
| Backend | Express 4 y zod, monorepo TypeScript estricto sobre Node 24 |
| LLM | deepseek-v4-flash vía Helmcode, con el SDK de OpenAI para poder cambiar de modelo |
| Memoria | Chroma, con 72 incidentes curados más el cierre de cada ejecución |
| Telefonía | HappyRobot con cola de llamadas y balanceo por contacto |
| Retorno | Cloudflare Worker con Hono y D1 |
| Calidad | oxlint, 162 tests y CI en GitHub Actions |