O ego (lite) é só um navegador, o ego é o teu agente pessoal em todos os dispositivos.
Junta-te à lista de espera
Agentes de IAFerramentas do agenteHeredocREPLAutomatização do navegadorego-browser

Porque é que a execução em estilo heredoc é mais adequada para agentes de IA do que um REPL em 2026

14/07/202610 min de leitura
Pintura em impasto de um campo de flores silvestres cor-de-rosa que se estende até montanhas azuis em camadas, sob um céu rosa suave

Os primeiros agentes de programação revelaram algo surpreendentemente poderoso: dá a um agente acesso a Bash e ele consegue fazer quase tudo — desde escrever código e reunir contexto até gerir fluxos de trabalho completos no Git.

Essa perceção ajudou a alimentar um movimento mais amplo em direção ao software CLI-first. As interfaces de linha de comandos começaram a parecer a forma padrão de tornar aplicações complexas acessíveis a agentes de IA, dando origem a um slogan conhecido:

Uma CLI é tudo o que precisas.

Mas há um custo escondido. Os agentes costumam usar um terminal quase como uma pessoa faria: correr um comando curto, inspecionar o resultado e depois decidir o que fazer a seguir. À medida que as tarefas se tornam mais complexas, isto gera mais idas e voltas entre o modelo e as suas ferramentas, ou seja, mais chamadas ao LLM, mais contexto desperdiçado e mais tempo de espera.

Em vez de pedir aos agentes para montarem scripts de shell complicados, preferimos que coordenem tarefas numa linguagem de programação que já conhecem. Isto leva a uma arquitetura ligeiramente diferente:

Manter a CLI como ponto de entrada universal, mas usar código como a forma real de interagir com o software.

O agente submete um bloco de código que contém as operações, decisões e o processamento de dados que, de outra forma, estariam espalhados por várias rondas de interação. O runtime local executa depois o fluxo de trabalho.

ego-browser was built around this idea. Its CLI launches a programmable environment, the browser exposes its capabilities through a small set of functions, and the agent uses its existing programming skills to compose those functions and orquestrá-las.

Neste artigo, comparamos heredoc e REPL, duas formas de executar código através de uma CLI, e partilhamos os resultados experimentais do ego-browser. Com heredoc, o agente terminou as mesmas tarefas com menos 44% de rondas de execução, menos 35.5% de chamadas a ferramentas e um custo 21.6% mais baixo.

“Uma CLI é tudo o que precisas” — e depois?

A afirmação de que “uma CLI é tudo o que precisas” assume que o modelo já sabe usar essa CLI.

Para ferramentas conhecidas como Git, Docker e FFmpeg, isto normalmente não é um problema. Os modelos viram inúmeros comandos, tutoriais, scripts e mensagens de erro durante o treino, e já sabem os argumentos e como os comandos se encaixam.

Mas quando construímos uma CLI totalmente nova para agentes, o cenário muda. Cada CLI tem os seus próprios subcomandos, argumentos, formatos de saída e semântica de erros. Para o modelo, é essencialmente uma nova mini-linguagem. Mesmo com documentação completa, o modelo ainda tem de aprender primeiro as regras e só depois, através de chamadas repetidas, perceber como os comandos se encaixam.

Ao expor as mesmas capacidades como uma API de JavaScript, ou numa API em qualquer outra linguagem, o modelo ainda tem de aprender os novos conceitos de domínio, mas já não precisa de reaprender controlo de fluxo, estruturas de dados ou composição. Ciclos, condições, tratamento de exceções e processamento de dados ficam todos numa linguagem de programação que já conhece.

Repara numa tarefa simples: abrir uma página web e ler o seu título principal. Se o ego-browser expusesse uma interface tradicional em estilo comando, o agente poderia precisar de vários passos para a concluir:

# First call: open the page
ego-browser open https://example.com

# Tool response: the page is open

# Second call: locate the main heading
ego-browser find --role heading

# Tool response: a heading was found

# Third call: read the heading
ego-browser read --role heading

Depois de cada passo, o agente espera pela ferramenta, lê o resultado e decide o que fazer a seguir.

A interface de código que o ego-browser realmente usa permite-lhe exprimir o fluxo de trabalho inteiro de uma só vez:

await taskSpaces.useOrCreate("read example page");
await browser.openOrReuseTab("https://example.com", { wait: true });

const heading = await page.getByRole("heading").textContent();
console.log(heading);

As duas abordagens fazem o mesmo trabalho. A interface em estilo comando divide o processo em várias rondas de interação entre modelo e ferramenta; a interface em código deixa o agente escrever o processo completo de uma vez e entregá-lo ao runtime local.

É exatamente a ideia de design mencionada antes: manter a CLI como ponto de entrada universal, mas usar código como a interface real para o software. Mantém a vantagem da CLI de ser fácil de chamar e integrar, ao mesmo tempo que deixa o modelo usar as competências de programação que já tem para compor e orquestrar.

Quando a CLI se torna uma porta de entrada para código

