Jet Browser Verifier

Verificador de tiempo de ejecución WPE WebKit local acotado para agentes con entrada nativa, comprobaciones de DOM, evidencia PNG reciente y limpieza determinista.

Documentación

Jet Browser — a small browser runtime for web agents

English · 简体中文 · 日本語 · 한국어 · Deutsch · Français · Español · Português

Node.js 24+ Rust stable WPE WebKit 2.54 Apache-2.0 license CI

Jet Browser empaqueta WPE WebKit y un puente Rust WebDriver como un runtime independiente. Un contenedor ejecuta una sesión de navegador aislada; tu harness envía comandos JSONL ordenados y recibe resultados legibles por máquina.

Trae cualquier harness o ejecutor de pruebas determinista. No se requiere cuenta, clave API, modelo, base de datos ni plano de control alojado.

Descripción general del producto · Informe técnico · Acción de GitHub Marketplace · Registro oficial de MCP · Integración con Hermes · Verificador MCP · Método · Método de estabilidad · Muestras sin procesar

Elige Jet Browser cuando

Jet Browser es la capa de ejecución para ejecuciones que necesitan un límite de navegador claro e inspeccionable:

  • El aislamiento importa: una sesión de navegador desechable por contenedor, con ciclo de vida explícito y límites de recursos.
  • La evidencia debe coincidir: la entrada nativa, el estado del DOM y una captura de pantalla reciente provienen del mismo runtime en lugar de rutas de reproducción separadas.
  • El harness debe ser reemplazable: JSONL ordenado funciona con cualquier modelo, bucle de agente, trabajo de CI o ejecutor de pruebas determinista.
  • Necesitas un runtime que no sea Chromium: WPE WebKit proporciona un segundo motor sin enviar otro framework de agente de navegador.

Mantén Playwright, CDP o tu pila de navegador actual cuando necesites su matriz de navegadores, ecosistema de extensiones o un perfil de Chrome ya iniciado sesión. Jet Browser no se adjunta a Chrome diario y no incluye un modelo ni un agente.

Ejecuta la prueba de humo verificada → · Consulta el protocolo →

Benchmark de runtime reproducible

Jet Browser alcanzó una página verificada en 1.445,25 ms con 189,6 MiB de memoria activa—72,7% menos tiempo de preparación y 33,2% menos memoria que el siguiente resultado. Método · Datos sin procesar

Horizontal bar charts comparing median verified browser-ready time and active container memory for Jet Browser, Browser Use, Steel Browser, and Browserless. Lower is better in both panels.

Deja que tu agente de codificación lo verifique

Pega esta línea única en Codex, Claude Code u otro agente de codificación consciente del repositorio. Los bloques de código de GitHub incluyen una acción de copiado con un clic.

Install or upgrade Jet Browser to the latest main for this repository from https://github.com/masakaai/jet-browser. Read README.md and use its native marketplace instructions when Codex or Claude Code plugin commands are available; otherwise register .agents/skills/jet-browser/SKILL.md as a repository skill. Confirm Docker is available, run curl -fsSL https://raw.githubusercontent.com/masakaai/jet-browser/main/scripts/try-jet.sh | sh, and report whether browser startup, native input, DOM verification, and PNG capture passed. Do not attach to my daily Chrome profile or start a persistent Chrome daemon. Only source builds require Node.js 24+; follow docs/demo.md if setup or verification fails.

Inicio rápido

1. Prueba el runtime con un comando

Solo Docker—sin clonar, sin Node.js, sin cuenta, sin clave API ni red de navegador saliente:

curl -fsSL https://raw.githubusercontent.com/masakaai/jet-browser/main/scripts/try-jet.sh | sh

El script revisable descarga la política seccomp fijada a la versión, verifica su SHA-256, selecciona linux/amd64 o linux/arm64 nativo de la imagen multi-plataforma inmutable, y ejercita el arranque del navegador, la entrada nativa, el estado del DOM y la captura de PNG. Inicia un contenedor desechable con límites de recursos y red deshabilitada, y no monta el socket de Docker ni un directorio del host.

La salida exitosa termina con:

