Automação de Navegador com agent-browser

Plugins para Anthropic Claude Code, Codex, Cursor e outras ferramentas de IA.

O que é Automação de Navegador com agent-browser?

Este skill fornece capacidades completas de automação de navegador web para agentes de IA como Claude Code, Codex, Cursor e outros. Ele permite que o agente navegue em páginas web, interaja com elementos (clicar, preencher formulários, selecionar opções), extraia dados e capture screenshots — tudo através de comandos de terminal simples e encadeáveis. A ferramenta `agent-browser` gerencia uma sessão de navegador persistente em segundo plano, tornando o encadeamento de comandos eficiente e seguro. Funcionalidades avançadas incluem suporte a sessões paralelas, persistência de estado de autenticação (cookies/localStorage), anotações visuais em screenshots para facilitar a referência a elementos, e comparação visual (diffing) de páginas. Uma documentação abrangente e referências de comandos estão disponíveis para aprofundamento, com seções dedicadas a gerenciamento de sessões, ciclo de vida de referências, e uso com simuladores iOS.

Funciona com✓Claude Code✓Codex CLI✓Cursor
npx skills add Jamie-BitFlight/claude_skills

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Automação de Navegador com agent-browser faz?

Fluxo de Trabalho Principal

Toda automação de navegador segue este padrão:

  1. Navegar: agent-browser open <url>
  2. Instantâneo: agent-browser snapshot -i (obter referências de elementos como @e1, @e2)
  3. Interagir: Usar as referências para clicar, preencher, selecionar
  4. Novo Instantâneo: Após navegação ou mudanças no DOM, obter novas referências
agent-browser open https://example.com/form
agent-browser snapshot -i
# Saída: @e1 [input type="email"], @e2 [input type="password"], @e3 [button] "Submit"

agent-browser fill @e1 "[email protected]"
agent-browser fill @e2 "password123"
agent-browser click @e3
agent-browser wait --load networkidle
agent-browser snapshot -i  # Verificar resultado

Encadeamento de Comandos

Comandos podem ser encadeados com && em uma única invocação do shell. O navegador persiste entre os comandos através de um daemon em segundo plano, então o encadeamento é seguro e mais eficiente do que chamadas separadas.

# Encadear open + wait + snapshot em uma chamada
agent-browser open https://example.com && agent-browser wait --load networkidle && agent-browser snapshot -i

# Encadear múltiplas interações
agent-browser fill @e1 "[email protected]" && agent-browser fill @e2 "password123" && agent-browser click @e3

# Navegar e capturar
agent-browser open https://example.com && agent-browser wait --load networkidle && agent-browser screenshot page.png

Quando encadear: Use && quando você não precisa ler a saída de um comando intermediário antes de prosseguir (ex.: open + wait + screenshot). Execute comandos separadamente quando precisar analisar a saída primeiro (ex.: instantâneo para descobrir referências, depois interagir usando essas referências).

Comandos Essenciais

# Navegação
agent-browser open <url>              # Navegar (aliases: goto, navigate)
agent-browser close                   # Fechar navegador

# Instantâneo (Snapshot)
agent-browser snapshot -i             # Elementos interativos com referências (recomendado)
agent-browser snapshot -i -C          # Incluir elementos interativos com cursor (divs com onclick, cursor:pointer)
agent-browser snapshot -s "#selector" # Escopo para um seletor CSS

# Interação (use @refs do instantâneo)
agent-browser click @e1               # Clicar no elemento
agent-browser click @e1 --new-tab     # Clicar e abrir em nova aba
agent-browser fill @e2 "texto"        # Limpar e digitar texto
agent-browser type @e2 "texto"        # Digitar sem limpar
agent-browser select @e1 "opção"      # Selecionar opção de dropdown
agent-browser check @e1               # Marcar checkbox
agent-browser press Enter             # Pressionar tecla
agent-browser scroll down 500         # Rolar página

# Obter informações
agent-browser get text @e1            # Obter texto do elemento
agent-browser get url                 # Obter URL atual
agent-browser get title               # Obter título da página

# Esperar (Wait)
agent-browser wait @e1                # Esperar por elemento
agent-browser wait --load networkidle # Esperar por rede ociosa
agent-browser wait --url "**/pagina"  # Esperar por padrão de URL
agent-browser wait 2000               # Esperar milissegundos

# Captura
agent-browser screenshot              # Screenshot para diretório temporário
agent-browser screenshot --full       # Screenshot da página inteira
agent-browser screenshot --annotate   # Screenshot anotado com rótulos numerados nos elementos
agent-browser pdf output.pdf          # Salvar como PDF

