AginxBrowser

Servidor de navegador centrado en agentes: un solo binario de Rust con V8, sin Chromium. 14 herramientas MCP (fetch/search/click/screenshot/download + sesiones persistentes), huellas TLS sigilosas.

Documentación

AginxBrowser

El navegador para agentes de IA. Ve la web en vivo. Interactúa con ella.

skills.sh License MCP Hosted

English | 中文文档

Un navegador construido para agentes desde la primera línea de código — no un navegador humano adaptado a la automatización. Ve el mundo, léelo, búscalo y actúa sobre él: un solo binario de Rust con V8 integrado, sin necesidad de Chromium.

Los humanos tienen Chrome. Los agentes tienen AginxBrowser.

Un binario, cero dependencias, servicio instantáneo. API HTTP + MCP nativo — los agentes se conectan y listo.

Páginas reales renderizadas por el motor diting de AginxBrowser (sin Chromium) — Wikipedia, este repositorio, Rust. Toma una captura tú mismo →

AginxBrowser rendering real pages

Por Qué los Agentes Necesitan Su Propio Navegador

Medido contra Chrome sin interfaz en las mismas 20 páginas, misma red (benchmark, 2026-08-28): 7,6× más rápido para texto utilizable por agentes (p50 532 ms vs 4 053 ms), ~10× menos memoria (227 MB para todo el proceso vs ~2,1 GB por página de Chrome), y 0 fallos graves donde el --dump-dom de Chrome no produjo DOM en 5 de 40 cargas. El costo total de un agente es eficiencia del navegador × eficiencia del modelo — esta es la mitad del navegador.

La "automatización de navegadores" existente fue construida para humanos o para scraping de una sola vez — no para agentes:

AginxBrowserPuppeteer/PlaywrightFirecrawlBrowser-use
Diseñado paraAgentes primeroDepuración humanaServicio de scrapingEnvoltorio LLM
DependenciasBinario único, sin ChromiumChromium ~500MBDocker ~1GBChromium
Ve (capturas)✅ motor de renderizado diting integradoNecesita ChromiumNecesita Chromium
Leemarkdown + js_extractHazlo tú mismomarkdownHazlo tú mismo
Encuentra (búsqueda)✅ metabúsqueda de 6 motores
Actúainteracción de sesión indexadaAPI DevToolsImpulsado por LLM
ProtocoloHTTP + MCP nativoAPI NodeHTTPPython
Huellas TLS✅ Chrome/Firefox/SafariPlugin requerido
Resolución de CAPTCHA✅ automáticaHazlo tú mismo
Sesiones interactivas✅ persistentes

Un agente necesita cinco cosas de un navegador: ver, leer, encontrar, actuar, desplegar. Un solo binario lo cubre todo — compatible con systemd, nativo MCP para Claude/Cursor, cero dependencias.

Ventaja principal: sin Chromium. AginxBrowser incluye un motor de navegador completo (V8 + pila HTTP de Rust + nuestro propio motor de renderizado CSS/diseño/pintura diting, con el linaje Blitz/Stylo/Taffy como implementación de referencia). Sin Puppeteer, sin Chrome, sin Docker. Un binario de Rust bajo systemd es tu infraestructura de navegación para agentes.

Tres Cosas Que los Renderizadores Sin Estado No Pueden Hacer

La mayoría de los "navegadores para agentes" nuevos son renderizadores de una sola vez, sin estado y sin huellas — bien para páginas públicas, muertos al llegar contra Cloudflare o flujos de inicio de sesión. AginxBrowser va en la dirección opuesta:

  • 🔐 Huellas TLS reales — el modo sigiloso replica los apretones de manos TLS completos de Chrome145 / Firefox133 / Safari / Edge mediante BoringSSL (no solo una cadena UA), conmutable por solicitud; los desafíos de Cloudflare Turnstile esperan automáticamente durante cf_clearance. Los motores sin huellas reciben 403 — nosotros pasamos.
  • 🤝 Sesiones interactivas con estado — sesiones persistentes (mantenimiento de 8 minutos en inactividad), estado de inicio de sesión inyectable y exportable (session_create(cookies=...)session_cookies), que sobreviven a la paginación y flujos de varios pasos. Los motores de una sola vez descartan el estado.
  • 🔌 MCP nativo — 16 herramientas como ciudadanos de primera clase (no un shim de CDP). Claude Code / Cursor / Claude Desktop se conectan en una línea. Protocolo dual HTTP + MCP.

