Passo 11 · As ferramentas·As ferramentas · Loop EngineeringENPT
Módulo 4 · As ferramentas · Lição 11
Bright Data CLI: evidência real da web, sempre
A ferramenta de evidência da web que todo agente da suíte compartilha. Quando o loop precisa de um fato, uma página ou um registro estruturado da web ao vivo, ele não chuta — ele roda brightdata e cita o que voltou.
Leia a versão simples, ou abra a camada técnica em qualquer seção.
1
A grande ideia
A memória de um agente está congelada no momento em que ele foi treinado. Pergunte um preço, um número de versão, o que uma página diz hoje, ou se alguma afirmação ainda vale, e ele responderá de bom grado — a partir de um instantâneo que pode estar meses ou anos desatualizado. Isso é um palpite vestindo uma voz confiante.
A correção é simples e é uma regra, não uma preferência: quando você precisa de algo da web ao vivo, vá buscar. A suíte inteira recorre a uma única ferramenta para isso — um programa de linha de comando chamado Bright Data, executado como brightdata no shell de qualquer agente. Ele consegue buscar na web, abrir e ler qualquer página (até as que tentam bloquear robôs), dirigir um navegador real e extrair registros organizados de mais de quarenta sites.
Esse é o mesmo instinto do Proof Gate do loop — "prove no boundary real, nunca alegue". Para código, o boundary é rodar o teste. Para um fato sobre o mundo, o boundary é a web ao vivo, e brightdata é como todo agente a alcança.
Pense assim… um tribunal. Um advogado não diz ao júri "tenho quase certeza de que o contrato dizia X" de memória — isso é boato, e é descartado. Ele junta o documento aos autos como prova e lê a linha exata em voz alta. brightdata é como um agente junta fatos da web às provas: ele busca a fonte real e a cita, em vez de testemunhar a partir de uma memória que pode estar errada.
Por que um CLI, e por que este
O CLI fica em /opt/homebrew/bin/brightdata e roda no shell de qualquer agente — Claude Code, Codex, Grok, Kimi, OpenCode, Crush, Goose, pi, o Council. Essa uniformidade é o ponto: cada agente em uma execução cross-agent fundamenta os fatos exatamente do mesmo jeito, então o comportamento é idêntico não importa quem esteja conduzindo. Um MCP por agente ou uma ferramenta de navegador por modelo fragmentaria isso; o shell é a única superfície que todos têm.
O diferencial do Bright Data é o Web Unlocker: uma rede de proxies geolocalizados que renderiza JavaScript e passa por bot-walls, CAPTCHAs e limites de taxa que devolveriam uma página vazia ou um 403 a um curl ingênuo. Então "raspar qualquer site" significa qualquer site, inclusive os que resistem ativamente à raspagem. É uma API paga, então disciplina de custo importa — confira brightdata budget antes de uma execução em massa, e use o modo certo para o trabalho.
A regra rígida, repetida em todo este curso e na configuração global: dado da web é SEMPRE o CLI brightdata — nunca WebSearch/WebFetch, e nunca o MCP do Bright Data (mcp__Bright_Data__*). O CLI é o único caminho uniforme; o MCP e as ferramentas de web embutidas são explicitamente proibidos para que a suíte nunca tenha dois comportamentos de fundamentação diferentes.
2
A regra única
Antes de qualquer outra coisa, internalize a regra. Ela é curta, e sobrescreve qualquer comportamento padrão que um agente possa ter.
A regra
Para qualquer busca na web ou raspagem da web, use o CLI brightdata. Cite a evidência que você recebeu de volta — o comando mais a linha ou o número-chave — em vez de parafrasear de memória.
NUNCA: WebSearch / WebFetch · o MCP do Bright Data (mcp__Bright_Data__*) · responder uma pergunta sobre a web ao vivo a partir da memória de treino
SEMPRE: o CLI brightdata, a partir do shell — o único caminho uniforme que todo agente compartilha
Por que tão absoluto? Porque "normalmente verificar, às vezes chutar" desmorona sob pressão em "chutar". Uma linha nítida — sempre o CLI, sem exceções — é a única versão da regra que um loop autônomo consegue de fato manter. A mesma lógica do Proof Gate: uma verificação que você às vezes pula é uma verificação na qual você não pode confiar.
3
Os quatro modos da caixa de ferramentas
O CLI são na verdade quatro ferramentas sob um único comando. Cada uma responde a um formato diferente de "preciso de algo da web". Leia-as como uma escada — pegue a mais leve que dá conta do trabalho.
brightdata search
Buscar na web (SERP)
Rode uma consulta de buscador real e receba os resultados de volta — títulos, links, trechos. A mesma coisa que você digitaria no Google, mas como dados que seu agente consegue ler.
Use quando: você ainda não sabe qual página guarda a resposta — precisa achar candidatos primeiro.
brightdata scrape
Ler qualquer página (Web Unlocker)
Abra uma URL conhecida e traga seu conteúdo como markdown limpo (ou HTML, um screenshot, ou JSON). Passa por bot-walls e CAPTCHAs que bloqueiam uma busca simples.
Use quando: você já conhece a página exata e só precisa do que ela diz, agora.
brightdata browser
Dirigir um navegador ao vivo
Um navegador real, geolocalizado, que você comanda — clicar, rolar, esperar, capturar a árvore da página. Para páginas que só revelam o conteúdo depois que você interage com elas.
Use quando: uma raspagem de um disparo não basta — o conteúdo está atrás de um clique, uma rolagem ou um fluxo de vários passos.
brightdata pipelines
Mais de 40 datasets estruturados
Entregue uma URL ou um handle a um extrator feito sob medida e receba de volta um registro limpo e tipado — um tweet, uma thread do Reddit, um produto, um perfil, um anúncio — com campos nomeados em vez de sopa de página crua.
Use quando: a fonte é uma plataforma conhecida (X, Reddit, YouTube, Amazon, LinkedIn, …) e você quer campos estruturados, não prosa.
Leia da esquerda → direita: um comando se divide em quatro modos; cada um devolve a mesma coisa — evidência real que você cita em vez de chutar.
4
Aprofundamento de modo: scrape, de ponta a ponta
Pegue um modo — scrape — e olhe-o de perto: o que ele faz, o comando que você de fato digita, e as perguntas que as pessoas fazem na primeira vez que o usam. Os outros três seguem o mesmo formato.
a
O que o scrape faz
brightdata scrape recebe uma URL e devolve o que está naquela página — limpo e pronto para ler. Por padrão ele retorna markdown: o texto e a estrutura da página, sem anúncios, navegação e o resto da bagunça, para que seu agente leia a substância, não a sopa.
A palavra mágica é Web Unlocker. Muitas páginas detectam robôs e lhes servem um muro em branco ou um CAPTCHA. O Unlocker roteia a requisição por um navegador de aparência real a partir de um local de aparência real, roda o JavaScript da página e obtém o conteúdo de verdade — a mesma coisa que uma pessoa veria.
Pense assim… mandar uma pessoa bem-vestida buscar um documento em vez de um robô-entregador óbvio. A recepção que teria barrado o robô simplesmente entrega o arquivo à pessoa. Diferente de uma pessoa, porém, o Unlocker consegue fazer isso milhares de vezes por minuto e nunca se cansa — essa é a parte que a analogia deixa de fora.
Formatos de saída e assíncrono
A flag de formato é -f markdown|html|screenshot|json (markdown é o padrão e geralmente é o que um agente quer — menos tokens, mais sinal). Adicione --country us para escolher a geografia de saída, --mobile para a renderização móvel. Para páginas grandes ou lentas, --async retorna um id de job que você consulta com brightdata status <job-id> para não ficar bloqueado esperando.
Quando uma busca simples retornaria um 403, uma casca vazia ou uma página de desafio JS, o Unlocker é o que transforma isso em conteúdo real. Esse é o motivo inteiro de este CLI existir em vez do curl: ele foi feito para vencer a camada anti-bot.
b
O comando
Três visões do mesmo modo: o scrape do dia a dia, a mesma coisa apontada para uma página com bot-wall, e a forma assíncrona para algo grande.
shell · qualquer agente
# uma página conhecida → markdown limpo (formato padrão)brightdata scrape "https://example.com/pricing"# escolha o formato explicitamentebrightdata scrape "https://example.com/pricing" -f markdown
shell · qualquer agente
# uma página que bloqueia robôs — o Web Unlocker passabrightdata scrape "https://shop.example/item/42"\
--country us \# geografia de saída
-f markdown
# um curl ingênuo aqui levaria um 403 ou uma página de CAPTCHA
shell · qualquer agente
# página grande/lenta → não bloqueie, consulte o resultadobrightdata scrape "https://big.example/report" --async
# → retorna um id de job, ex. job_8f3a…brightdata status job_8f3a
O formato padrão é markdown. Outros modos: brightdata search … · brightdata browser … · brightdata pipelines <type> …
c
Perguntas frequentes
Duas razões. Primeiro, as ferramentas embutidas são bloqueadas exatamente pelas bot-walls e CAPTCHAs que o Web Unlocker foi feito para vencer — então em páginas difíceis elas não retornam nada. Segundo, e mais importante, a suíte quer um caminho de fundamentação que se comporte de forma idêntica em todo agente. A regra é absoluta: apenas brightdata, nunca WebSearch/WebFetch, nunca o MCP.
Se a página é uma plataforma conhecida — um tweet, uma thread do Reddit, um vídeo do YouTube, um produto da Amazon — prefira pipelines: você recebe campos nomeados e tipados em vez de ter que parsear prosa. Use scrape para páginas arbitrárias que não têm um dataset dedicado: uma página de documentação, um post de blog, a página de preços de uma empresa.
Use o modo mais leve que funciona (search/scrape para casos pontuais; pipelines ou --async para massa), e rode brightdata budget antes de um job grande para ver seu saldo e gasto. Faça cache dos achados em research.md para buscar cada fato uma vez, não a cada volta do loop.
Rode brightdata login (ele abre um navegador) ou passe uma chave de API com -k <key>. A configuração — a URL da API e a zona padrão do Web Unlocker — fica em brightdata config. Nunca cole uma chave de API em um prompt ou em um log; oculte-a.
5
Experimente: chutar, ou obter evidência real?
A mesma pergunta feita a dois agentes. Um responde de memória; o outro roda brightdata e cita a fonte. Clique no botão e observe o que cada um faz — apenas em um deles é seguro confiar.
De memória
Agente que chuta
Responde direto dos dados de treino. Sem busca, sem fonte, sem como saber se ainda é verdade.
A resposta dele
—
Sem fonte.
Aguardando uma pergunta.
Fundamentado
Agente de evidência
Roda brightdata, lê a página ao vivo e cita a linha exata de volta para você.
A resposta dele
—
Ainda sem fonte.
Aguardando uma pergunta.
Pergunta: —
Os dois agentes recebem a mesma pergunta sobre a web ao vivo. A diferença é inteiramente se eles buscaram a resposta ou a inventaram.
Chutando — sem busca, sem fonte
functionanswer(question) {
// direto da memória de treino congelada — pode estar desatualizadoreturn model.recall(question); // confiante, possivelmente errado
}
Fundamentado — buscar primeiro, depois citar
functionanswer(question) {
const hit = sh(`brightdata search "${question}" --json`);
const page = sh(`brightdata scrape "${hit.topUrl}"`);
return quote(page); // a linha exata ao vivo + sua fonte
}
Alguns termos, em palavras simples
SERP
Uma página de resultados de buscador — a lista de títulos, links e trechos que você recebe de volta de uma consulta.
ex. o que brightdata search retorna.
Web Unlocker
A camada de proxy do Bright Data que renderiza JavaScript e passa por bot-walls e CAPTCHAs, para que uma raspagem retorne a página real.
ex. o que permite ao brightdata scrape ler uma página que uma busca simples não consegue.
Dataset estruturado
Um extrator feito sob medida para uma plataforma que retorna campos nomeados e tipados em vez de texto cru da página.
ex. brightdata pipelines reddit_posts <url> → um registro com title, upvotes, comments.
Fundamentação
Respaldar uma afirmação com uma fonte real buscada em vez de memória paramétrica — o instinto factual por trás do Proof Gate.
ex. citar a linha raspada, não "acho que dizia…".
Memória paramétrica
O que um modelo "sabe" do treino — congelado na sua data de corte, sem consciência do que mudou desde então.
ex. por que um preço ou versão de memória pode estar silenciosamente desatualizado.
6
Onde ele se conecta ao loop
O CLI não é uma ferramenta secundária — ele alimenta três pontos específicos do loop. O LEARN o usa para ler o estado externo real. A Research (um passo do Forge) o usa para fazer cache de achados reais em research.md. E o VERIFY o usa como o Proof Gate para fatos — puxando evidência real em vez de deixar uma afirmação se apoiar na memória.
Percorra um único fato abaixo e observe onde o brightdata entra. Escolha um caminho, depois pressione Passo.
Caminho:
Os mesmos três passos sempre — precisar de um fato, rodar brightdata, obter evidência — depois ela aterrissa no LEARN, no research.md, ou no gate VERIFY.
Passo 0 — escolha um caminho e pressione Passo
Pronto
Escolha um caminho acima, depois pressione Passo
Cada caminho percorre os mesmos três passos — só o destino muda.
7
Anatomia de uma chamada de pipelines
Quando você pede um registro estruturado, sua entrada passa por algumas etapas de repasse antes de um registro limpo voltar. Aqui está a jornada inteira, uma etapa de cada vez.
★
O que acontece em uma chamada de pipelines
Você entrega ao brightdata pipelines um tipo de dataset (digamos reddit_posts) e uma URL ou handle. Nos bastidores, o Web Unlocker busca a página ao vivo, um extrator feito sob medida para aquela plataforma retira os campos que importam, e você recebe de volta um registro organizado — valores nomeados e tipados em vez de um muro de HTML.
Pense assim… entregar um recibo bagunçado a um contador que conhece o layout exato daquela loja. Você não lê o recibo linha por linha — ele devolve um formulário limpo: data, total, imposto, itens. O extrator é esse contador, e ele já conhece o formato de toda loja que suporta.
Por baixo do capô
O catálogo é ao vivo — brightdata pipelines list imprime todo tipo suportado. São mais de 40: social (x_posts, reddit_posts, instagram_posts, tiktok_posts, facebook_posts), vídeo (youtube_videos), profissional (linkedin_person_profile, linkedin_job_listings), comércio (amazon_product, walmart_product, google_shopping), mapas/viagem (google_maps_reviews, booking_hotel_listings, zillow_properties_listing), finanças/notícias (yahoo_finance_business, reuter_news), e dev (github_repository_file).
O formato de saída é --format json|csv|ndjson|jsonl, e -o <file> grava direto no disco. Para muitos registros, o pipeline pode rodar como um job em massa em vez de uma única chamada bloqueante — o mesmo padrão --async + status do scrape.
◆
Em uma imagem
Leia da esquerda → direita: tipo + URL → busca do Unlocker → parse do extrator → um registro estruturado retorna pela pista inferior.
1Você nomeia um dataset e um alvo~0 ms
Você escolhe o tipo de dataset que combina com a plataforma — reddit_posts para uma thread do Reddit — e passa a URL ou o handle. Nada foi buscado ainda; você apenas disse ao CLI qual extrator usar e para onde apontá-lo.
2O Unlocker busca a página ao vivorede
O Web Unlocker roteia a requisição por um navegador e um local de aparência real, roda o JavaScript da página e obtém o conteúdo real ao vivo — passando por qualquer bot-wall. É o mesmo motor que o scrape usa; o pipelines apenas o aponta para uma plataforma conhecida.
3Um extrator por plataforma a parseia~ms
Um extrator que já conhece o layout desta plataforma retira os valores significativos — título, autor, upvotes, timestamp, comentários — e descarta os anúncios, a moldura e o ruído. Este é o passo que transforma uma página em campos.
4Um registro limpo retornapronto
Você recebe de volta um registro estruturado — campos nomeados e tipados como JSON (ou CSV/NDJSON). Seu agente lê record.upvotes diretamente em vez de garimpar no HTML. Esse registro é a evidência que você cacheia e cita.
⌗
No código
A jornada inteira, como o único comando que você de fato digita — e como descobrir o que está disponível.
shell · qualquer agente
# 0 · descubra o catálogo ao vivo de tipos de datasetbrightdata pipelines list
# 1–4 · nomeie um dataset + um alvo → um registro limpobrightdata pipelines reddit_posts "https://reddit.com/r/…/comments/…" --pretty
# grave muitos registros direto em um arquivobrightdata pipelines amazon_product_search "wireless earbuds"\
--format csv -o earbuds.csv
Acesse você mesmo
A caixa de ferramentas completa e o catálogo de datasets ficam na skill brightdata-cli: cat ~/.claude/skills/brightdata-cli/SKILL.md. A lista ao vivo de tipos de dataset é sempre brightdata pipelines list — confie nela acima de qualquer lista escrita, já que o catálogo cresce.
Confira seu saldo e gasto antes de uma execução em massa com brightdata budget; inspecione as zonas configuradas com brightdata zones e brightdata config.
8
Dentro de um registro de dataset
Então, com o que um registro estruturado de fato se parece? Aqui está um registro com formato real de brightdata pipelines reddit_posts. Clique em qualquer campo à esquerda para aprender o que ele é e como o loop o usa.
brightdata pipelines reddit_posts <url> --pretty
{"title": "Anyone benchmarked the new CLI?","author": "u/bench_nerd","upvotes": 1284,"num_comments": 73,"created_utc": "2026-06-12T08:41:00Z","subreddit": "r/commandline","url": "https://reddit.com/r/…/abc","flair": "Discussion"}
title
string
O título do post, já retirado da página para você — sem parsing de HTML.
Uso no loop: a coisa legível por humanos que você cita quando este post é sua evidência.
Clique em um campo (ou foque nele e pressione Enter) para inspecioná-lo. Oito campos nomeados — esse é o ponto inteiro de um dataset estruturado: sem parsing, apenas record.field.
Uma página bagunçada vira um punhado de campos tipados que o agente lê pelo nome — sem garimpar HTML, só evidência.
9
Um relatório a partir de dados raspados & estruturados
Uma vez que os achados são buscados, o loop os lê como um relatório — não como um muro de saída crua. Aqui uma execução de pesquisa puxou de várias fontes; o painel mostra o que cada modo do brightdata retornou, quão recente é, e o que os números dizem. Aperte Atualizar, ou ligue o Ao vivo.
Evidência de pesquisa — "o CLI ainda é o caminho recomendado?"
brightdata · cacheado em research.md · puxado agora mesmo
Todas as fontes fundamentadas
atualizado agora mesmo
Fontes puxadas
6
▲+2
Busca média
1.4s
▼−0,3 s
Bloqueadas (destravadas)
0
▼Unlocker ligado
Registros
31
▲+12
Evidência por fonte
Fonte
Frescor
Buscada
Modo usado
Recente Desatualizada Bloqueada Ao vivo
Um modelo, duas visões
Uma única lista de objetos de fonte — cada um marcando qual modo o buscou (search, scrape, pipelines, browser), quão desatualizado está, e o tempo de busca — alimenta tanto a tabela quanto a pílula de resumo. "Bloqueadas = 0" é o ponto: o Web Unlocker significa que uma busca não falha silenciosamente e deixa um buraco na sua evidência. O selo de frescor é o que diz ao loop se um achado cacheado em research.md precisa ser puxado de novo.
Por que um relatório, não saída crua
A saída crua de uma raspagem são dezenas de páginas de markdown. O loop (e o humano lendo o log) precisa do formato da evidência num relance: quantas fontes, quão recentes, algo bloqueado. O status nunca é só cor — cada pílula de frescor combina o tom com um rótulo de texto e um ponto.
10
Escolhendo qual modo usar
Você precisa de um fato. Qual dos quatro modos você chama? Raramente há uma única resposta "certa" — cada um faz uma barganha diferente. Aqui estão eles lado a lado; depois escolha sua situação e o modo correspondente se acende.
A
search
Você ainda não conhece a página. Rode uma consulta, receba links candidatos, depois vá buscar o melhor.
A regra não é só um conselho numa lição — está escrita na configuração global que todo agente carrega. Aqui está a instrução de verdade, e onde ela mora.
~/.claude/CLAUDE.md · as seções "Tools" + "NUNCA"
## NUNCA
- WebSearch/WebFetch -> CLI brightdata# (NUNCA o MCP mcp__Bright_Data__*)## Tools
- Web search/scrape: SEMPRE o CLI brightdata
(search / scrape / browser / pipelines)
— NUNCA WebSearch/WebFetch, NUNCA o MCP mcp__Bright_Data__*
Acesse você mesmo
A regra fica nas instruções globais: grep -n "brightdata" ~/.claude/CLAUDE.md. A caixa de ferramentas completa é a skill: cat ~/.claude/skills/brightdata-cli/SKILL.md.
Confirme o binário e a configuração: which brightdata (→ /opt/homebrew/bin/brightdata), depois brightdata config e brightdata pipelines list para o catálogo ao vivo de datasets. Veja docs.brightdata.com para a referência da API subjacente.
12
Exemplo resolvido: uma dúvida, fundamentada
No meio do loop, um Executor está prestes a escrever "a versão mais recente da biblioteca é 3.2". Ele não tem certeza de que isso é atual. Em vez de deixar a afirmação valer, ele a fundamenta — e isso transforma um palpite em evidência cacheada para o resto da execução.
# a dúvida: 3.2 é mesmo a mais recente? → não chute, busque.# 1 · ache a fonte canônica (SERP)brightdata search "acme-lib releases" --json --pretty
# → melhor resultado: a página de releases do pacote# 2 · leia-a passando por qualquer bot-wall (Web Unlocker)brightdata scrape "https://acme.dev/releases" -f markdown
# → "Latest: 4.0.1 — released 2026-06-09"# 3 · cacheie o fato fundamentado em research.md, com sua fonte# acme-lib latest = 4.0.1 (acme.dev/releases, puxado em 2026-06-14)# a afirmação agora é evidência, não memória — e o loop cita 4.0.1, não 3.2.
Essa é a disciplina inteira em três comandos: dúvida → buscar → citar. A memória dizia 3.2; a web ao vivo dizia 4.0.1. O loop entregou a verdade, e nunca teve que descobrir do jeito difícil que sua memória estava um ano desatualizada.
13
Verificação rápida: o modelo aterrissou?
Quatro perguntas rápidas. Escolha uma resposta em cada — ela corrige no clique, e diz o porquê.
Um agente precisa de um preço que pode ter mudado desde o treino. O que ele deve fazer?
Você tem a URL de uma thread do Reddit e quer upvotes e contagem de comentários. Qual modo?
Quais pontos do loop o brightdata alimenta?
Por que a suíte proíbe WebSearch/WebFetch e o MCP do Bright Data de forma absoluta?
Você não terminou de aprender aqui — eu sou seu professor para isto. Peça para eu rodar de novo a demo de palpite-vs-evidência com uma pergunta diferente, percorrer uma chamada de pipelines para uma plataforma que você de fato usa, ou mapear qual modo você usaria no seu próprio fluxo de trabalho. A seguir: Computer Use CLI — o jeito não-bloqueante, apenas via acessibilidade, de um agente dirigir apps nativos do macOS.