O que é um harness de agentes?

Um harness de agentes é a camada em volta de um modelo de linguagem que transforma chamadas isoladas ao modelo em um agente: ele roda o loop, executa as ferramentas que o modelo pede, gerencia a janela de contexto e decide o que o modelo tem permissão para fazer.

Onde ficam os limites

O termo fica mais fácil de definir por eliminação. Um agente de programação em execução tem quatro camadas, e só duas delas são o harness. Abaixo dele há um modelo que você não treinou e uma API HTTP que você não controla; acima, o que quer que desenhe a saída na tela. O harness é tudo o que fica no meio — ou seja, tudo o que precisa ser decidido.

CamadaResponsávelO que ela decide
Pesos do modelo e inferênciaO provedorAnthropic, OpenAI, Google ou um runtime na sua própria máquina.
Formato de transmissãoO provedorO formato HTTP próprio de cada fornecedor para mensagens, ferramentas e streaming.
Loop do agenteO harnessChamar, ler a resposta, executar o que foi pedido, chamar de novo e parar quando terminar.
Execução de ferramentasO harnessValidar argumentos, executar a ferramenta e decidir o que roda em paralelo.
Ferramentas externas (MCP)O harnessDescobrir servidores, dar namespace às ferramentas deles e falar JSON-RPC com eles.
ContextoO harnessO que fica na janela, o que é compactado e o que é recuperado de antes.
PermissõesO harnessO que o agente pode fazer sem perguntar e o que ele precisa perguntar antes.
RenderizaçãoO frontendUm terminal, um navegador, uma janela de desktop ou nenhuma tela.

Leia a tabela de cima para baixo e o motivo de o termo existir fica óbvio: as duas linhas do topo mudam a cada poucos meses, a linha de baixo é questão de gosto, e as cinco do meio são onde moram de fato todas as decisões difíceis de um agente. Dar nome a esse meio é o papel da palavra.

Por que ser independente do modelo é a parte difícil

Quase todo harness é escrito para um fornecedor e adaptado aos outros depois. Essa ordem é o problema: as premissas do primeiro fornecedor acabam no armazenamento da conversa, no schema das ferramentas, na forma de interpretar uma resposta em streaming — lugares onde ninguém pensa em olhar depois. Trocar passa a significar uma migração, e uma migração no meio de uma sessão significa que você não troca.

A alternativa é guardar o histórico em um formato que não pertence a nenhum fornecedor e convertê-lo para o formato de transmissão do fornecedor no momento em que a requisição sai. Nada é convertido quando o modelo muda, porque nada esteve no formato do modelo antigo. Essa é a decisão de design em torno da qual o OHarness foi construído, e a página de arquitetura descreve como a separação em camadas é imposta, e não apenas pretendida.

Harness, framework, SDK

  • Um SDK leva uma requisição até um modelo e traz a resposta de volta. Uma chamada, um fornecedor, nenhuma memória da anterior.
  • Um framework dá a você peças para montar um agente. Você ainda decide o loop, as novas tentativas, a política de compactação — e fica responsável por elas depois.
  • Um harness é a coisa já montada. O loop, a execução de ferramentas, o gerenciamento de contexto e as permissões já estão decididos; você fornece ferramentas, um modelo e uma política.

O teste prático é o que acontece no dia em que você quer outro modelo. Com um SDK, você reescreve o ponto de chamada. Com um framework, você descobre quantas das suas próprias peças assumiam o fornecedor antigo. Com um harness feito para isso, você muda uma configuração.

Perguntas frequentes

Um harness de agentes é a mesma coisa que um framework de agentes?

Eles se sobrepõem, e a distinção útil é o que você tem nas mãos no final. Um framework pede que você monte um agente com as peças dele — você escreve o loop, o grafo, as novas tentativas. Um harness é o loop, já escrito: você entrega ferramentas, um modelo e um conjunto de permissões, e ele roda. A maioria dos frameworks pode ser usada para construir um harness; o harness é aquilo que você teria que construir de qualquer jeito.

Se o fornecedor já oferece um SDK, eu preciso de um harness?

O SDK do fornecedor leva você até uma chamada ao modelo e para por aí. Ele não tem opinião sobre quando chamar de novo, o que fazer com o resultado de uma ferramenta, o que descartar quando a janela de contexto enche ou se um comando de shell deve rodar sem perguntar. Essas decisões são o harness, e se você não adotar um, vai acabar escrevendo um — normalmente sem querer, espalhado pelo código, preso a um único fornecedor.

Um harness consegue falar com mais de um provedor de modelos?

Consegue, mas só se tiver sido construído assim desde o início. A parte difícil não é o HTTP: é que o histórico da conversa, as definições de ferramentas e a saída em streaming têm todos um formato moldado pelo fornecedor, e um harness que guarda o histórico no formato de um fornecedor precisa migrá-lo para trocar. Guardar o histórico em um formato neutro e convertê-lo para o formato de transmissão do fornecedor só no momento da requisição é o que torna a troca gratuita.

Existe um harness de agentes open source?

Vários publicam o código-fonte, entre eles OpenCode, Cline e Gemini CLI. O OHarness é grátis e seus pacotes npm são publicados sob a licença MIT, mas o repositório do código-fonte é privado por enquanto. Ele fala nativamente com Anthropic, OpenAI e Google Gemini, com qualquer endpoint compatível com OpenAI e com runtimes locais como Ollama, LM Studio e vLLM — e roda no terminal, no navegador, em um app para desktop e em modo headless, tudo no mesmo motor.

Experimente a implementação

O OHarness é um harness de agentes independente do modelo e grátis: duas dependências de runtime, todos os provedores acessados via fetch e SSE puros e seu próprio cliente MCP. A documentação é escrita ao lado do código que ela descreve, e a página de download tem as versões para desktop e a linha de comando.