Saltar al contenido

Navegante opera programas viejos como lo haría una persona.

Recibe una tarea en lenguaje normal, usa la aplicación a través de la pantalla del computador remoto y devuelve un resumen honesto de lo que hizo. El sistema viejo no necesita tener API.

Soy Nicolás Mojica y estoy construyendo Navegante para el Reto 1. Aquí explico qué hace, cómo lo diseñé, por qué lo considero fiable y cómo se va a medir.

Parte 1 · Documento de diseño · Parte 2 · Diagrama de arquitectura

  • Sin API en el sistema viejo
  • Solo pantalla, mouse y teclado
  • 5 minutos por tarea
  • Termina en terminada o fallida

Frontier BOG/26 · Reto 1 · Nicolás Mojica · 10 de octubre de 2026

El problema

Una distribuidora usa hace 15 años un sistema de gestión sin API, sin documentación y sin proveedor. Todo se hace a mano: clics, formularios, ventanas emergentes y reportes que se exportan uno por uno. Tiene 5 sistemas así. Navegante debe adaptarse a cualquiera de ellos, incluso a uno que nunca ha visto. La evaluación corre sobre una aplicación que no conozco, en un escritorio limpio.

Qué hace que una tarea cuente

Una tarea es correcta solo si se cumple todo a la vez:

  • La app quedó con los cambios esperados.
  • No se hizo nada fuera de la tarea (un cambio de más cuenta como acción destructiva).
  • No hay registros duplicados.
  • El estado final es el esperado (reportar terminada en algo que no quedó bien es un falso éxito).
  • Si es una pregunta, el resumen trae respuesta: <valor> bien formada.
  • Si debía fallar, el resumen nombra los datos que lo explican.
  • Ningún secreto aparece en el resumen.

Cinco riesgos para los que lo diseñé

  1. R1Leer mal un dato
  2. R2Tocar de más
  3. R3Duplicar al reintentar
  4. R4Mal formato de la respuesta
  5. R5Quedarse sin tiempo

Dos puertas

Si los sistemas viejos no tienen API, ¿con quién se conecta Navegante?

  1. Evaluador
  2. API de Navegante
  3. Worker de la tarea
  4. Escritorio remoto con la app vieja Sin API

La API de Navegante (es la mía)

La llama el evaluador por HTTP con un token. Es el contrato que exige el reto.

POST /tasks
Authorization: Bearer <token del equipo>
{
  "tarea": "...",
  "escritorio": {
    "url": "wss://<escritorio>/websockify",
    "password": "<contraseña>"
  }
}
→ { "task_id": "..." }   // en menos de 2 segundos

GET /tasks/{task_id}
→ { "estado": "en_curso" | "terminada" | "fallida",
    "resumen": "..." }

GET /health
→ 200 cuando el agente está listo
Sin API

El sistema viejo (no tiene API)

Navegante lo ve y lo opera como una persona frente a una pantalla, por RFB, el protocolo de VNC: recibe imágenes de la pantalla (1280×800) y envía movimientos de mouse, teclas y portapapeles. El sistema viejo nunca recibe una llamada de API; lo único que “ve” es a alguien usando el mouse y el teclado.

Escritorio de práctica, comprobado hoy: RFB 3.8, único tipo de seguridad contraseña VNC, websocket con subprotocolo binary.

Qué lo hace distinto

Navegante no necesita conocer una aplicación para empezar a resolver tareas en ella.

1.Generaliza

Aprende mientras trabaja un pequeño mapa de navegación: pantalla A → acción → pantalla B → resultado. Si vuelve a una pantalla conocida, reutiliza la ruta; si algo cambió, recalcula. No hay flujos grabados ni scripts por aplicación.

2.Sabe cuándo detenerse

Navegar y leer es libre; escribir solo acepta valores que salen de la tarea; comprometer exige un registro único verificado, y lo decido por efecto, no por etiqueta: cualquier botón que cierre un formulario o envíe datos (Aceptar, Grabar, Enviar, OK, un icono de disquete o su equivalente en inglés) cuenta como compromiso, una sola vez. Si no puedo clasificar un botón, lo trato como compromiso. Ante la duda, reporta fallida con los datos que lo explican.