Punto de referencia: Kitesurf de Cloudflare explícitamente no incluye ni negociación real de huellas TLS ni sesiones de autenticación persistentes — el territorio anti-bot y de inicio de sesión es exactamente donde AginxBrowser juega.

Apache-2.0 de código abierto, binario único — autoalójalo hoy, sin dependencia de la nube.

Capacidades

  • Renderizado por niveles: páginas estáticas sobre HTTP simple (~100ms); V8 se activa solo cuando se necesita renderizado JS (~1-2s) — el 90% del conjunto de páginas del benchmark se sirve sin activar V8 en absoluto; cada respuesta informa qué nivel la sirvió (campo tier)
  • Metabúsqueda multi-motor: web general (Baidu / Bing / Sogou / WeChat / Google / DuckDuckGo), noticias (Bing News), código (Stack Overflow, GitHub), paquetes (npm, PyPI), académico (arXiv), modelos de IA (Hugging Face) — consultados concurrentemente, fusionados y deduplicados. Los operadores pueden conectar un índice Meilisearch privado al mismo /search. Búsqueda → lectura en un solo paso
  • Búsqueda de imágenes: categories=images consulta los índices de imágenes de Baidu/Bing y devuelve enlaces binarios directos image_url (descargables directamente a jpg/png) además de procedencia source_url
  • Sesiones interactivas: sesiones de navegador persistentes con interacción indexada (state/click/input/scroll/eval) — los agentes navegan como lo hacen los humanos, y session_export convierte lo que un agente descubrió en un script de reproducción curl ejecutable (cero tokens de modelo al re-ejecutar)
  • Resolución automática de CAPTCHA: detección de tipo con integración opcional de 2captcha — la búsqueda nunca se detiene en páginas de verificación
  • Extracción de datos JS: js_extract extrae window.__INITIAL_STATE__ y otros datos estructurados de SPAs
  • Renderizado de capturas: endpoint /screenshot (opt-in --features screenshot) pinta el DOM renderizado por JS con nuestro propio motor de renderizado diting — CPU pura, sin Chromium — a PNG. Entrada visual para agentes
  • Espera automática de Cloudflare: detecta páginas de desafío "Just a moment..." y espera durante cf_clearance
  • Suplantación de huellas TLS: el modo sigiloso imita Chrome145/Firefox133/Safari/Edge, conmutable por solicitud
  • Servidor MCP: el modo --mcp expone 16 herramientas (fetch/eval/click/search/download + 11 herramientas de sesión) — Claude Code / Claude Desktop / Cursor las llaman directamente
  • Compatible con Firecrawl: endpoint /v1/scrape — los clientes existentes de Firecrawl migran cambiando la URL base
  • Protección contra rebinding de DNS: guardia SSRF integrada + validación de IP posterior a la resolución

Para Qué Sirve

No demos — trabajos reales que los navegadores para agentes están haciendo hoy:

  • Avanzar por consolas de administración — AWS / App Store Connect / Google Play, docenas de capas de menú por tarea. Deja que el agente haga clic; vuelve solo cuando se necesita autorización.
  • Acciones por lotes tras el inicio de sesión — llenar carritos, revisar historiales de pedidos, verificar páginas que solo se renderizan con sesión iniciada. Inyecta cookies, opera, exporta para reutilizar.
  • Superar muros anti-bot — protección Cloudflare, desafíos Turnstile, verificaciones de huellas TLS. El modo sigiloso avanza en lugar de retroceder ante un 403.
  • El internet chino — metabúsqueda Baidu / Sogou / WeChat en 5 motores, renderizado correcto de páginas en chino. No solo web en inglés.
  • Scripting sobre la marcha — el agente lee la página, escribe JS, lo evalúa: tablas comparativas resaltadas, contenido reflujado, filtros de producto en parámetros ocultos. GreaseMonkey con esteroides.
  • Visión multimodal — capturas como entrada visual para flujos de mirar-y-juzgar: elegir asientos, reconocer diseños, verificar renderizado.

