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
English · 简体中文 · 日本語 · 한국어 · Deutsch · Français · Español · Português
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
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"
]
}
}
}
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ño | Qué le da a un sistema de agentes |
|---|---|
| Un runtime de navegador, no un agente empaquetado | Trae cualquier modelo, bucle de herramientas, framework de orquestación o ejecutor de pruebas determinista. |
| Una sesión aislada por contenedor | Ciclo de vida claro, límites de recursos, propiedad del perfil y limpieza ante fallos. |
| JSONL ordenado sobre stdin/stdout | Un 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 visual | Puntero, teclado, táctil, pestañas, captura de DOM, resultados de JavaScript y capturas de pantalla comparten un runtime. |
| Esquemas de herramientas versionados | Vincula 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 opcional | Comienza localmente; agrega vista previa, toma de control, persistencia, programación regional y control de flota solo cuando sea necesario. |
Qué incluye
| Capacidad | Implementación de código abierto |
|---|---|
| Navegador real | WPE WebKit 2.54 en un compositor Wayland sin cabeza |
| Puente de automatización | Binario Rust con un protocolo JSON ordenado delimitado por líneas |
| Interacción nativa | Puntero, teclado, texto, táctil, rueda, arrastre, navegación y pestañas |
| Inspección de página | Título, URL, evaluación de JavaScript, capturas de pantalla y captura de DOM semántico |
| Estado de sesión | Helpers de importación/exportación de cookies y almacenamiento web con rutas de perfil explícitas |
| Descargas | Ciclo de vida de descarga acotado y metadatos |
| Visualización en vivo | Componentes de marco visual y DOM en vivo para un plano de datos directo opcional |
| Integración de agentes | Declaraciones 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.
| Proyecto | Capa principal | Límite de navegador/control | Incluido en este benchmark de runtime |
|---|---|---|---|
| Jet Browser | Runtime de navegador independiente | WPE WebKit + JSONL ordenado | ✓ |
| Browser Use | Framework de agente con automatización de navegador | Chromium a través de su runtime/SDK | ✓ |
| Steel Browser | API de navegador autoalojada | Chromium a través de APIs HTTP y WebSocket | ✓ |
| Browserless | Servicio de ejecución de navegador | Chromium a través de CDP/WebSocket | ✓ |
| Stagehand v4 | SDK de automatización respaldado por modelos | Capa 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.