Skip to main content
A tool @browser controla um Chrome/Chromium local de verdade para que o agente possa ver e interagir com páginas web como uma pessoa faria: abrir uma URL, ler a página renderizada como texto, clicar e digitar em elementos, rodar JavaScript, capturar screenshots e inspecionar a atividade de console e rede da página. É o loop de verificação para trabalho web — o agente constrói ou altera um frontend, então realmente olha para ele e o depura a partir do que a página registrou e requisitou, em vez de adivinhar pelo código-fonte.
O @browser fala o Chrome DevTools Protocol (CDP) diretamente sobre o cliente websocket que o ChatCLI já embarca — zero dependência nova, sem driver, sem runtime baixado, sem chave de API. Só precisa de um navegador da família Chromium instalado localmente (Google Chrome, Chromium, Brave ou Edge).

Como funciona

  1. Início preguiçoso — o primeiro open inicia um navegador; todo comando seguinte reaproveita essa sessão única com estado.
  2. CDP sobre websocket — navegação, leitura do DOM, screenshots e captura de eventos fluem pelo websocket do DevTools. Sem Selenium/Playwright, sem binário externo.
  3. Snapshot como texto — a página é renderizada em texto amigável ao modelo, com cada elemento interativo marcado e numerado para o agente endereçá-los com precisão.
  4. Captura contínua — mensagens de console (incluindo erros) e respostas de rede são capturadas em rings limitados, então você pode perguntar “o que a página registrou?” depois do fato.
  5. Visível sob demanda — o navegador é headless por padrão, mas o agente pode colocar a janela na sua tela com show (ou open --visible) sempre que você precisar agir — logar, escolher uma conta, resolver um captcha — e depois recolhê-la com hide. A troca reinicia o navegador no mesmo perfil, então cookies e logins sobrevivem a ela.
  6. Morre com a sessão — um navegador iniciado pelo ChatCLI nunca sobrevive a ele; é fechado no encerramento do CLI (ou explicitamente com close).

Subcomandos

Invoque com um envelope JSON {cmd, args} ou a forma argv plana. O modelo chama @browser automaticamente em /agent e /coder quando precisa olhar uma página.

Refs vs. seletores CSS

Todo snapshot marca cada elemento interativo com um atributo data-chatcli-ref e retorna uma listagem numerada. click e type aceitam tanto esse número de ref [n] quanto um seletor CSS puro:
As refs são estáveis até a próxima navegação. Depois de open numa nova URL ou de um click que dispara navegação, tire um snapshot novo antes de endereçar elementos por [n] de novo.

Deixe o usuário logar (passagem de bastão visível)

O navegador do agente nasce como um perfil descartável: nenhuma das sessões do seu Chrome do dia a dia existe lá. Então, quando uma tarefa esbarra numa tela de login, o agente entrega a janela a você em vez de adivinhar credenciais:
wait aceita --url, --text, --selector e --changed (todas precisam valer quando combinadas). --changed dispara quando a URL sai da que estava no início da espera — a condição certa quando a página de destino não é previsível (o GitHub, por exemplo, ignora o return_to do login e cai na home). Um timeout é reportado como resultado, incluindo de onde a página saiu se ela se moveu, para o agente perguntar a você ou esperar de novo. Sem uma condição de página para esperar, o agente pergunta diretamente com @ask. Logins feitos assim valem pelo resto da sessão do ChatCLI; para mantê-los entre execuções, defina CHATCLI_BROWSER_PROFILE (abaixo).
Provedores de OAuth costumam abrir o fluxo de login em um popup. tabs o lista e tab 2 deixa o agente controlá-lo — ou você o conclui na janela visível.
Entrar com o Google. O Google recusa login por senha em navegadores que detecta como automatizados (“Esse navegador ou app pode não ser seguro”). O ChatCLI inicia o Chrome com o marcador de automação desligado (navigator.webdriver é false), que é o que essa checagem olha. Se o Google ainda recusar, entre no site com senha ou passkey em vez do botão do Google, ou conecte o ChatCLI ao Chrome em que você já está logado com CHATCLI_BROWSER_CDP_URL (abaixo).
Se você fechar a aba ou a janela enquanto o agente espera, o wait reporta isso em vez de falhar, e o próximo open/show anexa uma aba nova — a sessão do navegador continua rodando.

Um exemplo prático

Construa uma página no /coder, então verifique-a de ponta a ponta:
O agente agora sabe que o botão funcionou na UI mas o backend retornou 500, e o erro exato do console — o loop completo de verificar-e-corrigir sem sair do ChatCLI.

Variáveis de ambiente


Segurança

Comandos de observação são read-only e pulam a confirmação — o agente pode olhar à vontade: open, show, hide, wait, snapshot, screenshot, html, pdf, resize, tabs, tab, cookies (listagem), console, network, scroll, back, status, close. Comandos que agem sobre a página — click, type, press, hover, select, upload, eval e cookies --clear — podem disparar ações reais em sites remotos (ou deslogar você de tudo), então passam pelo gate de segurança padrão como qualquer outra tool que muta estado. Veja Segurança do Modo Coder. cookies nunca retorna os valores dos cookies: o agente consegue saber que existe um cookie de sessão para um domínio, mas um token nunca cai na transcrição.
O @browser controla um navegador de verdade logado no perfil em que roda. O perfil descartável default é a escolha segura para páginas não confiáveis; um perfil persistente (CHATCLI_BROWSER_PROFILE) ou o seu próprio navegador (CHATCLI_BROWSER_CDP_URL) entrega ao agente todo login guardado ali — trate click/type/eval em sites externos como as operações com efeito colateral que são.

Notas

  • Uma sessão por processo, iniciada preguiçosamente no primeiro open e reaproveitada em toda chamada.
  • Console e rede são capturados continuamente em rings limitados — console/network leem o histórico recente, não precisam ser “armados” antes.
  • screenshot grava um PNG (default no diretório temporário, ou --file path). Combine com @view para o modelo olhar o screenshot que acabou de tirar.
  • Diálogos alert(), confirm() e prompt() são aceitos automaticamente (senão congelariam a página) e registrados no console como entradas [dialog].
  • Um navegador iniciado pelo ChatCLI é sempre fechado no encerramento; um Chrome headless perdido nunca sobrevive à sessão. Um navegador conectado (CHATCLI_BROWSER_CDP_URL) só perde a aba que o ChatCLI abriu.

Próximos passos

Entrada de Imagem (@view)

Anexe um screenshot que o @browser capturou para o modelo ver com os próprios olhos.

Plugin @coder

Ler, escrever, aplicar patch e executar — combine com @browser para construir e então verificar.

Plugins Agênticos

O catálogo completo de tools builtin e como o agente as usa.

Web Tools

@webfetch, @websearch e o cliente HTTP endurecido compartilhado.