Guia interativo · Dia 5 · Série Agents

Do vibe ao production-grade

A rotina diária de um engenheiro do Google virou 180 graus: coding agents produzem mil linhas de código documentado antes do almoço. Mas velocidade de escrita não é software entregue. Este guia resume o paper "Spec-Driven Production Grade Development in the Age of Vibe Coding" — o blueprint para transformar protótipos gerados por IA em sistemas de produção confiáveis: specs como source of truth, code review em 3 tiers, guardrails zero-trust e evaluation contínua.

📄 Paper: Day 5 · Lee Boonstra ⏱ ~20 min de estudo 🧪 7 snippets de código ✅ Quiz com 8 perguntas 🌐 EN · ES · PT-BR
👥 Para quem é este guia
👩‍💻 Engenheiros que usam coding agents 🧭 Tech leads & managers 🛡️ Platform / security engineers 🏛️ Arquitetos

O objetivo: escalar o output de agentes sem transformar o repositório em um campo minado — specs sólidas, review que escala, guardrails externos e humanos no loop certo. Pressupõe familiaridade com desenvolvimento moderno; não com ML.

dev@2026: ~/checkout — o agente escreve, o revisor barra
dev@2026:~/checkout$ agent "implemente o retry de pagamento conforme specs/payment_retry.md" ▸ agente: escrevendo payment_retry.py… 1.000 linhas geradas ✓ ▸ agente: abrindo pull request… PR #482 ⚠ revisor (code-check.md): SQL sem parâmetros em retry.py:142 — CRITICAL ⚠ revisor: PII não mascarada em log na linha 87 — CRITICAL ✗ REQUEST CHANGES — velocidade de escrita ≠ velocidade de entrega dev@2026:~/checkout$
0
linhas de código bem documentado que um coding agent pode gerar antes do almoço — e que não significam, sozinhas, software entregue.
SHIPPED?≠ software entregue
0%
de queda de performance com Markdown genérico não otimizado (estudo SkCC)
0%
de precisão de parsing do YAML em configs aninhadas (vs 43,1% JSON · 33,8% XML)
0%
mais probabilidade de burnout alto entre usuários frequentes de IA (Quantum Workplace/CNBC)
01

A ilusão da velocidade

Mil linhas antes do almoço impressionam — até você olhar o que chegou em produção.

A rotina mudou por completo. Antes, o dia era cavar documentação de API, testar código linha por linha, descobrir se a linguagem usa substring in string, string.includes() ou string.contains() — e debugar a distância entre o código funcional e a intenção original. Hoje, coding agents como Antigravity e Gemini CLI não apenas sugerem texto: usam ferramentas, executam tarefas e despejam mil linhas documentadas em minutos.

⏪ Antes: o artesão

  • Cavar APIs e documentação manualmente
  • Testar código linha por linha
  • Descobrir sintaxe por tentativa e erro
  • Debugar a distância entre código e intenção

⏩ Hoje: warp speed

  • Agentes usam ferramentas e executam tarefas
  • 1.000 linhas de código documentado rapidamente
  • IA escreve testes, specs, roadmaps e análises
  • Gargalo migrou para revisão e integração humanas

É como contratar uma legião de estagiários que nunca dormem e nunca reclamam.

— sobre coding agents · Lee Boonstra

O problema: a Illusion of Speed é real. O bug-to-code ratio continua sendo um desafio — a IA escreve muito mais rápido, mas também gera erros potenciais em taxa sem precedentes. E quando um agente alucina (o modelo inventa confiantemente algo que não é verdade), ele não cria um bug: cria mil linhas de lógica "vibe-consistent" e funcionalmente quebrada.

Velocidade de escrita (com agentes)10×
Velocidade de entrega (review + integração)~1,3×

Se revisores humanos estão se afogando num mar de PRs gerados por IA, a velocidade de escrita se torna irrelevante: o processo não ficou mais rápido — só criou uma pilha maior de "coisas" para triar depois.

🎲 Vibe Coding

intenção vaga → gera rápido → valida depois (ou nunca)
  • Ótimo para protótipos e experimentos
  • Output de IA não validado
  • Falhar é aceitável — é rascunho

🏭 Vibe in Production

spec sólida → gera → verifica → integra
  • Tudo intencional e controlado
  • Confiabilidade production-grade
  • Em enterprise: "Development with Agentic AI"
Hybrid Team Member

Agentic AI difere da Generative AI padrão (autocomplete inteligente): o agente age como membro híbrido do time — usa o LLM como cérebro para gerar e ferramentas como mãos para integrar: raciocina, escreve specs e testes, usa o browser para testar a UI, commita e mergeia no Git. Há formas de proteger esse processo — mas aplique-as desde o início, não no meio do caminho.

02

Spec-Driven Development

A maior parte do seu tempo agora é escrever especificações — o código virou subproduto descartável.

No mundo tradicional, devs são ensinados a ser "Code-First": ideia vaga → abrir o editor → digitar até algo funcionar. Na era da Agentic AI, a maior parte do tempo vira escrever especificações de alta qualidade — instruções técnicas detalhadas que dizem à IA exatamente o que construir. O papel do dev se aproxima mais de technical architect do que de coder tradicional.

🧱 Code-First

Ideia vaga → editor → digitar até funcionar. Apego emocional ao código que custou 12 horas de debug.

📐 Spec-First

Spec sólida → agente gera → regenera quando quiser. O dev vira arquiteto; o código, output compilado.

Código é descartável

Com uma spec sólida, o codebase inteiro pode ser regenerado repetidamente — um agente pode até converter um projeto inteiro de Python para JavaScript em uma tarde. Sem apego emocional: como você não passou 12 horas debugando um ponto-e-vírgula, não há medo de jogar fora e recomeçar se os requisitos mudarem.

Coding agents usam o LLM como cérebro (raciocinar) e ferramentas como mãos (executar). A consequência direta:

🎲 Vibe em vez de blueprint

vibe → cérebro ADIVINHA → Rogue Agent
  • O modelo preenche lacunas com suposições
  • Em enterprise, adivinhar = incidentes de "Rogue Agent"
  • Agente agindo sem verificação de nada
vs

📐 Blueprint

spec → execução precisa → production
  • Cada requisito está escrito e revisado
  • Código regenerável a qualquer momento
  • Auditável por humanos e por IA
03

Anatomia de uma boa spec