# Comparação (Diffing)
agent-browser diff snapshot                          # Comparar atual com último instantâneo
agent-browser diff snapshot --baseline before.txt    # Comparar atual com arquivo salvo
agent-browser diff screenshot --baseline before.png  # Diferença visual de pixels
agent-browser diff url <url1> <url2>                 # Comparar duas páginas
agent-browser diff url <url1> <url2> --wait-until networkidle  # Estratégia de espera personalizada
agent-browser diff url <url1> <url2> --selector "#main"  # Escopo para um elemento

Padrões Comuns

Envio de Formulário

agent-browser open https://example.com/cadastro
agent-browser snapshot -i
agent-browser fill @e1 "Maria Silva"
agent-browser fill @e2 "[email protected]"
agent-browser select @e3 "São Paulo"
agent-browser check @e4
agent-browser click @e5
agent-browser wait --load networkidle

Autenticação com Persistência de Estado

# Fazer login uma vez e salvar o estado
agent-browser open https://app.example.com/login
agent-browser snapshot -i
agent-browser fill @e1 "$USUARIO"
agent-browser fill @e2 "$SENHA"
agent-browser click @e3
agent-browser wait --url "**/dashboard"
agent-browser state save auth.json

# Reutilizar em sessões futuras
agent-browser state load auth.json
agent-browser open https://app.example.com/dashboard

Persistência de Sessão

# Salvar/restaurar cookies e localStorage automaticamente entre reinícios do navegador
agent-browser --session-name minhaapp open https://app.example.com/login
# ... fluxo de login ...
agent-browser close  # Estado salvo automaticamente em ~/.agent-browser/sessions/

# Da próxima vez, o estado é carregado automaticamente
agent-browser --session-name minhaapp open https://app.example.com/dashboard

# Criptografar estado em repouso
export AGENT_BROWSER_ENCRYPTION_KEY=$(openssl rand -hex 32)
agent-browser --session-name segura open https://app.example.com

# Gerenciar estados salvos
agent-browser state list
agent-browser state show minhaapp-default.json
agent-browser state clear minhaapp
agent-browser state clean --older-than 7

Extração de Dados

agent-browser open https://example.com/produtos
agent-browser snapshot -i
agent-browser get text @e5           # Obter texto de elemento específico
agent-browser get text body > pagina.txt  # Obter texto de toda a página

# Saída JSON para análise
agent-browser snapshot -i --json
agent-browser get text @e1 --json

Sessões Paralelas

agent-browser --session site1 open https://site-a.com
agent-browser --session site2 open https://site-b.com

agent-browser --session site1 snapshot -i
agent-browser --session site2 snapshot -i

agent-browser session list

Conectar ao Chrome Existente

# Descobrir automaticamente o Chrome em execução com depuração remota habilitada
agent-browser --auto-connect open https://example.com
agent-browser --auto-connect snapshot

# Ou com porta CDP explícita
agent-browser --cdp 9222 snapshot

Navegador Visual (Depuração)

agent-browser --headed open https://example.com
agent-browser highlight @e1          # Destacar elemento
agent-browser record start demo.webm # Gravar sessão
agent-browser profiler start         # Iniciar perfil do Chrome DevTools
agent-browser profiler stop trace.json # Parar e salvar perfil (caminho opcional)

Arquivos Locais (PDFs, HTML)

# Abrir arquivos locais com URLs file://
agent-browser --allow-file-access open file:///caminho/para/documento.pdf
agent-browser --allow-file-access open file:///caminho/para/pagina.html
agent-browser screenshot output.png

Simulador iOS (Safari Móvel)

# Listar simuladores iOS disponíveis
agent-browser device list

# Iniciar Safari em um dispositivo específico
agent-browser -p ios --device "iPhone 16 Pro" open https://example.com

# Mesmo fluxo de trabalho que no desktop - instantâneo, interagir, novo instantâneo
agent-browser -p ios snapshot -i
agent-browser -p ios tap @e1          # Toque (alias para click)
agent-browser -p ios fill @e2 "texto"
agent-browser -p ios swipe up         # Gesto específico para dispositivos móveis

# Tirar screenshot
agent-browser -p ios screenshot mobile.png

# Fechar sessão (desliga o simulador)
agent-browser -p ios close

Requisitos: macOS com Xcode, Appium (npm install -g appium && appium driver install xcuitest)

