Tools
Navegador (gerenciado pelo OpenClaw)
O OpenClaw pode executar um perfil dedicado do Chrome/Brave/Edge/Chromium controlado pelo agente. Ele é executado por meio de um pequeno serviço de controle local dentro do Gateway (somente loopback) e fica isolado do seu navegador pessoal.
- Pense nele como um navegador separado, exclusivo para o agente. O perfil
openclawnunca acessa o perfil do seu navegador pessoal. - O agente abre abas, lê páginas, clica e digita nesse ambiente isolado.
- Em vez disso, o perfil integrado
userse conecta à sua sessão real do Chrome já autenticada, por meio do Chrome DevTools MCP.
O que você recebe
- Um perfil de navegador separado chamado openclaw (destaque laranja por padrão).
- Controle determinístico de abas (listar/abrir/focar/fechar).
- Ações do agente (clicar/digitar/arrastar/selecionar), snapshots, capturas de tela e PDFs.
- Perfis baseados no Playwright salvam navegações diretas para anexos no diretório gerenciado de downloads e retornam metadados
{ url, suggestedFilename, path }após a validação da política da URL final. - Ações do agente baseadas no Playwright retornam um array
downloadscom os mesmos metadados gerenciados quando a ação inicia imediatamente um ou mais downloads. - Uma skill
browser-automationincluída que ensina aos agentes o ciclo de recuperação de snapshot, aba estável, referência obsoleta e bloqueio manual quando o Plugin de navegador está habilitado. - Suporte opcional a vários perfis (
openclaw,work,remote, ...).
Este navegador não é seu navegador de uso diário. Ele é um ambiente seguro e isolado para automação e verificação pelo agente.
No macOS, você pode copiar explicitamente cookies de um perfil de sistema da família Chrome para um perfil gerenciado separado. O navegador gerenciado ainda usa seu próprio diretório de dados do usuário; somente os cookies selecionados são copiados, enquanto o armazenamento local e o IndexedDB não são copiados. Consulte Perfis ou a referência da CLI openclaw browser para ver os comandos de importação e as limitações.
Início rápido
openclaw browser --browser-profile openclaw doctoropenclaw browser --browser-profile openclaw doctor --deepopenclaw browser --browser-profile openclaw statusopenclaw browser --browser-profile openclaw startopenclaw browser --browser-profile openclaw open https://example.comopenclaw browser --browser-profile openclaw snapshot"Navegador desabilitado" significa que o Plugin ou browser.enabled está desativado; consulte
Configuração e Controle do Plugin.
Se openclaw browser estiver totalmente ausente ou o agente informar que a ferramenta de navegador
não está disponível, vá para Comando ou ferramenta de navegador ausente.
Controle do Plugin
A ferramenta browser padrão é um Plugin incluído. Desabilite-o para substituí-lo por outro Plugin que registre o mesmo nome de ferramenta browser:
{ plugins: { entries: { browser: { enabled: false, }, }, },}Os padrões precisam tanto de plugins.entries.browser.enabled quanto de browser.enabled=true. Desabilitar apenas o Plugin remove a CLI openclaw browser, o método browser.request do Gateway, a ferramenta do agente e o serviço de controle como uma única unidade; sua configuração browser.* permanece intacta para uma substituição.
Alterações na configuração do navegador exigem a reinicialização do Gateway para que o Plugin possa registrar novamente seu serviço.
Orientações para o agente
Observação sobre o perfil de ferramentas: tools.profile: "coding" inclui web_search e
web_fetch, mas não a ferramenta browser completa. Para permitir que o agente ou um
subagente criado use a automação do navegador, adicione o navegador na etapa do
perfil:
{ tools: { profile: "coding", alsoAllow: ["browser"], },}Para um único agente, use agents.list[].tools.alsoAllow: ["browser"].
tools.subagents.tools.allow: ["browser"] por si só não é suficiente, pois a política do subagente
é aplicada após a filtragem do perfil.
O Plugin de navegador fornece dois níveis de orientação para o agente:
- A descrição da ferramenta
browsercontém o contrato compacto sempre ativo: escolha o perfil correto, mantenha as referências na mesma aba, usetabId/rótulos para direcionar a aba e carregue a skill de navegador para trabalhos com várias etapas. - A skill
browser-automationincluída contém o ciclo operacional mais detalhado: verifique primeiro o status/as abas, rotule as abas da tarefa, gere um snapshot antes de agir, gere outro snapshot após alterações na interface, recupere referências obsoletas uma vez e informe bloqueios de login/2FA/captcha ou câmera/microfone como uma ação manual, em vez de tentar adivinhar.
As skills incluídas no Plugin aparecem nas skills disponíveis do agente quando o Plugin está habilitado. As instruções completas da skill são carregadas sob demanda, portanto as interações rotineiras não pagam o custo total de tokens.
Comando ou ferramenta de navegador ausente
Se openclaw browser não for reconhecido após uma atualização, browser.request estiver ausente ou o agente informar que a ferramenta de navegador não está disponível, a causa habitual é uma lista plugins.allow que omite browser e a ausência de um bloco raiz de configuração browser. Adicione-o:
{ plugins: { allow: ["telegram", "browser"], },}Um bloco raiz explícito browser (qualquer chave em browser, como
browser.enabled=true ou browser.profiles.<name>) ativa o Plugin de navegador
incluído mesmo com uma configuração restritiva de plugins.allow, correspondendo ao comportamento da configuração
dos canais incluídos. plugins.entries.browser.enabled=true e
tools.alsoAllow: ["browser"] não substituem, por si só, a inclusão na lista de permissões.
Remover completamente plugins.allow também restaura o padrão.
Perfis: openclaw, user, chrome
openclaw: navegador gerenciado e isolado (nenhuma extensão necessária).user: perfil integrado de conexão do Chrome DevTools MCP para sua sessão real e autenticada do Chrome. O Chrome exibe uma solicitação bloqueante "Allow remote debugging?" na primeira vez que o OpenClaw se conecta, portanto alguém precisa estar diante do computador.chrome: perfil integrado da extensão do Chrome para sua sessão real e autenticada do Chrome. Funciona a partir de um celular sem ninguém diante do computador, pois controla as abas por meio da extensão de navegador do OpenClaw em vez da porta de depuração remota, portanto não há solicitação "Allow remote debugging?".
Para chamadas da ferramenta de navegador pelo agente:
- Padrão: use o navegador isolado
openclaw. - Prefira
profile="chrome"(extensão) quando as sessões autenticadas existentes forem importantes e o usuário estiver longe do computador (Telegram, WhatsApp etc.). - Prefira
profile="user"(Chrome MCP) quando as sessões autenticadas existentes forem importantes e o usuário estiver diante do computador para aprovar a solicitação de conexão. profileé a substituição explícita quando você deseja um modo de navegador específico.
Defina browser.defaultProfile: "openclaw" se quiser usar o modo gerenciado por padrão.
Configuração
As configurações do navegador ficam em ~/.openclaw/openclaw.json.
{ browser: { enabled: true, // padrão: true evaluateEnabled: true, // padrão: true; false desabilita act:evaluate (JS arbitrário) ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // habilite apenas para acesso confiável à rede privada // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, // cdpUrl: "http://127.0.0.1:18792", // substituição legada para perfil único remoteCdpTimeoutMs: 1500, // tempo limite HTTP do CDP remoto (ms) remoteCdpHandshakeTimeoutMs: 3000, // tempo limite do handshake WebSocket do CDP remoto (ms) localLaunchTimeoutMs: 15000, // tempo limite da descoberta local do Chrome gerenciado (ms) localCdpReadyTimeoutMs: 8000, // tempo limite de prontidão do CDP local após a inicialização gerenciada (ms) actionTimeoutMs: 60000, // tempo limite padrão da ação do navegador (ms) tabCleanup: { enabled: true, // padrão: true idleMinutes: 120, // defina como 0 para desabilitar a limpeza por inatividade maxTabsPerSession: 8, // defina como 0 para desabilitar o limite por sessão sweepMinutes: 5, }, // snapshotDefaults: { mode: "efficient" }, // modo padrão de snapshot quando o chamador omite um defaultProfile: "openclaw", color: "#FF4500", headless: false, noSandbox: false, attachOnly: false, executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", profiles: { openclaw: { cdpPort: 18800, color: "#FF4500" }, work: { cdpPort: 18801, color: "#0066CC", headless: true, executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", }, user: { driver: "existing-session", attachOnly: true, color: "#00AA00", }, brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, }, },}browser.snapshotDefaults.mode: "efficient" altera o modo de extração padrão de snapshot
quando um chamador não fornece um snapshotFormat ou mode explícito; consulte a
API de controle do navegador para ver as opções de snapshot por chamada.
Visão de capturas de tela (suporte a modelos somente de texto)
Quando o modelo principal é somente de texto (sem suporte a visão/multimodal), as capturas de tela do navegador retornam blocos de imagem que o modelo não consegue ler. As capturas de tela do navegador reutilizam a configuração existente de compreensão de imagens, portanto um modelo de imagem configurado para compreensão de mídia pode descrever as capturas de tela como texto sem nenhuma configuração de modelo específica do navegador.
{ tools: { media: { image: { models: [ { provider: "bytedance", model: "doubao-seed-2.0-pro" }, // Adicione candidatos de fallback; o primeiro sucesso prevalece { provider: "openai", model: "gpt-4o" }, ], }, // Modelos de mídia compartilhados também funcionam quando marcados para suporte a imagens. // models: [{ provider: "openai", model: "gpt-4o", capabilities: ["image"] }], }, }, agents: { defaults: { // Os padrões existentes do modelo de imagem também são respeitados. // imageModel: { primary: "openai/gpt-4o" }, }, },}Como funciona:
- O agente chama
browser screenshote uma imagem é capturada no disco como de costume. - A ferramenta de navegador pergunta ao runtime existente de compreensão de imagens se ele pode descrever a captura de tela usando modelos de imagem de mídia configurados, modelos de mídia compartilhados, padrões de modelo de imagem ou um provedor de imagens respaldado por autenticação.
- O modelo de visão retorna uma descrição em texto, que é encapsulada com
wrapExternalContent(proteção contra injeção de prompt) e retornada ao agente como um bloco de texto em vez de um bloco de imagem. - Se a compreensão de imagens não estiver disponível, for ignorada ou falhar, o navegador volta a retornar o bloco de imagem original.
Os blocos de imagem das capturas de tela são resultados privados da ferramenta: o agente pode inspecioná-los, mas o OpenClaw não os anexa automaticamente às respostas dos canais. Para compartilhar uma captura de tela, peça ao agente que a envie explicitamente com a ferramenta de mensagens.
Use os campos existentes tools.media.image / tools.media.models para fallbacks de
modelos, tempos limite, limites de bytes, perfis e configurações de solicitação do provedor.
Se o modelo principal ativo já oferecer suporte a visão e nenhum modelo explícito de compreensão de imagens estiver configurado, o OpenClaw mantém o resultado de imagem normal para que o modelo principal possa ler a captura de tela diretamente.
Portas e acessibilidade
- O serviço de controle é vinculado à interface de loopback em uma porta derivada de
gateway.port(padrão18791= Gateway + 2).OPENCLAW_GATEWAY_PORTtem prioridade sobregateway.port; qualquer um deles desloca as portas derivadas na mesma família. - Os perfis locais do
openclawatribuem automaticamentecdpPort/cdpUrla partir de um intervalo que começa 9 portas acima da porta de controle (por padrão,18800-18899); defina-os somente para perfis CDP remotos ou conexão a um endpoint de sessão existente. Quando não definido,cdpUrlusa como padrão a porta CDP local gerenciada. remoteCdpTimeoutMsaplica-se às verificações de acessibilidade HTTP do CDP remoto e deattachOnly, bem como às solicitações HTTP de abertura de abas;remoteCdpHandshakeTimeoutMsaplica-se aos respectivos handshakes de WebSocket CDP. A enumeração persistente de abas remotas pelo Playwright usa o maior dos dois como prazo da operação.localLaunchTimeoutMsé o limite de tempo para que um processo gerenciado do Chrome iniciado localmente exponha seu endpoint HTTP CDP.localCdpReadyTimeoutMsé o limite de tempo subsequente para a prontidão do WebSocket CDP após a descoberta do processo. Aumente esses valores no Raspberry Pi, em VPS de baixo desempenho ou em hardware mais antigo, nos quais o Chromium inicia lentamente. Os valores devem ser inteiros positivos de até120000ms; valores de configuração inválidos são rejeitados.- Falhas repetidas de inicialização/prontidão do Chrome gerenciado acionam um disjuntor por perfil. Após várias falhas consecutivas, o OpenClaw pausa brevemente novas tentativas de inicialização em vez de iniciar o Chromium a cada chamada da ferramenta de navegador. Corrija o problema de inicialização, desative o navegador se ele não for necessário ou reinicie o Gateway após o reparo.
actionTimeoutMsé o limite de tempo padrão para solicitaçõesactdo navegador quando o chamador não fornecetimeoutMs. O transporte do cliente adiciona uma pequena margem de tempo para que esperas longas possam terminar em vez de expirar no limite HTTP.tabCleanupé uma limpeza de melhor esforço para abas abertas por sessões de navegador do agente principal. A limpeza do ciclo de vida de subagentes, Cron e ACP ainda fecha suas abas explicitamente rastreadas no fim da sessão; as sessões principais mantêm as abas ativas reutilizáveis e depois fecham, em segundo plano, as abas rastreadas ociosas ou excedentes.
Política de SSRF
- As solicitações de navegação do navegador e de abertura de abas passam por uma verificação prévia. Durante a ação e por um período de tolerância limitado após a ação, as interações protegidas do Playwright (clique, clique por coordenadas, passagem do cursor, arrastar, rolar, selecionar, pressionar, digitar, preencher formulário e avaliar) interceptam carregamentos de documentos de nível superior e de subquadros negados pela política antes do envio dos bytes da solicitação HTTP e, depois, verificam novamente, mediante melhor esforço, a URL
http(s)final. - Antes de cada nova inicialização do Chrome gerenciado pelo OpenClaw, o OpenClaw desativa, mediante melhor esforço, a previsão de rede, suprimindo a pré-conexão especulativa observada do Chromium para esses carregamentos negados. Essa é uma defesa em profundidade, não um limite de política: um navegador reutilizado após a reinicialização do serviço de controle e outros backends de navegador podem não compartilhar esse reforço. O roteamento do Playwright ainda não é um firewall de rede e não intercepta saltos de redirecionamento, a primeira solicitação de uma janela pop-up, o tráfego de Service Worker, o código da página executado após o período de proteção limitado nem todos os caminhos de segundo plano/sub-recursos. O isolamento completo do tráfego de saída requer isolamento no lado do proprietário ou um proxy que aplique políticas.
- No modo SSRF estrito, a descoberta de endpoints CDP remotos e as sondagens de
/json/version(cdpUrl) também são verificadas. - As variáveis de ambiente
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYeNO_PROXYdo Gateway/provedor não encaminham automaticamente o navegador gerenciado pelo OpenClaw por proxy. Por padrão, o Chrome gerenciado é iniciado com conexão direta para que as configurações de proxy do provedor não enfraqueçam as verificações de SSRF do navegador. - As sondagens de prontidão do CDP local gerenciado pelo OpenClaw e as conexões WebSocket do DevTools ignoram o proxy de rede gerenciado para o endpoint de loopback exato iniciado, de modo que
openclaw browser startcontinue funcionando quando um proxy do operador bloqueia o tráfego de saída por loopback. - Para encaminhar o próprio navegador gerenciado por proxy, forneça flags explícitas de proxy do Chrome por meio de
browser.extraArgs, como--proxy-server=...ou--proxy-pac-url=.... O modo SSRF estrito bloqueia o roteamento explícito do navegador por proxy, a menos que o acesso do navegador à rede privada seja habilitado intencionalmente. browser.ssrfPolicy.dangerouslyAllowPrivateNetworkfica desativado por padrão; habilite-o somente quando o acesso do navegador à rede privada for intencionalmente considerado confiável.browser.ssrfPolicy.allowPrivateNetworkcontinua sendo compatível como um alias legado.
Comportamento dos perfis
attachOnly: truesignifica nunca iniciar um navegador local; apenas conectar-se caso um já esteja em execução.headlesspode ser definido globalmente ou por perfil local gerenciado. Os valores por perfil substituembrowser.headless, portanto um perfil iniciado localmente pode permanecer sem interface gráfica enquanto outro permanece visível.POST /start?headless=trueeopenclaw browser start --headlesssolicitam uma inicialização avulsa sem interface gráfica para perfis locais gerenciados, sem reescreverbrowser.headlessnem a configuração do perfil. Perfis de sessão existente, somente conexão e CDP remoto rejeitam a substituição porque o OpenClaw não inicia esses processos de navegador.- Em hosts Linux sem
DISPLAYouWAYLAND_DISPLAY, os perfis locais gerenciados usam automaticamente o modo sem interface gráfica por padrão quando nem o ambiente nem a configuração global/do perfil escolhem explicitamente o modo com interface gráfica. Use a forma inequívoca no nível do navegadoropenclaw browser --json status; a formaopenclaw browser status --jsontambém funciona porquestatusnão define seu próprio--json. O comando informaheadlessSourcecomoenv,profile,config,request,linux-display-fallbackoudefault. OPENCLAW_BROWSER_HEADLESS=1força inicializações locais gerenciadas sem interface gráfica no processo atual.OPENCLAW_BROWSER_HEADLESS=0força o modo com interface gráfica nas inicializações comuns e retorna um erro acionável em hosts Linux sem um servidor de exibição; uma solicitação explícitastart --headlessainda prevalece nessa inicialização específica.- A rota de controle do navegador e o cliente programático mantêm o
errorlegível por humanos referente à ausência de servidor de exibição e expõem o motivo estávelno_display_for_headed_profile. Seusdetailscontêm somenteprofile,requestedHeadless,headlessSourceedisplayPresent, para que clientes da API possam escolher a correção adequada sem comparar o texto da mensagem. - Para um perfil local gerenciado em execução, o status e o doctor consultam o
endpoint CDP no nível do navegador do Chrome para obter o renderizador, o backend, o dispositivo/driver, o status
dos recursos, as soluções alternativas do driver e os recursos de vídeo acelerado. O resultado é
armazenado em cache para esse processo do navegador e exposto integralmente por
openclaw browser --json status. Uma chamada passiva de status não inicia o Chrome. Navegadores de sessão existente, de extensão, CDP remotos e em sandbox permanecem separados e não são inspecionados por esse caminho de host gerenciado. - O Chrome gerenciado sem interface gráfica ainda usa o padrão conservador
--disable-gpu. O diagnóstico não habilita aceleração, não adiciona uma configuração global de aceleração nem concede ao navegador em sandbox acesso a dispositivos. executablePathpode ser definido globalmente ou por perfil local gerenciado. Os valores por perfil substituembrowser.executablePath, portanto diferentes perfis gerenciados podem iniciar diferentes navegadores baseados no Chromium. Ambas as formas aceitam~para o diretório pessoal do sistema operacional.color(no nível superior e por perfil) colore a interface do navegador para que você possa identificar qual perfil está ativo.- O perfil padrão é
openclaw(autônomo gerenciado). UsedefaultProfile: "user"para optar pelo navegador do usuário com sessão iniciada. - Ordem de detecção automática: navegador padrão do sistema, se for baseado no Chromium; caso contrário, Chrome, Brave, Edge, Chromium, Chrome Canary.
driver: "existing-session"usa o Chrome DevTools MCP em vez do CDP bruto. Ele pode se conectar por meio da conexão automática do Chrome MCP ou por meio decdpUrlquando você já tem um endpoint do DevTools para o navegador em execução.driver: "extension"controla o Chrome com sua sessão iniciada por meio da extensão do Chrome do OpenClaw. O relay é proprietário do endpoint de loopback, portanto esses perfis não aceitamcdpUrl. Esse é o único modo de navegador com sessão iniciada que funciona sem ninguém no computador.- Defina
browser.profiles.<name>.userDataDirquando um perfil de sessão existente precisar se conectar a um perfil de usuário não padrão do Chromium (Brave, Edge etc.). Esse caminho também aceita~para o diretório pessoal do sistema operacional.
Usar o Brave ou outro navegador baseado no Chromium
Se o navegador padrão do sistema for baseado no Chromium (Chrome/Brave/Edge/etc.),
o OpenClaw o usará automaticamente. Defina browser.executablePath para substituir
a detecção automática. Os valores de executablePath no nível superior e por perfil aceitam ~
para o diretório pessoal do sistema operacional:
openclaw config set browser.executablePath "/usr/bin/google-chrome"openclaw config set browser.profiles.work.executablePath "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"Ou defina-o na configuração, por plataforma:
macOS
{browser: {executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",},}Windows
{browser: {executablePath: "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",},}Linux
{browser: {executablePath: "/usr/bin/brave-browser",},}O executablePath por perfil afeta somente os perfis locais gerenciados que o OpenClaw
inicia. Em vez disso, os perfis existing-session conectam-se a um navegador já em execução,
e os perfis CDP remotos usam o navegador associado a cdpUrl.
Controle local em comparação com remoto
- Controle local (padrão): o Gateway inicia o serviço de controle em loopback e pode iniciar um navegador local.
- Controle remoto (host Node): execute um host Node na máquina que contém o navegador; o Gateway encaminha as ações do navegador para ele.
- CDP remoto: defina
browser.profiles.<name>.cdpUrl(oubrowser.cdpUrl) para conectar-se a um navegador remoto baseado no Chromium. Nesse caso, o OpenClaw não iniciará um navegador local. - Para serviços CDP gerenciados externamente em loopback (por exemplo, Browserless no
Docker publicado em
127.0.0.1), defina tambémattachOnly: true. Um CDP em loopback semattachOnlyé tratado como um perfil de navegador local gerenciado pelo OpenClaw. headlessafeta somente os perfis locais gerenciados que o OpenClaw inicia. Ele não reinicia nem altera navegadores de sessão existente ou CDP remotos.executablePathsegue a mesma regra dos perfis locais gerenciados. Alterá-lo em um perfil local gerenciado em execução marca esse perfil para reinicialização/reconciliação, para que a próxima inicialização use o novo binário.
O comportamento de interrupção varia conforme o modo do perfil:
- perfis locais gerenciados:
openclaw browser stopinterrompe o processo do navegador iniciado pelo OpenClaw - perfis somente conexão e CDP remotos:
openclaw browser stopencerra a sessão de controle ativa e libera as substituições de emulação do Playwright/CDP (janela de visualização, esquema de cores, localidade, fuso horário, modo offline e estados semelhantes), mesmo que nenhum processo de navegador tenha sido iniciado pelo OpenClaw
As URLs de CDP remoto podem incluir autenticação:
- Tokens de consulta (por exemplo,
https://provider.example?token=<token>) - Autenticação HTTP Basic (por exemplo,
https://user:pass@provider.example)
O OpenClaw preserva a autenticação ao chamar endpoints /json/* e ao se conectar
ao WebSocket CDP. Prefira variáveis de ambiente ou gerenciadores de segredos para
tokens, em vez de adicioná-los a arquivos de configuração.
Proxy de navegador do Node (padrão sem configuração)
Se você executar um host Node na máquina que contém o navegador, o OpenClaw poderá rotear automaticamente as chamadas da ferramenta de navegador para esse Node sem nenhuma configuração adicional do navegador. Esse é o caminho padrão para gateways remotos.
Observações:
- O host do Node expõe seu servidor local de controle do navegador por meio de um comando de proxy.
- Os perfis vêm da configuração
browser.profilesdo próprio Node (a mesma que a local). - O comando de proxy nunca permite mutações persistentes de perfil (
create-profile,delete-profile,reset-profile), independentemente deallowProfiles; faça essas alterações diretamente no Node. nodeHost.browserProxy.allowProfilesé opcional. Deixe-o vazio para manter o comportamento legado/padrão: todos os perfis configurados continuam acessíveis pelo proxy.- Se você definir
nodeHost.browserProxy.allowProfiles, o OpenClaw o tratará como um limite de privilégio mínimo que restringe os nomes de perfil que o proxy poderá usar como destino. - Desative-o se não quiser usá-lo:
- No Node:
nodeHost.browserProxy.enabled=false - No Gateway:
gateway.nodes.browser.mode="off"(também aceita"auto"para escolher um único Node de navegador conectado ou"manual"para exigir um parâmetro de Node explícito)
- No Node:
Browserless (CDP remoto hospedado)
O Browserless é um serviço Chromium hospedado que expõe URLs de conexão CDP por HTTPS e WebSocket. O OpenClaw pode usar qualquer uma das formas, mas, para um perfil de navegador remoto, a opção mais simples é a URL WebSocket direta da documentação de conexão do Browserless.
Exemplo:
{ browser: { enabled: true, defaultProfile: "browserless", remoteCdpTimeoutMs: 2000, remoteCdpHandshakeTimeoutMs: 4000, profiles: { browserless: { cdpUrl: "wss://production-sfo.browserless.io?token=<BROWSERLESS_API_KEY>", color: "#00AA00", }, }, },}Observações:
- Substitua
<BROWSERLESS_API_KEY>pelo seu token real do Browserless. - Escolha o endpoint de região correspondente à sua conta do Browserless (consulte a documentação).
- Se o Browserless fornecer uma URL base HTTPS, você poderá convertê-la para
wss://para uma conexão CDP direta ou manter a URL HTTPS e permitir que o OpenClaw descubra/json/version.
Browserless em Docker no mesmo host
Quando o Browserless estiver auto-hospedado no Docker e o OpenClaw for executado no host, trate o Browserless como um serviço CDP gerenciado externamente:
{ browser: { enabled: true, defaultProfile: "browserless", profiles: { browserless: { cdpUrl: "ws://127.0.0.1:3000", attachOnly: true, color: "#00AA00", }, }, },}O endereço em browser.profiles.browserless.cdpUrl deve estar acessível pelo
processo do OpenClaw. O Browserless também deve anunciar um endpoint acessível
correspondente; defina EXTERNAL do Browserless com a mesma base WebSocket
pública para o OpenClaw, como ws://127.0.0.1:3000, ws://browserless:3000 ou
um endereço estável de rede privada do Docker. Se /json/version retornar
webSocketDebuggerUrl apontando para um endereço que o OpenClaw não consegue
acessar, o CDP HTTP poderá parecer íntegro, embora a conexão WebSocket ainda
falhe.
Não deixe attachOnly indefinido para um perfil do Browserless em loopback. Sem
attachOnly, o OpenClaw trata a porta de loopback como um perfil de navegador
local gerenciado e pode informar que a porta está em uso, mas não pertence ao
OpenClaw.
Provedores de CDP WebSocket direto
Alguns serviços de navegador hospedados expõem um endpoint de WebSocket direto
em vez da descoberta CDP padrão baseada em HTTP (/json/version). O OpenClaw
aceita três formatos de URL CDP e escolhe automaticamente a estratégia de
conexão correta:
- Descoberta HTTP(S) -
http://host[:port]ouhttps://host[:port]. O OpenClaw chama/json/versionpara descobrir a URL WebSocket do depurador e, em seguida, conecta-se. Não há fallback para WebSocket. - Endpoints WebSocket diretos -
ws://host[:port]/devtools/<kind>/<id>ouwss://...com um caminho/devtools/browser|page|worker|shared_worker|service_worker/<id>. O OpenClaw conecta-se diretamente por meio de um handshake WebSocket e ignora/json/versionpor completo. - Raízes WebSocket simples -
ws://host[:port]ouwss://host[:port]sem um caminho/devtools/...(por exemplo, Browserless e Browserbase). O OpenClaw tenta primeiro a descoberta HTTP em/json/version(normalizando o esquema parahttp/https); se a descoberta retornar umwebSocketDebuggerUrl, ele será usado; caso contrário, o OpenClaw recorrerá a um handshake WebSocket direto na raiz simples. Se o endpoint WebSocket anunciado rejeitar o handshake CDP, mas a raiz simples configurada o aceitar, o OpenClaw também recorrerá a essa raiz. Isso permite que uma URLws://simples apontada para um Chrome local ainda se conecte, pois o Chrome aceita upgrades de WebSocket somente no caminho específico por destino fornecido por/json/version, enquanto provedores hospedados ainda podem usar seu endpoint WebSocket raiz quando o endpoint de descoberta anuncia uma URL de curta duração que não é adequada ao CDP do Playwright.
openclaw browser doctor usa a mesma lógica de descoberta primeiro e fallback
para WebSocket que a conexão em tempo de execução; portanto, uma URL de raiz
simples que se conecta com sucesso não é informada como inacessível pelos
diagnósticos.
Browserbase
O Browserbase é uma plataforma em nuvem para executar navegadores headless com resolução de CAPTCHA integrada, modo furtivo e proxies residenciais.
{ browser: { enabled: true, defaultProfile: "browserbase", remoteCdpTimeoutMs: 3000, remoteCdpHandshakeTimeoutMs: 5000, profiles: { browserbase: { cdpUrl: "wss://connect.browserbase.com?apiKey=<BROWSERBASE_API_KEY>", color: "#F97316", }, }, },}Observações:
- Cadastre-se e copie sua API Key do painel Overview.
- Substitua
<BROWSERBASE_API_KEY>pela sua chave de API real do Browserbase. - O Browserbase cria automaticamente uma sessão de navegador ao estabelecer a conexão WebSocket, portanto não é necessária uma etapa de criação manual da sessão.
- Consulte os preços para conhecer os limites atuais do nível gratuito e os planos pagos.
- Consulte a documentação do Browserbase para obter a referência completa da API, guias de SDK e exemplos de integração.
Notte
O Notte é uma plataforma em nuvem para executar navegadores headless com modo furtivo integrado, proxies residenciais e um Gateway WebSocket nativo de CDP.
{ browser: { enabled: true, defaultProfile: "notte", remoteCdpTimeoutMs: 3000, remoteCdpHandshakeTimeoutMs: 5000, profiles: { notte: { cdpUrl: "wss://us-prod.notte.cc/sessions/connect?token=<NOTTE_API_KEY>", color: "#7C3AED", }, }, },}Observações:
- Cadastre-se e copie sua API Key da página de configurações do console.
- Substitua
<NOTTE_API_KEY>pela sua chave de API real do Notte. - O Notte cria automaticamente uma sessão de navegador ao estabelecer a conexão WebSocket, portanto não é necessária uma etapa de criação manual da sessão. A sessão é destruída quando o WebSocket é desconectado.
- Consulte os preços para conhecer os limites atuais do nível gratuito e os planos pagos.
- Consulte a documentação do Notte para obter a referência completa da API, guias de SDK e exemplos de integração.
Segurança
Ideias principais:
- O controle do navegador está disponível somente em loopback; o acesso passa pela autenticação do Gateway ou pelo pareamento do Node.
- A API HTTP independente do navegador em loopback usa somente autenticação por segredo compartilhado:
autenticação bearer com o token do Gateway,
x-openclaw-passwordou autenticação HTTP Basic com a senha configurada do Gateway. - Os cabeçalhos de identidade do Tailscale Serve e
gateway.auth.mode: "trusted-proxy"não autenticam essa API independente do navegador em loopback. - Se o controle do navegador estiver ativado e nenhuma autenticação por segredo
compartilhado estiver configurada, o OpenClaw gerará automaticamente e
persistirá uma credencial de controle do navegador na inicialização:
um token quando
gateway.auth.modefornoneou uma senha quando fortrusted-proxy(persistida por meio degateway.auth.passwordpara que clientes de loopback externos ao processo possam resolvê-la). A geração automática será ignorada quando uma credencial de string explícita já estiver configurada para esse modo ou quandogateway.auth.modeforpassword. - Configure explicitamente
gateway.auth.token,gateway.auth.password,OPENCLAW_GATEWAY_TOKENouOPENCLAW_GATEWAY_PASSWORDse quiser um segredo estável sob seu controle em vez do segredo gerado.
Dicas para CDP remoto:
- Prefira endpoints criptografados (HTTPS ou WSS) e tokens de curta duração sempre que possível.
- Evite incorporar tokens de longa duração diretamente nos arquivos de configuração.
- Mantenha o Gateway e todos os hosts de Node em uma rede privada (Tailscale); evite exposição pública.
- Trate URLs/tokens de CDP remoto como segredos; prefira variáveis de ambiente ou um gerenciador de segredos.
Perfis (vários navegadores)
O OpenClaw aceita vários perfis nomeados (configurações de roteamento). Os perfis podem ser:
- gerenciado pelo OpenClaw: uma instância dedicada de navegador baseado em Chromium com seu próprio diretório de dados do usuário + porta CDP
- remoto: uma URL CDP explícita (navegador baseado em Chromium executado em outro local)
- sessão existente: seu perfil existente do Chrome por meio da conexão automática do Chrome DevTools MCP
Padrões:
- O perfil
openclawserá criado automaticamente se estiver ausente. - O perfil
useré integrado para conexão com uma sessão existente pelo Chrome MCP. - Perfis de sessão existente além de
usersão opcionais; crie-os com--driver existing-session. - Por padrão, as portas CDP locais são alocadas no intervalo 18800-18899.
- A exclusão de um perfil move seu diretório de dados local para a Lixeira.
Todos os endpoints de controle aceitam ?profile=<name>; a CLI usa
--browser-profile.
Sessão existente via Chrome DevTools MCP
O OpenClaw também pode se conectar a um perfil de navegador baseado em Chromium em execução por meio do servidor oficial Chrome DevTools MCP. Isso reutiliza as abas e o estado de login já abertos nesse perfil do navegador.
Referências oficiais de contexto e configuração:
- Chrome for Developers: Use Chrome DevTools MCP with your browser session
- README do Chrome DevTools MCP
Perfil integrado: user. Crie seu próprio perfil personalizado de sessão
existente se quiser outro nome, cor ou diretório de dados do navegador.
Por padrão, o perfil integrado user usa a conexão automática do Chrome MCP,
que tem como destino o perfil local padrão do Google Chrome. Use userDataDir
para Brave, Edge, Chromium ou um perfil não padrão do Chrome. ~ é expandido
para o diretório inicial do seu sistema operacional:
{ browser: { profiles: { brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, }, },}Em seguida, no navegador correspondente:
- Abra a página de inspeção desse navegador para depuração remota.
- Ative a depuração remota.
- Mantenha o navegador em execução e aprove a solicitação de conexão quando o OpenClaw se conectar.
Páginas de inspeção comuns:
- Chrome:
chrome://inspect/#remote-debugging - Brave:
brave://inspect/#remote-debugging - Edge:
edge://inspect/#remote-debugging
Teste rápido de conexão em tempo real:
openclaw browser --browser-profile user startopenclaw browser --browser-profile user statusopenclaw browser --browser-profile user tabsopenclaw browser --browser-profile user snapshot --format aiComo identificar o sucesso:
statusmostradriver: existing-sessionstatusmostratransport: chrome-mcpstatusmostrarunning: truetabslista as abas do navegador que já estão abertassnapshotretorna referências da aba ativa selecionada
O que verificar se a conexão não funcionar:
- o navegador de destino baseado em Chromium está na versão
144+ - a depuração remota está ativada na página de inspeção desse navegador
- o navegador exibiu a solicitação de consentimento para conexão e você a aceitou
- se o Chrome tiver sido iniciado com uma
--remote-debugging-portexplícita, definabrowser.profiles.<name>.cdpUrlcomo esse endpoint do DevTools em vez de depender da conexão automática do Chrome MCP openclaw doctormigra configurações antigas de navegador baseadas em extensão e verifica se o Chrome está instalado localmente para perfis padrão com conexão automática, mas não pode ativar a depuração remota no navegador para você
Uso pelo agente:
- Use
profile="user"quando precisar do estado do navegador com a sessão do usuário iniciada. - Se usar um perfil personalizado de sessão existente, informe explicitamente o nome desse perfil.
- Escolha esse modo somente quando o usuário estiver no computador para aprovar a solicitação de anexação.
- O host do Gateway ou do Node pode iniciar
npx chrome-devtools-mcp@latest --autoConnect.
Observações:
- Esse caminho apresenta mais riscos que o perfil isolado
openclaw, pois pode atuar dentro da sessão iniciada no navegador. - O OpenClaw não inicia o navegador para esse driver; ele apenas se anexa.
- Aqui, o OpenClaw usa o fluxo oficial
--autoConnectdo Chrome DevTools MCP. SeuserDataDirestiver definido, ele será repassado para direcionar esse diretório de dados do usuário. - A sessão existente pode se anexar no host selecionado ou por meio de um Node de navegador conectado. Se o Chrome estiver em outro local e nenhum Node de navegador estiver conectado, use CDP remoto ou um host de Node.
- Os destinos do Chrome MCP e as refs de snapshot têm escopo de um único subprocesso MCP. Após
a reinicialização desse processo, execute
browser tabsnovamente, selecione explicitamente um novo destino antes de realizar um trabalho específico do destino e obtenha um novo snapshot antes de usar as refs. Cada ref é válida somente para seu destino e snapshot mais recente. Os aliases antigos não são transferidos para uma aba substituta, mesmo quando a URL corresponde. - Atualmente, o Chrome DevTools MCP encaminha as ferramentas de página por um ID numérico de página local ao processo. Identificadores com escopo de processo impedem a reutilização após a substituição do subprocesso, mas uma substituição de contexto do navegador dentro do processo entre chamadas de ferramenta adjacentes ainda pode redirecionar uma ação. Um encaminhamento totalmente atômico exige suporte upstream das ferramentas de página a IDs de destino estáveis.
Inicialização personalizada do Chrome MCP
Substitua, por perfil, o servidor Chrome DevTools MCP iniciado quando o fluxo padrão
npx chrome-devtools-mcp@latest não for adequado (hosts offline,
versões fixadas, binários fornecidos localmente):
| Campo | O que faz |
|---|---|
mcpCommand |
Executável a iniciar em vez de npx. Resolvido sem alterações; caminhos absolutos são respeitados. |
mcpArgs |
Array de argumentos repassado literalmente a mcpCommand. Substitui os argumentos padrão chrome-devtools-mcp@latest --autoConnect. |
Quando cdpUrl é definido em um perfil de sessão existente, o OpenClaw ignora
--autoConnect e encaminha automaticamente o endpoint ao Chrome MCP:
http(s)://...→--browserUrl <url>(endpoint HTTP de descoberta do DevTools).ws(s)://...→--wsEndpoint <url>(WebSocket CDP direto).
As flags de endpoint e userDataDir não podem ser combinadas: quando cdpUrl está definido,
userDataDir é ignorado na inicialização do Chrome MCP, pois o Chrome MCP se anexa ao
navegador em execução por trás do endpoint em vez de abrir um diretório de
perfil.
Limitações do recurso de sessão existente
Em comparação com o perfil gerenciado openclaw, os drivers de sessão existente têm mais restrições:
- Capturas de tela - as capturas de página e de elementos com
--reffuncionam; seletores CSS com--elementnão. O Playwright não é necessário para capturas de tela da página nem de elementos baseadas em refs. (--full-pagenão pode ser combinado com--refou--elementem nenhum perfil, não apenas em sessões existentes.) - Ações -
click,type,hover,scrollIntoView,drageselectexigem refs de snapshot (sem seletores CSS).click-coordsclica em coordenadas visíveis da viewport e não exige uma ref de snapshot.clickusa apenas o botão esquerdo (sem substituição de botão ou modificadores).typenão oferece suporte aslowly=true; usefilloupress.pressnão oferece suporte adelayMs.type,hover,scrollIntoView,drag,selectefillnão oferecem suporte a substituições detimeoutMspor chamada;evaluateoferece.selectaceita um único valor.batchnão é compatível; envie as ações individualmente. - Espera / upload / diálogo -
wait --urloferece suporte a padrões exatos, por substring e glob (igual ao perfil gerenciado);wait --load networkidlenão é compatível com perfis de sessão existente (funciona em perfis gerenciados e de CDP bruto/remoto). Ganchos de upload exigemrefouinputRef, um arquivo por vez, semelementCSS. Ganchos de diálogo não oferecem suporte a substituições de tempo limite nem adialogId. - Visibilidade de diálogos - as respostas de ações do navegador gerenciado incluem
blockedByDialogebrowserState.dialogs.pendingquando uma ação abre um diálogo modal; os snapshots também incluem o estado de diálogo pendente. Responda combrowser dialog --accept/--dismiss --dialog-id <id>enquanto houver um diálogo pendente. Os diálogos tratados fora do OpenClaw aparecem embrowserState.dialogs.recent. - Recursos exclusivos do modo gerenciado - a exportação para PDF, a interceptação de downloads e
responsebodyainda exigem o caminho do navegador gerenciado.
Garantias de isolamento
- Diretório dedicado de dados do usuário: nunca acessa seu perfil pessoal do navegador.
- Portas dedicadas: evita
9222para impedir conflitos com fluxos de desenvolvimento. - Controle determinístico de abas:
tabsretorna primeirosuggestedTargetId, seguido por identificadorestabIdestáveis, comot1, rótulos opcionais e otargetIdbruto. Os agentes devem reutilizarsuggestedTargetId; os IDs brutos continuam disponíveis para depuração e compatibilidade.
Seleção do navegador
Ao iniciar localmente, o OpenClaw escolhe o primeiro disponível:
- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
Você pode substituir essa escolha com browser.executablePath.
Plataformas:
- macOS: verifica
/Applicationse~/Applications. - Linux: verifica locais comuns do Chrome/Brave/Edge/Chromium em
/usr/bin,/snap/bin,/opt/google,/opt/brave.com,/usr/lib/chromiume/usr/lib/chromium-browser, além do Chromium gerenciado pelo Playwright emPLAYWRIGHT_BROWSERS_PATHou~/.cache/ms-playwright. - Windows: verifica locais comuns de instalação.
API de controle (opcional)
Para scripts e depuração, o Gateway expõe uma pequena API HTTP de controle
somente em loopback, além de uma CLI openclaw browser correspondente (snapshots, refs, recursos
avançados de espera, saída JSON e fluxos de depuração). Consulte
API de controle do navegador para obter a referência completa.
Solução de problemas
Para problemas específicos do Linux (especialmente com Chromium via snap), consulte Solução de problemas do navegador.
Para configurações com Gateway no WSL2 e Chrome no Windows em hosts separados, consulte Solução de problemas de CDP remoto com WSL2 + Windows + Chrome.
Falha na inicialização do CDP versus bloqueio de SSRF na navegação
Essas são classes de falha diferentes e apontam para caminhos de código diferentes.
- Falha na inicialização ou prontidão do CDP significa que o OpenClaw não consegue confirmar que o plano de controle do navegador está íntegro.
- Bloqueio de SSRF na navegação significa que o plano de controle do navegador está íntegro, mas um destino de navegação de página foi rejeitado pela política.
Exemplos comuns:
- Falha na inicialização ou prontidão do CDP:
Chrome CDP websocket for profile "openclaw" is not reachable after startRemote CDP for profile "<name>" is not reachable at <cdpUrl>Port <port> is in use for profile "<name>" but not by openclawquando um serviço CDP externo em loopback está configurado semattachOnly: true
- Bloqueio de SSRF na navegação:
- Os fluxos de
open,navigate, snapshot ou abertura de abas falham com um erro de política do navegador/rede, enquantostartetabscontinuam funcionando
- Os fluxos de
Use esta sequência mínima para distinguir os dois:
openclaw browser --browser-profile openclaw startopenclaw browser --browser-profile openclaw tabsopenclaw browser --browser-profile openclaw open https://example.comComo interpretar os resultados:
- Se
startfalhar comnot reachable after start, primeiro solucione os problemas de prontidão do CDP. - Se
starttiver sucesso, mastabsfalhar, o plano de controle ainda não está íntegro. Trate isso como um problema de acessibilidade do CDP, não como um problema de navegação de página. - Se
startetabstiverem sucesso, masopenounavigatefalhar, o plano de controle do navegador está ativo e a falha está na política de navegação ou na página de destino. - Se
start,tabseopentiverem sucesso, o caminho básico de controle do navegador gerenciado está íntegro.
Detalhes importantes do comportamento:
- Por padrão, a configuração do navegador usa um objeto de política SSRF que falha de forma fechada, mesmo quando você não configura
browser.ssrfPolicy. - Para o perfil gerenciado local em loopback
openclaw, as verificações de integridade do CDP ignoram intencionalmente a imposição de acessibilidade SSRF do navegador para o plano de controle local do próprio OpenClaw. - A proteção de navegação é separada. Um resultado bem-sucedido de
startoutabsnão significa que um destino posterior deopenounavigateseja permitido.
Orientações de segurança:
- Não flexibilize a política SSRF do navegador por padrão.
- Prefira exceções restritas de host, como
hostnameAllowlistouallowedHostnames, em vez de acesso amplo à rede privada. - Use
dangerouslyAllowPrivateNetwork: truesomente em ambientes intencionalmente confiáveis nos quais o acesso do navegador à rede privada seja necessário e tenha sido revisado.
Ferramentas do agente + como o controle funciona
O agente recebe uma ferramenta para automação do navegador:
browser- doctor/status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
Como funciona o mapeamento:
browser snapshotretorna uma árvore de IU estável (IA ou ARIA).browser actusa os IDs derefdo snapshot para clicar/digitar/arrastar/selecionar.browser screenshotcaptura pixels (página inteira, elemento ou refs rotuladas).browser doctorverifica a prontidão do Gateway, do Plugin, do perfil, do navegador e da aba.browseraceita:profilepara escolher um perfil de navegador nomeado (openclaw, chrome ou CDP remoto).target(sandbox|host|node) para selecionar onde o navegador está.- Em sessões em sandbox,
target: "host"exigeagents.defaults.sandbox.browser.allowHostControl=true. - Se
targetfor omitido: sessões em sandbox usamsandboxpor padrão; sessões fora da sandbox usamhostpor padrão. - Se um Node compatível com navegador estiver conectado, a ferramenta poderá encaminhar automaticamente para ele, a menos que você fixe
target="host"outarget="node".
Isso mantém o agente determinístico e evita seletores frágeis.
Relacionado
- Visão geral das ferramentas - todas as ferramentas disponíveis para agentes
- Sandboxing - controle do navegador em ambientes em sandbox
- Segurança - riscos e reforço de segurança do controle do navegador