Explorando as Entranhas do Antigravity: De Usuário de Chat a Engenheiro de Harness
Um estudo de caso prático sobre como desbloquear o potencial máximo de agentes autônomos de código, superando atritos de MCP, orquestrando diretrizes Zero-Bloat e auditando software real.
Um estudo de caso prático sobre como desbloquear o potencial máximo de agentes autônomos de código, superando atritos de MCP, orquestrando diretrizes Zero-Bloat e auditando software real.
1. Introdução: O que é o “Harness” e por que ele importa?
A maioria dos desenvolvedores interage com assistentes de IA como simples geradores de texto: você digita um prompt, o modelo cospe código e você copia para o editor. No entanto, agentes modernos como o Antigravity operam sob um conceito muito mais poderoso: o Harness (a carcaça operacional do agente).
O harness é o ambiente de execução que cerca o LLM. Ele fornece:
- Ferramentas de sistema: execução de comandos no terminal, leitura/edição cirúrgica de arquivos e controle de tarefas em segundo plano (background tasks).
- Paralelismo & Orquestração: capacidade de invocar subagentes independentes com contextos isolados.
- Protocolos de Extensibilidade: integração com servidores MCP (Model Context Protocol), skills nativas e injeção de regras de governança (
AGENTS.md).
Este estudo documenta a jornada para entender e dominar esse ecossistema, transformando o agente de um mero “autocompletar” em um parceiro sênior de engenharia de software.
┌────────────────────────────────────────────────────────┐│ HARNESS DO ANTIGRAVITY ││ ││ [ Modelo LLM: Gemini 3.8 / 4 ] ││ ↕ ││ ┌──────────────────────┴───────────────────────────┐ ││ ▼ ▼ ││ [Capacidades de Sistema] [Controle & Governança]│ • run_command / Tasks • AGENTS.md / Regras│ • read_file / edit_file • Skills & Plugins│ • invoke_subagent • Servidores MCP│ • schedule / timers • Sandboxes│ └──────────────────────┬───────────────────────────┘ │└─────────────────────────┼──────────────────────────────┘ ▼ [ Workspace / Código Real ]2. A Jornada de Aprendizado: As Dúvidas e a Evolução
Marco 1: A Descoberta das Ferramentas Ocultas (Web & Zero-Bloat)
- A dúvida: “O agente tem ferramentas nativas para desenvolvimento web além de simplesmente cuspir código? Onde está a diretriz que impede adicionar pacotes desnecessários?”
- A descoberta: O harness possui diretrizes integradas profundas como a diretriz de desenvolvimento web. Essa diretriz é um padrão de engenharia focado em:
- Filosofia Zero-Bloat: priorizar Vanilla HTML5, CSS3 moderno e JS ESM puro antes de adicionar frameworks pesados ou bibliotecas npm desnecessárias.
- Tokens semânticos: uso estrito de variáveis em
:rootcom paridade perfeita para modo escuro (prefers-color-scheme). - Workflow em 5 etapas: escopo → fundação semântica → funcionalidade central → polimento/acessibilidade (WCAG) → distilação (eliminação de código morto).
Marco 2: Persistência de Comportamento (Como levar a base para projetos reais?)
- A dúvida: “Como garantir que o agente aplique essa mentalidade em um projeto específico sem que eu precise ficar repetindo instruções a cada chat?”
- A evolução: Entender o ciclo de injeção de contexto. Ferramentas e skills não são mágicas se o agente não tiver incentivo para acioná-las. A solução é a arquitetura em camadas:
- Global (
~/.gemini/config/AGENTS.md): regras transversais que afetam qualquer projeto (ex: Nota Técnica Decisória antes de alterar infraestrutura). - Projeto local (
<repo>/AGENTS.md): invariantes arquiteturais (portas locais, políticas de CSP restrita, comandos de teste obrigatórios). - Plugins e Skills com escopo: encapsular ferramentas (como o Chrome DevTools MCP e skills de auditoria) em um pacote acionado sob demanda.
- Global (
Marco 3: Atritos Reais no Harness (Troubleshooting de Engenharia)
No processo de configuração, surgiram duas fricções técnicas comuns que exigiram desmistificar o funcionamento interno do harness:
- “Por que o agente pede permissão para ferramentas MCP mesmo no Modo Turbo?”
- O atrito: No modo Turbo, o terminal executa comandos sem confirmação, mas ferramentas MCP continuavam exibindo prompts de aprovação.
- A explicação técnica: O “Modo Turbo” gerencia apenas as permissões das ferramentas nativas locais (
run_command, scripts de shell). Servidores MCP (locais ou remotos) rodam como processos desacoplados que obedecem a uma política de segurança separada (globalPermissionGrants). Para que o MCP funcione sem interrupções manuais, é necessário declarar concessões explícitas com wildcardmcp(*)ou habilitar a autorização contínua na interface.
- “Projetos duplicados na lista do workspace”:
- A resolução: Diagnóstico da base de metadados interna (
projects.json), identificando IDs duplicados que apontavam para caminhos idênticos no disco e limpando os registros redundantes.
- A resolução: Diagnóstico da base de metadados interna (
Marco 4: A Prova de Fogo (Auditando o doc-etractor-pydantic)
- A dúvida: “Posso usar uma diretriz pensada para desenvolvimento para fazer uma varredura (auditoria) em um projeto pronto?”
- O experimento prático: Utilizamos os critérios da diretriz como régua de avaliação para a interface web e a extensão de navegador do projeto de extração de documentos (
doc-etractor-pydantic).
Código Existente (Web + Extensão) │ ▼Filtro de Diretrizes Web ├── Critério 1: Zero-Bloat (Zero dependências npm/CDN) ├── Critério 2: Design Tokens & Dark Mode Nativo ├── Critério 3: WCAG & Acessibilidade Nível AA └── Critério 4: Higiene / Prevenção a Formula Injection │ ▼Resultado: Score 98/100 + 248 Testes Automatizados 100% Verificados- O resultado:
- Aderência comprovada: o projeto mantinha 0 dependências npm e respeitava uma CSP estrita sem
'unsafe-inline'. - Refinamento cirúrgico: a auditoria detectou gaps de acessibilidade nível AA segundo WCAG (falta de
aria-labelno input de arquivos e ausência derole="toolbar"nos controles de zoom). - Validação automatizada: os 248 testes de regressão e ponta a ponta (Playwright) foram executados e aprovados com 100% de sucesso.
- Aderência comprovada: o projeto mantinha 0 dependências npm e respeitava uma CSP estrita sem
Marco 5: Gestão do Contexto e Finitude da Atenção
- A dúvida: “Quando uma conversa fica muito extensa, qual é a melhor estratégia?”
- O aprendizado:
- Meio do raciocínio: utilizar o comando
/compactpara que o agente resuma o histórico em marcos estruturados (<CONTEXT_SUMMARY>), liberando janela de contexto sem perda de foco. - Fim de ciclo: comitar alterações, registrar decisões no
AGENTS.mde abrir uma nova conversa limpa. Uma conversa nova inicia com 100% de atenção e zero alucinação residual de tarefas anteriores.
- Meio do raciocínio: utilizar o comando
3. Principais Lições e Takeaways para Desenvolvedores
- A IA é tão boa quanto o seu Harness: um modelo avançado com um harness fraco apenas responde perguntas; o mesmo modelo com um harness estruturado roda testes, audita acessibilidade e manipula ferramentas de sistema de forma autônoma.
- Menos é Mais (Filosofia Zero-Bloat): antes de instalar dezenas de pacotes npm ou frameworks pesados para criar interfaces utilitárias, a combinação de Vanilla HTML5 + CSS moderno + ES Modules nativos entrega desempenho instantâneo, compatibilidade com CSP e manutenção trivial.
- Segurança de MCP exige clareza: o desenvolvedor precisa entender onde termina a autorização do shell local e onde começa a política de segurança de servidores MCP externos.
- Governança via Repositório: a melhor forma de “treinar” o assistente não é ficar digitando prompts gigantes, mas documentar contratos, comandos e restrições diretamente nos arquivos de configuração do projeto (
AGENTS.md).