Cómo darle un navegador a tu agente de IA sin cargar Chromium

Obscura es un navegador headless escrito en Rust que trae su propio servidor MCP: tu agente de IA navega, toma capturas y ejecuta JavaScript sin Chromium, con unos 30 MB de memoria en lugar de más de 200 MB, según las mediciones del propio proyecto. Es Apache 2.0, se distribuye como un binario único y sigue en la versión 0.1.x.

Ese último dato importa tanto como el primero, y casi toda la cobertura lo pasó por alto.

¿Qué es Obscura y qué reemplaza?

Obscura no es un envoltorio sobre Chrome. Es un motor de navegador construido desde cero en Rust que ejecuta JavaScript real a través de V8 e implementa suficiente del Chrome DevTools Protocol como para que los clientes de automatización que ya usas se conecten sin cambiar una línea de código.

Lo que reemplaza es la parte de tu stack que probablemente nunca elegiste de forma deliberada: los varios cientos de megabytes de Chromium que npm install puppeteer arrastra consigo. Si corres un scraper en una máquina, ese costo es invisible. Si corres cincuenta contenedores, o si estás construyendo un agente de IA que necesita mirar una página, deja de serlo.

El proyecto tiene 26.3k estrellas y 1.9k forks al momento de escribir esta nota.

¿Cómo se instala?

Descarga del binario, según el README del repositorio:

# Linux x86_64
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz

# macOS Apple Silicon
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-macos.tar.gz
tar xzf obscura-aarch64-macos.tar.gz

Docker:

docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura

Desde el código fuente, con Rust 1.75 o superior:

git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura
cargo build --release -p obscura-cli --bins --features render

Un primer comando para confirmar que quedó funcionando:

obscura fetch https://example.com --eval "document.title"

¿Cómo conectas tu agente de IA?

Esta es la mitad más interesante del proyecto. Obscura incluye un servidor MCP:

obscura mcp
obscura mcp --http --port 8080

Según el README, expone navegación, capturas de pantalla, salida en PDF, interacción con elementos y evaluación de JavaScript como herramientas MCP. Tu agente obtiene un navegador sin que tengas que escribir un puente en Puppeteer para unir las dos piezas. Si vienes construyendo agentes que necesitan leer páginas, esto elimina una pieza móvil del diseño.

¿Funciona igual con Puppeteer y con Playwright?

Sí, y es la parte que decide si la herramienta vale tu tarde. Levanta el servidor CDP:

obscura serve --port 9222

Conecta con puppeteer-core — atención: puppeteer-core, no puppeteer, precisamente porque ya no quieres el navegador que viene incluido en el paquete:

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser',
});

const page = await browser.newPage();
await page.goto('https://news.ycombinator.com');

Playwright se conecta sobre CDP:

import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP({
  endpointURL: 'ws://127.0.0.1:9222',
});

Para trabajo por lotes, la CLI maneja la concurrencia sin necesidad de librería cliente:

obscura scrape url1 url2 url3 --concurrency 25 --eval "document.title"

¿Cuánta memoria ahorras realmente?

Estas son las cifras publicadas por el propio proyecto, no benchmarks verificados de forma independiente:

Métrica Obscura Chrome headless
Memoria 30 MB 200+ MB
Tamaño del binario 70 MB 300+ MB
Carga de página 85 ms ~500 ms
Arranque Instantáneo ~2 s

Tómalas como una afirmación de magnitud más que como una medición precisa: los benchmarks de un proyecto los elige ese proyecto. La dirección sí es creíble: un motor hecho a propósito en Rust, que no carga el sistema de extensiones de Chrome, ni su arquitectura de sandbox, ni su capa de interfaz, debería ser mucho más liviano. Si tus páginas llegan a esos 30 MB depende de lo que hagan tus páginas.

Donde la proporción importa de verdad es en densidad. A aproximadamente un séptimo de la memoria, una máquina que corría siete instancias concurrentes de Chrome corre bastantes más, y ese es el argumento real de la herramienta, más que la velocidad bruta.

¿Qué es el modo stealth y cuándo conviene no usarlo?

Obscura incluye funciones anti-detección, expuestas con la bandera --stealth en fetch, serve y mcp. La versión v0.1.9 la hizo global en todos los subcomandos, y el proyecto reporta que creepjs registra 0% de detección frente a ella — de nuevo, un dato auto-reportado.

Vale la pena tener claro para qué sirve esto. La detección de bots también bloquea credential stuffing y scraping que los sitios rechazaron de forma explícita, y una herramienta que la evade no distingue entre tu uso y el de cualquier otro. Evadir la detección no cambia los términos de servicio de un sitio, y en varias jurisdicciones tampoco cambia la ley. Si estás haciendo scraping de tus propias propiedades, probando tu propio stack de detección o extrayendo datos públicos que el sitio permite, esto es una comodidad. Si estás recurriendo a esta bandera porque algo te bloqueó, el bloqueo era la respuesta.

¿Está listo para producción?

Aquí conviene bajar la velocidad. Obscura tiene 26.3k estrellas y 1.9k forks. Al momento de publicar esta nota, en septiembre de 2026, su versión más reciente es la v0.1.10, publicada el 11 de julio de 2026.

Piensa en esos dos datos juntos. Veintiséis mil estrellas es el perfil de una infraestructura de la que la gente depende; 0.1.10 es el número de versión de un software que todavía está decidiendo qué es.

El historial de versiones es honesto sobre esa brecha. La v0.1.10 menciona que los inputs controlados de React y Vue “ahora funcionan de principio a fin” y que las páginas pesadas “ya no crashean ni se quedan colgadas”, lo que te dice que hasta hace poco sí lo hacían. La v0.1.7 agregó un watchdog de V8 para scripts descontrolados. Varias versiones citan avances en conformidad con WPT, y avances implica brecha: este motor todavía no implementa todo lo que se espera de un navegador.

Nada de eso es una crítica al proyecto, que avanza rápido y documenta sus asperezas con honestidad. Es una advertencia sobre la frase “reemplazo directo”, que está cargando mucho peso. Un reemplazo directo de Chrome tiene que renderizar lo que Chrome renderiza, y un motor hecho desde cero en v0.1.x va a tener páginas donde no lo logre. No vas a descubrir cuáles leyendo el README. Las vas a descubrir en tus propios objetivos.

La lectura práctica: córrelo contra los sitios que realmente necesitas, compara la salida con tu stack actual y mantén el camino anterior hasta que la comparación deje de sorprenderte.

¿Obscura o Chrome headless?

Usa Obscura si tu cuello de botella es densidad o footprint: muchas sesiones concurrentes, contenedores ajustados, un agente que necesita un navegador sin depender de Chromium, o CI donde un binario de 70 MB le gana a uno de 300 MB. El argumento de eficiencia es real y es la razón para mirarlo.

Quédate en Chrome headless si necesitas fidelidad de renderizado que no puedes verificar personalmente, si dependes de comportamiento específico de Chrome, o si una diferencia silenciosa en lo que renderiza una página te costaría más de lo que ahorras en memoria. Eso describe a la mayor parte del scraping en producción hoy.

Y si lo que buscas es no administrar el navegador en absoluto, hay un tercer camino: exponerlo como servicio. Lo cubrimos cuando Cloudflare convirtió un Chrome headless en un endpoint HTTP, en Browser Run.

El resumen honesto es que este es un motor prometedor y de movimiento rápido, en un número de versión temprano, y que la brecha entre 26.3k estrellas y la v0.1.10 es más ancha de lo habitual. Vale la pena seguirlo de cerca y probarlo con cuidado; no vale la pena meterlo en un pipeline un viernes.