Componentes de um agente de programação
(magazine.sebastianraschka.com)- Agente de programação é um sistema composto por um loop de controle e um software harness centrados em um LLM, repetindo escrita de código, execução e feedback
- O agent harness é responsável por gerenciamento de contexto, acesso a ferramentas, composição de prompts e controle de estado; o coding harness, especializado em tarefas de programação, gerencia repositórios, testes e verificação de erros
- Um agente de programação opera com seis componentes: contexto do repositório em tempo real, cache de prompt, acesso a ferramentas, gerenciamento de contexto, memória de sessão e delegação a subagentes
- Mesmo com o mesmo LLM, o desempenho e a experiência do usuário variam muito conforme a qualidade do design do harness, e um harness bem projetado oferece um ambiente de desenvolvimento contínuo e sensível ao contexto
- Mini Coding Agent é um exemplo mínimo implementado em Python puro dessa estrutura, com diferenças em relação ao OpenClaw quanto à especialização em programação e ao escopo operacional
Componentes de um agente de programação
- Agente de programação é um sistema composto por um loop de controle centrado em LLM e pelo software harness que o envolve, com uma estrutura que repete escrita, modificação, execução e feedback de código
- LLM é um modelo básico de previsão do próximo token, enquanto um modelo de raciocínio (reasoning model) é um LLM treinado para realizar mais raciocínio intermediário e verificação
- Um agente é um loop de controle que repete chamadas ao modelo, uso de ferramentas, atualização de estado e decisão de encerramento para atingir um objetivo
- O agent harness é a estrutura de software que envolve esse loop, sendo responsável por gerenciamento de contexto, acesso a ferramentas, composição de prompts e controle de estado
- O coding harness é uma forma especializada para trabalho com código, gerenciando contexto de repositório, execução de código, testes e verificação de erros
Relação entre LLM, modelo de raciocínio e agente
- O LLM pode ser comparado ao motor, o modelo de raciocínio a um motor aprimorado, e o agent harness ao sistema que controla esse motor
- LLMs e modelos de raciocínio podem executar tarefas de programação sozinhos, mas em ambientes reais de desenvolvimento é necessário lidar com contextos complexos como exploração do repositório, busca de funções, execução de testes e análise de erros
- O coding harness maximiza o desempenho do modelo e oferece uma experiência de programação muito mais poderosa do que uma interface simples de chat
Papel do coding harness
- É a camada de software que envolve o modelo e realiza montagem de prompts, exposição de ferramentas, rastreamento do estado dos arquivos, execução de comandos, gerenciamento de permissões, cache e armazenamento de memória
- Mesmo com o mesmo LLM, o desempenho e a experiência do usuário mudam drasticamente dependendo do design do harness
- Por exemplo, até um modelo open-weight como o GLM-5 pode apresentar desempenho semelhante ao de Codex ou Claude Code quando integrado a um harness nesse nível
- Há casos em que a OpenAI manteve modelos de pós-processamento específicos por harness, como GPT-5.3 e GPT-5.3-Codex
6 componentes centrais de um agente de programação
-
1. Contexto do repositório em tempo real (Live Repo Context)
- O agente precisa reconhecer o estado atual do repositório Git, branch, documentação e comandos de teste
- Instruções como “corrigir testes” mudam conforme a estrutura e o contexto do repositório, por isso é preciso coletar antes um resumo do repositório
- Isso evita começar sempre do zero e garante uma base de trabalho estável (stable facts)
-
2. Estrutura do prompt e reutilização de cache (Prompt Shape and Cache Reuse)
- Como resumo do repositório, descrição das ferramentas e instruções gerais mudam pouco, eles podem ser armazenados em cache como “prefixo estável de prompt (stable prompt prefix)”
- Em vez de remontar todo o prompt a cada solicitação, apenas as partes alteradas são atualizadas
- Em sessões repetidas, isso reduz desperdício computacional e mantém a consistência das respostas
-
3. Acesso e uso de ferramentas (Tool Access and Use)
- Em vez de apenas sugerir comandos, o modelo pode executar comandos reais por meio do conjunto de ferramentas definido pelo harness
- Cada ferramenta possui formatos de entrada e saída claros e limites bem definidos, com validação e aprovação antes da execução
- Ex.: “é uma ferramenta conhecida?”, “os argumentos são válidos?”, “o caminho de trabalho está dentro do workspace?”
- Isso melhora segurança e confiabilidade; embora reduza a liberdade do modelo, aumenta a utilidade prática
-
4. Minimização do inchaço de contexto (Minimizing Context Bloat)
- Em sessões longas, leituras repetidas de arquivos, logs e saídas de ferramentas podem causar problemas por excesso de tamanho do prompt
- O harness administra isso com duas estratégias
- Clipping: encurta textos longos, logs e anotações para um tamanho fixo
- Summarization: comprime e resume o histórico antigo da conversa
- Eventos recentes são mantidos em detalhe, enquanto informações antigas passam por remoção de redundâncias e compressão
- Como resultado, a qualidade do contexto afeta mais o desempenho real do que a própria qualidade do modelo
-
5. Memória de sessão estruturada (Structured Session Memory)
- O agente separa o estado entre memória de trabalho (working memory) e transcrição completa da conversa (full transcript)
- O registro completo inclui todas as requisições, respostas e saídas de ferramentas, permitindo retomar a sessão
- A memória de trabalho armazena em forma resumida as informações importantes do momento, como tarefa atual, arquivos principais e notas recentes
- A transcrição compactada (compact transcript) serve para reconstruir o prompt do modelo, enquanto a memória de trabalho mantém a continuidade da tarefa
-
6. Delegação com subagentes limitados (Delegation With Bounded Subagents)
- O agente principal cria subagentes para processar tarefas auxiliares em paralelo
- Ex.: separar em subtarefas a localização da definição de um símbolo, o conteúdo de um arquivo de configuração ou a causa da falha de um teste
- Os subagentes herdam apenas o contexto necessário e operam com restrições como somente leitura e limite de profundidade recursiva
- Tanto Claude Code quanto Codex oferecem suporte a subagentes, definindo limites por escopo da tarefa e profundidade de contexto
Resumo dos componentes
- Os seis componentes estão fortemente conectados entre si, e a qualidade do design do harness determina a eficiência do uso do modelo
- Um coding harness bem projetado oferece um ambiente de suporte ao desenvolvimento muito mais contínuo e sensível ao contexto do que um simples chat com LLM
- Mini Coding Agent (https://github.com/rasbt/mini-coding-agent) é um exemplo mínimo implementado em Python puro dessa estrutura
Comparação com OpenClaw
- OpenClaw está mais próximo de uma plataforma geral de agentes do que de um assistente dedicado exclusivamente à programação
- Pontos em comum:
- Uso de arquivos de prompt e instruções no workspace (
AGENTS.md,TOOLS.mdetc.) - Inclusão de arquivos de sessão em JSONL, compressão de conversa e gerenciamento de sessão
- Possibilidade de criar sessões auxiliares e subagentes
- Uso de arquivos de prompt e instruções no workspace (
- Diferenças:
- Agentes de programação são otimizados para exploração de repositório, edição de código e execução de ferramentas locais
- OpenClaw prioriza operação de agentes de longo prazo entre múltiplos canais e workspaces
Apêndice: anúncio de novo livro
- Concluída a escrita de Build A Reasoning Model (From Scratch), com acesso antecipado (Early Access) já disponível
- A editora está trabalhando no layout com meta de publicação no verão
- O livro é estruturado em torno de uma abordagem para compreender mecanismos de raciocínio de LLMs por meio de implementação direta
1 comentários
Comentários do Hacker News
context longo continua sendo caro, e se houver muita informação desnecessária, isso vira ruído
Por isso, acho que geração baseada em spec é melhor do que programação conversacional
O Ossature que eu fiz segue a abordagem oposta. Primeiro você escreve uma spec descrevendo o comportamento; antes de gerar código, ele audita lacunas ou contradições e gera um build plan em TOML especificando quais seções da spec e quais arquivos cada tarefa referencia
O LLM vê só o necessário, sem acúmulo de histórico de conversa. Todos os prompts e respostas são salvos em disco, então a rastreabilidade fica garantida automaticamente
Recentemente, construí um emulador de CHIP-8 inteiramente só com spec dessa forma, e também há projetos de exemplo
Antes, todos em uma equipe sabiam o que estava sendo construído, mas agora o agente recomeça do zero toda vez
Por isso, vejo o fluxo chat → spec → code como o futuro. A etapa spec → code precisa rodar sem intervenção humana
Se a especificação estiver ambígua, ele deve perguntar claramente ao humano e então gerar o código com base nisso
Hoje, pedidos ambíguos só se repetem, e o humano também não aprende por que isso acontece. “memory” ou arquivos de agente são apenas paliativos
Em vez de conversa, forneço ao LLM um context projetado a partir do código e da spec, e componho esse context de forma diferente em cada etapa
Isso evita drift causado por context acumulado, e meu código, não o LLM, controla o workflow
Achei interessante a ideia de usar TOML como artifact de passagem entre etapas e pretendo me inspirar nela
O usuário pode revisar o diff criado pelo Agent A e se livra da validação repetitiva de código
O ponto central é sempre preservar a intenção (intent). É preciso armazenar a especificação e o contexto como estão
O custo deve ser 2 a 3 vezes maior, mas no longo prazo parece mais eficiente
Acho a abordagem baseada em spec muito melhor. Fiquei curioso sobre como entra a participação humana — se você edita spec e audit em paralelo, qual é a taxa de sucesso na geração de código e se pretende aplicar isso também a código existente
Fiquei curioso para saber como o Ossature difere dessa abordagem
É surpreendente ter extraído o potencial dos LLMs só com uma state machine simples e uma abordagem em bash
O ecossistema de agentes hoje está cheio de recursos excessivos e decisões ruins
Há 10 anos se dizia que ferramentas assim exigiam responsabilidade; agora estamos num período confuso, misturando medo e hype
O modelo já tem o conhecimento, mas para levá-lo a agir de forma prática, o desenho do context é crucial
Traduzir a solicitação do usuário para o nível de um desenvolvedor experiente e conectar as ferramentas necessárias parece um caminho promissor
Mesmo modelos open source, com um agente bem otimizado e um pouco de tuning, podem competir muito bem
É preciso um harness complexo, mas é isso que faz o LLM funcionar de forma determinística como ferramenta
Dá para montar livremente a lógica que você quiser, em vez de depender de pipelines
O exemplo é conciso e claro
Não uso agentes de programação, mas este texto ajuda a entender a essência dos agentes de programação
Mostra bem como até um código útil de apenas 1k LOC pode virar uma bagunça de 500k LOC
Muita gente já está conectando modelos abertos como GLM-5 ao Claude Code ou ao Codex CLI
A documentação oficial do GLM também recomenda isso
O texto foi impressionante. Eu criei um agente não voltado a código baseado em email, e o princípio é parecido
Em cada loop de email, o context recomeça do zero, o que resolve naturalmente o problema de acúmulo de context
É importante equilibrar o context que entra no prompt inicial e o context separado em ferramentas
Também é preciso considerar caching e custo de tokens
Escrevi os detalhes neste post do meu blog
Não gosto da palavra “harness”. Fico pensando se não haveria um termo melhor
tool output truncation é muito eficaz para reduzir o inchaço do context
Eu monto o context com base em SQLite e, quando necessário, restauro chamadas de ferramenta truncadas por ID de mensagem
Os experimentos relacionados estão documentados aqui
Rodar o Claude Code com outros modelos é algo comum
Também aparece na documentação de exemplo
Mas, pela minha experiência, ainda não alcança o nível dos modelos da Anthropic
O Opus só vale o custo em cerca de 5% dos casos
Achei o OpenCode muito melhor que o Claude Code, então comprei créditos de API no OpenRouter
O OpenCode já é suficientemente poderoso apenas com comandos customizados e definições simples de agente
Se você definir o workflow com AGENTS.md, ROADMAP.md etc., isso basta para a maioria dos projetos
Em vez de um harness complexo, acho que uma estrutura flexível responde melhor às mudanças dos modelos mais novos
O avanço dos agentes de programação vem mais da melhora da estrutura ao redor (scaffolding) do que do modelo em si
Quando você tem ferramentas, context do repositório e uma máquina de estados simples, o gargalo passa a ser a qualidade do context
O texto foi impactante. Eu também costumo explicar agentes de programação com a analogia de motor/carro
Se quiser experimentar os componentes básicos, vale conferir o OpenHands software-agent-sdk