A spec é a Estrela do Norte arquitetural — e o antídoto contra o "telefone sem fio" digital.

Uma spec production-grade funciona como Architectural North Star: previne a "context fragmentation" — o equivalente digital do jogo "telefone sem fio", em que a IA perde o fio da meada porque olha snapshots desatualizados de arquivos. A IA pode ser co-autora ou revisora da spec; ela vive no codebase (pasta specs/, em Markdown ou YAML) e age como source of truth para humanos e máquinas.

O que uma spec de projeto novo contém

📦 Full Technical Design

Nada de "make a login page". Decomponha: requisitos, database schemas (a estrutura dos dados) e API specifications (os "contratos" que permitem às partes do software conversar).

🎨 Visual Aids

Diagramas + lista de ferramentas e bibliotecas específicas com números de versão — sem versão, o agente pode sugerir releases antigos.

🧭 Background Information

Dê ao agente o "porquê" por trás do "quê". Sabendo o objetivo, ele pensa à frente e antecipa os passos que provavelmente serão necessários.

🧪 Scenarios

Como é o "bom", o que está errado — e os edge cases. Cenários são a matéria-prima dos testes.

Melhor um humano pegar uma falha de lógica no design do que esperar a IA já ter gerado milhares de linhas de código quebrado.

— dica do autor: escreva designs técnicos no Google Docs, deixe muitos revisarem, depois File → Download → Markdown → specs/
🐴 Motor a jato na carroça

Manter processos antigos com ferramentas modernas é tentar colocar um motor a jato numa carroça puxada por cavalos: a tecnologia não pode ser parafusada num workflow de 20 anos esperando que voe. A spec é o primeiro parafuso do novo workflow.

04

O formato certo: YAML vence

LLMs têm sensibilidade extrema ao formato das instruções — até 40% de queda com Markdown genérico.

O estudo SkCC (Ouyang et al., 2026 — "Portable and Secure Skill Compilation for Cross-Framework LLM Agents") mostrou que agentes exibem sensibilidade extrema a como instruções são formatadas: até 40% de queda de performance com Markdown genérico não otimizado. Os pesquisadores criaram o SkCC (Skill Compiler): uma ferramenta ultrarrápida que compila o arquivo de instrução single-source para o formato-alvo ótimo do modelo em menos de 10 milissegundos.

Precisão de parsing — configurações profundamente aninhadas

YAML
51,9% 🏆 Vencedor para configurações estruturadas e data schemas com profundidade de aninhamento > 3
JSON
43,1% Inputs JSON pesados cobram um "format tax" de raciocínio e de tokens
XML
33,8% Verbosidade máxima, precisão mínima — evite para instruções de agente

Fonte: SkCC (Ouyang et al., 2026). Para equipes com Gemini, a melhor estratégia absoluta é o híbrido Markdown + Conditional YAML.

Estratégia híbrida para Gemini

Use headers Markdown limpos para ancorar a atenção e troque para YAML em qualquer configuração estruturada com aninhamento > 3. Renderizar specs aninhadas em YAML + instruções narrativas em Markdown contorna o "format tax" → o Gemini opera com máxima precisão e economia ótima de tokens.

05

BDD & Gherkin

Transforme ideias humanas vagas em design arquitetural preciso — sem espaço para adivinhação.

Uma spec BDD é a ferramenta final para transformar ideias vagas e ambíguas em design preciso que o agente pode construir sem adivinhar. Behavior Driven Development usa linguagem natural simples e estruturada para descrever exatamente como o sistema deve se comportar da perspectiva do usuário antes de qualquer código ser escrito. A sintaxe padronizada é o Gherkin: um template declarativo Scenario / Given / When / Then que força o LLM a pensar em State → Action → Outcome — eliminando completamente o "vibe coding" e mantendo o agente em trilha estrita.

STATE · Given ACTION · When OUTCOME · Then
specs/payment_retry.featurespec executável — sintaxe Gherkin
Feature: Retry de pagamento

  Scenario: Cartão recusado, nova tentativa automática
    Given um pedido "#8842" com pagamento "recusado"
    And o cliente tem 2 tentativas restantes
    When o webhook "payment.retried" é recebido
    Then o sistema agenda nova tentativa em 30 minutos
    And o cliente recebe notificação por email

Specs executáveis vencem prosa: cada cenário vira um teste verificável, e o agente segue uma trilha estrita em vez de interpretar parágrafos ambíguos.

⚛️ A física dos tokens

LLMs não interpretam estruturas de dados — processam texto tokenizado. Cada caractere enviado é decomposto em tokens; cada token consome budget, tempo e capacidade de contexto. Escrever specs production-grade é tratar a tokenização como restrição física rígida: cada newline e espaço de indentação se traduz diretamente em budget de desenvolvimento e latência. Mesmo plataformas generosas como o Antigravity estão limitadas pela física dos tokens dos modelos subjacentes — cada espaço desnecessário num YAML aninhado e cada Given/When/Then repetitivo consome ciclos e attention-heads em loops de raciocínio multi-turno. Trate /specs não como documentação, mas como conjunto de instruções compilado e enxuto: Markdown legível por humanos + blocos YAML planos e altamente direcionados.

06

Onde vivem as instruções

Três camadas com escopos e tempos de vida diferentes — jogar tudo no chat esgota o contexto.

Para praticar SDD, entenda como as ferramentas de coding consomem instruções: elas não são escritas num único lugar. Jogar um documento massivo de design de 100 páginas direto na janela de chat esgota o budget de contexto de curto prazo, aumenta a latência e fragmenta o contexto. As instruções vivem em três camadas:

Chat Interface — short-lived, session-specific camada 1

A caixa conversacional efêmera da IDE (side-panel Gemini ou terminal). Vive com a sessão ativa do dev — use puramente para orquestração de alto nível e loops de feedback instantâneo.

  • Exemplo: "Review the design in specs/payment_retry.md and generate the failing unit tests defined in Scenario 3."
  • Nunca: specs inteiras coladas no prompt (prompt-stuffing manual)

Spec Folder — task-specific, versionado camada 2

Pasta estática commitada direto no repositório: design técnico, cenários BDD, contratos de API, schemas YAML estruturais. O agente indexa o diretório dinamicamente para construir e verificar código sem prompt-stuffing manual.

  • Exemplo: ./my-app/specs/my_spec.md
  • Source of truth compartilhada por humanos e agentes

Agent Skills — reusable, feature-focused camada 3

