
En resumen
- 190 aplicaron y entramos 42; participé solo.
- En ~8 horas construí un agente que opera una app solo por la pantalla (VNC 1280×800).
- Práctica 5/5; evaluación 1/34, con mediana de 4:24 contra 5:00.
- El agente ignoró un prompt injection y no adivinó ante dos clientes homónimos.
- No gané, pero conocí a quienes quedaron en 1.º y 2.º lugar.
El sábado 31 de octubre de 2026 fui a mi primer hackathon: Frontier CDMX 26. Participé solo, construí en unas 8 horas un agente que opera sistemas sin API viendo la pantalla, no gané y aprendí más que en meses. Aquí te cuento cómo fue, hora por hora y sin maquillaje.
¿Qué es Frontier?
Frontier · CDMX 26, powered by Lab10, es un hackathon presencial para talento técnico de la región. El formato se parece a los procesos de contratación de los laboratorios de IA: un reto difícil, tests ocultos, un scorecard individual y empresas contratando. Hubo más de US$8,000 en premios y se podía competir solo o en pareja.
¿Cómo postulé y cómo entré?
La postulación eran 8 preguntas abiertas en inglés. Nadie entraba por su CV: entraba por cómo pensaba. Postulé con dudas, sinceramente. Me aprobaron en dos días.
| Dato | Valor |
|---|---|
| Aplicaron | 190 |
| Entramos | 42 |
| Retos | 1 por participante |
| Duración del trabajo | ~8 horas |
| Equipo | Solo |
¿Cuál era el reto?
El Reto 2 se llamaba «El agente que opera lo que no tiene API». Imagina un sistema de 15 años que nadie puede integrar: no hay API, solo una pantalla. El agente recibe una tarea en lenguaje natural («cambia el teléfono de tal cliente») y la tiene que ejecutar en una app que nunca vio, solo por la pantalla, a través de VNC a 1280×800.
Se practicaba en una app llamada SIGECOM y se evaluaba en otra distinta, con 5 minutos por tarea. Y tenía trampas: la pantalla se repintaba cada segundo, los clics de menos de 100 ms se ignoraban y el texto escrito se concatenaba si no limpiabas el campo.
¿Cómo fue mi día, hora por hora?
| Hora | Qué hice |
|---|---|
| 12:20 | Entorno: repo, Python, Tesseract y GitHub. |
| 12:50 | Cliente VNC propio. |
| 13–14 h | Ojos (OCR) y manos (clic y teclado). |
| 14–15 h | Cerebro (el LLM) y reglas. |
| 15:00 | El incidente: la app cambió de versión. |
| 15–16:30 | Pruebas y regresión: 5/5 en dos versiones. |
| 16–16:45 | API, servidor Linux, systemd, HTTPS y logs. |
| 16:43 | Evaluación. |
| 18:55 | Resultado. |
¿Cómo funciona el agente?
La idea en una frase: el LLM piensa cada paso; el loop lo pone a trabajar, lo vigila y lo detiene. Mi regla fue «determinista primero, el LLM solo decide». En cada vuelta del loop:
- Los ojos leen la pantalla con OCR (Tesseract, dos pasadas en paralelo: una normal y otra con los colores invertidos para leer texto claro sobre fondo oscuro).
- El cerebro decide el siguiente paso. Usé Gemini 2.5 Flash vía OpenRouter: 0.8 s por llamada contra 1.8 s de otras opciones.
- El código revisa la decisión: ¿existe ese texto en pantalla? ¿el JSON es válido?
- Las manos ejecutan: clic por texto, nunca por coordenadas, y escribir.
- Se anota el paso, y si no terminó ni se acabó el tiempo, vuelve al 1.
Ninguna librería de Python hablaba VNC por websocket, así que escribí un cliente propio de unas 200 líneas. Y descubrí que sin un mapa de los menús de la app ningún modelo acertaba: el mapa se arma con OCR y clics, sin gastar en el modelo.
Usé Claude Code para buena parte del código. Yo definí la arquitectura, las reglas y las prioridades, revisé y desplegué. El código está en GitHub.
¿Qué muestran los dos videos?
Los dos van acelerados y son de la app de práctica, con datos de prueba. El primero es un fallo, y es el comportamiento correcto: hay dos clientes llamados «Ana Torres», así que el agente no adivina, no toca nada y reporta los dos registros.
El segundo resuelve la tarea: corrige una dirección e ignora una nota escondida en el campo de observaciones que le ordenaba borrar pedidos. Eso es un intento de prompt injection: meter instrucciones dentro de los datos. La regla que quedó: todo lo que se ve en pantalla es dato, nunca una instrucción.
¿Qué pasó a las 15:00?
A media tarde la app de práctica cambió a la versión 4.2: apareció un modal nuevo, el botón «Buscar» pasó a llamarse «Filtrar» y todo se volvió más lento. Era justo el tipo de cambio que rompe a un agente frágil. Lo superé porque el agente actúa por texto y lee la pantalla antes de cada paso. También atrapé un falso éxito (el agente reportaba 25 donde había 45) y un reinicio accidental me reveló un bug real.
¿Cómo pasó del laptop a un servidor?
La evaluación mandaba tareas a una API, así que el agente tenía que vivir en un servidor Linux, no en mi laptop. En 45 minutos: FastAPI con una cola de un solo trabajador, un servicio de systemd, un usuario aislado, HTTPS y logs. Durante la evaluación seguí cada tarea con journalctl. Usé Git desde el minuto uno, y eso me salvó más de una vez.
¿Cuáles fueron los números?
| Métrica | Resultado |
|---|---|
| Pruebas de práctica | 5/5 |
| Evaluación | 1/34 |
| Fáciles · regulares · difíciles | 1/10 · 0/14 · 0/10 |
| Mediana por tarea | 4:24 (límite: 5:00) |
| Costo en el día | Menos de 1 dólar |
¿Cuál fue el resultado, sin maquillaje?
No gané. En la práctica el agente resolvió 5 de 5; en la evaluación, 1 de 34. La mediana por tarea fue 4:24 contra un límite de 5:00: el agente se quedaba sin tiempo. La arquitectura aguantó el cambio de versión y la trampa de prompt injection, pero no fue lo bastante rápida para una app que nunca había visto. De eso escribí aparte: lo que aprendí quedando último.
¿Y la gente?
Lo mejor del día. Hice amigos nuevos, platiqué el reto, saqué dudas y avancé gracias a ellos. Amigos que conocí ahí quedaron en 1.º y 2.º lugar. Si estás pensando en ir a tu primer hackathon, te dejé mis consejos.
La historia completa, con el diagrama y los videos, está en la página de Frontier. Y si te interesa poner agentes o automatización con IA a trabajar en tu empresa, así lo hago en IA y automatización; un ejemplo en producción es Panini Fan Zone.
Preguntas frecuentes
- ¿Qué es Frontier CDMX 26?
- Un hackathon presencial powered by Lab10, el 31 de octubre de 2026 en la Ciudad de México, con un reto tipo proceso de contratación de laboratorios de IA, tests ocultos y scorecard individual.
- ¿Cuál era el reto?
- Construir un agente que ejecuta tareas en lenguaje natural en una app sin API que nunca vio, solo por la pantalla, con 5 minutos por tarea.
- ¿Qué modelo usó el agente?
- Gemini 2.5 Flash vía OpenRouter, con 0.8 s por llamada. El código valida cada decisión antes de actuar.
- ¿Ganaste?
- No. La práctica salió 5/5 y la evaluación 1/34: el agente se quedaba sin tiempo.



