En esta página
El 20 de agosto de 2026 publicamos cuatro parches en un solo día — v5.0.1, v5.0.2, v5.0.3 y v5.0.4 — cerrando 34 defectos. Ninguno vino de un informe de bug. Todos salieron de una idea más simple: ejecutar las 27 herramientas MCP y cada subcomando de la CLI contra sitios web reales y en vivo, y juzgar el contenido que devuelven — no el código de salida.
v5.0.0 endureció el código desde dentro: una remediación de siete fases impulsada por una auditoría interna completa. Pero una auditoría lee código. No puede decirte que el layout de GitHub sin sesión dejó de servir el markup que tu plantilla espera, que el paquete upstream de tu motor stealth se rompió en silencio, o que tu agente de investigación descarga exactamente la página correcta y luego afirma que no puede acceder a internet. Eso solo lo cuenta el tráfico real.
Así que eso fue lo que ejecutamos — tres rondas completas, arreglando todo lo que encontraba cada ronda antes de lanzar la siguiente.
Tabla de contenidos
- Qué incluye v5.0.1 a v5.0.4
- Cómo probamos en vivo un servidor MCP
- v5.0.1: 13 arreglos, uno de ellos crítico
- v5.0.2: calidad de contenido sobre markup real
- v5.0.3: 15 arreglos y un motor stealth reparado
- v5.0.4: la herramienta agent por fin responde
- ¿Qué modelo local debería usar agent?
- ¿Tengo que cambiar algo?
- Cómo actualizar
- Qué viene a continuación
Qué incluye v5.0.1 a v5.0.4
| Versión | Origen | Arreglos | Titular |
|---|---|---|---|
| v5.0.1 | Ronda 1 de pruebas en vivo | 13 | Inanición del event loop en crawl_deep arreglada; track/monitor de la CLI funcionan entre invocaciones |
| v5.0.2 | Ronda 1 (aplazados) | 4 | Extracción de entidades, selectores de precio, inventario de llms.txt, plantilla de GitHub |
| v5.0.3 | Ronda 2 de pruebas en vivo | 15 | Calidad de respuestas de agent, motor Camoufox reparado, monitores persisten en cualquier directorio |
| v5.0.4 | Ronda 3 de pruebas en vivo | 2 | Síntesis de agent verificada de extremo a extremo, resolución de claves en la CLI |
La suite unitaria creció de 914 a 980 tests a lo largo de las cuatro versiones — cada defecto recibió un test de regresión antes de publicar su arreglo — y el cumplimiento del protocolo MCP se mantuvo al 100% todo el tiempo. Ningún esquema de herramienta, forma de salida ni coste en credits cambió. Las cuatro son actualizaciones directas.
Cómo probamos en vivo un servidor MCP
Cada ronda es una pasada de superficie completa: las 27 herramientas invocadas sobre MCP stdio, y cada subcomando de la CLI ejecutado en una shell real, contra sitios web reales en producción — portadas de noticias, catálogos de e-commerce, repositorios de GitHub, sitios de documentación. Después, un flujo de agentes en paralelo juzga lo que volvió. ¿El markdown está limpio o es texto soldado? ¿Las entidades extraídas son reales? ¿La respuesta nombra lo que hay en la página ahora mismo?
Esa última pregunta es la clave. Un HTTP 200 con una salida de aspecto plausible es la forma más fácil de que una herramienta de web scraping esté equivocada, y es invisible tanto para los tests unitarios como para las auditorías de código. Todos los fallos de abajo pasaron la CI. Varios la habían pasado durante varias versiones.
v5.0.1: 13 arreglos, uno de ellos crítico
El crítico: crawl_deep podía dejar sin recursos al servidor entero. Por cada enlace de una página, el crawler BFS re-parseaba el HTML completo de la página — O(enlaces × tamaño de página) de CPU síncrona. En páginas densas en enlaces, el proceso clavaba un núcleo durante más de 13 minutos con varios gigabytes de memoria mientras el event loop de Node.js sufría inanición: todas las llamadas MCP concurrentes se colgaban, y ni siquiera el apagado ordenado podía ejecutarse. Ahora la página se parsea una vez y se reutiliza para todos los enlaces.
También en crawl_deep: las tareas concurrentes de la cola podían pasar todas la comprobación de max_pages antes de que ninguna se registrara, dejando que el crawl superara el límite. Ahora el límite es exacto.
El resto de la primera ronda, en rápido:
serp_rankya no tira búsquedas pagadas. DataForSEO emitesnippet: nullen los resultados orgánicos sin descripción; el esquema de salida exigía un string y descartaba una respuesta ya facturada. Ahora es nullable.generate_llms_txtrespetaanalysisOptions.maxPagesymaxDepth. Los límites nunca llegaban al analizador.- La CLI
stealthfallaba en cada invocación por defecto —--enginetenía como valor por defectoplaywright, un valor que el enum dejó de aceptar en v4.0.0. El valor por defecto ahora eschromium, conplaywrightcomo alias. - La CLI
trackpor fin puede comparar entre invocaciones. Las líneas base vivían solo en la memoria del proceso, así que un proceso CLI nuevo (o un servidor MCP reiniciado) no tenía contra qué comparar. Ahora se rehidratan desde el snapshot persistido más reciente — arreglando de paso un bug latente desde v4.8.0 en el que los snapshots guardados volvían como Buffers y una comprobación de tipo string los rechazaba en silencio. monitor:stopno decía la verdad sobre nada. Informabastopped: falsecuando tenía éxito, y los ids desconocidos eran un no-op silencioso. Ambas rutas cargan ahora el almacén primero e informan resultados reales.crawlforge inittenía dos bugs de configuración. Las máquinas de creador ya no necesitan una API key para generar la config. Y la entrada MCP generada invocabanpx -y crawlforge@latest— un paquete que no existe. El paquete publicado escrawlforge-mcp-server, así que toda config generada por init estaba rota hasta editarla a mano. Arreglado; la config apunta ahora acrawlforge-mcp-server@latest.- Los snapshots de cambios guardaban basura. Cada cambio detectado escribía un snapshot vacío, porque los registros de cambio llevan análisis de diff, no contenido. Ahora solo se guarda contenido real, y la rehidratación se salta los vacíos, de modo que los almacenes contaminados también se recuperan.
Una nota de entorno si te autoalojas: stealth_mode, scrape_with_actions y el formato screenshot de scrape necesitan los navegadores de Playwright instalados — npx playwright install chromium.
v5.0.2: calidad de contenido sobre markup real
La primera ronda también marcó cuatro herramientas que tenían éxito devolviendo contenido degradado. Las cuatro eran problemas de markup en sitios reales:
analyze_contentsiempre devolvía cero entidades. El analizador llamaba a un método NLP que requiere un plugin que nunca instalamos; el throw abortaba toda la extracción y un catch silencioso devolvía vacíos — aunque la extracción de personas, lugares y organizaciones funcionaba bien por debajo. Las fechas usan ahora el matching de etiquetas de la librería base, y "Apple and Microsoft announced record earnings in California" produce las entidades que esperarías.extract_structuredomitía precios en silencio. El selector literal.priceno puede casar con clases comoprice_color. La tabla semántica incluye ahora[itemprop="price"]y[class*="price"].generate_llms_txtno producía inventario de páginas. El matching por subcadena clasificaba "S-api-ens" como enlace de API, y un solo falso positivo suprimía todo el fallback de sitemap. La detección de APIs usa ahora límites de palabra, y el listado## Pagessiempre se muestra para sitios sin categorizar.scrape_templatedevolvía watchers null y topics vacíos en GitHub. El layout React de GitHub sin sesión eliminó el markup que los selectores buscaban. Los selectores nuevos leen el layout actual, con los del layout clásico como fallback.
v5.0.3: 15 arreglos y un motor stealth reparado
La segunda ronda fue más profunda y encontró quince más, tres de ellos estructurales:
La herramienta agent dejó de fabricar respuestas. Filtrado de líneas de preámbulo, un presupuesto de contexto de síntesis por fuente con orden por relevancia, reglas explícitas anti-fabricación y la garantía de que los sitios nombrados en tu prompt se descargan primero.
El motor Camoufox llevaba roto en silencio desde v5.0.0. El punto de entrada ESM de Camoufox es un bundle de esbuild roto, así que cargarlo simplemente fallaba — lo que también desactivaba el fallback anti-bot de deep_research sin ningún error visible. El arreglo lo carga vía CJS, usa la API real Camoufox() y crea contextos con viewport: null para sortear una incompatibilidad de protocolo entre playwright-core y Firefox.
Los monitores programados persisten ahora en ~/.crawlforge/monitors. Antes escribían en un directorio ./monitors relativo a donde arrancara el proceso, así que monitor:list, monitor:stop y el flujo de cron solo funcionaban desde ese directorio exacto. Los almacenes antiguos migran automáticamente.
Los doce restantes fueron arreglos de calidad de contenido por toda la superficie: similitud de track_changes acotada a [0,1] con estadísticas de línea base reales, el markdown de batch_scrape conservando el contenido de span y small, extract_text eliminando bloques noscript, fechas francesas formateadas DD/MM/YYYY en localization, resúmenes extractivos que incluyen la primera frase, analyze_content devolviendo topics reales, scrape_with_actions respetando las coordenadas de scroll e informando scrolledTo, títulos de página reales en los enlaces de llms.txt, y más — unos 50 tests de regresión nuevos solo en esta versión.
v5.0.4: la herramienta agent por fin responde
A la tercera ronda le quedaba un defecto duro, y fue el bug más interesante del día.
La herramienta agent descargaba exactamente la página correcta — HTTP 200, evidencia registrada — y luego respondía "I'm unable to access the internet". Tres causas acopladas, cada una verificada como insuficiente de arreglar por sí sola:
- El aplanado de texto destruía la estructura. El texto de la página se colapsaba con una regex de espacios que soldaba elementos de bloque adyacentes en un solo string: una lista rankeada se convertía en "1.Story title329 points". El nuevo aplanador marca los límites de los elementos de bloque antes de colapsar, de modo que cada fila de tabla y cada elemento de lista sobrevive como su propia línea.
- El orden de las fuentes ignoraba tu intención. Las fuentes de síntesis se ordenaban solo por solapamiento de términos con el prompt, así que un artículo genérico que contuviera las palabras de la tarea podía superar al sitio que el prompt nombraba explícitamente. Las URLs semilla y los sitios nombrados en el prompt llevan ahora un impulso de prioridad fijo por encima de cualquier puntuación de solapamiento.
- Los modelos locales pequeños rechazaban entradas perfectamente buenas. El prompt de síntesis ahora deja claro que las fuentes ya fueron descargadas y prohíbe negarse por falta de capacidad de navegación.
Con las tres en su sitio, el agente — ejecutándose en vivo sobre MCP stdio — nombra la historia #1 real y actual de Hacker News. Ese es el listón de extremo a extremo que toda versión futura tiene que superar.
v5.0.4 también arregla que la CLI search ignorara la API key guardada por crawlforge setup: la clave se leía del entorno en tiempo de import, antes de que corriera el hook de resolución de claves de la CLI. Ahora se resuelve en el momento de la llamada.
¿Qué modelo local debería usar agent?
Un hallazgo del trabajo de síntesis merece acción si ejecutas la herramienta agent con modelos locales de Ollama. En el prompt real de síntesis multi-fuente de ~13KB, llama3.2 — el valor por defecto del código — sigue fallando donde qwen2.5:3b (el mismo tamaño 3B), mistral:7b y gemma3:12b aciertan todos.
El valor por defecto sigue siendo llama3.2 por compatibilidad con el ecosistema, pero si las respuestas del agente se degradan en local, cambia:
export OLLAMA_DEFAULT_MODEL=qwen2.5:3b¿Tengo que cambiar algo?
No. Las cuatro versiones son parches: ningún esquema de herramienta, forma de salida ni coste en credits cambió, el número de herramientas sigue en 27 y los precios no se tocan. El mínimo de Node.js de >= 20.16.0 de v5.0.0 sigue aplicando.
Una excepción: si alguna vez ejecutaste crawlforge init antes de v5.0.1 y la config de tu cliente MCP invoca crawlforge@latest, esa entrada nunca funcionó — vuelve a ejecutar crawlforge init o apúntala a crawlforge-mcp-server@latest.
Cómo actualizar
npm install -g crawlforge-mcp-server@latestUsuarios nuevos:
npm install -g crawlforge-mcp-server
npx crawlforge initSi ya usas un cliente MCP, basta con forzar una reconexión /mcp. El registro completo defecto a defecto de las cuatro versiones está en el changelog y en la página de releases.
Qué viene a continuación
Las pruebas en vivo de superficie completa son ahora parte de la puerta de publicación, no un evento puntual: toda versión futura recibe una ejecución en vivo de las 27 herramientas contra sitios reales antes de salir. Las líneas aplazadas de v5.0.0 — un endpoint remoto alojado con OAuth, monitorización programada como servicio, sesiones persistentes — siguen en cola detrás.
Y la invitación permanente sigue en pie: si una herramienta devuelve contenido que no coincide con lo que hay realmente en la página, ese es exactamente el bug del que queremos oír.
¿Listo para probarlo? Empieza gratis con 1.000 credits — y luego ejecuta npx crawlforge init para registrar el servidor MCP. Consulta la documentación completa o el post de la versión v5.0.0 para conocer la base sobre la que se construyen estas versiones.
Pruébalo tú mismo — sin necesidad de registrarte
Ejecuta cualquiera de las 28 herramientas de scraping y extracción de CrawlForge en el playground y luego empieza gratis con 1,000 credits.
1,000 credits gratis • Por única vez • No se requiere tarjeta de crédito
Etiquetas
Sobre el autor
Mantente al día con los últimos artículos
Recibe tutoriales, novedades del producto y consejos de web scraping en tu bandeja de entrada.
Sin spam. Cancela tu suscripción cuando quieras.