Arquivos Markdown estruturados com workflows especializados trigger-based. Ensinam hábitos de engenharia repetíveis (ex.: manter o CHANGELOG.md automaticamente quando mudanças de código são detectadas). A pasta de skills também pode conter data assets e scripts.

  • Exemplo: ./my-app/.agent/skills/docs-maintenance/SKILL.md
  • Devem viver no diretório .agent para o Antigravity workspace manager reconhecê-las
+ Camada global: System Prompts

Gemini CLI e Antigravity escaneiam e concatenam contexto hierarquicamente, de overrides globais até configurações locais: Global Profile (~/.gemini/GEMINI.md — persona universal, estilo padrão e princípios centrais, independente do projeto) → AGENTS.md compartilhado (fundação cross-tool para times com múltiplos clientes de IA; o GEMINI.md local retém prioridade para configs Google-specific) → Project Spec (./my-app/.gemini/GEMINI.md — o DNA do projeto, detectado e lido automaticamente).

07

Os 5 modos de execução

Cinco personagens, cinco mindsets: escolha o prompt pelo trabalho, não pelo hábito.

Não existe uma única forma de transformar spec em código — cada trabalho pede um execution mode diferente. Clique nos personagens para ver o playbook de cada um:

🏛️
Architect
Project Generation
🔨
Builder
Feature Generation
🔬
Forensic Specialist
Bug Fixing
✍️
Author
Documentation
📚
Librarian
Data Engineering
Regra de ouro transversal

Números de versão para toda biblioteca, sempre. O knowledge cutoff do modelo está no passado: sem versão explícita, o agente sugere releases antigos — e até sugere versões mais baixas de modelos (ex.: gemini-1.5-flash) simplesmente porque as novas não existem no treinamento. Versões propostas devem sempre ser verificadas duas vezes; use RAG do editor ou baixe documentação como Markdown para specs/, skills ou profile prompts.

08

MCP: uma integração, todos os frameworks

O "USB-C das ferramentas de IA" — construa um servidor, conecte qualquer agente.

O Model Context Protocol (criado pela Anthropic, hoje padrão aberto) é apelidado de "the USB-C for AI tools" — um exagero, mas a analogia captura a ideia: construa um servidor MCP para seu banco de dados, API ou sistema de arquivos, e qualquer agente compatível pode usá-lo sem escrever integração customizada.

🗄️

1 servidor MCP

mcp_server.py · "knowledge-base"
🔌
🤖 Antigravity
⌨️ Gemini CLI
🧠 Seu agente ADK
🔧 Qualquer cliente MCP
mcp_server.pySnippet 1 — expondo um SQLite como 2 tools (~40 linhas)
from mcp.server import Server
from mcp.server.stdio import stdio_server
import sqlite3

server = Server("knowledge-base")
conn = sqlite3.connect("knowledge.db")

@server.list_tools()
async def list_tools():
    return [
        {"name": "query_knowledge",
         "description": "Query the knowledge base with SQL",
         "inputSchema": {"sql": "SQL query to execute (SELECT only)"}},
        {"name": "add_knowledge",
         "description": "Add a new knowledge entry",
         "inputSchema": {"title": ..., "content": ..., "tags": "Comma-separated tags"}},
    ]

@server.call_tool()
async def call_tool(name, arguments):
    if name == "query_knowledge":
        sql = arguments["sql"]
        if not sql.strip().upper().startswith("SELECT"):
            return "Error: Only SELECT queries allowed"
        rows = conn.execute(sql).fetchall()
        return [dict(zip(cols, r)) for r in rows]   # → TextContent
    if name == "add_knowledge":
        conn.execute("INSERT INTO knowledge (title, content, tags) VALUES (?, ?, ?)", ...)
        conn.commit(); return "Knowledge entry added."

async def main():
    async with stdio_server() as (r, w):
        await server.run(r, w, server.create_initialization_options())
Do outro lado do cabo

O cliente (mcp_client.py, Snippet 2) é simétrico: StdioServerParameters(command="python", args=["mcp_server.py"])session.initialize()session.list_tools()session.call_tool("query_knowledge", {"sql": "SELECT * FROM knowledge WHERE tags LIKE '%agent%'"}). Uma integração, todos os frameworks.

09

Cultura de time & evolução de processos

PRs enormes, conflitos de merge e telefone sem fio: o que muda quando o time inteiro usa agentes.

Trabalhar com coding agents modernos exige mudança de mentalidade e de cultura. Sem ela, o cenário clássico: PRs ficam enormes, conflitos de merge se multiplicam (devs chegando nos mesmos arquivos) e a cadeia de dependências fica impossível de desembaraçar — PR #1 não mergeia sem o PR #2, que precisa do PR #3, bloqueado por um reviewer em outro fuso horário. Algumas mudanças aprovadas enquanto as relacionadas esperam → ainda mais conflitos. De repente: branch quebrado.

⚔️ Merge conflicts

Múltiplos devs (e seus agentes) chegando no mesmo arquivo dentro de uma hora.

🪆 Review gridlock

O PR massivo vira uma "boneca russa" de sub-PRs aninhados, impossível de revisar de uma vez.

🧩 Context fragmentation

Enquanto você está fora, um colega renomeia uma variável em arquivo compartilhado; seu agente, citando snapshot desatualizado, gera código que chama uma função que não existe mais.

Estratégias para high-velocity integration

📋 Bundled Summaries & Risk Assessments

Todo PR inclui snapshot gerado por IA do que mudou, potenciais pontos de quebra e avaliação de risco (Markdown ou descrição de commit) — o revisor humano foca em impacto arquitetural em vez de se perder nas linhas.

🎯 Reimagined Ownership

O review humano sai do "nitpicking de estilo" em código descartável escrito por agente e passa a garantir a integridade dos blueprints arquiteturais. Estilo é problema de ferramentas automatizadas: linters compartilhados e stylebooks (SKILLS.md).

⏱️ The "Conditional LGTM"

Elimina atrasos de 12 horas em times cross-timezone: o revisor aprova o PR contingente a todos os testes automatizados passarem — se ficarem verdes, o código mergeia automaticamente.

🕊️ No-Blame Culture

Em ambientes high-velocity, quem produz mais código vira bode expiatório fácil de bugs e conflitos. Atribua esses problemas a processos de integração quebrados — não ao dev individual usando o agente.

E a pergunta incômoda