Dispositivos reais: Funciona com dispositivos iOS físicos se pré-configurados. Use --device "<UDID>" onde UDID é obtido de xcrun xctrace list devices.

Comparação (Diffing) - Verificando Mudanças

Use diff snapshot após realizar uma ação para verificar se ela teve o efeito desejado. Isso compara a árvore de acessibilidade atual com o último instantâneo tirado na sessão.

# Fluxo de trabalho típico: instantâneo -> ação -> diff
agent-browser snapshot -i          # Tirar instantâneo de referência
agent-browser click @e2            # Realizar ação
agent-browser diff snapshot        # Ver o que mudou (compara automaticamente com o último instantâneo)

Para testes de regressão visual ou monitoramento:

# Salvar um screenshot de referência e comparar depois
agent-browser screenshot baseline.png
# ... tempo passa ou mudanças são feitas ...
agent-browser diff screenshot --baseline baseline.png

# Comparar staging vs produção
agent-browser diff url https://staging.example.com https://prod.example.com --screenshot

A saída de diff snapshot usa + para adições e - para remoções, semelhante ao git diff. diff screenshot produz uma imagem de diff com pixels alterados destacados em vermelho, além de uma porcentagem de diferença.

Timeouts e Páginas Lentas

O timeout padrão do Playwright é de 60 segundos para navegadores locais. Para sites lentos ou páginas grandes, use esperas explícitas em vez de depender do timeout padrão:

# Esperar a atividade de rede se acalmar (melhor para páginas lentas)
agent-browser wait --load networkidle

# Esperar um elemento específico aparecer
agent-browser wait "#content"
agent-browser wait @e1

# Esperar um padrão de URL específico (útil após redirecionamentos)
agent-browser wait --url "**/dashboard"

# Esperar uma condição JavaScript
agent-browser wait --fn "document.readyState === 'complete'"

# Esperar uma duração fixa (milissegundos) como último recurso
agent-browser wait 5000

Ao lidar com sites consistentemente lentos, use wait --load networkidle após open para garantir que a página esteja totalmente carregada antes de tirar um instantâneo. Se um elemento específico estiver lento para renderizar, espere por ele diretamente com wait <selector> ou wait @ref.

Gerenciamento e Limpeza de Sessão

Ao executar vários agentes ou automações simultaneamente, sempre use sessões nomeadas para evitar conflitos:

# Cada agente obtém sua própria sessão isolada
agent-browser --session agente1 open site-a.com
agent-browser --session agente2 open site-b.com

# Verificar sessões ativas
agent-browser session list

Sempre feche sua sessão do navegador quando terminar para evitar processos vazados:

agent-browser close                    # Fechar sessão padrão
agent-browser --session agente1 close   # Fechar sessão específica

Se uma sessão anterior não foi fechada corretamente, o daemon ainda pode estar em execução. Use agent-browser close para limpá-lo antes de iniciar um novo trabalho.

Ciclo de Vida das Referências (Importante)

As referências (@e1, @e2, etc.) são invalidadas quando a página muda. Sempre tire um novo instantâneo após:

  • Clicar em links ou botões que navegam
  • Envio de formulários
  • Carregamento de conteúdo dinâmico (dropdowns, modais)
agent-browser click @e5              # Navega para nova página
agent-browser snapshot -i            # DEVE tirar novo instantâneo
agent-browser click @e1              # Usar novas referências

Screenshots Anotados (Modo Visão)

Use --annotate para tirar um screenshot com rótulos numerados sobrepostos nos elementos interativos. Cada rótulo [N] mapeia para a referência @eN. Isso também armazena em cache as referências, permitindo que você interaja com os elementos imediatamente sem um instantâneo separado.

agent-browser screenshot --annotate
# A saída inclui o caminho da imagem e uma legenda:
#   [1] @e1 button "Enviar"
#   [2] @e2 link "Início"
#   [3] @e3 textbox "Email"
agent-browser click @e2              # Clicar usando referência do screenshot anotado

Use screenshots anotados quando:

  • A página tem botões de ícone sem rótulo ou elementos puramente visuais
  • Você precisa verificar layout visual ou estilo
  • Elementos canvas ou gráficos estão presentes (invisíveis em instantâneos de texto)
  • Você precisa de raciocínio espacial sobre posições de elementos

Localizadores Semânticos (Alternativa às Referências)

Quando as referências não estão disponíveis ou são confiáveis, use localizadores semânticos:

