1

Fundamentos do Desenvolvimento Agêntico

O que é, princípios, precauções e diferença de Vibe Coding

O que é Desenvolvimento Agêntico?

Desenvolvimento agêntico é quando você delega à IA não apenas a escrita de código, mas o ciclo completo de uma tarefa: análise do problema, planejamento de solução, execução de múltiplos passos, verificação de resultados e autocorreção. O modelo opera com autonomia por períodos extensos antes de devolver controle ao desenvolvedor.

A diferença fundamental para o assistido convencional:

💬
Dev Assistido (Clássico)

Ciclo: Você escreve → pede sugestão → aceita/rejeita → repete. A IA responde a prompts específicos e devuelve controle imediatamente.

🤖
Dev Agêntico (Novo)

Ciclo: Você define objetivo → IA planeja → executa N passos → verifica → corrige → entrega resultado. Você revisa o output final.

Princípios e Precauções

⚠️
Cuidados Essenciais no Modo Agêntico

1. Git commit antes de iniciar: Sempre tenha um estado limpo no git antes de uma sessão agêntica longa. Revertir mudanças massivas sem histórico é um pesadelo.
2. Escopo bem definido: Agentes tendem a "expandir" o escopo quando não instruídos claramente. Defina explicitamente o que está e o que NÃO está no escopo.
3. Revisão obrigatória: Nunca faça deploy de código agêntico sem revisão humana. Volume alto de mudanças aumenta a probabilidade de bugs sutis.
4. Permissões mínimas: Configure o agente com acesso mínimo necessário (ex: sem acesso a produção, sem deploy automático).

⚡ Princípios do Dev Agêntico Eficaz
  1. Objective Clarity: Defina o resultado desejado em termos de comportamento observável, não de implementação. "Implemente autenticação JWT com refresh tokens" é melhor que "crie os arquivos X, Y, Z".
  2. Constraint Specification: Liste o que o agente NÃO pode fazer: mudar schema existente, adicionar dependências, alterar APIs públicas. Restrições negativas são tão importantes quanto objetivos positivos.
  3. Verification Checkpoints: Para tarefas longas, instrua o agente a parar e reportar progresso em pontos-chave, especialmente antes de operações destrutivas.
  4. State Preservation: Para sessões longas, use CLAUDE.md ou arquivos de estado para manter contexto entre sessões. Agentes "esquecem" no início de cada conversa.
  5. Incremental Trust: Comece com tarefas menores para calibrar como o agente específico se comporta com seu codebase antes de delegar tarefas críticas.

Diferença de Vibe Coding

"Vibe Coding" é o termo popular para descrever o desenvolvimento onde você descreve vagamente o que quer e aceita o que a IA produz sem entender completamente — surfando na "vibe" do output. É funcional para protótipos rápidos mas perigoso para código de produção.

Aspecto Vibe Coding Desenvolvimento Agêntico
Objetivo Protótipo rápido, exploração Feature production-ready, refactoring
Revisão Mínima ou inexistente Revisão sistemática de todos os outputs
Qualidade esperada "Funciona" é suficiente Testes, segurança, manutenibilidade
Entendimento Não precisa entender o código gerado Dev deve entender cada decisão arquitetural
Risco Alto para produção Gerenciado via processo e verificação
Uso ideal Hackathons, demos, scripts descartáveis Desenvolvimento profissional contínuo
2

Ferramentas e IDEs Agênticas

Claude Code, Codex OpenAI, comparativo e principais casos de uso

Claude Code

Claude Code é o terminal agent da Anthropic — uma CLI que roda diretamente no seu terminal, com acesso nativo ao sistema de arquivos, git, e execução de comandos. Diferente de ferramentas baseadas em IDE, Claude Code opera como um agente de terminal que entende e manipula o projeto inteiro.

💻
Terminal Native

Roda no terminal, integra com git, npm, pip e qualquer CLI. Não requer extensão de IDE — funciona em qualquer ambiente que tenha terminal.

🗂️
CLAUDE.md Context

Lê automaticamente CLAUDE.md na raiz do projeto. É o "manual de instruções" do agente para cada projeto específico.

🔧
Tool Use Nativo

Executa comandos shell, lê/escreve arquivos, busca no codebase com grep/ripgrep, roda testes — tudo nativamente sem plugins.

🔄
Git Integration