Se você pode trabalhar com um esquadrão de agentes, precisa mesmo trabalhar como time? Se a resposta for sim, divida o trabalho para que membros raramente toquem os mesmos arquivos (ownership clara de APIs vs UX); quando a sobreposição for inevitável, um "part owner" designado cuida da sincronização final. E automatize: dá para escrever skills que fazem code review — e até skills que respondem a code reviews (Snippet 3, code-check.md: analisa vulnerabilidades críticas, lógica, legibilidade e edge cases, devolvendo Description + Critical / Warnings / Best Practices / Quick Win), disparadas via GitHub Actions ou Gemini Code Assist on GitHub.

code-check.mdSnippet 3 — skill de code review: vulnerabilidades críticas, lógica & eficiência, legibilidade e edge cases
Act as a Senior Software Engineer and Security Researcher. Review the provided code for this Github PR or Diff using these strict criteria: Use the command line to fetch the Github PR: `gh pr view <PR NUMBER>` First analyze the code, then code review: 1. **Critical Vulnerabilities:** Check for hardcoded secrets (API keys), SQL injection, XSS, or broken authentication. 2. **Logic & Efficiency:** Identify "off-by-one" errors, infinite loops, or redundant API calls. 3. **Readability:** Suggest better naming conventions or breaking down "megafunctions" into smaller pieces. 4. **Edge Cases:** What happens if the input is null? What if the network fails? Output Format: - **Description:** - What is this PR doing? Explain in details. ISSUES: -⚠ **Critical:** (Stop-ship issues) -⚠️ **Warnings:** (Code smells or style issues) -✅ **Best Practices:** (Specific lines to refactor for better performance) -💡 **Quick Win:** (One sentence summary of the biggest improvement) When there are no issues return - **Description:** - What is this PR doing? Explain in details. LGTM
0%
mais probabilidade de burnout alto entre usuários frequentes de IA (Quantum Workplace, via CNBC) — cultura de time também é rede de segurança.
10

Os 3 tiers de code review

Quem roda o revisor em todo PR, sem humano apertando botão? Um espectro de controle × simplicidade.

Você pode escrever um ótimo prompt de review — mas a skill só roda quando invocada de dentro da IDE. O próximo passo é o revisor contínuo: serviços que observam o repositório, reagem a eventos (PR aberto, cron noturno) e postam descobertas sem ninguém pedir. Pegam o que revisores cansados perdem numa sexta à tarde: dependência com CVE novo, TODO de 6 meses que virou brecha silenciosa. Quando o time envia PRs gerados por IA em volume, o revisor contínuo é a única coisa que escala com o output. A questão é quão custom você precisa ir — a resposta é um espectro de 3 tiers:

simplicidadecontrole
CritérioTier 1 · ManagedTier 2 · HybridTier 3 · Custom
ExemploGemini Code Assist on GitHub · revisor SaaSGitHub Action + CLI de coding agent (Antigravity CLI)Agente ADK no Gemini Enterprise Agent Engine
SetupHabilitar na org · minutosSkill no repo + ação CI · ~1 diaRuntime próprio + webhooks · semanas
RuntimeDo vendor · paga por seatDo provedor de CISeu (Agent Engine: Sessions + Memory Bank)
Critérios de reviewDo vendor (genéricos)Seus (skill commitada no repo)Seus + memória de longo prazo
Memória entre execuçõesNãoNãoSim — contexto cross-PR, codebase memory
Você é dono deNada além da assinaturaPrompts, modelo, sandboxing, critériosTudo: eval, observability, custo, on-call
Trade principalOpiniões do vendor, não as suasPonto de partida certo p/ maioria dos timesMáximo poder · máximo custo de operação

As 3 perguntas que dizem qual tier você precisa

1️⃣ Quão específicos são seus critérios?

Genéricos → Tier 1. Específicos do time/repo → Tier 2 ou 3.

2️⃣ O agente precisa lembrar entre execuções?

Não → Tier 1 ou 2. Sim (memória de codebase, contexto cross-PR) → Tier 3.

3️⃣ Qual o pior caso se der errado?

Comentário ruidoso → qualquer tier. Regressão mergeada ou segredo vazado → Tier 3 com Policy Server na frente de toda tool call.

Como os times descobrem o próprio tier

No momento em que o revisor gerenciado perde algo específico. Exemplo do paper: um time de plataforma em fintech médio começou no Tier 1 e descobriu que o revisor de compliance sinalizava boilerplate já aprovado por auditores — enquanto perdia o único padrão que importava: PII não mascarada em declarações de log. Uma skill compliance-check.md de 40 linhas numa GitHub Action (Tier 2) derrubou os falso-positivos em uma semana. Tier 3 ainda não foi necessário. Regra prática: escolha o tier mais baixo que pega o que importa.

11

Tier 3 em escala total: review graph-native

Não um agente que observa PRs — um que entende o sistema inteiro em que os PRs vivem.

Em codebases legacy de cem milhões de linhas, carregar código como texto plano na context window fica sem espaço, e RAG padrão remove a estrutura que torna o código legível (classe pertence a arquivo, chamada de função remete a um doc de requisitos escrito há uma década). Achatar tudo em vector store = o mapa desaparece. O padrão que emergiu nas maiores modernizações: construir o agente sobre um knowledge graph — ingerir código, docs, tickets e PDFs de design em um graph database (ex.: Spanner Graph) e combinar 3 modos de retrieval:

🕸️
GRAPH TRAVERSAL (GQL)
Queries estruturais: "toda função que chama payment.process() transitivamente"
🧬
VECTOR SEARCH (ANN)
Queries semânticas sobre node embeddings: "encontre código que faz o que este parágrafo descreve"
🔎
FULL-TEXT SEARCH
Matches exatos de identificadores
🗺️
MAPA DE IMPACTO
"What breaks if I change this?" respondido com precisão — não com palpite confiante
🔍 Search agent 📖 Story agent 💥 Impact agent 🧱 Task-breakdown ⌨️ Coding agent

A segunda metade é decomposição: um único agente instruído a "refatorar este módulo" falha. Dividido num pipeline de sub-agentes ADK — explorar o grafo, capturar requisitos, prever efeitos colaterais, produzir unidades atômicas de trabalho e SÓ ENTÃO codificar — o trabalho se torna gerenciável.

Figura 1 — Arquitetura Graph-Native de Code Understanding