{"status":"passed","version":"0.9.0","network":"disabled","nativeInput":"verified","dom":"verified","screenshot":"verified PNG"}

El checkout completo del código fuente y las rutas del SDK a continuación requieren Docker y Node.js 24+.

2. Instala el plugin del agente de codificación

Codex:

codex plugin marketplace add masakaai/jet-browser --ref main && codex plugin add jet-browser@masaka

Claude Code:

claude plugin marketplace add masakaai/jet-browser && claude plugin install jet-browser@masaka

Hermes Agent:

hermes plugins install masakaai/jet-browser/integrations/hermes
hermes plugins enable jet-browser

Clientes MCP:

{
  "mcpServers": {
    "jet-browser": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", "--network=none",
        "--mount", "type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock",
        "ghcr.io/masakaai/jet-browser-mcp:0.9.0"
      ]
    }
  }
}

Install Jet Browser in VS Code

VS Code abre un aviso de revisión antes de agregar el servidor. El enlace usa el URI de instalación oficial de MCP de VS Code y conserva la misma imagen fijada, la red deshabilitada y el límite del socket de Docker mostrado arriba.

Los usuarios de Cursor pueden instalar esta configuración exacta con un clic. Cursor abre un aviso de revisión antes de agregarla; la advertencia del socket de Docker a continuación sigue aplicando.

Las rutas de Codex y Claude Code instalan la habilidad de Jet Browser, que enseña a los agentes de codificación cómo verificar requisitos, ejecutar el flujo independiente verificado, integrar los esquemas de herramientas versionados y preservar los límites de seguridad del runtime. La misma habilidad local al repositorio está disponible en .agents/skills/jet-browser/SKILL.md para agentes que descubren habilidades de proyecto directamente.

El plugin de Hermes registra una herramienta de verificación acotada que ejecuta la imagen pública inmutable con la red del navegador deshabilitada y devuelve evidencia de arranque, entrada nativa, DOM y PNG. Es deliberadamente un verificador de runtime en lugar de un proveedor de navegador CDP.

El verificador MCP está publicado como io.github.masakaai/jet-browser en el Registro oficial de MCP. Expone la misma prueba acotada a través de un servidor stdio local y un paquete OCI versionado, anuncia el contrato de runtime inmutable y ejecuta la aceptación con red deshabilitada sin aceptar una URL, perfil, credencial o comando arbitrario. Los sockets de Docker otorgan control a nivel de host, así que instálalo solo para un cliente MCP local de confianza.

3. Ejecuta el flujo independiente verificado

Publicado desde una versión etiquetada de GitHub, un manifiesto multi-plataforma proporciona imágenes nativas linux/amd64 y linux/arm64 con procedencia por plataforma. La prueba de humo deshabilita la red saliente, inicia un navegador real, abre una página local, escribe a través de la ruta de entrada nativa, verifica el DOM, captura un PNG y cierra la sesión.

git clone https://github.com/masakaai/jet-browser.git
cd jet-browser
docker pull ghcr.io/masakaai/jet-browser:0.9.0
JET_BROWSER_IMAGE=ghcr.io/masakaai/jet-browser:0.9.0 npm run standalone:smoke

Docker selecciona la imagen nativa correspondiente del manifiesto en hosts Linux x86_64 y ARM64. Fija el digest del manifiesto en producción. Para compilar y verificar el código fuente verificado para la arquitectura del host en su lugar, ejecuta npm run standalone.

La salida exitosa incluye:

{
  "status": "passed",
  "network": "disabled",
  "title": "Jet Browser Ready",
  "input": "open-source runtime"
}

Ejecuta la misma verificación de aceptación con la Acción de GitHub Marketplace sin secretos de repositorio o cuenta:

permissions:
  contents: read

jobs:
  verify-browser-runtime:
    runs-on: ubuntu-latest
    steps:
      - name: Verify Jet Browser
        uses: masakaai/jet-browser@v0.9.0

La Acción selecciona la imagen de versión nativa linux/amd64 o linux/arm64 del runner, prepara el sandbox de WPE en runners Linux alojados en GitHub, inicia un navegador real con la red saliente deshabilitada, verifica la entrada nativa y el estado del DOM, captura un PNG y limpia el contenedor. Los runners autoalojados ya deben permitir espacios de nombres de usuario sin privilegios; la Acción falla con la configuración requerida en lugar de cambiar la configuración de los runners autoalojados.