Entende histórico do git, pode criar commits semânticos, gerar mensagens de commit e analisar diffs para contextualização.

Codex OpenAI (CLI Agent)

O Codex da OpenAI na versão CLI agent é similar ao Claude Code em filosofia — terminal-first, acesso ao sistema de arquivos e execução de código. A diferença principal está no modelo subjacente e na integração com o ecossistema OpenAI.

Característica Claude Code Codex OpenAI CLI
Modelo Claude 3.5/3.7 Sonnet, Opus GPT-4o, o3, o4-mini
Context window 200k tokens (Claude 3.7) 128k tokens (GPT-4o)
Raciocínio estendido Sim (Claude 3.7 Extended Thinking) Sim (o1, o3, o4)
CLAUDE.md equivalente CLAUDE.md (nativo) AGENTS.md (nativo)
Integração com IDE Terminal (Cursor tem integração) Terminal + VS Code extensão
Melhor em Raciocínio de código, arquitetura, refactoring Geração de código puro, seguir spec rigorosa
Custo Por token (API) ou assinatura Por token (API) ou assinatura

Principais Modelos e Casos de Uso

Anthropic
Claude 3.7 Sonnet
Melhor custo-benefício para dev agêntico. Extended thinking para problemas complexos. Excelente em raciocínio sobre arquitetura.
Anthropic
Claude 3.5 Opus
Máxima capacidade de raciocínio. Use para tarefas de alta complexidade onde qualidade supera custo. Refactoring de sistemas legados.
OpenAI
GPT-4o
Rápido e preciso para geração de código. Ótimo para tasks bem especificadas. Melhor integração com ecossistema Azure/Microsoft.
OpenAI
o4-mini
Raciocínio de alta qualidade com custo reduzido. Ideal para debugging complexo, análise de algoritmos, provas de correção.
Google
Gemini 2.5 Pro
Context window de 1M tokens. Ideal para análise de codebases enormes ou projetos que excedem o limite dos outros modelos.
Meta
Llama 3.3 70B
Open source, auto-hospedável. Melhor para ambientes com restrições de privacidade onde código não pode sair da infraestrutura própria.
3

Workflow Agêntico

Apps novas vs existentes, exploração, contextualização e planos de ação

Exploração e Contextualização do Codebase

Antes de qualquer tarefa em um projeto existente, o agente precisa "entender" o codebase. Esta fase de exploração é crítica e deve ser explícita — não assuma que o agente já sabe o contexto.

Prompt
Prompt de exploração e contextualização inicial
Antes de iniciar qualquer tarefa, explore este projeto para entendê-lo:

1. **Estrutura de pastas:** Liste e explique a organização do projeto
2. **Stack tecnológico:** Identifique frameworks, ORMs, ferramentas de teste
3. **Padrões de código:** Analise 3-4 arquivos representativos e identifique:
   - Padrões de nomenclatura
   - Como erros são tratados
   - Como a autenticação funciona
   - Como o banco de dados é acessado
4. **Entry points:** Identifique onde a aplicação começa (main, server, index)
5. **Testes existentes:** Verifique se há testes, qual framework, cobertura aproximada

Produza um resumo estruturado de cada item e liste as principais decisões
de arquitetura que devo conhecer para trabalhar neste projeto.

Só após esta exploração, esteja pronto para a tarefa principal.

Planos de Ação Antes da Execução

Para tarefas complexas, exija que o agente produza um plano de ação antes de executar qualquer mudança. Isso permite que você corrija a direção antes que dezenas de arquivos sejam modificados.

Prompt
Prompt de planejamento antes da execução
Tarefa: [DESCREVA A TAREFA AQUI]

**IMPORTANTE: NÃO modifique nenhum arquivo ainda.**

Primeiro, produza um plano de ação detalhado:

## Plano de Ação

### Arquivos que serão criados:
- `caminho/arquivo.ts` — [propósito]

### Arquivos que serão modificados:
- `caminho/arquivo.ts` — [o que muda e por quê]

### Arquivos que serão deletados (se houver):
- `caminho/arquivo.ts` — [motivo]

### Dependências novas (se houver):
- `pacote@versão` — [por que é necessário]

### Mudanças de schema/banco de dados (se houver):
- [descreva migrações necessárias]

### Riscos identificados:
- [possíveis problemas ou trade-offs]

### Testes necessários:
- [quais testes serão criados/modificados]