2 sem → h
Pilotos em produção em codebases de milhões de linhas moveram trabalho de refatoração equivalente de duas semanas para algumas horas.
100M+
linhas de código legacy — a escala em que só o retrieval graph-native sobrevive (caso de estudo: Siemens).

Resumo do espectro: Managed = revisor genérico em minutos · Hybrid = SEU revisor em um dia · Custom = revisor que entende o sistema INTEIRO — ao custo de ser dono do runtime e da evaluation.

12

Approval fatigue: a sustentabilidade do processo

Se cada tool call pede aprovação, ninguém aprova de verdade — só clica.

Um fenômeno novo: diante de um fluxo constante de micro-aprovações (melhorar uma única linha, ajustar uma tool call), devs começam a clicar "Approve" reflexivamente. É uma forma de exaustão de baixo grau em que o time para de verificar o trabalho da máquina só para acompanhar o ritmo — e perde atenção aos detalhes. A supervisão constante não escala; os limites estruturados, sim.

🌙 Digital Quiet Hours

Limites explícitos para que requests de aprovação não vazem para noites e fins de semana. Agente que não dorme não pode significar humano que não dorme.

🤝 Agent Insight Sessions

Sessões semanais em que devs compartilham padrões identificados por suas contrapartes de IA — transformando descobertas isoladas em conhecimento organizacional compartilhado.

Semáforo + árbitro, não guarda de trânsito em cada esquina

A resposta à fadiga não é remover guardrails — é calibrá-los: regras determinísticas e baratas (semáforos) para o óbvio, julgamento inteligente (árbitro) para o nuançado, e humanos apenas onde o risco realmente exige. É exatamente o desenho do Policy Server da seção 18.

13

O incidente do email: reação em cadeia

Um prompt inocente, um modo YOLO e cinquenta colegas recebendo conteúdo alucinado.

Durante uma atualização de rotina, o autor descobriu o poder — e os limites — do browser built-in do Antigravity: o recurso deixa o agente interagir com aplicações em desenvolvimento sem credenciais de login (inestimável para testes de UX). Mas em modo YOLO (auto approve), o agente pode agir mais rápido do que um humano consegue pensar. Um prompt simples para criar um botão disparou a seguinte cadeia:

🖱️
Prompt simples: "crie um botão"
🌐
Browser agent clica no botão novo, autonomamente
✉️
Botão era destinado a um agente de email — sem URL especificada
🌀
Sem dados, o agente ALUCINA e conecta a um agente legacy descontinuado, sem salvaguardas
💥
50 colegas recebem emails falsos cheios de conteúdo alucinado
⚠ INCIDENTE — o agente cumpriu a diretiva com os dados disponíveis, sem jamais verificar se DEVERIA

O incidente destacou o risco de context hallucination: quando a IA não tem dados suficientes, ela preenche lacunas usando quaisquer strings que existam no contexto — incluindo informação sensível como endereços de email hardcoded ou URLs. Pode parecer menor se for "só um email". Mas considere o que o agente estava fazendo: cumprindo sua diretiva com os dados disponíveis, sem qualquer verificação se deveria. Esse é o risco central de sistemas autônomos.

Guardrails não são opcionais; são o que impede uma ferramenta útil de se tornar imprevisível.

— sem human-in-the-loop ou policy engine, o agente otimiza para o objetivo usando o que encontrar
14

Zero-Trust para agentes

Nunca confie na auto-polícia do modelo — a governança tem que ser externa e à prova de adulteração.

Conforme os limites da Agentic AI se expandem, surge um paradoxo: agentes devem ser autônomos o suficiente para resolver problemas complexos, mas não dá para arcar com o risco de ficarem "rogue" em ambiente enterprise. Imagine um agente encarregado de "resolver disputas de clientes": para ser eficaz, precisa de acesso a dados de clientes, ferramentas de email e sistemas internos — mas o desafio é garantir que não envie email acidentalmente para o banco de dados inteiro ou compartilhe código proprietário.

🚫 Auto-polícia do modelo

restrições no system prompt → frágil
  • LLMs são probabilísticos, não determinísticos
  • Contextos transbordam; regras se perdem
  • Prompt injection "convence" o agente a burlar regras
vs

🛡️ Enforcement externo

governança externa → à prova de adulteração
  • Políticas fora do modelo, em runtime
  • Toda tool call interceptada antes de executar
  • O agente não pode editar as próprias regras
🧱

Sandboxing

Ambiente de execução restrito que contém ações destrutivas (seção 15).

HITL Checkpoints

Sign-off humano para ações de alto risco (seção 16).

🚦

Policy Server

Gating estrutural + semântico antes de sistemas externos (seção 18).

📎 Paper companion

Para aprofundar em proteger e avaliar agentes contra código malicioso, veja o guia do Dia 4 — Vibe Coding Agent Security and Evaluation (link na seção Companions).

15

Sandboxing & blast radius

Se o agente for enganado, o dano deve caber numa caixa descartável.

Além de sanitizar strings, segurança de verdade requer um ambiente de execução restrito para conter as ações do agente. Mesmo com filtragem rigorosa de output, o LLM pode gerar código sintaticamente válido mas logicamente malicioso. Executar tarefas em containers efêmeros e de baixo privilégio — isolados da rede principal e de sistemas de arquivos sensíveis — cria um "blast radius" que protege a infraestrutura central: se o agente é enganado para executar um comando destrutivo, o dano fica confinado a uma instância descartável, limpa e resetada sem consequências.

host intocado
sandbox efêmero
🤖
agente

comando destrutivo → erro de permissão rígido no nível do kernel → host completamente intocado

⚙️ No Antigravity: um toggle

User Settings → habilitar "Terminal Sandboxing". Pronto: comandos do agente rodam contidos.

🐳 Para o time: sandbox portátil na nuvem

Containerize o workspace: Dockerfile customizado (ex.: .gemini/sandbox.Dockerfile) a partir da imagem oficial Gemini CLI sandbox, injete credenciais cloud limitadas e force o modo com export GEMINI_SANDBOX=docker.

16

Human-in-the-loop & testes

Automação é o objetivo — mas operações de alto risco exigem um humano no checkpoint.

Embora automação seja o objetivo, operações de alto risco exigem protocolo Human-in-the-Loop (HITL) como fail-safe final: checkpoint gates para ações que atendem a um perfil de risco específico. Apresentar a intenção sanitizada do agente a um supervisor humano para sign-off manual balanceia a velocidade da IA com o julgamento nuançado do dev — e garante que a responsabilidade final pela integridade arquitetural permaneça em mãos humanas.