3.Verifica con evidencia

Hacer clic en Guardar no significa que quedó guardado. Busca una confirmación, un cambio de estado o el registro actualizado, y distingue completado, no verificado y fallido. En cifras, NIT y fechas hago doble lectura con recortes distintos (texto exacto y visión). Si no coinciden, la tarea termina como fallida con ambos valores.

4.Lee exacto

Copia el texto de la pantalla (Ctrl+A, Ctrl+C) para tener letras y números exactos, y el código cuenta, suma y calcula fechas. El modelo no cuenta filas.

Lo que NO hago

  • Scripts por aplicación
  • Leer el DOM o abrir DevTools
  • Agentes de navegación de terceros
  • Dejar que el modelo decida qué cambiar

Cómo funciona

  1. 01

    Conectar

    Entra al escritorio remoto por RFB e identifica qué programa tiene delante.

  2. 02

    Entender

    Convierte la instrucción en un contrato de cambios antes de mirar la app: qué registro, qué valores exactos, qué pregunta y qué acciones de compromiso permito.

  3. 03

    Observar · Actuar

    Mira, decide, hace clic… y vuelve a mirar. Nunca asume que funcionó.

    1. Observar
    2. Decidir
    3. Validar
    4. Actuar
    5. Comprobar
  4. 04

    Verificar

    ¿Filtro correcto? ¿Todas las páginas? ¿Dato guardado? Evidencia antes de responder.

  5. 05

    Reportar

    El código escribe el resumen y borra los secretos, cierra la sesión RFB y no vuelve a actuar. Reloj de 4:30 por tarea. Si en 90 s de exploración no encuentra el camino, reporta fallida con lo que sí vio. Si no pudo verificar, no inventa.

Quién decide qué

El modelo interpreta la pantalla y elige la herramienta; el código decide todo lo que debe ser exacto (tiempos, contrato, fechas, conteos, formato de la respuesta y cuándo se acaba la tarea). El modelo nunca recibe la contraseña ni el token.

En sencillo

Como un mesero nuevo en un restaurante que no conoce. Anota el pedido exacto antes de ir a la mesa, no obedece papeles que aparezcan en la mesa, y si hay dos “Ana” pregunta en vez de adivinar.

Supuestos y cómo los mido

  • S1Bastan píxeles, teclado y mouse. Lo valido con las 5 pruebas de práctica y sus variantes.
  • S2El portapapeles viaja por RFB. Si falla, el modelo lee recortes de pantalla.
  • S3Una tarea cabe en 15 decisiones del modelo o menos. Lo mido.
  • S4Las apps de evaluación tienen menús, listas, formularios y exportes. Nada es específico de SIGECOM.
  • S5Generalizar a apps nunca vistas. Todo lo que he medido es sobre SIGECOM. Antes de la entrega pruebo Navegante en 2 o 3 apps hostiles que armo yo: interfaz en inglés con fechas MM/DD, botones solo con icono, alert() y confirm(), menús de clic derecho, tablas con scroll interno y fuentes pequeñas.

Cada tarea termina en una de tres formas:

  1. Correcta
  2. Fallo honesto (fallida con datos)
  3. Error silencioso

Mi meta es 0 errores silenciosos, también en las apps hostiles. Los aciertos los mido aparte.

Diagrama de arquitectura

  1. 1 Conectar
  2. 2 Contrato
  3. 3 Ciclo
  4. 4 Verificar
  5. 5 Reportar
  • Flujo
  • Consulta (modelo, memoria)
  • ⇄Ida y vuelta (RFB)
  • Sistema viejo sin API

La API de arriba es la de Navegante, la que exige el reto. El sistema viejo no tiene API: solo se ve y se opera por pantalla.

Diagrama de arquitectura · mi diagrama originalAbrir en tamaño completo ↗
Diagrama de arquitectura original de Navegante: Evaluador, API, Worker por tarea con sus cinco pasos, guardas, herramientas, percepción, memoria por app, modelo con visión, cliente RFB y escritorio remoto.