Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
grubcrawler — El rastreador agéntico más rápido del mundo. Recuperado. Reinventado. Listo para la guerra. | Kitploit
Herramientas/GitHubGitHub/deepbluedynamics/grubcrawler
OSINT (Inteligencia de Fuentes Abiertas)ReconocimientoAnálisis Dinámico (Sandboxing)Proxies Web e InterceptaciónRecopilación de InformaciónSeguridad WebPruebas de PenetraciónUtilidades y FrameworksAprendizaje AutomáticoRed TeamingCrawlerAnti-Bot
347hace 20 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
GitHubdeepbluedynamics/grubcrawler

grubcrawler

El rastreador agéntico más rápido del mundo. Recuperado. Reinventado. Listo para la guerra.

Ver RepositorioSitio web
Compartir
Grub Crawler

License Python FastAPI Playwright MCP Ghost Protocol Live Stream Camoufox Proxy


Rastreador web agéntico con anti-detección, respaldo por visión y malla peer-to-peer.


Endpoints · Mesh · Anti-Detección · Protocolo Ghost · Transmisión en vivo · Herramientas MCP · Inicio rápido · Benchmarks · Arquitectura


Motor de rastreo web full-stack con renderizado de JavaScript, navegador anti-detección Camoufox, enrutamiento de proxy por solicitud y bucles de agente autónomos. Convierte páginas a markdown limpio con un motor de extracción nativo en Rust. Cuando el rastreo estándar es bloqueado por Cloudflare, CAPTCHAs o muros de JavaScript, el Protocolo Ghost captura una captura de pantalla y extrae el contenido mediante IA de visión (Claude, GPT-4o u Ollama). Soporta orquestación de LLM multi-proveedor en OpenAI, Anthropic y Ollama en una sola sesión. Los nodos se coordinan sobre una malla peer-to-peer basada en gossip para rastreo distribuido.


Por qué Grub

Integramos funciones de todos los rastreadores principales y luego añadimos lo que ninguno tiene.

Rastreadores auto-alojados

Rastreadores en la nube / gestionados

Solo Grub tiene el Protocolo Ghost: respaldo automático basado en visión que captura páginas bloqueadas y extrae contenido mediante LLM cuando el rastreo estándar falla. La prevención (Camoufox + proxy + stealth) maneja el 95% de los bloqueos. El Protocolo Ghost maneja el resto.

Endpoints de API

Rastreo principal

Agente (Modo B)

Gestión de trabajos

Caché remota

Gestión de sesiones

Transmisión en vivo

Mesh

Sistema

Herramientas MCP (grub-crawl.py)

El puente MCP expone todas las capacidades a cualquier host compatible con MCP:

Módulos internos

Núcleo del agente (app/agent/)

Adaptadores de proveedor (app/agent/providers/)

Compuertas de políticas (app/policy/)

Observabilidad (app/observability/)

Capa de API

Anti-Detección (app/)

ArchivoPropósitoEstado
stealth.pyParches playwright-stealth, bloqueo de dominios de rastreadoresCompletado
proxy.pyResolución de proxy por solicitud con respaldo de variables de entornoCompletado

Mesh (app/mesh/)

Infraestructura

Máquina de estados del agente```

INIT -> PLAN -> EXECUTE_TOOL -> OBSERVE -> PLAN -> ... -> RESPOND -> STOP | | +-- policy_denied ---------------------->+ +-- max_steps / max_wall_time / max_failures -> STOP +-- no_op_loop (3x empty) ------------> STOP +-- blocked (ghost trigger) -----------> GHOST -> OBSERVE

root@kitploit:~
Condiciones de detención aplicadas en cada iteración:
- `max_steps` (por defecto: 12)
- `max_wall_time` (por defecto: 90s)
- `max_failures` (por defecto: 3)
- `no_op_loop` (3 respuestas vacías consecutivas)
- `policy_denied` (dominio/herramienta bloqueados)
- `completed` (el agente responde con texto)

## Anti-Detección

Tres capas de anti-detección que se apilan entre sí. La prevención detiene los bloqueos antes de que ocurran. Ghost Protocol se encarga de ellos después.

### Motor Camoufox

Navegador anti-detección conectable con suplantación de huellas digitales a nivel de C++. Sin trucos manuales de user-agent: Camoufox genera huellas digitales realistas por contexto a nivel del navegador, incluyendo canvas, WebGL, fuentes y propiedades del navigator.```bash
# Switch engine (default: chromium)
BROWSER_ENGINE=camoufox