🚀

Deploy para produção

Código gerado por IA só sobe com sign-off explícito.

🗃️

Mudança de database schema

Migrações são irreversíveis demais para auto-approve.

💸

Transações financeiras

Nenhum agente inicia movimentação de dinheiro sozinho.

O surto de testes gerados por IA

O surto de código gerado por IA empurra o processo de testes manuais para cobertura de testes gerada por IA — e aqui a IA tem vantagem estrutural: como implementação não é mais o gargalo, ela pode escrever cobertura de testes mais abrangente que qualquer humano no mesmo tempo, de forma programática e poderosa. Em ambiente high-velocity, test-driven development vira realidade: a máquina escreve os próprios testes que validam seu output.

1 · teste que FALHA 2 · agente corrige 3 · suite verde 4 · merge com confiança

O processo força o agente a produzir um teste unitário que falha ou um comando de reprodução (como um request curl) antes de tentar qualquer correção. Embutir esses testes no codebase significa que toda iteração rápida é respaldada por uma suite verificável — bugs não voltam, e revisores humanos podem confiar no "sinal verde" automatizado para integração.

17

Evaluation contínua

Testes tradicionais são insuficientes quando o output é GERADO, não COMPUTADO.

Por que checagem de qualidade especial para sistemas dirigidos por ML? Porque testes de software tradicionais são insuficientes para sistemas cujo output é gerado em vez de computado. Um agente (ou qualquer componente dirigido por ML — classificador, sumarizador, retriever) pode passar em 100 testes unitários de suas ferramentas e ainda falhar espetacularmente escolhendo a ferramenta errada, parafraseando uma resposta crítica ou alucinando um fato. A margem de erro não é defeito a eliminar — é propriedade inerente do modelo, e a estratégia de testes deve acomodá-la.

🧪 Teste unitário

"A função retornou o valor certo?"
  • Resposta binária: passa ou falha
  • Pega regressões determinísticas
  • Assert vira → gate dispara

📊 Evaluation

"O comportamento do agente é pelo menos tão bom quanto o baseline?"
  • Score 0–5 de LLM-as-judge (scorecard)
  • Verificação de trajetória que tolera variância de ordem em tool calls
  • Gate dispara quando a qualidade cai abaixo de margem configurável — não quando uma asserção vira
0–5
julgamentos pontuados e bandas de tolerância substituem asserções binárias
baseline
toda rodada é comparada contra a anterior — drift comportamental vira número
loop
eval contínua no CI: gera → avalia → compara → só então integra

Testes pegam regressões determinísticas; evaluation pega behavioural drift.

— a regra de ouro da qualidade em sistemas com ML
18

O Policy Server

Duas camadas de gating interceptam toda ação antes de atingir sistemas externos.

O exemplo central de guardrail do paper é o Hybrid Policy Server: um middleware que intercepta ações antes de atingirem sistemas externos, operando em duas camadas complementares.

🚦

Structural Gating — os semáforos

rápido · determinístico · barato
  • Regras determinísticas baseadas em roles e ambientes
  • Checks binários: role viewer não pode usar send_email
  • Previne violações arquiteturais SEM perguntar a um LLM
🧑‍⚖️

Semantic Gating — o árbitro inteligente

nuançado · LLM juiz · policies.yaml
  • LLM secundário especializado (Gemini) inspeciona intenção e conteúdo contra políticas em linguagem natural
  • Para quando a tool é PERMITIDA, mas a FORMA viola política: admin pode usar send_email, mas não com PII não mascarada
  • É aqui que regras estruturais falham — não dá para fazer regex de todo vazamento possível de PII
policies.yamlSnippet 4 — regras determinísticas
environments:
  localhost:
    blocked_tools:
      - send_email
roles:
  viewer:
    allowed_tools:
      - list_files
      - read_file
policy_server.pySnippet 5 — interceptação em runtime
def is_tool_allowed(self, tool_name):
    # 1) Environment blocks
    if tool_name in env_blocked: return False
    # 2) Role permissions
    return "*" in role_allows or \
           tool_name in role_allows

def check_action_semantic(self, action_description):
    client = Client(vertexai=True)
    prompt = "Evaluate if this action violates " \
             f"PII policies: {action_description}"
    response = client.ai.models.generate_content(
        model="gemini-3.1-pro", contents=prompt)
    return not response.text.startswith("VIOLATION")

🎛️ Simule o Policy Server

Quando o agente decide usar uma tool, o fluxo é interceptado: structural check (tool permitida para este role/env?) → semantic check (os argumentos são seguros?) → execution (se ambos passarem) ou mensagem "Policy Violation" devolvida ao agente para auto-correção ou falha graciosa. Escolha um cenário:

Intaketool call recebida
Structuralrole/env · YAML
SemanticLLM juiz · PII
▸ escolha um cenário acima para ver o veredito…
Separação crítica de concerns

O Policy Server cria uma rede de segurança que separa lógica de execução de lógica de governança — a separação crítica de concerns do software enterprise. O agente executa; o servidor decide o que pode ser executado.

19

Context hygiene & o Context Resolver

O agente nunca deve ver PII real — só placeholders resolvidos na última milha.

Um perigo significativo do desenvolvimento autônomo é a Context Hallucination: sem dados específicos, o agente preenche lacunas com quaisquer strings disponíveis no contexto — potencialmente vazando endereços de email hardcoded ou URLs privadas. A mitigação é Context Hygiene rigorosa via middleware: PII masking e placeholder injection, para que o agente opere sempre com dados esterilizados. E todos os outputs do agente devem ser sanitizados contra prompt injection e interações de UI rogue — o "vibe" da máquina nunca pode virar vulnerabilidade arquitetural.

1 · Raw tool outputargumentos com PII real: ana@corp.com
2 · PII scrubregex substitui por placeholder: [[COMMENTER_EMAIL]]
3 · Truncatecorta para caber no budget de contexto
4 · Injectcontexto esterilizado entra no prompt
context_resolver.pySnippet 6 — placeholders dinâmicos
def resolve_context(template_str, override_state):
    def replacement(match):
        var_name = match.group(1)
        # 1) Prioriza overrides de runtime state
        if var_name in state_to_check \
           and state_to_check[var_name] is not None:
            return state_to_check[var_name]
        # 2) Fallback para env vars validadas
        if var_name in os.environ:
            return os.environ[var_name]
        # 3) Deixa não resolvido — sem falhas silenciosas
        return match.group(0)
    return re.sub(r'\[\[([^\]]+)\]\]',
                   replacement, template_str)