agent-browser find text "Entrar" click
agent-browser find label "Email" fill "[email protected]"
agent-browser find role button click --name "Enviar"
agent-browser find placeholder "Pesquisar" type "consulta"
agent-browser find testid "btn-enviar" click

Avaliação de JavaScript (eval)

Use eval para executar JavaScript no contexto do navegador. A citação do shell pode corromper expressões complexas -- use --stdin ou -b para evitar problemas.

# Expressões simples funcionam com citação regular
agent-browser eval 'document.title'
agent-browser eval 'document.querySelectorAll("img").length'

# JS complexo: use --stdin com heredoc (RECOMENDADO)
agent-browser eval --stdin <<'EVALEOF'
JSON.stringify(
  Array.from(document.querySelectorAll("img"))
    .filter(i => !i.alt)
    .map(i => ({ src: i.src.split("/").pop(), width: i.width }))
)
EVALEOF

# Alternativa: codificação base64 (evita todos os problemas de escape do shell)
agent-browser eval -b "$(echo -n 'Array.from(document.querySelectorAll("a")).map(a => a.href)' | base64)"

Por que isso importa: Quando o shell processa seu comando, aspas duplas internas, caracteres ! (expansão de histórico), crases e $() podem corromper o JavaScript antes de chegar ao agent-browser. As flags --stdin e -b ignoram completamente a interpretação do shell.

Regras práticas:

  • Linha única, sem aspas aninhadas -> eval 'expression' regular com aspas simples é suficiente
  • Aspas aninhadas, arrow functions, template literals ou multilinha -> use eval --stdin <<'EVALEOF'
  • Scripts programáticos/gerados -> use eval -b com base64

Arquivo de Configuração

Crie agent-browser.json na raiz do projeto para configurações persistentes:

{
  "headed": true,
  "proxy": "http://localhost:8080",
  "profile": "./browser-data"
}

Prioridade (da menor para a maior): ~/.agent-browser/config.json < ./agent-browser.json < variáveis de ambiente < flags de CLI. Use --config <caminho> ou a variável de ambiente AGENT_BROWSER_CONFIG para um arquivo de configuração personalizado (sai com erro se estiver faltando ou for inválido). Todas as opções de CLI mapeiam para chaves camelCase (ex.: --executable-path -> "executablePath"). Flags booleanas aceitam valores true/false (ex.: --headed false substitui a configuração). Extensões de configurações de usuário e projeto são mescladas, não substituídas.

Documentação Aprofundada

ReferênciaQuando Usar
references/commands.mdReferência completa de comandos com todas as opções
references/configuration.mdOpções de configuração, perfis e variáveis de ambiente
references/sessions.mdGerenciamento de sessões, estado e criptografia
references/diffing.mdReferência detalhada de diffing para testes visuais e estruturais
references/ios-simulator.mdAutomação de Safari móvel com simulador iOS
references/semantic-locators.mdEstratégias de localização baseadas em texto, papel e atributos

Boas Práticas

  1. Prefira instantâneos de texto quando possível - são mais rápidos e fornecem referências estruturadas
  2. Use screenshots anotados para páginas complexas e com muitos elementos visuais
  3. Sempre feche suas sessões de navegador quando terminar
  4. Use sessões nomeadas para múltiplos agentes ou automações concorrentes
  5. Encadeie comandos para tarefas simples, execute separadamente quando precisar analisar saídas
  6. Use wait --load networkidle para páginas lentas em vez de aumentar timeouts
  7. Sempre tire novo instantâneo após navegação ou mudanças no DOM
  8. Prefira eval --stdin ou -b para expressões JavaScript complexas

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Jamie-BitFlight/agentskill-kaizen-meta-docs

Agentskill kaizen plugin documentation index. Load when needing to read about cross-platform notes, improvement plans, or DuckDB integration.

Jamie-BitFlight/bash-51-features

Bash 5.1 release features and improvements with practical examples. Use when working with Bash 5.1 features, epoch time variables, redirection enhancements, or when user asks about Bash 5.1 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-52-features

Bash 5.2 release features and improvements with practical examples. Use when working with Bash 5.2 features, variable handling enhancements, readline improvements, or when user asks about Bash 5.2 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-53-features

Bash 5.3 release features and improvements with practical examples. Use when working with Bash 5.3 features, new command substitution, GLOBSORT, loadable builtins, or when user asks about Bash 5.3 changes, new features, or version-specific capabilities.

Jamie-BitFlight/bash-development

This skill should be used when the user asks to "write a bash script", "create a shell script", "implement bash function", "parse arguments in bash", "handle errors in bash", or mentions bash development, shell scripting, script templates, or modern bash patterns.