Depois de uma CLI aceitar código, a próxima questão é: como deve o agente entregar esse código ao ambiente de execução?

Rigorosamente falando, heredoc é sintaxe de input de shell e REPL é um modo de execução de interpretador; os dois não estão ao mesmo nível de abstração. O que este artigo realmente compara é a execução de código de uma só vez, introduzido através de um heredoc no ego-browser, contra uma sessão interativa persistente construída sobre um REPL. Por brevidade, chamamos-lhes simplesmente heredoc e REPL a partir daqui.

Uma opção é o heredoc. No ego-browser, o agente submete um bloco inteiro de JavaScript de uma só vez:

ego-browser nodejs <<'EOF'
await taskSpaces.useOrCreate("read example page");
await browser.openOrReuseTab("https://example.com", { wait: true });

const heading = await page.getByRole("heading").textContent();
console.log(heading);
EOF

A shell passa o código ao ego-browser, espera que termine, recebe o resultado e sai. Para o agente, isto comporta-se como uma chamada a ferramenta convencional:

Submit command → wait for process → receive result

Um REPL funciona de forma diferente. O interpretador mantém-se ativo, permitindo ao agente introduzir código repetidamente enquanto mantém variáveis e o estado da sessão:

> await browser.openOrReuseTab("https://example.com", { wait: true })
< Tab {...}

> await page.getByRole("heading").textContent()
< "Example Domain"

Em termos de poder expressivo, os dois são essencialmente equivalentes. Um REPL consegue correr um programa completo com ciclos, condições e tratamento de exceções de uma só vez, e um heredoc pode submeter apenas uma linha.

A diferença clara está no ciclo de vida do processo. Com um heredoc, o processo termina assim que o código acaba de correr; um REPL mantém o processo do interpretador vivo, à espera de mais input. Isto também significa que os dois impõem exigências diferentes às ferramentas do agente. Um heredoc corre diretamente sobre o modelo familiar de pedido-resposta:

submit the command → wait for the process to exit → get the result

Um REPL exige mais da ferramenta: processos persistentes, gestão de sessão, input contínuo, interrupção e recuperação. A maioria das ferramentas Bash integradas nos agentes não tem estas capacidades. De entre os produtos mais usados hoje, só o Codex as suporta razoavelmente bem. E o suporte da ferramenta é apenas uma condição necessária para usar um REPL — não decide como o modelo o vai realmente usar. Mesmo quando os dois ambientes conseguem correr o mesmo código, o modelo pode continuar a escrevê-lo de forma diferente em cada um.

Como os modelos escrevem código em cada ambiente

Em teoria, um modelo tem a mesma capacidade de programação nos dois ambientes. Na prática, observámos uma diferença de comportamento consistente:

  • Num REPL, o modelo tende a introduzir código de forma incremental.
  • Num heredoc, é mais provável que gere um programa completo de uma só vez.

O software para pessoas tem de ter em conta a ergonomia. O software para agentes precisa de uma disciplina semelhante: chama-lhe engenharia de experiência do modelo. Uma interface deve funcionar com os padrões de comportamento que os modelos desenvolveram durante o treino.

O contraste entre REPL e heredoc reflete a distribuição dos respetivos dados de treino.

Os exemplos de REPL costumam vir de tutoriais, sessões de depuração e trocas de perguntas e respostas. O seu padrão típico é exploratório:

> Get the page
< Return page information

> Find an element
< Return element information

> Read its contents
< Return the text

Os blocos de código em heredoc parecem-se mais com scripts ou ficheiros-fonte. Têm um início e um fim explícitos, o que leva o modelo a produzir um fluxo de trabalho contínuo:

const page = await openPage();
const element = await findElement(page);
const text = await readText(element);

console.log(text);

Isto não significa que um REPL seja incapaz de correr programas completos. O modelo podia submeter o mesmo bloco de código a um REPL num só passo.

A distinção é contextual. Um REPL incentiva um padrão de executar, observar, continuar padrão. Um heredoc incentiva um padrão de organizar primeiro, executar depois padrão.

Essa tendência também determina onde vive o controlo de fluxo. Num REPL, o modelo tende a dividir a tarefa em várias etapas e a decidir o que fazer depois de cada resultado. Num heredoc, tende a colocar ciclos, condições, filtragem e processamento de dados diretamente no programa e a deixar o runtime local tratar deles.

O que as experiências mostraram

De entre as ferramentas de agentes mais usadas que conseguimos integrar de forma fiável, o Codex foi a que ofereceu as capacidades de execução que um REPL persistente exige. Por isso construímos um benchmark automatizado sobre o SDK do Codex: o mesmo agente completou quatro tipos de tarefas reais de navegador através de REPL e de heredoc, e agregámos os resultados de várias execuções repetidas para comparação.