Inicio Rápido

Prueba primero la instancia alojada: https://browser.aginx.net/

Instalación completa con un comando (superficie de activación SKILL.md + herramientas MCP + verificación):

# Download -> inspect the contents -> run only after review (never blind-run network scripts)
curl -fsSL https://raw.githubusercontent.com/yinnho/aginxbrowser/main/skill.sh -o skill.sh
less skill.sh
bash skill.sh

Registrar solo MCP:

claude mcp add aginxbrowser --transport http https://browser.aginx.net/mcp

Instala la superficie de activación de habilidades vía skills.sh:

npx skills add yinnho/aginxbrowser

Autoalojamiento:

# macOS / Linux via Homebrew
brew install yinnho/aginxbrowser/aginxbrowser
aginxbrowser doctor   # features + fonts + egress self-check

# Docker (Docker Hub, mirrored on GHCR)
docker run -p 8089:8089 yinnho/aginxbrowser:latest
# (or ghcr.io/yinnho/aginxbrowser:latest)

# Or the prebuilt binary (platform detect + sha256 + mirror fallback + doctor self-check)
# Cautious: download -> inspect -> run (never blind-run network scripts)
curl -fsSL https://browser.aginx.net/install.sh -o install.sh
less install.sh && bash install.sh
# Or straight in, if you trust the repo:
#   curl -fsSL https://browser.aginx.net/install.sh | sh
# GitHub slow/blocked? AGINXBROWSER_GH_PROXY=https://ghfast.top/ bash install.sh
aginxbrowser doctor   # features + fonts + egress self-check

# Or build from source (--features stealth,screenshot or you lose both)
cargo build --release --features stealth,screenshot

# Start the service
./target/release/aginxbrowser
# → Listening on 0.0.0.0:8089

# Verify
curl http://127.0.0.1:8089/health
# → {"status":"ok","engine":"diting"}

# Fetch a page
curl -sS -X POST http://127.0.0.1:8089/fetch \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'

# Search
curl -sS -X POST http://127.0.0.1:8089/search \
  -H "Content-Type: application/json" \
  -d '{"q":"macbook price","max_results":5}'

# Create an interactive session
curl -sS -X POST http://127.0.0.1:8089/session/create \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
# → {"session_id":"s_1","url":"https://example.com/"}

# MCP mode (for AI agents)
./target/release/aginxbrowser --mcp

Estructura del Proyecto