Jamie-BitFlight/bash-lint

This skill should be used when the user asks to "lint bash script", "run shellcheck", "format shell script", "use shfmt", "fix shellcheck errors", or mentions shell script linting, formatting, code quality, or pre-commit hooks for bash.

Jamie-BitFlight/bash-logging

This skill should be used when the user asks to "add logging to bash script", "colorize output", "implement log levels", "CI/CD sections", "terminal colors in bash", or mentions logging functions, emoji output, collapsible CI sections, or shlocksmith.

Jamie-BitFlight/bash-portability

This skill should be used when the user asks about "POSIX compatibility", "portable shell scripts", "cross-shell compatibility", "bashisms", "shebang selection", or mentions writing scripts that work on different shells (bash, sh, dash, zsh) or different systems.

Jamie-BitFlight/bash-testing

This skill should be used when the user asks to "test bash script", "write shell tests", "use shunit2", "use shellspec", "create test suite for bash", or mentions unit testing, test frameworks, mocking, or test-driven development for shell scripts.

Jamie-BitFlight/brainstorming-skill

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or when users request help with ideation, marketing, and strategic planning. Explores user intent, requirements, and design before implementation using research-validated prompt patterns.

Jamie-BitFlight/clang-format

Configure clang-format code formatting. Use when: user mentions clang-format or .clang-format, analyzing code style/patterns, creating/modifying formatting config, troubleshooting formatting, brace styles/indentation/spacing/alignment/pointer alignment, or codifying conventions.

Jamie-BitFlight/commitlint

When setting up commit message validation for a project. When project has commitlint.config.js or .commitlintrc files. When configuring CI/CD to enforce commit format. When extracting commit rules for LLM prompt generation. When debugging commit message rejection errors.

Jamie-BitFlight/conventional-commits

When writing a git commit message. When task completes and changes need committing. When project uses semantic-release, commitizen, git-cliff. When choosing between feat/fix/chore/docs types. When indicating breaking changes. When generating changelogs from commit history.

Jamie-BitFlight/dasel-reference

Use when querying, modifying, or converting JSON, YAML, TOML, XML, CSV, HCL, or INI with dasel v3. Complete reference for selectors, functions, conditionals, variables, spread operator, type casting, and format-specific patterns.

Jamie-BitFlight/data-exploration

Use when exploring unknown structured data files with dasel v3 — discover schema, list keys, find nested values, sample arrays, identify data types across JSON, YAML, TOML, XML, CSV, HCL, INI formats

Jamie-BitFlight/data-transformation

Use when modifying, converting, or transforming structured data with dasel v3 — in-place mutations, format conversion, batch operations, array manipulation, object construction, and merge patterns across JSON, YAML, TOML, XML, CSV, HCL, INI

Jamie-BitFlight/delegate

Decompose substantive work into phases, dispatch each phase to a sub-agent, and adjudicate what comes back. Use whenever a request asks for implementation, investigation, a fix, a review, or any change to files — including small ones — and whenever you are about to read source or run a diagnostic yourself instead of handing it off. Also use when a report from a sub-agent needs judging, when a phase needs re-dispatching, or when a user names one instance of a pattern. Does not apply when your own prompt begins "Your ROLE_TYPE is sub-agent." — then follow references/sub-agent-contract.md instead.

Jamie-BitFlight/enterprise-hibernate-hbm

Dasel v3 query patterns for Hibernate .hbm.xml mapping files — entity-table binding, Java property-to-column extraction, one-to-many set/list/bag relationship tracing, many-to-one foreign key discovery, batch scanning across 60+ HBM files. Use when querying Hibernate ORM class mappings, extracting schema metadata from Java persistence layer, or auditing entity-column relationships in enterprise legacy codebases.

Jamie-BitFlight/enterprise-installanywhere

Dasel v3 query patterns for InstallAnywhere .iap_xml installer definitions — use when querying action sequences, discovering variables, resolving platform conditions, navigating panels, or comparing installer variants. Files are 2.5+ MB, 65,000+ lines — too large for context reads, requires structural dasel queries.

Jamie-BitFlight/enterprise-maven-pom

Dasel v3 selector patterns for Maven POM XML files — use when querying dependency versions, filtering by groupId or scope, extracting module hierarchy from parent POMs, or detecting version conflicts across enterprise multi-module Java projects. Load this skill when working with pom.xml files using dasel.

Habilidades Relacionadas