Jet Browser Verifier

Runtime verificador local limitado do WebKit WPE para agentes, com entrada nativa, verificações de DOM, evidência em PNG atualizado e limpeza determinística.

Documentação

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

O Jet Browser empacota o WPE WebKit e uma ponte Rust WebDriver como um runtime autônomo. Um contêiner executa uma sessão de navegador isolada; seu harness envia comandos JSONL ordenados e recebe resultados legíveis por máquina.

Use qualquer harness ou executor de testes determinístico. Não é necessária conta, chave de API, modelo, banco de dados ou plano de controle hospedado.

Visão geral do produto · Relatório técnico · Ação do GitHub Marketplace · Registro oficial MCP · Integração Hermes · Verificador MCP · Método · Método de estabilidade · Amostras brutas

Escolha o Jet Browser quando

O Jet Browser é a camada de execução para execuções que precisam de um limite de navegador claro e inspecionável:

  • Isolamento é importante: uma sessão de navegador descartável por contêiner, com ciclo de vida explícito e limites de recursos.
  • As evidências devem concordar: entrada nativa, estado do DOM e uma captura de tela recente vêm do mesmo runtime em vez de caminhos de reprodução separados.
  • O harness deve permanecer substituível: JSONL ordenado funciona com qualquer modelo, loop de agente, trabalho de CI ou executor de testes determinístico.
  • Você precisa de um runtime não-Chromium: o WPE WebKit fornece um segundo mecanismo sem enviar outra estrutura de agente de navegador.

Mantenha Playwright, CDP ou sua pilha atual de navegador quando precisar da matriz de navegadores, ecossistema de extensões ou um perfil Chrome conectado existente. O Jet Browser não anexa ao Chrome diário e não inclui um modelo ou agente.

Execute o teste de fumaça verificado → · Veja o protocolo →

Benchmark de runtime reproduzível

O Jet Browser alcançou uma página verificada em 1.445,25 ms com 189,6 MiB de memória ativa—72,7% menor tempo de prontidão e 33,2% menor memória que o próximo resultado. Método · Dados brutos

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.

Deixe seu agente de codificação verificar

Cole esta única linha no Codex, Claude Code ou outro agente de codificação ciente do repositório. Os blocos de código do GitHub incluem uma ação de cópia com um clique.

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.

Início rápido

1. Prove o runtime com um comando

Somente Docker—sem clone, Node.js, conta, chave de API ou rede de navegador de saída:

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

O script revisável baixa a política seccomp fixada na versão, verifica seu SHA-256, seleciona a imagem nativa linux/amd64 ou linux/arm64 da imagem imutável de múltiplas plataformas e exercita a inicialização do navegador, entrada nativa, estado do DOM e captura de PNG. Ele inicia um contêiner descartável com limites de recursos e rede desabilitada, e não monta o socket Docker ou um diretório do host.

A saída bem-sucedida termina com:

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

O checkout completo do código-fonte e os caminhos do SDK abaixo exigem Docker e Node.js 24+.

2. Instale o plugin do agente de codificação

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

O VS Code abre um prompt de revisão antes de adicionar o servidor. O link usa o URI oficial de instalação MCP do VS Code e preserva a mesma imagem fixada, rede desabilitada e limite de socket Docker mostrado acima.

Usuários do Cursor podem instalar esta configuração exata com um clique. O Cursor abre um prompt de revisão antes de adicioná-la; o aviso de socket Docker abaixo ainda se aplica.

Os caminhos do Codex e do Claude Code instalam a habilidade Jet Browser, que ensina agentes de codificação a verificar requisitos, executar o fluxo autônomo verificado, integrar os esquemas de ferramentas versionados e preservar os limites de segurança do runtime. A mesma habilidade local ao repositório está disponível em .agents/skills/jet-browser/SKILL.md para agentes que descobrem habilidades de projeto diretamente.

O plugin Hermes registra uma ferramenta de verificação limitada que executa a imagem pública imutável com rede de navegador desabilitada e retorna evidências de inicialização, entrada nativa, DOM e PNG. Ele é deliberadamente um verificador de runtime em vez de um provedor de navegador CDP.