Aguarde minha aprovação antes de iniciar a execução.
Por que exigir plano antes da execução?

Um agente pode modificar 30+ arquivos em minutos. Revisar o plano leva 2 minutos e evita horas de reversão de mudanças indesejadas. Para qualquer tarefa que afete mais de 3 arquivos, exija o plano primeiro.

4

Task Breakdown

Como dividir tarefas complexas e gerenciar estado em sessões longas

Tarefas complexas precisam ser decompostas em unidades que o agente pode executar confiável e verificavelmente. Uma task bem quebrada tem: objetivo claro, escopo delimitado, critério de sucesso mensurável e dependências explícitas.

Markdown
Template de Task Breakdown para funcionalidade complexa
# Task Breakdown — Sistema de Notificações

## Objetivo Final
Implementar sistema de notificações em tempo real com:
- Push notifications no browser (Web Push API)
- Notificações in-app (badge + dropdown)
- Preferências por usuário (quais tipos receber)
- Histórico de notificações com leitura/não-lida

---

## Tasks Decompostas

### TASK-001: Schema e Migrações [30min]
**Objetivo:** Criar tabelas notification e notification_preferences
**Entrada:** Schema Prisma atual (schema.prisma)
**Saída:** Arquivo de migração + schema atualizado
**Critério de sucesso:** `npx prisma migrate dev` executa sem erros
**Dependências:** Nenhuma
**NÃO inclui:** Nenhuma lógica de negócio

### TASK-002: Repository Layer [45min]
**Objetivo:** Criar NotificationRepository com CRUD completo
**Entrada:** Schema criado em TASK-001
**Saída:** `src/features/notifications/notification.repository.ts`
**Critério de sucesso:** Todos os métodos têm tipos corretos, sem any
**Dependências:** TASK-001 completa
**NÃO inclui:** Nenhuma lógica de envio

### TASK-003: Service Layer [1h]
**Objetivo:** NotificationService com lógica de envio e preferências
**Entrada:** Repository de TASK-002
**Saída:** `src/features/notifications/notification.service.ts`
**Critério de sucesso:** Testes unitários passando
**Dependências:** TASK-002 completa
**NÃO inclui:** WebSocket ou HTTP endpoints

### TASK-004: WebSocket Integration [1h]
**Objetivo:** Integrar com servidor WebSocket existente para real-time
**Entrada:** Service de TASK-003, `src/infra/websocket.ts`
**Saída:** Eventos de notificação via WebSocket
**Critério de sucesso:** Notificação chega no browser em < 1s
**Dependências:** TASK-003 completa
**NÃO inclui:** UI/Frontend

### TASK-005: API Endpoints [45min]
**Objetivo:** Endpoints REST para listar, marcar como lido, preferências
**Entrada:** Service de TASK-003
**Saída:** `src/features/notifications/notification.routes.ts`
**Critério de sucesso:** Testes de integração passando
**Dependências:** TASK-003 completa (pode rodar em paralelo com TASK-004)

---

## Gerenciamento de Estado

Arquivo de estado da sessão agêntica: `.agent-state.md`
Atualizar após cada task concluída.
Markdown
Gerenciamento de estado — .agent-state.md para sessões longas
# Agent State — Sistema de Notificações
_Última atualização: 2025-04-22 14:32_

## Status das Tasks

| Task | Status | Observações |
|------|--------|-------------|
| TASK-001 | ✅ Concluída | Migração 20250422_add_notifications criada |
| TASK-002 | ✅ Concluída | Repository em src/features/notifications/ |
| TASK-003 | 🔄 Em progresso | Service criado, faltam testes de sendBulk |
| TASK-004 | ⏳ Aguardando | Depende de TASK-003 |
| TASK-005 | ⏳ Aguardando | Depende de TASK-003 |

## Decisões Tomadas
- Usamos JSONB para notification.metadata (flexibilidade futura)
- Limite de 500 notificações por usuário (configurable via env)
- Notificações expiram em 30 dias (job de cleanup a criar)

## Problemas Encontrados
- TASK-003: WebSocket server usa eventos diferentes do esperado
  - Documentado em: src/infra/websocket.ts linha 45
  - Impacto: TASK-004 pode precisar de adaptação

## Próximo Passo
Completar testes do sendBulk no NotificationService, depois iniciar TASK-004.

