Phase 14 - Lesson 32
The Minimal Agent Workbench
Tipo: Construir Linguagens: Python (stdlib) Pré-requisitos: Fase 14 · 31 (Por Que Modelos Capazes Ainda Falham) Tempo: ~45 minutos
Objetivos de Aprendizado
- Definir os três arquivos que formam a bancada de trabalho mínima viável.
- Explicar por que um roteador raiz curto supera um arquivo
AGENTS.mdlongo e monolítico. - Construir um arquivo de estado que o agente possa ler a cada turno e escrever no final.
- Construir um quadro de tarefas que sobreviva a trabalhos de múltiplas sessões sem histórico de chat.
O Problema
A maioria das equipes tenta criar uma bancada escrevendo um arquivo AGENTS.md de 3000 linhas e considerando o trabalho concluído. O modelo o carrega, ignora as partes que não consegue resumir e ainda falha nas mesmas superfícies de sempre.
Você precisa do oposto. Um arquivo raiz minúsculo que direcione o agente para arquivos mais profundos apenas quando for relevante. Estado durável que o agente lê antes de agir e escreve depois. Um quadro de tarefas que diz o que está em andamento, o que está bloqueado e o que vem a seguir.
Três arquivos. Cada um com uma função. Cada um legível por máquina o suficiente para evoluir para um sistema real mais tarde.
O Conceito
flowchart LR
Agent[Loop do Agente] --> Router[AGENTS.md]
Router --> State[agent_state.json]
Router --> Board[task_board.json]
State --> Agent
Board --> Agent
AGENTS.md é um roteador, não um manual
Um bom AGENTS.md é curto. Ele aponta o agente para:
- O arquivo de estado (onde você está).
- O quadro de tarefas (o que resta).
- As regras mais profundas (sob
docs/agent-rules.md). - O comando de verificação (como saber se funciona).
Qualquer coisa mais longa vai para documentos mais profundos, carregados apenas quando necessário. Manuais longos são ignorados. Roteadores curtos são seguidos.
agent_state.json é o sistema de registro
O estado carrega: o active task id, os arquivos modificados (touched files), as premissas adotadas, os bloqueadores e a próxima ação. O agente o lê a cada turno. A próxima sessão o lê em vez de reproduzir o chat.
O estado reside em um arquivo porque o histórico de chat não é confiável. Sessões expiram. Conversas são cortadas. O arquivo permanece.
task_board.json é a fila
O quadro de tarefas carrega cada tarefa com o status todo | in_progress | done | blocked. É a fila da qual o agente consome quando o estado está vazio, e a fila que você lê quando quer saber se o agente está no caminho certo.
Uma tarefa no quadro tem um id, um objetivo (goal), um proprietário (builder, reviewer ou human) e critérios de aceitação. O quadro é pequeno de propósito: quando ele cresce mais do que uma tela, você tem um problema de planejamento, não de quadro.
Três arquivos é o piso, não o teto
Lições posteriores adicionam contratos de escopo, executores de feedback, portões de verificação, listas de verificação do revisor e pacotes de transição. Os três arquivos aqui são o que todos eles assumem.
Construa
code/main.py escreve a bancada mínima em um repositório vazio e demonstra um único turno do agente que:
- Lê
agent_state.json. - Puxa a próxima tarefa de
task_board.jsonse o estado estiver vazio. - Modifica um único arquivo dentro do escopo.
- Grava de volta o estado atualizado.
Execute-o:
python3 code/main.py
O script cria workdir/ ao lado de si mesmo, define os três arquivos, executa um turno e imprime o diff. Execute-o novamente para ver como o segundo turno recomeça de onde o primeiro parou.
Use-o
Dentro de produtos de agentes em produção, os mesmos três arquivos aparecem sob nomes diferentes:
- Claude Code:
AGENTS.mdouCLAUDE.mdpara o roteador, armazenamentos no estilo.claude/state.jsonpara o estado, hooks para o quadro. - Codex / Cursor: regras do espaço de trabalho (workspace rules) para o roteador, memória de sessão para o estado, tarefas enfileiradas na barra lateral do chat para o quadro.
- Custom Python agent: os mesmos arquivos que você acabou de escrever.
Os nomes mudam. O formato não.
Padrões de produção em uso real
A bancada mínima sobrevive ao contato com monorepos reais quando três padrões são aplicados sobre ela. Eles são independentes; escolha aqueles de que seu repositório realmente precisa.
Arquivos AGENTS.md aninhados com precedência de proximidade. A OpenAI envia 88 arquivos AGENTS.md em seu repositório principal, um por subcomponente. Codex, Cursor, Claude Code e Copilot percorrem o caminho a partir do arquivo de trabalho em direção à raiz do repositório e concatenam cada AGENTS.md que encontram no caminho. Arquivos de subdiretório estendem o arquivo raiz. O Codex adiciona AGENTS.override.md para substituir em vez de estender; o mecanismo de override é específico do Codex e deve ser evitado em trabalhos entre ferramentas. A medição da Augment Code é a métrica que importa: os melhores arquivos AGENTS.md proporcionam um salto de qualidade equivalente a atualizar do Haiku para o Opus; os piores tornam a saída pior do que se não houvesse arquivo nenhum.
Antipadrões a recusar, mesmo quando parecem dar cobertura. Instruções conflitantes silenciosamente rebaixam o agente do modo interativo para o modo guloso (greedy) (ICLR 2026 AMBIG-SWE: taxa de resolução de 48.8% → 28%); numere as prioridades em vez de listá-las de forma plana. Regras de estilo não verificáveis ("siga o Google Python Style Guide") sem comando de execução permitem que o agente invente a conformidade; associe cada regra de estilo ao comando exato de lint. Começar com estilo em vez de comandos enterra o caminho de verificação; comandos primeiro, estilo por último. Escrever para humanos em vez de agentes desperdiça orçamento de contexto; concisão é uma virtude.
Links simbólicos entre ferramentas. Um único arquivo raiz com links simbólicos (ln -s AGENTS.md CLAUDE.md, ln -s AGENTS.md .github/copilot-instructions.md, ln -s AGENTS.md .cursorrules) mantém todos os agentes de codificação sob a mesma fonte de verdade. O nx ai-setup da Nx automatiza isso no Claude Code, Cursor, Copilot, Gemini, Codex e OpenCode a partir de uma única configuração.
Envie
outputs/skill-minimal-workbench.md gera a bancada de três arquivos para qualquer novo repositório: um roteador AGENTS.md ajustado ao projeto, um agent_state.json com as chaves corretas e um task_board.json semeado com o backlog atual.
Exercícios
- Adicione um timestamp
last_runaoagent_state.json. Recuse a execução se o arquivo tiver mais de 24 horas, a menos que um operador confirme. - Adicione um campo
priorityao quadro de tarefas e altere o extrator para sempre escolher otodode maior prioridade. - Migre
task_board.jsonpara JSON Lines para que cada tarefa seja uma linha e os diffs fiquem limpos no controle de versão. - Escreva um
lint_workbench.pyque falhe seAGENTS.mdtiver mais de 80 linhas ou fizer referência a um arquivo que não existe. - Decida qual dos três arquivos causaria mais impacto se fosse perdido. Defenda sua resposta.
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Roteador | AGENTS.md |
Arquivo raiz curto que aponta o agente para documentos e arquivos mais profundos |
| Arquivo de estado | "As notas" | Registro legível por máquina de onde o agente está, gravado a cada turno |
| Quadro de tarefas | "O backlog" | Fila de trabalho em JSON com status, proprietário e aceitação |
| Sistema de registro | "Fonte de verdade" | O arquivo que a bancada trata como autoritativo quando o chat se vai |
Leitura Adicional
- agents.md — a especificação aberta — adotado por Cursor, Codex, Claude Code, Copilot, Gemini, OpenCode
- Augment Code, Um bom AGENTS.md é um upgrade de modelo. Um ruim é pior do que nenhum documento — saltos de qualidade mensurados
- Blake Crosley, Padrões do AGENTS.md: O Que Realmente Altera o Comportamento do Agente — o que funciona empiricamente, o que não funciona
- Datadog Frontend, Direcionando Agentes de IA em Monorepos com AGENTS.md — precedência aninhada na prática
- Nx Blog, Ensine seu Agente de IA a Trabalhar em um Monorepo — geração de fonte única em seis ferramentas
- The Prompt Shelf, Melhores Prácticas do AGENTS.md: Estrutura, Escopo e Exemplos Reais — ordenação de seções que sobrevive à revisão
- Anthropic, Subagentes do Claude Code e armazenamento de sessão
- Fase 14 · 31 — os modos de falha que este mínimo absorve
- Fase 14 · 34 — o esquema de estado durável que esta lição antecipa