O verificador MCP é publicado como io.github.masakaai/jet-browser no Registro oficial MCP. Ele expõe a mesma prova limitada por meio de um servidor stdio local e um pacote OCI versionado, anuncia o contrato de runtime imutável e executa a aceitação com rede desabilitada sem aceitar URL, perfil, credencial ou comando arbitrário. Concessões de socket Docker fornecem controle em nível de host, então instale-o apenas para um cliente MCP local confiável.

3. Execute o fluxo autônomo verificado

Publicado a partir de uma versão de GitHub taggeada, um manifesto de múltiplas plataformas fornece imagens nativas linux/amd64 e linux/arm64 com proveniência por plataforma. O teste de fumaça desabilita rede de saída, inicia um navegador real, abre uma página local, digita pelo caminho de entrada nativa, verifica o DOM, captura um PNG e fecha a sessão.

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

O Docker seleciona a imagem nativa correspondente do manifesto em hosts Linux x86_64 e ARM64. Fixe o digest do manifesto em produção. Para construir e verificar o código-fonte verificado para a arquitetura do host, execute npm run standalone.

A saída bem-sucedida inclui:

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

Execute a mesma verificação de aceitação com a Ação do GitHub Marketplace sem segredos de repositório ou conta:

permissions:
  contents: read

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

A Ação seleciona a imagem de versão nativa linux/amd64 ou linux/arm64 do runner, prepara o sandbox WPE em runners Linux hospedados pelo GitHub, inicia um navegador real com rede de saída desabilitada, verifica entrada nativa e estado do DOM, captura um PNG e limpa o contêiner. Runners auto-hospedados devem já permitir namespaces de usuário sem privilégios; a Ação falha com a configuração necessária em vez de alterar as configurações do runner auto-hospedado.

Para uma execução limitada de várias páginas, use npm run stability. O cenário padrão de 10 segundos cria três páginas isoladas em dois ciclos de churn, verifica entrada nativa, estado JavaScript, DOM semântico e um PNG recente em cada página, amostra memória e saúde do processo do runtime e escreve um relatório legível por máquina. Veja o método e escopo de estabilidade.

4. Incorpore o limite do runtime

Cada linha de entrada é um comando JSON; cada linha de saída é uma resposta JSON. Um supervisor em qualquer idioma pode possuir o ciclo de vida do contêiner e manter o modelo ou harness substituível.

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 ferramentas voltadas a modelos, use as declarações versionadas em sdk/tools.mjs e o padrão de vinculação neutro em relação à estrutura em Catálogo de ferramentas de agente.

Aplicações Python podem supervisionar o mesmo contêiner e o limite JSONL ordenado sem pacotes de terceiros:

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

O início rápido Python verifica entrada nativa, estado do DOM, um PNG recente e limpeza com rede de navegador desabilitada. O guia de supervisor Python documenta a API de incorporação, limites de recursos e o duplo opt-in explícito necessário antes de habilitar acesso à web pública.

Por que o Jet Browser

Escolha de designO que dá a um sistema de agente
Um runtime de navegador, não um agente empacotadoTraga qualquer modelo, loop de ferramentas, estrutura de orquestração ou executor de testes determinístico.
Uma sessão isolada por contêinerCiclo de vida claro, limites de recursos, propriedade de perfil e limpeza em falhas.
JSONL ordenado sobre stdin/stdoutUm limite de integração pequeno sem daemon, banco de dados, conta ou API de nuvem necessários.
Entrada nativa mais evidência semântica e visualPonteiro, teclado, toque, abas, captura de DOM, resultados JavaScript e capturas de tela compartilham um runtime.
Esquemas de ferramentas versionadosVincule o Jet a um harness de agente sem permitir que mudanças de nomenclatura de modelo/ferramenta mutem o contrato de execução.
Núcleo autônomo, camada distribuída opcionalComece localmente; adicione pré-visualização, tomada de controle, persistência, agendamento regional e controle de frota somente quando necessário.

O que é incluído