## Contexto Importante para Próxima Sessão
- O WebSocket usa namespace '/notifications' (não o default)
- Auth middleware é o mesmo do REST (JWT via cookie 'auth_token')
- Rate limit de 100 notificações/min por usuário (definido em TASK-003)
5

Prompts para Autonomia

Prompts que delegam controle completo e rules para dev agêntico

Prompts para desenvolvimento agêntico são fundamentalmente diferentes de prompts para assistência. Eles transferem autoridade de decisão para o agente dentro de um escopo bem definido, minimizando interrupções para pedir aprovação.

Prompt
Prompt de desenvolvimento sem devolução de controle
Você tem autonomia para executar a seguinte tarefa de ponta a ponta.

## Tarefa
[DESCREVA A FUNCIONALIDADE COMPLETA]

## Autoridades que você tem:
- Criar novos arquivos em qualquer local dentro de `src/`
- Modificar arquivos existentes em `src/features/[feature-name]/`
- Instalar dependências de runtime (informar quais no relatório final)
- Criar e executar testes
- Fazer commits com mensagens semânticas (feat/fix/test/refactor)

## Restrições (não pode fazer sem aprovação):
- Modificar `src/infra/`, `src/shared/`, `prisma/schema.prisma`
- Instalar dependências que não existem no package.json atual
- Modificar configuração de CI/CD ou Docker
- Alterar qualquer arquivo fora de `src/`

## Como executar:
1. Explore os arquivos relevantes para entender o contexto
2. Crie um plano interno (não precisa me mostrar, mas documente em comentários)
3. Implemente em ordem de dependências
4. Escreva testes e garanta que passam
5. Faça commits granulares a cada subtask concluída

## Quando PAUSAR e me consultar:
- Se encontrar ambiguidade que impede progresso
- Se a implementação exigir decisões arquiteturais não óbvias
- Se os testes revelarem um requisito não especificado

## Relatório final esperado:
- Lista de arquivos criados/modificados
- Como testar a funcionalidade manualmente
- Trade-offs e decisões tomadas
- Débitos técnicos identificados (sem necessariamente resolver)

CLAUDE.md — O Manual do Agente por Projeto

Markdown
CLAUDE.md — Exemplo completo para projeto Node.js/TypeScript
# CLAUDE.md — FinanceOS Backend

## Sobre o Projeto
Sistema de gestão financeira para PMEs brasileiras.
Backend Node.js/TypeScript com Fastify, Prisma/PostgreSQL.
Versão atual: 2.1.3 | Última migração: 20250415_add_budget_module

## Comandos Essenciais

### Desenvolvimento
```bash
npm run dev           # Inicia servidor em modo watch (porta 3000)
npm run db:studio     # Abre Prisma Studio (porta 5555)
```

### Testes
```bash
npm test              # Todos os testes
npm run test:unit     # Apenas testes unitários
npm run test:int      # Testes de integração (requer DB)
npm run test:watch    # Watch mode para desenvolvimento
```

### Database
```bash
npx prisma migrate dev --name    # Nova migração
npx prisma generate                    # Regenerar client após schema change
npx prisma db seed                     # Popular com dados de teste
```

## Arquitetura

### Módulos Existentes
- `users/` — Autenticação, perfis, permissões
- `companies/` — Cadastro e configuração de empresas
- `transactions/` — Lançamentos financeiros (core do sistema)
- `categories/` — Categorização de transações
- `budget/` — Orçamentos e metas (NOVO - em desenvolvimento)
- `reports/` — Relatórios e exportação (READ-ONLY - não modificar)

### Padrões de Código

#### Error Handling
SEMPRE use o Result pattern. NUNCA use throw diretamente no service layer:
```typescript
// Correto:
return { data: result, error: null };
// ou
return { data: null, error: new AppError('Mensagem', 'ERROR_CODE') };
```

#### Validação
Toda entrada de dados externas usa Zod. Schema em `[feature].schema.ts`.

#### Logs
Use o logger Pino sempre. NUNCA console.log:
```typescript
import { logger } from '@/infra/logger';
logger.info({ requestId, userId }, 'Mensagem descritiva');
```

## Regras para o Agente

### Pode fazer livremente:
- Criar/modificar arquivos em `src/features/[feature]/`
- Criar novos testes em `src/features/[feature]/tests/`
- Atualizar tipos em `src/types/`