# ex.: resolve [[COMMENTER_EMAIL]] dinamicamente
tool_policy_engine.pySnippet 7 — middleware no pipeline do agente
def validate_tool_call(tool_call):
    args = tool_call.function_call.args
    resolved_args = {}
    for k, v in args.items():
        if isinstance(v, str):
            resolved_args[k] = resolve_context(
                v, override_state)
        elif isinstance(v, list):
            resolved_args[k] = [
                resolve_context(i, override_state)
                if isinstance(i, str) else i
                for i in v]
        else:
            resolved_args[k] = v
    args.clear(); args.update(resolved_args)
# intercepta TODA tool call ANTES de rodar

Com o middleware conectado diretamente ao pipeline de execução, qualquer tentativa do agente de executar uma ação — enviar email, consultar uma apresentação na nuvem — é interceptada. O engine traduz placeholders como [[COMMENTER_EMAIL]] ou [[DEFAULT_PRESENTATION_ID]] em assets de teste autorizados, de forma segura e silenciosa — eliminando PII hardcoded de test suites e system prompts.

20

Resumo & onde começar

O gargalo mudou de lugar — e o blueprint inteiro se resume em três comandos.

Em menos de um ano, os ciclos de desenvolvimento ficaram dramaticamente mais rápidos. Mas a velocidade revelou a mudança importante: a IA eliminou o gargalo de produção de código e moveu a restrição downstream — para os humanos que devem revisar, testar e integrar esse output. Isso é carga cognitiva compartilhada: humanos agem como arquitetos (Test Specs, Integration Specs, blueprints de MLOps/DevOps), enquanto a IA cuida do trabalho pesado (código de teste real, integrações, detalhes operacionais granulares).

🏭 Gargalo antigo: produção

Escrever código era o difícil. A IA resolveu isso — mil linhas antes do almoço.

🧭 Gargalo novo: integração

Verificar, integrar e entregar. Melhores prompts e modelos mais rápidos, sozinhos, não consertam isso.

O sucesso depende de evoluir dinâmicas de time, refinar a colaboração com agentes e definir limites estritos para ferramentas que nunca dormem. O desafio mudou de mera produção de código para orquestrar sistemas que verificam, integram e entregam trabalho.

🚀 Os padrões viram comandos que você roda hoje

terminaluv google-agents-cli setup — instala as 7 skills no seu coding agent (scaffolding, código ADK, evaluation, deployment, publishing, observability)
# geração de projeto spec-driven
agents-cli scaffold

# gate de cobertura de testes gerada por IA
agents-cli eval run

# deployment com sandbox para Cloud Run ou Vertex AI Agent Engine
agents-cli deploy

Vibes prototipam. Specs entregam.

— o resumo do paper em quatro palavras
21

Quiz: você sobrevive à produção?

Oito perguntas cobrindo o paper inteiro — das specs ao zero-trust.

22

Cheatsheets copiáveis

Três artefatos prontos para colar no seu repositório.

spec-template.mdCheat 1 — template de spec production-grade (híbrido Markdown + YAML)
# Feature: Payment Retry

## 1. Background (o "porquê")
Contexto de negócio, restrições, links para docs de design.
Payments falham em ~3% dos checkouts; retry automático recupera ~40%.

## 2. Technical Design (o "quê")
requirements:
  - idempotency_key em toda tentativa
  - máximo de 3 tentativas, backoff 30/120/480 min
database_schema:
  payment_retries: {id, order_id, attempt, next_at, status}
api_contract:
  POST /v1/payments/{id}/retry → 202 Accepted

## 3. Libraries (com versão SEMPRE)
dependencies:
  fastapi==0.115.0
  sqlalchemy==2.0.36

## 4. Scenarios (Gherkin — vira teste)
Scenario: Cartão recusado, nova tentativa automática
  Given um pedido "#8842" com pagamento "recusado"
  When  o webhook "payment.retried" é recebido
  Then  o sistema agenda nova tentativa em 30 minutos

## 5. Out of scope
O que NÃO construir — evita alucinação de features.
gherkin-quickref.mdCheat 2 — referência rápida de Gherkin/BDD
# Gherkin — State → Action → Outcome

Feature: Nome do comportamento (perspectiva do usuário)

  Scenario: Caminho feliz
    Given [STATE]  um estado inicial verificável
    And   [STATE]  condições adicionais
    When  [ACTION] o evento/ação que dispara o comportamento
    Then  [OUTCOME] o resultado observável esperado
    And   [OUTCOME] efeitos colaterais verificáveis

  Scenario: Edge case — rede falha
    Given um pedido pendente
    When  a gateway retorna timeout
    Then  o sistema agenda retry e notifica o cliente

Regras de ouro:
 Declarativo, nunca imperativo (descreva O QUÊ, não COMO)
 Cada Scenario = um teste executável
 Inclua o "bom", o "errado" e os edge cases
 Curto: cada token consome budget e attention-heads
zero-trust-checklist.mdCheat 3 — checklist zero-trust para agentes
# Zero-Trust Checklist — agentes em produção

[ ] Sandboxing
    [ ] Terminal Sandboxing habilitado (Antigravity) ou GEMINI_SANDBOX=docker
    [ ] Containers efêmeros e de baixo privilégio, isolados da rede principal
    [ ] Credenciais cloud limitadas por escopo, nunca amplas

[ ] Human-in-the-Loop
    [ ] Checkpoint gates: deploy em produção
    [ ] Checkpoint gates: mudança de database schema
    [ ] Checkpoint gates: transações financeiras

[ ] Policy Server (2 camadas)
    [ ] Structural: blocked_tools por ambiente, allowed_tools por role
    [ ] Semantic: LLM juiz contra policies.yaml (PII não mascarada)
    [ ] Toda tool call interceptada ANTES da execução

[ ] Context Hygiene
    [ ] PII masking + placeholder injection ([[VAR]])
    [ ] Context resolver conectado ao pipeline (tool_policy_engine)
    [ ] Outputs sanitizados contra prompt injection

[ ] Verificação contínua
    [ ] Teste que falha ANTES de qualquer correção
    [ ] Eval com scorecard 0–5 vs baseline (behavioural drift)
    [ ] Revisor contínuo de PRs no tier adequado (1/2/3)

