@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
- Início preguiçoso — o primeiro
openinicia um navegador; todo comando seguinte reaproveita essa sessão única com estado. - 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.
- 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.
- 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.
- Visível sob demanda — o navegador é headless por padrão, mas o agente pode colocar a janela na sua tela com
show(ouopen --visible) sempre que você precisar agir — logar, escolher uma conta, resolver um captcha — e depois recolhê-la comhide. A troca reinicia o navegador no mesmo perfil, então cookies e logins sobrevivem a ela. - 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
Todosnapshot 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).
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).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:
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.
Notas
- Uma sessão por processo, iniciada preguiçosamente no primeiro
opene reaproveitada em toda chamada. - Console e rede são capturados continuamente em rings limitados —
console/networkleem o histórico recente, não precisam ser “armados” antes. screenshotgrava um PNG (default no diretório temporário, ou--file path). Combine com@viewpara o modelo olhar o screenshot que acabou de tirar.- Diálogos
alert(),confirm()eprompt()são aceitos automaticamente (senão congelariam a página) e registrados noconsolecomo 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.