### Precisa de aprovação:
- Modificar `src/infra/` (impacto global)
- Alterar `prisma/schema.prisma` (migration irreversível)
- Adicionar novas dependências npm

### NUNCA fazer:
- Usar `any` em TypeScript
- Commitar arquivos `.env`
- Modificar arquivos em `src/features/reports/` (módulo legado bloqueado)
- Usar `console.log` (usar logger)

## Contexto de Negócio
- Moeda: BRL, Locale: pt-BR
- Fuso horário: America/Sao_Paulo (armazenar datas em UTC, exibir em BRT)
- LGPD: CPF/CNPJ devem ser mascarados em logs
- Limite de transações por empresa: 10.000/mês (plano básico)

## Credenciais de Desenvolvimento (APENAS DEV)
- DB: postgresql://postgres:dev_password@localhost:5432/financeos_dev
- Redis: redis://localhost:6379
6

Verificação e Testes

Verificação de discrepâncias, análise, correção e geração automatizada

O ciclo de verificação em desenvolvimento agêntico é mais estruturado do que na revisão manual. Como o agente pode ter feito dezenas de mudanças, você precisa de um processo sistemático para garantir que o comportamento desejado foi implementado corretamente.

Verificação de Discrepâncias

Prompt
Prompt de verificação pós-execução agêntica
A implementação foi concluída. Agora realize uma verificação completa:

## 1. Verificação de Spec
Para cada item do requisito original, confirme se foi implementado:
- [ ] [Requisito 1]: implementado em [arquivo:linha]?
- [ ] [Requisito 2]: implementado em [arquivo:linha]?

## 2. Verificação de Padrões
- O código segue os padrões do CLAUDE.md/cursorrules?
- Há algum `any` em TypeScript?
- Há `console.log` que não deveria estar lá?
- Todos os inputs externos são validados com Zod?

## 3. Verificação de Segurança
- Há dados sensíveis expostos em logs?
- Há endpoints sem verificação de autenticação?
- Há queries SQL construídas por concatenação de string?

## 4. Verificação de Testes
- Quais funções/métodos NÃO têm teste ainda?
- Os testes cobrem os edge cases mais críticos?

## 5. Identificação de TODOs
Liste qualquer TODO, FIXME ou comentário de "completar depois"
que ficou no código durante a implementação.

Para cada discrepância encontrada, corrija-a agora.

Workflow de Geração e Execução Automatizada de Testes

Prompt
Workflow agêntico completo de geração e execução de testes
Execute o seguinte workflow de testes de forma autônoma:

## Fase 1: Análise de Cobertura
1. Execute `npm run test:coverage`
2. Identifique os 5 arquivos com menor cobertura de branches
3. Para cada arquivo, liste as funções sem cobertura adequada

## Fase 2: Geração de Testes
Para cada função identificada na Fase 1:
1. Analise o código da função e seus tipos
2. Gere testes que cubram:
   - Happy path com dados realistas
   - Todos os branches de if/switch
   - Error cases (null, undefined, valores inválidos)
   - Casos de borda numéricos
3. Salve os testes em `[arquivo].test.ts` seguindo o padrão do projeto

## Fase 3: Execução e Correção
1. Execute os testes gerados: `npm run test:watch -- --run`
2. Para cada teste que falhar:
   a. Analise o erro (problema no teste ou no código?)
   b. Se for bug no código: corrija o código E documente a correção
   c. Se for teste incorreto: corrija o teste
3. Itere até 100% dos testes passarem

## Fase 4: Relatório
Produza:
- Cobertura antes vs depois (%)
- Bugs encontrados pelos testes gerados (lista com arquivo:linha)
- Testes criados (quantidade e arquivos)
- Tempo estimado de execução do CI adicionado
💡
Teste como Validação do Agente

Em sessões agênticas, testes automatizados são seu principal mecanismo de verificação. Estruture o workflow para que o agente escreva testes antes de fechar a tarefa — os testes falhando revelam discrepâncias que a revisão manual manual poderia perder.

⚠️
Testes que Testam a IA, não o Código

Um risco específico do desenvolvimento agêntico: a IA pode escrever testes que passam trivialmente porque testa a própria implementação que gerou (tautológicos). Revise os testes procurando: assertions muito genéricas (expect(result).toBeDefined()), mocks que cobrem demais, e testes que só verificam que "algo foi chamado" sem verificar valores reais.