CapacidadeImplementação de código aberto
Navegador realWPE WebKit 2.54 em um compositor Wayland headless
Ponte de automaçãoBinário Rust com protocolo JSON ordenado delimitado por linhas
Interação nativaPonteiro, teclado, texto, toque, roda, arrastar, navegação e abas
Inspeção de páginaTítulo, URL, avaliação JavaScript, capturas de tela e captura de DOM semântico
Estado de sessãoHelpers de importação/exportação de cookies e armazenamento web com caminhos de perfil explícitos
DownloadsCiclo de vida de download limitado e metadados
Visualização ao vivoComponentes de quadro visual e DOM ao vivo para um plano de dados direto opcional
Integração de agenteDeclarações de ferramentas JSON Schema versionadas mais um supervisor de contêiner Python sem dependências

A imagem autônoma contém apenas o runtime do navegador e as bibliotecas do sistema operacional que precisa. Ela não instala um servidor de aplicação, árvore de pacotes JavaScript, cliente de banco de dados, túnel, SDK de pagamento ou estrutura de agente de fornecedor.

Escolha a camada certa

Esses projetos resolvem diferentes partes da automação de navegador. A tabela rotula o limite em vez de transformar produtos diferentes em uma competição de pontuação de recursos.

ProjetoCamada primáriaLimite de navegador/controleIncluído neste benchmark de runtime
Jet BrowserRuntime de navegador autônomoWPE WebKit + JSONL ordenado✓
Browser UseEstrutura de agente com automação de navegadorChromium por meio de seu runtime/SDK✓
Steel BrowserAPI de navegador auto-hospedadaChromium por meio de APIs HTTP e WebSocket✓
BrowserlessServiço de execução de navegadorChromium por meio de CDP/WebSocket✓
Stagehand v4SDK de automação apoiado por modeloCamada de ação de extensão/CDP— limite diferente

Leia a comparação de implantação e concorrentes para os links de origem, regras de inclusão e as capacidades que o Jet deliberadamente deixa para o harness de incorporação.

Arquitetura

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

Este limite é intencionalmente pequeno. Um processo local, agendador de contêineres, trabalho de CI ou estrutura de agente pode supervisioná-lo sem adotar um plano de controle específico. Pré-visualização distribuída, tomada de controle humana, persistência e agendamento são componentes opcionais construídos em torno do mesmo runtime; não são necessários para uso autônomo.

Veja Arquitetura e a demonstração autônoma.

Exemplo de protocolo

Cada linha de entrada é um comando JSON. Cada linha de saída é uma resposta 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"}

Use um contêiner dedicado por sessão mutuamente não confiável. Trate evaluate, perfis importados, downloads e acesso à rede de saída como capacidades privilegiadas em sua própria integração.

A página de loopback somente para fumaça inicia apenas quando JET_BROWSER_SMOKE=1. O perfil seccomp incluído permite as operações de namespace de usuário e mount exigidas pelo sandbox bubblewrap do próprio WPE WebKit. Em hosts AppArmor, o perfil do contêiner externo é desabilitado porque bloqueia esse sandbox interno; o processo ainda não recebe capacidade SYS_ADMIN, nenhuma capacidade efetiva após a inicialização e nenhum modo privilegiado.

Desenvolva e verifique

npm ci
npm test
cargo test --all-targets

Construa apenas o runtime autônomo:

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

Construa o worker distribuído opcional:

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

Mapa do projeto

  • rust/ — ponte nativa WebDriver e utilitários de navegador
  • src/ — worker distribuído opcional, preview, entrada, estado e limites de segurança
  • sdk/ — transportes de cliente e declarações de ferramentas de agente
  • scripts/standalone-smoke.mjs — verificação offline de ponta a ponta
  • test/ — testes de regressão Node; testes Rust ficam junto aos seus módulos
  • docs/ — notas de protocolo, arquitetura e integração

Escopo

Jet Browser é uma infraestrutura de navegador, não um LLM ou framework de agente. O núcleo expõe seu protocolo de ação JSONL em vez de fingir que o WPE implementa contratos de extensão, política ou CDP exclusivos do Chromium.

Jet Browser é licenciado sob Apache License 2.0. Leia Contributing e Security antes de implantar ou alterar o protocolo.

Jet Browser on Product Hunt