Passo 11 · As ferramentas · As ferramentas · Loop Engineering ENPT
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 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.

brightdata um CLI, quatro modos search SERP — achar páginas candidatas scrape ler uma página · Web Unlocker browser dirigir uma sessão ao vivo pipelines mais de 40 datasets estruturados evidência real cite — não chute
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 explicitamente
brightdata scrape "https://example.com/pricing" -f markdown

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

function answer(question) {
  // direto da memória de treino congelada — pode estar desatualizado
  return model.recall(question);   // confiante, possivelmente errado
}

Fundamentado — buscar primeiro, depois citar

function answer(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:
um fato da web é necessário brightdata … search / scrape / pipelines evidência real uma linha citável para o LEARN o estado real research.md achados cacheados gate VERIFY prova para fatos
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


chamada → sua chamada tipo + URL Web Unlocker busca página ao vivo Extrator parseia campos Registro campos JSON despacho html parseado registro limpo devolvido ao agente
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 vivo rede

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 retorna pronto

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 dataset
brightdata pipelines list

# 1–4 · nomeie um dataset + um alvo → um registro limpo
brightdata pipelines reddit_posts "https://reddit.com/r/…/comments/…" --pretty

# grave muitos registros direto em um arquivo
brightdata 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.

página crua <div><span>…</span> anúncios · moldura · ruído extrai title · string upvotes · number created_utc · timestamp url · link o agente lê record.upvotes
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

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.

B

scrape

Você conhece a URL exata. Leia-a agora — passando por qualquer bot-wall — como markdown limpo.

brightdata scrape "https://site/pricing" \
  -f markdown

Prós

  • +Conteúdo real de qualquer página.
  • +Vence CAPTCHAs e 403s.

Contras

  • Você já precisa conhecer a URL.
  • Prosa, não campos nomeados.
Escolha quando Você tem a página e só precisa do que ela diz.
C

browser

O conteúdo só aparece depois que você clica, rola ou espera. Dirija uma sessão real passo a passo.

brightdata browser "https://app/feed" \
  --interactive --full-page

Prós

  • +Lida com fluxos de vários passos / logados.
  • +Captura a árvore da página ao vivo.

Contras

  • O modo mais pesado e mais lento.
  • Exagero para uma página estática.
Escolha quando Uma raspagem de um disparo não alcança — está atrás de interação.
D

pipelines

A fonte é uma plataforma conhecida. Receba campos nomeados e tipados em vez de sopa de página.

brightdata pipelines x_posts \
  "https://x.com/…/status/…" --pretty

Prós

  • +Campos limpos — sem parsing.
  • +Mais de 40 plataformas; amigável a massa.

Contras

  • Apenas para plataformas suportadas.
  • Inútil para uma página arbitrária.
Escolha quando É X / Reddit / YouTube / Amazon / LinkedIn / …

Eu preciso…

11

No código


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.