Cambiando idioma
Carlos José Castro GalanteCarlos José Castro Galante
Carlos José Castro Galante
© 2026
Proyectos
AI

Linkmortem

Agente de código abierto que encuentra los links muertos y las secciones muertas de un sitio web o de la documentación de un repositorio de GitHub, explica por qué murió cada uno, recupera lo que decía la página desde el Internet Archive, busca dónde vive hoy el contenido y escribe un parche solo con los reemplazos que puede probar. El código decide todo lo que puede verificar y Gemma 4, un modelo de pesos abiertos, lee solo las páginas que el código no puede juzgar. Funciona en linkmortem.tech, desde la línea de comandos y como GitHub Action que abre un pull request y mantiene un issue con el reporte, sin mergear nunca por su cuenta. Presentado en el Hacktoberfest Open Source AI Challenge de DEV, donde está contada la historia completa del proyecto.

Linkmortem

Métricas

Modelo
Gemma 4
Links resueltos sin el modelo
90%
Errores costosos del modelo en producción
0
Modelos abiertos comparados
9
Pruebas automatizadas
243
Desafío
Hacktoberfest DEV 2026
Capturas

El problema

La web pierde su memoria. El 38 por ciento de las páginas que existían en 2013 ya no estaba diez años después, y las listas awesome, los README y la documentación se llenan de links que no llevan a ninguna parte. Los verificadores de links comunes solo miran el código de estado, así que dan por viva una página de dominio en venta o una sección que alguien renombró, y no dicen qué decía la página perdida ni dónde está ahora. Arreglarlos a mano exige revisar cada link, buscar una copia archivada y confirmar que el reemplazo es el mismo contenido.

La solución

Linkmortem le hace una autopsia a cada link en seis etapas. Encuentra hasta 150 links, diagnostica cada uno hasta la sección a la que apunta, recupera la última copia sana del Wayback Machine, busca el nuevo hogar del contenido, escribe el parche y preserva los links vivos que nunca se archivaron. El código resuelve códigos de estado, dominios estacionados, verificaciones de bots, anclas de Markdown calculadas como GitHub y mudanzas anunciadas por la propia página archivada. Gemma 4 solo decide si una página que responde está viva y si un candidato es la misma página, y sin evidencia un link nunca se declara muerto. MongoDB Atlas guarda las autopsias compartidas y un cementerio de links resueltos con Vector Search, SerpApi busca en vivo con un presupuesto diario y Sentry traza cada escaneo como un agente.

Stack técnico

Frontend
React · TypeScript · Vite · Tailwind CSS · Three.js
Backend
Python · FastAPI · Pydantic · Gemma 4 · Ollama · Backboard · MongoDB Atlas · SerpApi · Sentry · Docker · Render

Desafíos

  • Descubrir que dos modelos con 0 por ciento de acierto en la primera evaluación nunca habían respondido, porque el proveedor devolvía un error dentro de una respuesta exitosa, y pedir el JSON en el prompt para llevar a Llama de 0 a 93 por ciento

  • Detectar las secciones muertas, la rotura más común de las listas awesome, calculando las anclas de cada Markdown como GitHub, con 427 links a secciones de siete listas y ningún falso fantasma

  • Notar que la copia archivada de Enzyme anunciaba su mudanza mientras la búsqueda fallaba, y leer esos anuncios antes de buscar para encontrar el nuevo hogar sin modelo y sin gastar una búsqueda

  • Diseñar un bot que sabe cuándo callarse, con un solo pull request que se actualiza, reemplazos de links completos que nunca tocan código y ninguna acción sobre ramas o pull requests que una persona tocó

  • Cerrar huecos de seguridad como direcciones con credenciales, puertos inválidos, un límite por cliente que se podía esquivar con un encabezado falso y pedidos sin tamaño máximo

Aprendizajes

  • Que el modelo proponga y el código decida volvió confiable al agente, y casi cada bug terminó moviendo una decisión del modelo al código

  • Un número sin evidencia no vale nada, la evaluación solo fue útil cuando empezó a guardar el motivo de cada respuesta inválida

  • Medir modelos abiertos con casos propios permite elegir por errores costosos y no solo por precisión

  • La honestidad es una función del producto, decir cuánto se revisó y qué no se pudo confirmar importa tanto como encontrar fantasmas

  • Las trazas de un agente cuentan lo que los tests no muestran, de ahí salieron el 0 por ciento falso y un span sin entrada