Proxy por solicitud

Enruta el tráfico de rastreo a través de pools de proxies residenciales, de centro de datos o personalizados. Anulación por solicitud con valores predeterminados basados en variables de entorno. Configuración de proxy totalmente compatible con Playwright.```bash

Env-based default

PROXY_SERVER=http://proxy.example.com:10001 PROXY_USERNAME=your_username PROXY_PASSWORD=your_password

Or per-request

curl -X POST http://localhost:6792/api/crawl
-H "Content-Type: application/json"
-d '{ "url": "https://example.com", "options": { "proxy": { "server": "http://proxy.example.com:10001", "username": "your_username", "password": "your_password" } } }'

root@kitploit:~
### Modo sigiloso

Parches opcionales (opt-in) de `playwright-stealth` para Chromium (se omiten para Camoufox, donde están integrados). Bloquea más de 20 dominios de seguimiento/análisis (Google Analytics, DataDome, PerimeterX, etc.) para reducir la superficie de huella digital.```bash
STEALTH_ENABLED=true
BLOCK_TRACKING_DOMAINS=true

Protocolo fantasma

Cuando un resultado de rastreo indica un bloqueo anti-bot (desafío de Cloudflare, CAPTCHA, shell vacío de SPA), el agente puede cambiar al modo camuflaje:

  1. Tomar una captura de pantalla de página completa mediante Playwright
  2. Enviar la imagen a un LLM con capacidad de visión (Claude Sonnet o GPT-4o)
  3. Extraer el contenido de los píxeles renderizados
  4. Devolver el texto extraído con render_mode: "ghost" en el trace

Esto evita por completo la detección anti-bot basada en DOM.

Requiere AGENT_GHOST_ENABLED=true. Se activa automáticamente en bloqueos detectados cuando AGENT_GHOST_AUTO_TRIGGER=true.

Malla

Agentes que hablan con agentes. Cada instancia de Grub es a la vez un worker y un coordinador. El nodo local descarga trabajo a la nube, la nube delega en el local. Las llamadas a herramientas cruzan la red de forma transparente.``` Node A (local) Node B (cloud) ┌─────────────┐ ┌─────────────┐ │ AgentEngine │ │ AgentEngine │ │ ↓ │ │ ↓ │ │ MeshDispatcher ──── HTTP ────→ MeshDispatcher │ │ ↓ │ │ ↓ │ │ Dispatcher │ │ Dispatcher │ │ ↓ │ │ ↓ │ │ ToolRegistry │ │ ToolRegistry │ └─────────────┘ └─────────────┘ ↕ heartbeat (15s) ↕ └────────────────────────────────┘

root@kitploit:~
**Cómo funciona:**
- **Descubrimiento** — los nodos se unen mediante una lista de pares semilla, luego se comunican (gossip) a 1 salto para conocer a otros
- **Heartbeat** — cada 15 s, los nodos intercambian métricas de carga. 3 fallos = no saludable. 2 min = eliminado
- **Enrutamiento** — MeshDispatcher puntúa todos los nodos por carga, localidad y afinidad, y luego enruta las llamadas de herramientas al mejor nodo
- **Máximo 1 salto** — solo nodo A → B, nunca A → B → C. Evita bucles de enrutamiento
- **Respaldo local** — si la ejecución remota falla, se recurre al Dispatcher local
- **Autenticación HMAC** — todo el tráfico del mesh está firmado con un secreto compartido (SHA-256, TTL de 60 s)

### Ejecutar un Mesh de 2 Nodos Localmente```bash
# Docker Compose (recommended)
./deploy.sh mesh           # Linux/Mac
./deploy.ps1 -Target mesh  # Windows

# Verify
curl http://localhost:6792/mesh/peers  # Node A sees Node B
curl http://localhost:6793/mesh/peers  # Node B sees Node A

Conectar local a Cloud Run```bash

Deploy to Cloud Run with mesh

./deploy.sh cloudrun latest --mesh-peer http://your-local-ip:6792 --mesh-secret mysecret

Start local node

MESH_ENABLED=true MESH_SECRET=mysecret MESH_PEERS=https://your-cloud-run-url
MESH_ADVERTISE_URL=http://your-local-ip:6792
uvicorn app.main:app --port 6792

root@kitploit:~
### Configuración manual```bash
# Node A
MESH_ENABLED=true MESH_NODE_NAME=local MESH_SECRET=test123 \
  MESH_ADVERTISE_URL=http://localhost:6792 \
  uvicorn app.main:app --port 6792

