AginxBrowser
Servidor de navegador agente-first: um único binário Rust com V8, sem Chromium. 14 ferramentas MCP (fetch/search/click/screenshot/download + sessões persistentes), impressões digitais TLS furtivas.
Documentação
AginxBrowser
O navegador para Agentes de IA. Veja a web ao vivo. Interaja com ela.
Um navegador construído para agentes desde a primeira linha de código — não um navegador humano adaptado para automação. Veja o mundo, leia-o, pesquise-o e aja sobre ele: um único binário Rust com V8 embutido, sem necessidade de Chromium.
Humanos têm Chrome. Agentes têm AginxBrowser.
Um binário, zero dependências, serviço instantâneo. API HTTP + MCP nativo — agentes conectam e funcionam.
Páginas reais renderizadas pelo mecanismo diting do AginxBrowser (sem Chromium) — Wikipedia, este repositório, Rust. Tire um screenshot você mesmo →

Por que Agentes Precisam de Seu Próprio Navegador
Medido contra Chrome headless nas mesmas 20 páginas, mesma rede (benchmark, 2026-08-28): 7,6× mais rápido para texto utilizável por agente (p50 532 ms vs 4 053 ms), ~10× menos memória (227 MB para o processo inteiro vs ~2,1 GB por página do Chrome) e 0 falhas graves onde o --dump-dom do Chrome não produziu DOM em 5 de 40 carregamentos. O custo total de um agente é eficiência do navegador × eficiência do modelo — esta é a metade do navegador.
A "automação de navegador" existente foi construída para humanos ou para raspagem de uma única execução — não para agentes:
| AginxBrowser | Puppeteer/Playwright | Firecrawl | Browser-use | |
|---|---|---|---|---|
| Projetado para | Agentes primeiro | Depuração humana | Serviço de raspagem | Wrapper de LLM |
| Dependências | Binário único, sem Chromium | Chromium ~500MB | Docker ~1GB | Chromium |
| Vê (screenshots) | ✅ mecanismo de renderização diting embutido | Precisa de Chromium | ❌ | Precisa de Chromium |
| Lê | markdown + js_extract | Faça você mesmo | markdown | Faça você mesmo |
| Encontra (busca) | ✅ meta-busca de 5 mecanismos | ❌ | ❌ | ❌ |
| Age | interação de sessão indexada | API DevTools | ❌ | Dirigido por LLM |
| Protocolo | HTTP + MCP nativo | API Node | HTTP | Python |
| Impressões digitais TLS | ✅ Chrome/Firefox/Safari | Plugin necessário | ❌ | ❌ |
| Resolução de CAPTCHA | ✅ automática | Faça você mesmo | ❌ | ❌ |
| Sessões interativas | ✅ persistentes | ✅ | ❌ | ✅ |
Um agente precisa de cinco coisas de um navegador: ver, ler, encontrar, agir, implantar. Um único binário cobre todas — amigável ao systemd, nativo MCP para Claude/Cursor, zero dependências.
Vantagem principal: sem Chromium. O AginxBrowser incorpora um mecanismo de navegador completo (V8 + pilha HTTP Rust + nosso próprio mecanismo de renderização CSS/layout/pintura diting, com a linhagem Blitz/Stylo/Taffy como implementação de referência). Sem Puppeteer, sem Chrome, sem Docker. Um binário Rust sob systemd é sua infraestrutura de navegação para agentes.
Três Coisas que Renderizadores Sem Estado Não Conseguem Fazer
A maioria dos novos "navegadores para agentes" são renderizadores de uma única execução, sem estado e sem impressão digital — bons para páginas públicas, mortos à chegada contra Cloudflare ou fluxos de login. O AginxBrowser vai na direção oposta:
- 🔐 Impressões digitais TLS reais — o modo furtivo replica os handshakes TLS completos do Chrome145 / Firefox133 / Safari / Edge via BoringSSL (não apenas uma string de UA), alternável por requisição; desafios Cloudflare Turnstile aguardam automaticamente por
cf_clearance. Mecanismos sem impressão digital recebem 403s — nós passamos. - 🤝 Sessões interativas com estado — sessões persistentes (keep-alive de 8 minutos ocioso), estado de login injetável e exportável (
session_create(cookies=...)↔session_cookies), sobrevivendo à paginação e fluxos de múltiplas etapas. Mecanismos de uma única execução descartam o estado. - 🔌 MCP nativo — 15 ferramentas como cidadãos de primeira classe (não um shim de CDP). Claude Code / Cursor / Claude Desktop conectam em uma linha. Protocolo duplo HTTP + MCP.
Ponto de referência: o Kitesurf da Cloudflare explicitamente não oferece negociação de impressão digital TLS real nem sessões de autenticação persistentes — território anti-bot e de login é exatamente onde o AginxBrowser atua.
Código aberto Apache-2.0, binário único — auto-hospedado hoje, sem dependência de nuvem.
Capacidades
- Renderização em camadas: páginas estáticas via HTTP simples (~100ms); V8 inicia apenas quando a renderização JS é necessária (~1-2s) — 90% do conjunto de páginas do benchmark servido sem iniciar o V8; cada resposta informa qual camada a serviu (campo
tier) - Meta-busca multi-mecanismo: web geral (Baidu / Bing / Sogou / WeChat / Google), notícias (Bing News), código (Stack Overflow, GitHub), pacotes (npm, PyPI), acadêmico (arXiv), modelos de IA (Hugging Face) — consultados simultaneamente, mesclados e deduplicados. Operadores podem conectar um índice Meilisearch privado ao mesmo
/search. Busca → leitura em uma única etapa - Busca de imagens:
categories=imagesacessa os índices de imagens do Baidu/Bing e retorna links binários diretos deimage_url(baixáveis diretamente para jpg/png) além de proveniênciasource_url - Sessões interativas: sessões de navegador persistentes com interação indexada (
state/click/input/scroll/eval) — agentes navegam como humanos - Resolução automática de CAPTCHA: detecção de tipo com integração opcional com 2captcha — a busca nunca para em páginas de verificação
- Extração de dados JS:
js_extractextraiwindow.__INITIAL_STATE__e outros dados estruturados de SPAs - Renderização de screenshots: endpoint
/screenshot(opt-in--features screenshot) pinta o DOM renderizado por JS com nosso próprio mecanismo de renderização diting — CPU pura, sem Chromium — para PNG. Entrada visual para agentes - Espera automática Cloudflare: detecta páginas de desafio "Just a moment..." e aguarda
cf_clearance - Spoofing de impressão digital TLS: o modo furtivo imita Chrome145/Firefox133/Safari/Edge, alternável por requisição
- Servidor MCP: o modo
--mcpexpõe 15 ferramentas (fetch/eval/click/search/download + 10 ferramentas de sessão) — Claude Code / Claude Desktop / Cursor as chamam diretamente - Compatível com Firecrawl: endpoint
/v1/scrape— clientes Firecrawl existentes migram alterando a URL base - Proteção contra rebinding de DNS: guarda SSRF embutida + validação de IP pós-resolução
Para Que Serve
Não demonstrações — trabalhos reais que navegadores para agentes fazem hoje:
- Atravessar consoles administrativos — AWS / App Store Connect / Google Play, dezenas de camadas de menu por tarefa. Deixe o agente clicar; ele volta apenas quando autorização é necessária.
- Ações em lote atrás de login — preencher carrinhos, vasculhar histórico de pedidos, verificar páginas que só renderizam logado. Injetar cookies, operar, exportar para reutilização.
- Atravessar muros anti-bot — proteção Cloudflare, desafios Turnstile, verificações de impressão digital TLS. O modo furtivo avança em vez de recuar no 403.
- A internet chinesa — meta-busca Baidu / Sogou / WeChat em 5 mecanismos, renderização correta de páginas chinesas. Não apenas web em inglês.
- Scripts no momento — o agente lê a página, escreve JS, executa: tabelas de comparação destacadas, conteúdo refluído, filtros de produto em parâmetros ocultos. GreaseMonkey turbinado.
- Visão multimodal — screenshots como entrada visual para fluxos de olhar-e-julgar: escolher assentos, reconhecer layouts, verificar renderização.
Início Rápido
Experimente a instância hospedada primeiro: https://browser.aginx.net/
Instalação completa em um comando (superfície de gatilho SKILL.md + ferramentas MCP + verificação):
# 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 apenas MCP:
claude mcp add aginxbrowser --transport http https://browser.aginx.net/mcp
Instalar a superfície de gatilho da skill via skills.sh:
npx skills add yinnho/aginxbrowser
Auto-hospedagem:
# 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
Estrutura do Projeto
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 (15 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)
│ ├── bing.rs # Bing (HTML parsing, plain reqwest)
│ ├── sogou.rs # Sogou web (HTML parsing, plain reqwest)
│ ├── sogou_wechat.rs # Sogou WeChat (HTML parsing + /link resolution)
│ ├── 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
Build
# 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+; a biblioteca estática V8 é baixada automaticamente no primeiro build. O recurso furtivo adicionalmente precisa de go, cmake e um compilador C++. O recurso de screenshot acompanha um subconjunto de fontes CJK empacotado (GB2312 + símbolos comuns) — sem necessidade de fontes do sistema para renderização correta de chinês.
Variáveis de Ambiente em Tempo de Execução
| Variável | Padrão | Descrição |
|---|---|---|
AGINXBROWSER_BIND | 0.0.0.0:8089 | Endereço de escuta |
AGINXBROWSER_STEALTH | habilitado | 0 desabilita o modo furtivo (para diagnósticos) |
AGINXBROWSER_UA | Linux Chrome145 | User-Agent falsificado |
AGINXBROWSER_ACCEPT_LANGUAGE | zh-CN,zh;q=0.9,en;q=0.8 | Cabeçalho Accept-Language |
AGINXBROWSER_PROXY | nenhum | Proxy de fallback opcional. Mecanismos com fonte bloqueada (Google, Bing News, Hugging Face) conectam diretamente primeiro e caem para este proxy apenas quando a tentativa direta falha — implantações no exterior não precisam de proxy algum; use_proxy:true por requisição também roteia fetch/search através dele |
AGINXBROWSER_CACHE_TTL_SECS | 600 | TTL do cache /fetch, 0 desabilita |
AGINXBROWSER_IGNORE_ROBOTS | não definido | robots.txt é respeitado por padrão em /fetch, /screenshot, /download e ferramentas MCP; defina 1 para pular verificações (opt-out do operador) |
AGINXBROWSER_ROBOTS_TTL_SECS | 3600 | TTL do cache de política robots.txt por host |
AGINXBROWSER_MCP_ALLOWED_HOSTS | não definido | Valores extras de Host aceitos por /mcp (separados por vírgula) — o guarda de rebinding de DNS do transporte usa loopback por padrão, então adicione seu IP de LAN ou hostname Docker quando outras máquinas chamarem a instância |
CAPTCHA_SOLVER_API_KEY | nenhum | Chave de API 2captcha; habilita resolução automática de CAPTCHA |
CAPTCHA_SOLVER_SERVICE | 2captcha | Provedor de resolução de CAPTCHA |
AGINXBROWSER_MEILI_URL | nenhum | URL base do Meilisearch; defina para habilitar o mecanismo de índice privado |
AGINXBROWSER_MEILI_INDEX | nenhum | UID do índice Meilisearch a consultar |
AGINXBROWSER_MEILI_KEY | nenhum | Chave Bearer opcional para a instância Meilisearch |
Documentação da API
Referência completa da API → docs/API.md
Notas de auditoria de segurança → docs/skills-sh-audit.md — por que skills.sh mostra "Risco Crítico" e a qual recurso real do produto cada aviso corresponde
Cobre:
- Todos os endpoints HTTP (
/fetch,/click,/eval,/search,/v1/scrape, 9 endpoints de sessão) - Todas as 15 ferramentas do servidor MCP e seus parâmetros
- Configuração de clientes Claude Code / Claude Desktop / Cursor
- Variáveis de ambiente, códigos de erro, exemplos de raspagem por site
Integração com Outros Sistemas
AginxBrowser é infraestrutura puramente anexável — como um navegador real, ele roda como um serviço independente que qualquer coisa pode chamar, sem incorporar código do host ou poluir a configuração do host. Implante uma instância por máquina (sob systemd) e todo aplicativo que precise de capacidade "renderizar + raspar" a compartilha.
Integração: leia a variável de ambiente AGINXBROWSER_URL=http://127.0.0.1:8089. Não definida → comportamento inalterado; definida → sites com risco controlado roteiam automaticamente através do AginxBrowser para renderização, com fallback gracioso em caso de falha.
Limitações Conhecidas
- Screenshots são opt-in:
/screenshotrequercargo build --release --features screenshot(adiciona a pilha de renderização, +30-40MB). O mecanismo de renderização padrão é diting (nossa própria pilha CSS+layout+pintura); passeengine: "blitz"para optar de volta ao pipeline de referência Blitz. O CSS de sites complexos é aproximado em ambos (não pixel-perfect como Chromium) - Coordenadas de elementos suportadas (nível de bloco):
/screenshotcomselectorretorna coordenadas de página do elemento (selector_rects, px CSS);selectorsozinho recorta diretamente para esse elemento. Elementos inline puros (<a>text</a>) não têm caixa independente — escolha um ancestral de bloco - Interação JS funciona amplamente; páginas com impressão digital pesada podem ainda falhar: delegação de eventos React/Vue funciona normalmente (atributos de reflexão de URL como
src/hrefresolvem para URLs absolutas para que Next.js/webpack hidratem e cliques disparem handlers). Páginas de autenticação com impressão digital pesada (WorkOS/Cloudflare) que sondamnavigator.plugins, canvas WebGL etc. podem ainda quebrar até a cobertura de impressão digital furtiva ser concluída - Suporte a proxy: HTTP/HTTPS/SOCKS5 via
AGINXBROWSER_PROXY - Sites com risco controlado difícil: Baidu Wenku não suportado; artigos Zhihu precisam de um
__zse_ckválido
Licença
Consistente com o projeto principal OpenCarrier. Apache-2.0.