Para una ejecución multi-página acotada, usa npm run stability. El escenario predeterminado de 10 segundos crea tres páginas aisladas en dos ciclos de cambio, verifica la entrada nativa, el estado de JavaScript, el DOM semántico y un PNG reciente en cada página, muestrea la memoria y la salud de los procesos del runtime, y escribe un informe legible por máquina. Consulta el método de estabilidad y alcance.

4. Incrusta el límite del runtime

Cada línea de entrada es un comando JSON; cada línea de salida es una respuesta JSON. Un supervisor en cualquier idioma puede ser dueño del ciclo de vida del contenedor y mantener el modelo o harness reemplazable.

printf '%s\n' \
  '{"op":"create","proxy":null,"profile_dir":null,"page_load_strategy":"none"}' \
  '{"op":"navigate","url":"http://127.0.0.1:8080/"}' \
  '{"op":"document_state"}' \
  '{"op":"snapshot"}' \
  '{"op":"screenshot"}' \
  '{"op":"close"}' |
docker run --rm -i --network=none --cap-drop=ALL \
  --env=JET_BROWSER_SMOKE=1 \
  --cap-add=SETUID --cap-add=SETGID \
  --security-opt=apparmor=unconfined \
  --security-opt=systempaths=unconfined \
  --security-opt=seccomp=./seccomp_profile.json \
  --security-opt=no-new-privileges --memory=1g --cpus=2 \
  --pids-limit=256 --shm-size=256m ghcr.io/masakaai/jet-browser:0.9.0

Para herramientas orientadas a modelos, usa las declaraciones versionadas en sdk/tools.mjs y el patrón de vinculación neutral al framework en Catálogo de herramientas de agente.

Las aplicaciones Python pueden supervisar el mismo contenedor y el límite JSONL ordenado sin paquetes de terceros:

python3 -m pip install "jet-browser @ git+https://github.com/masakaai/jet-browser.git@main#subdirectory=integrations/python"
python3 examples/python_quickstart.py

La guía de inicio rápido de Python verifica la entrada nativa, el estado del DOM, un PNG reciente y la limpieza con la red del navegador deshabilitada. La guía de supervisor de Python documenta la API de incrustación, los límites de recursos y el doble opt-in explícito requerido antes de habilitar el acceso web público.

Por qué Jet Browser

Decisión de diseñoQué le da a un sistema de agentes
Un runtime de navegador, no un agente empaquetadoTrae cualquier modelo, bucle de herramientas, framework de orquestación o ejecutor de pruebas determinista.
Una sesión aislada por contenedorCiclo de vida claro, límites de recursos, propiedad del perfil y limpieza ante fallos.
JSONL ordenado sobre stdin/stdoutUn límite de integración pequeño sin daemon, base de datos, cuenta o API en la nube requeridos.
Entrada nativa más evidencia semántica y visualPuntero, teclado, táctil, pestañas, captura de DOM, resultados de JavaScript y capturas de pantalla comparten un runtime.
Esquemas de herramientas versionadosVincula Jet a un harness de agente sin permitir que los cambios de nombres de modelo/herramienta muten el contrato de ejecución.
Núcleo independiente, capa distribuida opcionalComienza localmente; agrega vista previa, toma de control, persistencia, programación regional y control de flota solo cuando sea necesario.

Qué incluye

CapacidadImplementación de código abierto
Navegador realWPE WebKit 2.54 en un compositor Wayland sin cabeza
Puente de automatizaciónBinario Rust con un protocolo JSON ordenado delimitado por líneas
Interacción nativaPuntero, teclado, texto, táctil, rueda, arrastre, navegación y pestañas
Inspección de páginaTítulo, URL, evaluación de JavaScript, capturas de pantalla y captura de DOM semántico
Estado de sesiónHelpers de importación/exportación de cookies y almacenamiento web con rutas de perfil explícitas
DescargasCiclo de vida de descarga acotado y metadatos
Visualización en vivoComponentes de marco visual y DOM en vivo para un plano de datos directo opcional
Integración de agentesDeclaraciones de herramientas JSON Schema versionadas más un supervisor de contenedor Python sin dependencias