# Node B
MESH_ENABLED=true MESH_NODE_NAME=cloud MESH_SECRET=test123 \
  MESH_PEERS=http://localhost:6792 \
  MESH_ADVERTISE_URL=http://localhost:8081 \
  uvicorn app.main:app --port 8081

Cuando mesh está deshabilitado (MESH_ENABLED=false, el valor por defecto), Grub funciona como un rastreador normal de un solo nodo sin sobrecarga de mesh.

Transmisión en vivo

Observa el rastreador trabajar en tiempo real. Un grupo persistente de instancias de Chromium activas transmite fotogramas de la ventana gráfica a través de WebSocket o MJPEG.

WebSocket — conéctate y envía comandos interactivos:```javascript const ws = new WebSocket("ws://localhost:6792/stream/my-session?url=https://example.com"); ws.onmessage = (e) => { const msg = JSON.parse(e.data); if (msg.type === "frame") document.getElementById("viewport").src = "data:image/jpeg;base64," + msg.data; }; // Navigate, click, scroll, type — all over the same socket ws.send(JSON.stringify({ action: "navigate", url: "https://example.com/pricing" })); ws.send(JSON.stringify({ action: "click", selector: "#signup-btn" })); ws.send(JSON.stringify({ action: "scroll", direction: "down" }));

root@kitploit:~
**MJPEG** — colócalo en una etiqueta ``, video al instante:```html
<img src="http://localhost:6792/stream/my-session/mjpeg?url=https://example.com" />

Requiere BROWSER_STREAM_ENABLED=true. Cada instancia de Chromium utiliza ~150-300MB de RAM.

Inicio Rápido

Desarrollo Local```bash

git clone cd grub-crawl cp .env.example .env pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 6792

root@kitploit:~
### Habilitar Modo Agente B```bash
# Add to .env
AGENT_ENABLED=true
OPENAI_API_KEY=sk-...
# or
ANTHROPIC_API_KEY=sk-ant-...
AGENT_PROVIDER=anthropic

Enviar una tarea de agente```bash

curl -X POST http://localhost:6792/api/agent/run
-H "Content-Type: application/json"
-d '{ "task": "Find the pricing page on example.com and extract plan details", "max_steps": 10, "allowed_domains": ["example.com"] }'

root@kitploit:~
### Docker```bash
# Single node
./deploy.sh local            # or ./deploy.ps1 -Target local

# 2-node mesh
./deploy.sh mesh             # or ./deploy.ps1 -Target mesh

# Cloud Run
./deploy.sh cloudrun v1.0.0  # or ./deploy.ps1 -Target cloudrun -Tag v1.0.0

# Cloud Run + mesh (connect to local node)
./deploy.sh cloudrun v1.0.0 --mesh-peer http://your-ip:6792 --mesh-secret mykey

Anti-detección (Camoufox + Proxy)```bash

Add to .env

BROWSER_ENGINE=camoufox STEALTH_ENABLED=true BLOCK_TRACKING_DOMAINS=true

Optional: proxy

PROXY_SERVER=http://proxy.example.com:10001 PROXY_USERNAME=your_username PROXY_PASSWORD=your_password

root@kitploit:~
### Ghost Protocol (bypass anti-bot)```bash
# Add to .env
AGENT_GHOST_ENABLED=true

curl -X POST http://localhost:6792/api/agent/ghost \
  -H "Content-Type: application/json" \
  -d '{"url": "https://blocked-site.com"}'