As tarefas foram:

  • X trending-post analysis (a typical social media scraping workload): Recolhe as publicações originais da OpenAI dos últimos sete dias, exclui publicações fixadas, republicações e respostas, ordena as cinco melhores por visualizações e calcula as suas taxas de interação e a média geral.
  • Candidatura a emprego na OpenAI: Encontra a vaga certa de Cloud Infrastructure em São Francisco, carrega um currículo, preenche o formulário de candidatura e para antes da submissão final.
  • Cálculo de hipoteca no Redfin: Filtra imóveis em Austin por tipo de casa e preço, abre o primeiro resultado depois de ordenar, muda a entrada inicial para 20% e obtém a prestação mensal estimada atualizada.
  • Pesquisa de voos na Expedia: Encontra um voo só de ida, sem escalas, de JFK para MIA, seleciona a opção mais barata de uma companhia aérea específica, insere os dados do passageiro e para antes do pagamento.
Benchmark entre heredoc e REPL, mostrando um custo médio 21.6% mais baixo e menos 35.5% de chamadas a ferramentas com heredoc
A mesma carga de trabalho concluída com um custo médio 21.6% mais baixo e menos 35.5% de chamadas a ferramentas usando heredoc.

These tasks covered more than opening pages and reading text. They included structured extraction, conditional filtering, navigation across pages, file uploads, form completion, page-state changes, and calculations, covering most of the common operations performed by browser agents.

As duas abordagens concluíram a maioria das tarefas. O heredoc atingiu uma taxa de sucesso de 77.5%, contra 75.0% do REPL. A diferença de fiabilidade foi modesta.

A diferença maior estava na eficiência:

  • O tempo médio de conclusão caiu 35.0%.
  • O tempo mediano de conclusão caiu 30.7%.
  • As chamadas a ferramentas caíram 35.5%.
  • O consumo de tokens caiu 29.8%.
  • O custo médio caiu 21.6%.

Embora um REPL possa reutilizar o estado do runtime, essa vantagem não se traduziu em menos interações. Na prática, o agente em heredoc fez menos chamadas a ferramentas.

Os resultados coincidiram com as nossas observações anteriores. Dentro de um REPL, o agente costumava correr um pequeno pedaço de código, examinar o resultado e só depois decidir o que fazer a seguir. Ciclos, filtros e decisões que podiam ter sido tratados dentro de um único programa acabavam, em vez disso, distribuídos por várias trocas entre modelo e ferramenta.

Os dois ambientes oferecem um poder expressivo semelhante. A diferença de eficiência entre eles vem sobretudo de como os seus padrões de interação moldam o comportamento do agente. Pelo menos nestas quatro tarefas de agente-navegador, o heredoc incentivou de forma mais consistente o modelo a organizar um programa completo, a colocar ciclos, filtragem e decisões dentro do código, e a evitar as idas e voltas extra da tomada de decisão passo a passo.

Também examinámos se o mesmo padrão se mantinha a maior escala, comparando o ego-browser com um produto semelhante de automação de navegador baseado em REPL no dataset Odysseys. Ao contrário da experiência controlada acima, esta comparação envolveu dois produtos completos, e não o mesmo modelo a operar através de duas interfaces. É por isso útil como comparação geral de eficiência, mas as suas diferenças não podem ser atribuídas inteiramente a heredoc versus REPL.

Comparação no dataset Odysseys, mostrando menos rondas de interação no total para o ego-browser do que num produto de navegador baseado em REPL
No dataset Odysseys, o ego-browser usou menos rondas de interação no total e em todos os níveis de dificuldade.

Isto não é uma vitória permanente para o heredoc

Não acreditamos que o heredoc seja inerentemente superior ao REPL.

A nossa conclusão depende das capacidades dos modelos, da distribuição dos seus dados de treino e do desenho das ferramentas de agentes tal como existem em 2026.

Os agentes de hoje são, em geral, melhores a produzir um bloco de código completo de uma só vez. As suas ferramentas de shell também são concebidas em torno de um ciclo de vida simples: submeter um comando, esperar que termine e devolver o resultado. Nessas condições, o heredoc facilita reduzir o número de rondas de interação e mover o controlo de fluxo para código executado localmente.

Essas condições podem mudar rapidamente.

As futuras ferramentas de agentes poderão oferecer sessões persistentes fiáveis, outputs estruturados e recuperação robusta de estado. Os agentes poderão deixar de ter de gerir prompts de REPL, estado de processo e sessões interrompidas por conta própria. Um treino direcionado também poderia ensinar os modelos a submeter programas completos de forma proativa dentro de um REPL, em vez de cair numa interação passo a passo desnecessária.

Se isso acontecer, os REPLs poderão preservar as vantagens da reutilização de estado e do feedback imediato sem exigir mais chamadas ao modelo. Podem até tornar-se a melhor escolha para tarefas com inicialização dispendiosa, estado de longa duração ou um fluxo de trabalho genuinamente exploratório.

É por isso que o título especifica 2026. Não estamos a afirmar ter descoberto uma lei permanente. É um juízo de engenharia válido para este momento, baseado nos modelos e nas ferramentas de agentes disponíveis hoje.