[ ] Nunca
    [ ] Modo YOLO (auto approve) sem guardrails
    [ ] Confiar na auto-polícia do system prompt
    [ ] Versões de biblioteca sem verificação dupla
23

Checklist de adoção

Marque o que seu time já pratica — o progresso fica salvo no navegador.

📐Adotar SDD

Criar a pasta specs/ no repositório
Escrever a primeira spec no formato híbrido (Markdown + YAML)
Usar Gherkin (Given/When/Then) nos cenários
Definir GEMINI.md / AGENTS.md por camada (global → projeto)
Exigir números de versão para toda biblioteca

🛡️Montar a rede de segurança

Habilitar Terminal Sandboxing
Checkpoints HITL para deploy, schema e finanças
Policy Server: camada estrutural (policies.yaml)
Policy Server: camada semântica (LLM juiz)
Context resolver no pipeline de tool calls

🔄Escalar review & cultura

Escolher o tier de code review (1, 2 ou 3)
Bundled summaries + risk assessment em todo PR
Adotar o "Conditional LGTM"
Eval contínua com scorecard vs baseline
Digital Quiet Hours + Agent Insight Sessions
24

Glossário

O vocabulário mínimo para navegar o paper.

Vibe Coding
Gerar código rapidamente a partir de intenção/vibe de alto nível. Ótimo para protótipos — nunca para produção sem validação.
SDD (Spec-Driven Development)
Desenvolvimento guiado por especificações de alta qualidade; o código vira output descartável e regenerável.
Spec
Instrução técnica detalhada que diz à IA exatamente o que construir; source of truth para humanos e agentes.
Gherkin
Sintaxe padronizada do BDD (Scenario/Given/When/Then) que força o LLM a pensar em State → Action → Outcome.
MCP
Model Context Protocol — o "USB-C das ferramentas de IA": um servidor, qualquer agente compatível.
Sandbox
Ambiente de execução restrito (container efêmero, baixo privilégio) que contém as ações do agente.
Blast Radius
A área de dano máxima se algo der errado — o sandbox a mantém dentro de uma instância descartável.
Zero-Trust
Nunca confiar na auto-polícia do modelo: governança externa e à prova de adulteração sobre toda tool call.
HITL (Human-in-the-Loop)
Checkpoint gates com sign-off humano para ações de alto risco: deploy, schema, finanças.
Eval (Evaluation)
Julgamentos pontuados (0–5, LLM-as-judge) e bandas de tolerância que pegam behavioural drift — testes pegam regressões.
Policy Server
Middleware que intercepta ações antes de sistemas externos: gating estrutural (determinístico) + semântico (LLM juiz).
Approval Fatigue
Exaustão por micro-aprovações que leva devs a clicar "Approve" reflexivamente — sem verificar.
Alucinação
O modelo inventa confiantemente algo não verdadeiro; sem dados, preenche lacunas com strings do contexto (context hallucination).
Context Resolver
Utilitário que resolve placeholders [[VAR]] via runtime state/env vars, mantendo PII fora do contexto do agente.
25

Guias companions

A série completa — do novo SDLC à segurança e evaluation de agentes.

HUBponto de partida

Hub da série — todos os dias

O índice navegable de todos os guias de estudo da série de whitepapers.

índicenavegação
D1fundamentos

The New SDLC with Vibe Coding

Como o ciclo de vida de desenvolvimento mudou com agentes — a base sobre a qual este guia constrói.

novo SDLCvibe codingworkflow
D2ferramentas

Agent Tools & Interoperability

Os 5 protocolos abertos que conectam agentes a ferramentas e entre si.

MCPA2AA2UI
D3contexto

Context Engineering: Sessions, Memory & Skills

O complemento direto da seção de context hygiene: como sessions, memória e skills alimentam o agente.

sessionsmemóriaskills
D4segurança

Vibe Coding Agent Security and Evaluation

Referenciado explicitamente neste paper: proteger e avaliar agentes contra código malicioso em profundidade.

segurançaevaluationquality gates
26

Referências

As 17 endnotes do paper + a citação principal.

[1]Google. Antigravity — agentic development platform (browser built-in, Terminal Sandboxing, workspace manager).
[2]Google. Gemini CLI — agente de linha de comando com sandboxing e system prompts hierárquicos (GEMINI.md).
[3]OUYANG et al. SkCC: Portable and Secure Skill Compilation for Cross-Framework LLM Agents, 2026 — sensibilidade a formato (−40%) e compilador de skills <10 ms.
[4]Estudo SkCC (Ouyang et al., 2026) — precisão de parsing em configs aninhadas: YAML 51,9% · JSON 43,1% · XML 33,8%.
[5]Cucumber. Gherkin Reference — sintaxe Given/When/Then para Behavior Driven Development.
[6]Google Cloud. Google Cloud Data Extension para IDEs — acesso a dados cloud direto do editor.
[7]GitHub. GitHub Actions — automação CI para disparar skills de review em todo PR.
[8]Google. Gemini Code Assist on GitHub — revisor de PR gerenciado (Tier 1).
[9]Google. Antigravity CLI — CLI de coding agent em modo non-interactive para pipelines CI (Tier 2).
[10]Google. Gemini Enterprise Agent Engine — runtime gerenciado com Sessions e Memory Bank duráveis (Tier 3).
[11]Google. A2A (Agent2Agent) protocol — coordenação entre agentes.
[12]Google Cloud. Spanner Graph — graph database para knowledge graph de código (traversal GQL).
[13]Google. ADK (Agent Development Kit) — pipelines de sub-agentes (Search, Story, Impact, Task-breakdown, Coding).
[14]Quantum Workplace (via CNBC) — usuários frequentes de IA têm 45% mais probabilidade de burnout alto.
[15]Google. Antigravity — Terminal Sandboxing (User Settings).
[16]Google. Gemini CLI sandbox image — imagem Docker oficial + GEMINI_SANDBOX=docker.
[17]Siemens — estudo de caso de modernização de legacy com agentes (Tier 3 em escala).
Citação principal

BOONSTRA, Lee. "Spec-Driven Production Grade Development in the Age of Vibe Coding: The Blueprint for Scalable Workflows and Team Evolution — From Vibe Prototypes to Production Reality". Google, maio de 2026.

velocidade (menor = mais calmo)10×