Transmisión en vivo del navegador```bash

Add to .env

BROWSER_STREAM_ENABLED=true BROWSER_POOL_SIZE=2

MJPEG (open in browser)

open "http://localhost:6792/stream/demo/mjpeg?url=https://example.com"

root@kitploit:~
## Configuración

### Servidor
- `HOST` (por defecto: 0.0.0.0)
- `PORT` (por defecto: 6792)
- `DEBUG` (por defecto: false)

### Almacenamiento
- `STORAGE_PATH` (por defecto: ./storage)
- `RUNNING_IN_CLOUD` (por defecto: false)
- `GCS_BUCKET_NAME`
- `GOOGLE_CLOUD_PROJECT`

### Autenticación
- `DISABLE_AUTH` (por defecto: false)
- `GNOSIS_AUTH_URL` (por defecto: http://gnosis-auth:5000)

### Motor del navegador
- `BROWSER_ENGINE` — chromium | camoufox (por defecto: chromium)

### Rastreo
- `MAX_CONCURRENT_CRAWLS` (por defecto: 5)
- `CRAWL_TIMEOUT` (por defecto: 30)
- `ENABLE_JAVASCRIPT` (por defecto: true)
- `ENABLE_SCREENSHOTS` (por defecto: false)

### Proxy
- `PROXY_SERVER` — URL del proxy (p. ej. http://proxy:10001)
- `PROXY_USERNAME`
- `PROXY_PASSWORD`
- `PROXY_BYPASS` — lista de exclusiones separada por comas

### Sigilo
- `STEALTH_ENABLED` (por defecto: false) — parches de playwright-stealth
- `BLOCK_TRACKING_DOMAINS` (por defecto: false) — bloquear solicitudes de analítica/seguimiento

### Agente (Modo B)
- `AGENT_ENABLED` (por defecto: false)
- `AGENT_MAX_STEPS` (por defecto: 12)
- `AGENT_MAX_WALL_TIME_MS` (por defecto: 90000)
- `AGENT_MAX_FAILURES` (por defecto: 3)
- `AGENT_ALLOWED_TOOLS` — lista de permitidos separada por comas
- `AGENT_ALLOWED_DOMAINS` — lista de permitidos separada por comas
- `AGENT_BLOCK_PRIVATE_RANGES` (por defecto: true)
- `AGENT_REDACT_SECRETS` (por defecto: true)

### Proveedores de LLM
- `AGENT_PROVIDER` — openai | anthropic | ollama (por defecto: openai)
- `OPENAI_API_KEY`
- `OPENAI_MODEL` (por defecto: gpt-4.1-mini)
- `ANTHROPIC_API_KEY`
- `ANTHROPIC_MODEL` (por defecto: claude-3-5-sonnet-latest)
- `OLLAMA_BASE_URL` (por defecto: http://localhost:11434)
- `OLLAMA_MODEL` (por defecto: llama3.1:8b-instruct)

### Protocolo Ghost
- `AGENT_GHOST_ENABLED` (por defecto: false)
- `AGENT_GHOST_AUTO_TRIGGER` (por defecto: true)
- `AGENT_GHOST_VISION_PROVIDER` — hereda de AGENT_PROVIDER
- `AGENT_GHOST_MAX_IMAGE_WIDTH` (por defecto: 1280)

### Mesh
- `MESH_ENABLED` (por defecto: false) — interruptor maestro
- `MESH_PEERS` — URLs de pares semilla separadas por comas
- `MESH_NODE_NAME` — nombre legible por humanos (por defecto: hostname)
- `MESH_SECRET` — secreto HMAC compartido para autenticación entre nodos
- `MESH_ADVERTISE_URL` — URL que los pares usan para alcanzar este nodo
- `MESH_PREFER_LOCAL` (por defecto: true) — sesgo hacia la ejecución local
- `MESH_HEARTBEAT_INTERVAL_S` (por defecto: 15)
- `MESH_PEER_TIMEOUT_S` (por defecto: 45) — marcar como no disponible después de este tiempo
- `MESH_PEER_REMOVE_S` (por defecto: 120) — eliminar de la tabla de pares después de este tiempo
- `MESH_REMOTE_TIMEOUT_MS` (por defecto: 35000) — tiempo de espera para llamadas remotas de herramientas

### Transmisión en vivo
- `BROWSER_POOL_SIZE` (por defecto: 1)
- `BROWSER_STREAM_ENABLED` (por defecto: false)
- `BROWSER_STREAM_QUALITY` (por defecto: 25) — calidad JPEG 1-100
- `BROWSER_STREAM_MAX_WIDTH` (por defecto: 854)
- `BROWSER_STREAM_MAX_LEASE_SECONDS` (por defecto: 300)

## Contrato de respuesta

`POST /api/markdown` devuelve:

`success`, `url`, `final_url`, `status_code`, `markdown`, `markdown_plain`, `content`, `render_mode`, `wait_strategy`, `timings_ms`, `blocked`, `block_reason`, `captcha_detected`, `http_error_family`, `body_char_count`, `body_word_count`, `visible_char_count`, `visible_word_count`, `visible_similarity`, `quarantined`, `quarantine_reason`, `policy_flags`, `content_quality`, `extractor_version`, `normalized_url`, `content_hash`

### Calidad del contenido

- `blocked` — anti-bot/captcha/reto
- `empty` — señal muy baja
- `minimal` — páginas escasas/de error
- `sufficient` — utilizable para resumir

No resumir a menos que `content_quality == "sufficient"`.

### Defensa contra inyección de prompts

- `quarantined=true` significa que el extractor detectó texto similar a instrucciones en el contenido extraído que no estaba presente en el texto renderizado visible de la página (común en el abuso de `.sr-only`/contenido visualmente oculto).
- Cuando está en cuarentena, `content_quality` se degrada a `minimal`, `policy_flags` incluye `hidden_text_suspected` y `quarantined`, y las salidas `content`/`markdown` se vacían (cierre ante fallos).

### Formato de error```json
{"error": "http_error|validation_error|internal_error", "status": 400, "details": {}}

