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.

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
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