La imagen independiente contiene solo el runtime del navegador y las bibliotecas del sistema operativo que necesita. No instala un servidor de aplicaciones, árbol de paquetes JavaScript, cliente de base de datos, túnel, SDK de pagos ni framework de agente de proveedor.

Elige la capa correcta

Estos proyectos resuelven diferentes partes de la automatización de navegadores. La tabla etiqueta el límite en lugar de convertir productos diferentes en una competencia de puntuación de características.

ProyectoCapa principalLímite de navegador/controlIncluido en este benchmark de runtime
Jet BrowserRuntime de navegador independienteWPE WebKit + JSONL ordenado✓
Browser UseFramework de agente con automatización de navegadorChromium a través de su runtime/SDK✓
Steel BrowserAPI de navegador autoalojadaChromium a través de APIs HTTP y WebSocket✓
BrowserlessServicio de ejecución de navegadorChromium a través de CDP/WebSocket✓
Stagehand v4SDK de automatización respaldado por modelosCapa de acción de extensión/CDP— límite diferente

Lee la comparación de implementación y competidores para los enlaces de fuentes, reglas de inclusión y las capacidades que Jet deja deliberadamente al harness de incrustación.

Arquitectura

agent or test process
        │  JSONL over stdin/stdout
        ▼
    jet-wpe (Rust)
        │  WebDriver
        ▼
  WPE WebKit + Weston

Este límite es intencionalmente pequeño. Un proceso local, programador de contenedores, trabajo de CI o framework de agente puede supervisarlo sin adoptar un plano de control particular. La vista previa distribuida, la toma de control humana, la persistencia y la programación son componentes opcionales construidos alrededor del mismo runtime; no son necesarios para el uso independiente.

Consulta Arquitectura y la demo independiente.

Ejemplo de protocolo

Cada línea de entrada es un comando JSON. Cada línea de salida es una respuesta JSON.

{"op":"create","proxy":null,"profile_dir":null,"page_load_strategy":"none"}
{"op":"navigate","url":"https://example.com"}
{"op":"document_state"}
{"op":"snapshot"}
{"op":"screenshot"}
{"op":"close"}

Usa un contenedor dedicado por sesión mutuamente no confiable. Trata evaluate, perfiles importados, descargas y acceso a la red saliente como capacidades privilegiadas en tu propia integración.

La página de loopback solo de humo se inicia solo cuando JET_BROWSER_SMOKE=1. El perfil seccomp incluido permite las operaciones de espacio de nombres de usuario y montaje requeridas por el sandbox bubblewrap propio de WPE WebKit. En hosts AppArmor, el perfil del contenedor externo está deshabilitado porque bloquea ese sandbox interno; el proceso aún no recibe la capacidad SYS_ADMIN, ni capacidades efectivas después del arranque, ni modo privilegiado.

Desarrolla y verifica

npm ci
npm test
cargo test --all-targets

Compila solo el runtime independiente:

docker build -f Dockerfile.standalone -t jet-browser:local .

Compila el worker distribuido opcional:

docker build -f Dockerfile.wpe-worker -t jet-browser-worker:local .

Mapa del proyecto

  • rust/ — puente nativo de WebDriver y utilidades de navegador
  • src/ — trabajador distribuido opcional, vista previa, entrada, estado y límites de seguridad
  • sdk/ — transportes de cliente y declaraciones de herramientas de agente
  • scripts/standalone-smoke.mjs — verificación integral sin conexión
  • test/ — pruebas de regresión de Node; las pruebas de Rust viven junto a sus módulos
  • docs/ — notas de protocolo, arquitectura e integración

Alcance

Jet Browser es infraestructura de navegador, no un LLM ni un marco de agentes. El núcleo expone su protocolo de acciones JSONL en lugar de pretender que WPE implementa contratos de extensiones, políticas o CDP exclusivos de Chromium.

Jet Browser está licenciado bajo Apache License 2.0. Lea Contributing y Security antes de implementar o cambiar el protocolo.

Jet Browser on Product Hunt