Pruebas comparativas

Arena de combate — pruebas comparativas cara a cara contra Crawl4AI, Firecrawl (autoalojado) y Scrapy. Todas las pruebas se ejecutan en la misma máquina, las mismas URLs, las mismas condiciones. Grub se ejecuta primero como referencia; los adaptadores restantes se ejecutan en orden aleatorio con un retraso de 10s entre cada uno para evitar sesgos por limitación de velocidad.

Velocidad de una sola URL (ms, menor es mejor)

Grub gana en 4/5 carreras de velocidad de una sola URL. La conversión a Markdown se ejecuta en 0-21ms mediante el motor nativo en Rust (grub_md).

Desglose de fases de Grub (ms en servidor)

La navegación domina; la conversión a Markdown es submilisegundo en la mayoría de las páginas gracias al motor Rust.

Rendimiento por lotes (ms, menor es mejor)

Grub gana en 2 de 3 tamaños de lote. Coste por URL: 163-312ms (Grub) frente a 255-477ms (otros).

Cómo ejecutar```bash

Start Grub

docker compose up -d

Start Firecrawl (optional)

docker compose -f combat/firecrawl-compose.yaml up -d

Install combat deps

pip install crawl4ai scrapy markdownify tabulate

Run the arena

pytest combat/ -m combat -v

Generate report

python -m combat.report

root@kitploit:~
## Estado de Desarrollo

### Fase 1: Infraestructura Principal ✅
### Fase 2: Rastreo ✅
### Fase 3: Módulo de Agente ✅
- [x] Núcleo del agente — máquina de estados, tipos, errores (W1)
- [x] Contrato unificado de herramientas — despachador con timeout/reintento (W2)
- [x] Compuertas de política — lista de permitidos de dominios, denegación de rangos privados, redacción (W3)
- [x] Observabilidad — EventBus, TraceCollector, persistencia de RunSummary (W4)
- [x] Integración de API — `/api/agent/run`, `/api/agent/status`, JobType.AGENT_RUN (W5)
- [x] Adaptadores de proveedor — OpenAI, Anthropic, Ollama con respaldo (W6)
- [x] Flags de configuración — ajustes de agente, proveedor, ghost y stream (W7)

### Fase 4: Protocolo Ghost ✅
- [x] Detección de activación del modo camuflaje (W8)
- [x] Pipeline de captura de pantalla (W8)
- [x] Extracción de visión mediante Claude/GPT-4o (W8)
- [x] Cadena de respaldo en el motor (W8)
- [x] Herramienta Ghost para llamadores externos (W8)
- [x] Herramienta MCP Ghost + endpoint REST (W8)

### Fase 5: Transmisión de Navegador en Vivo ✅
- [x] Pool de navegadores persistente con préstamo/devolución (W9)
- [x] Retransmisión de screencast CDP (W9)
- [x] Endpoint WebSocket con comandos interactivos (W9)
- [x] Stream de respaldo MJPEG (W9)
- [x] Endpoints de estado del stream + estado del pool (W9)

### Fase 5.5: Anti-Detección ✅
- [x] Motor de navegador anti-detección Camoufox (W10)
- [x] Proxy por solicitud con respaldo de variables de entorno (W10)
- [x] Parches de sigilo para Chromium (W10)
- [x] Bloqueo de dominios de rastreadores/analíticas (W10)
- [x] Corrección de detección de formato de visión Anthropic (W10)

### Fase 6: Coordinador Mesh ✅
- [x] Descubrimiento de pares con gossip (1 salto) (W11)
- [x] Autenticación entre nodos HMAC-SHA256 (W11)
- [x] Bucle de heartbeat con métricas de carga + reintento de seed (W11)
- [x] MeshDispatcher — enrutamiento transparente de herramientas entre nodos (W12)
- [x] Puntuación basada en carga con bonificación de localidad/afinidad (W12)
- [x] Scripts de despliegue — local, malla, Cloud Run (W12)
- [x] Topología de malla de 2 nodos en Docker Compose (W12)
- [x] Página de aterrizaje integrada (grub-site) (W12)

### Fase 7: Rendimiento + Endurecimiento
- [x] Motor Markdown en Rust (`grub_md`) — extensión nativa PyO3, conversión en sub-ms
- [x] Arena de combate — benchmarks automatizados vs Crawl4AI, Firecrawl, Scrapy
- [x] Suite de pruebas unitarias — 176 pruebas en todos los módulos
- [ ] Mejoras en el manejo de errores
- [ ] Monitoreo y alertas

Ver [MASTER_PLAN.md](https://github.com/deepbluedynamics/grubcrawler/blob/HEAD/MASTER_PLAN.md) para el plan completo de arquitectura.

## Licencia

Licencia del Proyecto Grub Crawler
Descargar herramienta
CaracterísticaCrawl4AIFirecrawlScrapyGrub
Renderizado JS✅ Playwright✅ Playwright❌ solo HTTP✅ Playwright
Navegador anti-detecciónplugin stealth❌❌✅ Camoufox
Protocolo Ghost❌❌❌✅ respaldo automático
Proxy por solicitud✅ con escalado❌middleware✅ por solicitud
Parches stealth✅❌❌✅ opt-in
Bucle de agente✅ agéntico✅ /agent❌ spiders✅ SM acotado
Transmisión en vivo del navegador✅ WebSocket✅ Live View❌✅ WS + MJPEG
Salida en Markdown✅ Fit Markdown✅ núcleo❌✅ motor Rust
Herramientas MCP✅ comunidad✅ oficial⚠️ comunidad✅ 15 herramientas
LLM multi-proveedor✅ todos los LLM⚠️ Gemini❌✅ OpenAI/Anthropic/Ollama
Malla P2P❌❌❌✅ protocolo gossip
Aplicación de políticas❌❌❌✅ puertas de dominio + redacción
Defensa contra inyección de prompts❌❌❌✅ cuarentena + diff de texto visible
LicenciaApache 2.0AGPL-3.0BSDPropietario
PrecioGratisGratis–$333/mesGratisAuto-alojado
CaracterísticaBrowserbaseScrapflyFirecrawl CloudGrub
Renderizado JS✅ Chromium personalizado✅ propietario✅ Playwright✅ Playwright
Navegador anti-detección✅ Chromium personalizado✅ propietario✅ stealth en la nube✅ Camoufox
Protocolo Ghost❌❌❌✅ respaldo automático
Proxy por solicitud✅ gestionado✅ 130M+ IPs✅ gestionado en la nube✅ por solicitud
Parches stealth✅ integrado✅ integrado✅ integrado✅ opt-in
Bucle de agente✅ Stagehand⚠️ mediante integraciones✅ /agent✅ SM acotado
Transmisión en vivo del navegador✅ iFrame + CDP✅ CDP✅ Live View✅ WS + MJPEG
Salida en Markdown✅ mediante MCP✅ integrado✅ núcleo✅ motor Rust
Herramientas MCP✅ oficial✅ oficial✅ oficial✅ 15 herramientas
Malla P2P❌❌❌✅ protocolo gossip
Aplicación de políticas❌❌❌✅ puertas de dominio + redacción
Defensa contra inyección de prompts❌❌❌✅ cuarentena + diff de texto visible
Auto-alojable❌ solo nube❌ solo nube⚠️ OSS limitado✅ completo + Cloud Run
PrecioGratis–$99/mesSegún usoGratis–$333/mesAuto-alojado
MétodoRutaDescripciónEstado
POST/api/crawlRastreo de una sola URL (HTML + markdown)Activo
POST/api/markdownExtracción de markdown de una o varias URLActivo
POST/api/batchRastreo por lotes con seguimiento de trabajosActivo
POST/api/rawExtracción de HTML sin procesar (sin markdown)Activo
GET/viewVisor de HTML renderizado en navegadorActivo
GET/downloadDescarga de archivos (PDF, etc.) a través del rastreadorActivo
MétodoRutaDescripciónEstado
POST/api/agent/runEnviar tarea al bucle de agente autónomoActivo
GET/api/agent/status/{run_id}Comprobar estado de ejecución del agente / cargar trazaActivo
POST/api/agent/ghostProtocolo Ghost: captura de pantalla + extracción por visiónActivo
MétodoRutaDescripciónEstado
POST/api/jobs/createEnvío de trabajo genéricoActivo
POST/api/jobs/crawlEnviar trabajo de rastreo de una sola URLActivo
POST/api/jobs/batch-crawlEnviar trabajo de rastreo por lotesActivo
POST/api/jobs/markdownEnviar trabajo solo de markdownActivo
POST/api/jobs/process-jobEndpoint worker de Cloud TasksActivo
POST/api/wraithFlujo de rastreo impulsado por IAMarcador de posición
MétodoRutaDescripciónEstado
POST/api/cache/searchBúsqueda difusa en contenido en cachéActivo
GET/api/cache/listListar metadatos de documentos en cachéActivo
GET/api/cache/doc/{doc_id}Obtener un documento en cachéActivo
POST/api/cache/upsertInsertar o actualizar entradas de cachéActivo
POST/api/cache/prunePoda de entradas de caché por TTL/dominioActivo
MétodoRutaDescripciónEstado
GET/api/sessions/{session_id}/filesListar archivos de la sesiónActivo
GET/api/sessions/{session_id}/fileObtener archivo específicoActivo
GET/api/sessions/{session_id}/statusEstado de progreso de la sesiónActivo
GET/api/sessions/{session_id}/resultsTodos los resultados de rastreoActivo
GET/api/sessions/{session_id}/screenshotsListar capturas de pantallaActivo
MétodoRutaDescripciónEstado
WS/stream/{session_id}Transmisión del viewport por WebSocketActivo
GET/stream/{session_id}/mjpegTransmisión alternativa MJPEGActivo
GET/stream/{session_id}/statusEstado de la sesión de transmisiónActivo
GET/stream/pool/statusEstado del pool de navegadoresActivo
MétodoRutaDescripciónEstado
POST/mesh/joinUnión de peer + descubrimiento gossipActivo
POST/mesh/heartbeatHeartbeat de peer con métricas de cargaActivo
POST/mesh/executeEjecución de herramientas entre nodos (máx. 1 salto)Activo
POST/mesh/leaveNotificación de salida de peerActivo
GET/mesh/peersListar peers conocidos + estado de saludActivo
GET/mesh/statusEstado de mesh de este nodo + cargaActivo
MétodoRutaDescripciónEstado
GET/healthComprobación de salud + número de herramientas + info de meshActivo
GET/toolsListar herramientas AHP registradasActivo
GET/sitePágina de aterrizaje integradaActivo
GET/{tool_name}Ejecutar herramienta AHP (catch-all)Activo
HerramientaDescripciónEstado
crawl_urlExtracción de markdown de una sola URL con inyección JSActivo
crawl_batchProcesamiento por lotes de hasta 50 URL con recopilaciónActivo
raw_htmlObtención de HTML sin procesar sin conversiónActivo
download_fileDescarga de archivos (PDF, etc.) a través del rastreadorActivo
crawl_validateEvaluación de calidad del contenidoActivo
crawl_searchBúsqueda difusa en la caché local de rastreoActivo
crawl_cache_listListar archivos locales en cachéActivo
crawl_remote_searchBúsqueda en la caché remota del rastreadorActivo
crawl_remote_cache_listListar entradas de caché remotaActivo
crawl_remote_cache_docObtener documento remoto en cachéActivo
agent_runEnviar tarea al agente autónomo (Modo B)Activo
agent_statusComprobar estado de ejecución del agenteActivo
ghost_extractProtocolo Ghost: captura de pantalla + extracción con IA de visiónActivo
mesh_peersListar peers de la malla y su estado de salud/cargaActivo
mesh_statusObtener estado de la malla de este nodo y métricas de cargaActivo
set_auth_tokenGuardar token de autenticación en .wraithenvActivo
crawl_statusInformar configuración y conexiónActivo
ArchivoPropósitoEstado
types.pyEnumeración RunState, StopReason, ToolCall, ToolResult, AssistantAction, RunConfig, RunContext, StepTrace, RunResultCompletado
errors.pyErrores tipados: validation_error, policy_denied, tool_timeout, tool_unavailable, execution_error, provider_error, stop_conditionCompletado
dispatcher.pyValidación de herramientas, aplicación de tiempo de espera (30s), reintento (1x), normalización de errores tipadosCompletado
engine.pyBucle acotado: plan -> execute -> observe -> stop. Integración con EventBus. Devuelve (RunResult, RunSummary)Completado
ghost.pyProtocolo Ghost: detección de bloqueo, captura de pantalla, extracción por visión, activación automáticaCompletado
ArchivoPropósitoEstado
base.pyABC LLMAdapter, FallbackAdapter (rotación ante fallo), funciones de fábricaCompletado
openai_adapter.pyMapeo de tool_calls de OpenAI, visión GPT-4oCompletado
anthropic_adapter.pyBloques tool_use/tool_result de Anthropic, visión Claude SonnetCompletado
ollama_adapter.pyOllama HTTP /api/chat, visión llavaCompletado
ArchivoPropósitoEstado
domain.pyLista blanca de dominios, denegación de RFC-1918/loopback/link-localCompletado
gate.pyComprobaciones de política previas a la herramienta y a la obtención con PolicyVerdictCompletado
redaction.pyRedacción de patrones secretos (claves API, JWT, claves privadas)Completado
ArchivoPropósitoEstado
events.pyEventBus + 7 eventos tipados: run_start, step_start, tool_dispatch, tool_result, policy_denied, step_end, run_endCompletado
trace.pyTraceCollector, serialización JSON de RunSummary, persist_trace() / load_trace() mediante storageCompletado
ArchivoPropósitoEstado
agent_routes.pyPOST /api/agent/run, GET /api/agent/status/{run_id}. 503 cuando está deshabilitadoCompletado
routes.pyEndpoints REST principales de crawl/markdown/batch/cacheCompletado
job_routes.pyCRUD de trabajos, estado de sesión, worker de Cloud TasksCompletado
jobs.pyEnumeración JobType (incl. AGENT_RUN), JobManager, JobProcessorCompletado
models.pyTodos los modelos Pydantic incl. AgentRunRequest/ResponseCompletado
ArchivoPropósitoEstado
models.pyModelos de protocolo de conexión: NodeInfo, NodeLoad, MeshToolRequest/Response, PeerStateCompletado
auth.pyFirma/verificación de token HMAC-SHA256 con TTL de 60sCompletado
client.pyCliente asíncrono httpx para join, heartbeat, leave, execute_toolCompletado
coordinator.pyCiclo de vida, tabla de peers, bucle de heartbeat con reintento de seedCompletado
routes.pyEndpoints /mesh/* — join, heartbeat, execute, leave, peers, statusCompletado
router.pyPuntuación de carga + selección de destino (lógica pura, sin E/S)Completado
dispatcher.pyMeshDispatcher que envuelve el Dispatcher local para enrutamiento transparenteCompletado
ArchivoPropósitoEstado
config.pyTodas las variables de entorno incl. configuración de agente + proveedor + ghost + proxy + stealthCompletado
storage.pyAlmacenamiento particionado por usuario (sistema de archivos local / GCS)Completado
crawler.pyMotor de rastreo Playwright con soporte de proxyCompletado
markdown.pyConversión de HTML a markdownCompletado
browser.pyAutomatización del navegador: motores Chromium + CamoufoxCompletado
browser_pool.pyPool persistente de navegadores con patrón de concesión/devoluciónCompletado
stream.pyCDP screencast → retransmisión WebSocket/MJPEG + comandos interactivosCompletado
URLGrubCrawl4AIFirecrawlScrapyGanador
example.com39112831513831Grub
news.ycombinator.com423220414012038Grub
en.wikipedia.org507486626372368Grub
httpbin.org2831170176769Firecrawl
quotes.toscrape.com27512446471145Grub
URLnavegacióncontenidovisible_textmarkdowntotal
example.com35811140391
news.ycombinator.com38419132423
en.wikipedia.org369483821507
httpbin.org22927160283
quotes.toscrape.com23010271275
LoteGrubCrawl4AIFirecrawlScrapyGanador
10 URLs1940467032168680Grub
25 URLs408510479669225303Grub
50 URLs15604238701272936232Firecrawl