aginxbrowser/
├── Cargo.toml
├── build.rs              # V8 snapshot generation
├── js/
│   └── bootstrap.js      # V8 bootstrap script
├── README.md
├── docs/
│   └── API.md            # Full API reference (HTTP + MCP)
├── bench/                # Benchmark harness + results (vs headless Chrome)
│   ├── README.md         #   methodology + numbers
│   ├── pages.txt         #   fixed 20-page set
│   ├── run.py            #   harness
│   ├── summarize.py      #   TSV → results table
│   └── results/          #   raw run data
└── src/
    ├── main.rs              # HTTP service entry & routing
    ├── server.rs            # Business layer (fetch/click/eval/search)
    ├── session.rs           # Interactive browser sessions
    ├── captcha.rs           # CAPTCHA detection & auto-solve
    ├── render.rs            # Tiered rendering (HTTP direct → diting browser engine)
    ├── mcp.rs               # MCP server (16 tools)
    ├── firecrawl_compat.rs  # Firecrawl-compatible /v1/scrape endpoint
    ├── browser.rs           # Top-level API: Browser, BrowserBuilder
    ├── page.rs              # Top-level API: Page, Element
    ├── config.rs            # BrowserConfig
    ├── cookie.rs            # CookieStore
    ├── error.rs             # Error types
    ├── search/              # Native search engines
    │   ├── mod.rs           #   SearchEngine trait, Registry, merge/dedupe, progressive backoff
    │   ├── baidu.rs         #   Baidu (JSON API, wreq stealth)
    │   ├── baidu_images.rs  #   Baidu Images (acjson API, images category)
    │   ├── bing.rs          #   Bing (HTML parsing, plain reqwest)
    │   ├── bing_images.rs   #   Bing Images (images/async endpoint, images category)
    │   ├── sogou.rs         #   Sogou web (HTML parsing, plain reqwest)
    │   ├── sogou_wechat.rs  #   Sogou WeChat (HTML parsing + /link resolution)
    │   ├── duckduckgo.rs    #   DuckDuckGo (html.duckduckgo.com, general; direct-first)
    │   ├── google.rs        #   Google (HTML parsing, wreq stealth + proxy)
    │   ├── stackexchange.rs #   Stack Overflow (SE API v2.3, code category)
    │   ├── github_repos.rs  #   GitHub repos (api.github.com, code category)
    │   ├── arxiv.rs         #   arXiv (Atom API, academic category)
    │   ├── bing_news.rs     #   Bing News RSS (news category; proxy-first)
    │   ├── huggingface.rs   #   HF Hub models/datasets/spaces (ai category)
    │   ├── npm.rs           #   npm packages (npms.io API, packages category)
    │   ├── pypi.rs          #   PyPI name resolution (JSON API, packages)
    │   └── meilisearch.rs   #   Private-index adapter (env-configured)
    │
    ├── diting_dom/          # HTML parsing, DOM tree, CSS selectors
    ├── diting_net/          # HTTP client, cookies, encoding, proxies
    ├── diting_js/           # V8 runtime, JS ops, module loading
    └── diting_browser/      # Page navigation, lifecycle, browser context

Compilación

# Standard build (no stealth; TLS fingerprint features inactive)
cargo build --release

# With stealth (requires go + cmake + C++ toolchain; enables TLS fingerprint spoofing)
cargo build --release --features stealth

# With screenshot rendering (enables /screenshot; adds the rendering stack, +30-40MB)
cargo build --release --features screenshot

# Full featured (recommended for production)
cargo build --release --features stealth,screenshot

Requisitos: Rust 1.78+; la biblioteca estática de V8 se descarga automáticamente en la primera compilación. La función sigilosa además necesita go, cmake y un compilador de C++. La función de capturas incluye un subconjunto de fuentes CJK empaquetado (GB2312 + símbolos comunes) — no se requieren fuentes del sistema para un renderizado correcto en chino.

Variables de Entorno en Tiempo de Ejecución

VariablePredeterminadoDescripción
AGINXBROWSER_BIND0.0.0.0:8089Dirección de escucha
AGINXBROWSER_STEALTHhabilitado0 deshabilita el modo sigiloso (para diagnósticos)
AGINXBROWSER_UALinux Chrome145User-Agent suplantado
AGINXBROWSER_ACCEPT_LANGUAGEzh-CN,zh;q=0.9,en;q=0.8Cabecera Accept-Language
AGINXBROWSER_PROXYningunoProxy de respaldo opcional. Los motores con fuentes bloqueadas (Google, Bing News, Hugging Face) se conectan directamente primero y recurren a este proxy solo cuando el intento directo falla — los despliegues en el extranjero no necesitan proxy en absoluto; el use_proxy:true por solicitud también enruta fetch/search a través de él
AGINXBROWSER_NAV_CHAIN_LIMIT10Límite de cadena de navegación JS: documentos que una página puede encadenar vía location/saltos de formulario antes de que la navegación se aborte. El conteo incluye el documento solicitado (10 = documento inicial + 9 saltos). Auméntalo para cadenas largas legítimas (traspaso SSO entre proveedores); las redirecciones HTTP 3xx se presupuestan por separado (20, según la especificación Fetch / paridad de navegador)
AGINXBROWSER_CACHE_TTL_SECS600TTL de caché /fetch, 0 lo deshabilita
AGINXBROWSER_IGNORE_ROBOTSsin establecerrobots.txt se respeta por defecto en /fetch, /screenshot, /download y herramientas MCP; establece 1 para omitir verificaciones (opt-out del operador)
AGINXBROWSER_ROBOTS_TTL_SECS3600TTL de caché de política robots.txt por host
AGINXBROWSER_MCP_ALLOWED_HOSTSsin establecerValores Host adicionales aceptados por /mcp (separados por comas) — el guardia de rebinding de DNS del transporte usa loopback por defecto, así que agrega tu IP LAN o nombre de host Docker cuando otras máquinas llamen a la instancia
CAPTCHA_SOLVER_API_KEYningunoClave API de 2captcha; habilita la resolución automática de CAPTCHA
CAPTCHA_SOLVER_SERVICE2captchaProveedor de resolución de CAPTCHA
AGINXBROWSER_MEILI_URLningunoURL base de Meilisearch; establece para habilitar el motor de índice privado
AGINXBROWSER_MEILI_INDEXningunoUID del índice Meilisearch a consultar
AGINXBROWSER_MEILI_KEYningunoClave Bearer opcional para la instancia de Meilisearch

Documentación de la API

Referencia completa de la APIdocs/API.md Notas de auditoría de seguridaddocs/skills-sh-audit.md — por qué skills.sh muestra "Riesgo Crítico", y a qué característica real del producto corresponde cada advertencia

Cubre:

  • Todos los endpoints HTTP (/fetch, /click, /eval, /search, /v1/scrape, 10 endpoints de sesión)
  • Las 15 herramientas del servidor MCP y sus parámetros
  • Configuración de clientes Claude Code / Claude Desktop / Cursor
  • Variables de entorno, códigos de error, ejemplos de scraping por sitio

Integración con Otros Sistemas

AginxBrowser es infraestructura pura de adjuntar-al-lado — como un navegador real, se ejecuta como un servicio independiente que cualquier cosa puede llamar, sin incrustar código del host ni contaminar la configuración del host. Despliega una instancia por máquina (bajo systemd) y cada aplicación que necesite capacidad de "renderizar + extraer" la comparte.

Integración: lee la variable de entorno AGINXBROWSER_URL=http://127.0.0.1:8089. Sin establecer → comportamiento sin cambios; establecida → los sitios con riesgo controlado se enrutan automáticamente a través de AginxBrowser para renderizado, con respaldo elegante ante fallos.

Limitaciones Conocidas

  1. Las capturas de pantalla son opcionales: /screenshot requiere cargo build --release --features screenshot (añade el stack de renderizado, +30-40MB). El motor de renderizado predeterminado es diting (nuestro propio stack de CSS+layout+pintura); pasa engine: "blitz" para volver al pipeline de referencia Blitz. El CSS de sitios complejos es aproximado en ambos (no es pixel-perfect como Chromium).
  2. Coordenadas de elementos compatibles: /screenshot con selector devuelve las coordenadas de página del elemento (selector_rects, px CSS); selector solo recorta directamente a ese elemento. Los elementos en línea (<a>text</a>) también obtienen un rect en el motor diting predeterminado — una unión de su contenido en línea aplanado, expandido con strut al propio line-height del elemento, como Chrome informa para inlines solo-reemplazados (<a><img></a> → altura de línea-box, no la altura de la imagen). Los inlines vacíos aún no tienen rect — elige un ancestro de bloque en ese caso.
  3. La interacción con JS funciona en general; las páginas con huellas pesadas pueden fallar: La delegación de eventos de React/Vue funciona normalmente (los atributos de reflexión de URL como src/href se resuelven a URLs absolutas para que Next.js/webpack hidraten y los clics disparen handlers). Las páginas de autenticación con huellas pesadas (WorkOS/Cloudflare) que sondean navigator.plugins, canvas WebGL, etc., pueden fallar hasta que se complete la cobertura de huellas sigilosas.
  4. Soporte de proxy: HTTP/HTTPS/SOCKS5 vía AGINXBROWSER_PROXY.
  5. Sitios con control de riesgo estricto: Baidu Wenku no compatible; los artículos de Zhihu necesitan un __zse_ck válido.

Licencia

Consistente con el proyecto principal de OpenCarrier. Apache-2.0.