Vibecoding: do básico ao expert
Uma apostila para quem já programa e quer transformar IA em multiplicador de produtividade — sem abrir mão de qualidade, segurança e empregabilidade. Teoria, exercícios por capítulo, projetos que simulam trabalho real e uma biblioteca de prompts pronta para usar.
Como usar esta apostila
Cada capítulo termina com exercícios práticos (clique para expandir) pensados para serem feitos em um repositório real — de preferência um projeto seu ou um fork de código aberto. Se você já usa alguma ferramenta de IA no dia a dia, pode pular direto para o capítulo 4; se está começando, siga a ordem. As seções finais (projetos, carreira e prompts) foram desenhadas para virar portfólio e argumento de entrevista.
Vibecoding profissional não é "deixar a IA programar por você". É delegar a digitação e manter a engenharia: você continua dono das decisões de arquitetura, da revisão e da responsabilidade pelo que vai para produção.
O que é vibecoding (de verdade)
O termo vibecoding foi cunhado por Andrej Karpathy (cofundador da OpenAI e ex-diretor de IA da Tesla) em fevereiro de 2025, descrevendo um jeito de programar em que você "esquece que o código existe": descreve a intenção em linguagem natural, a IA gera o código, você roda, cola os erros de volta e repete. O que começou como um tweet meio provocativo virou, em pouco mais de um ano, uma prática dominante — pesquisas recentes indicam que a grande maioria dos desenvolvedores já usa ferramentas de codificação assistida por IA regularmente, e uma fatia expressiva de todo código novo em plataformas como o GitHub já nasce gerado por modelos.
Para quem já programa, porém, a definição "descreva e aceite o que vier" é insuficiente — e perigosa. Na prática profissional, vibecoding é melhor entendido como um espectro de delegação:
| NÍVEL | O QUE A IA FAZ | O QUE VOCÊ FAZ | EXEMPLO |
|---|---|---|---|
| 1. Autocomplete | Completa linhas e blocos | Escreve, aceita ou rejeita cada sugestão | Copilot inline |
| 2. Chat assistido | Gera trechos sob demanda | Copia, adapta, integra manualmente | Claude / ChatGPT no navegador |
| 3. Edição no repositório | Edita múltiplos arquivos com contexto do projeto | Direciona, revisa diffs, aprova | Cursor, Windsurf, Copilot Edits |
| 4. Agente supervisionado | Planeja, edita, roda testes, corrige sozinha | Define a tarefa, supervisiona, revisa o resultado | Claude Code, Codex, Antigravity |
| 5. Vibecoding "puro" | Constrói o app inteiro a partir de descrições | Descreve, testa como usuário, quase não lê código | Lovable, Bolt, v0, Replit Agent |
Esta apostila foca nos níveis 3 a 5 — mas com uma tese central: quanto mais você delega, mais valiosas ficam as habilidades de engenharia que a IA não substitui (especificar bem, revisar criticamente, testar, pensar arquitetura e segurança). É exatamente essa combinação que o mercado paga.
Por que isso explodiu agora
- Custo de gerar código despencou. Tarefas que tomavam horas de digitação saem em minutos. Um experimento controlado da Microsoft Research com 95 desenvolvedores mediu conclusão de tarefa ~56% mais rápida com assistente de IA.
- As ferramentas amadureceram. Cursor, Claude Code, Copilot, Windsurf, Lovable e afins deixaram de ser experimento e viraram produtos com ciclos de release semanais e adoção corporativa.
- O mercado pressiona. Times menores, prazos iguais. Quem domina o fluxo com IA entrega várias vezes mais rápido — e as vagas passaram a exigir isso explicitamente.
O que vibecoding NÃO é
- Não é no-code. No-code gera aplicações em formato proprietário com teto baixo; vibecoding gera código real (React, Python, SQL…) que você pode levar para qualquer lugar, auditar e evoluir.
- Não é substituto de fundamentos. A IA erra com confiança. Quem não sabe ler código não sabe quando ela errou — e é aí que nascem os desastres de produção.
- Não é "aceitar tudo". O profissional que o mercado quer é o que usa IA e mantém padrão de revisão, testes e segurança.
Quando usar (e quando não usar)
| USE COM TUDO | USE COM SUPERVISÃO FORTE | EVITE DELEGAR |
|---|---|---|
| Protótipos e MVPs; boilerplate; scripts internos; testes; migrações mecânicas; documentação; ferramentas descartáveis | Features em código legado; refatorações grandes; integrações com APIs de terceiros; código de performance crítica | Lógica de autenticação/criptografia caseira; manipulação de dinheiro sem testes; decisões de arquitetura; código regulado (saúde, financeiro) sem revisão humana formal |
Pense na IA como um dev júnior extraordinariamente rápido, com memória de peixe e excesso de confiança: produtivo demais para ignorar, arriscado demais para deixar sem revisão. Todo o resto da apostila deriva dessa imagem.
Exercícios do capítulo 1
1.1 — Mapeie seu nível atual 15 min
Liste as 5 tarefas que mais consumiram seu tempo na última semana de trabalho (ou estudo). Para cada uma, classifique em qual nível do espectro (1 a 5) ela poderia ter sido delegada e o que impediria você de confiar no resultado. Guarde essa lista — você vai revisá-la no capítulo 5.
1.2 — Experimento de calibração 30 min
Pegue um bug ou tarefa pequena real. Resolva metade manualmente e metade descrevendo para uma IA (qualquer chat serve). Anote: tempo gasto, quantas iterações a IA precisou, e quantos erros você encontrou no código gerado lendo com atenção. O objetivo não é velocidade — é calibrar sua desconfiança.
O ecossistema de ferramentas
O erro mais comum de quem começa é escolher ferramenta por hype ou preço, e não por caso de uso. O ecossistema de 2026 se organiza em quatro famílias — e um profissional produtivo normalmente combina duas ou três delas.
1. Editores com IA integrada (nível 3)
- Cursor — fork do VS Code com IA nativa; indexa o repositório inteiro e usa esse contexto nas edições. O mais popular entre devs profissionais. Ideal para quem quer manter o fluxo de editor tradicional.
- Windsurf — editor focado em fluxos agênticos (a IA executa ações encadeadas no editor); posicionamento forte em times e projetos grandes.
- GitHub Copilot — o mais adotado globalmente; vive dentro do VS Code, JetBrains e outros. Evoluiu de autocomplete para modos de edição multi-arquivo e agente. Costuma ser o mais fácil de aprovar em empresa (compliance Microsoft/GitHub).
2. Agentes de terminal / CLI (nível 4)
- Claude Code (Anthropic) — agente que vive no terminal (e em apps desktop/IDE), lê e modifica dezenas de arquivos, roda comandos, testes e git. Forte em raciocínio sobre bases de código grandes e em automação (modo headless para CI).
- Codex (OpenAI) e Gemini CLI / Antigravity (Google) — concorrentes diretos; o Antigravity, lançado no fim de 2025, aposta em orquestração multi-agente para projetos complexos.
- Aider — agente open source de terminal, querido por quem quer controle total e integração fina com git.
3. Construtores de aplicação (nível 5)
- Lovable — gera apps completos (front + banco + auth via Supabase) a partir de prompts; forte para MVPs e validação com clientes.
- Bolt.new — velocidade máxima de ideia a protótipo deployado no navegador; ótimo para demos e hackathons.
- v0 (Vercel) — especializado em UI React/Next.js com shadcn/ui; componentes de alta qualidade prontos para colar no projeto real.
- Replit — IDE completa no navegador com agente que constrói e hospeda; do zero ao deploy sem sair da aba.
4. Chats generalistas (nível 2)
Claude, ChatGPT e Gemini via navegador continuam úteis para rascunhos, explicações de código alheio, revisão de trechos e discussões de arquitetura — situações em que você quer pensar junto antes de tocar no repositório.
Como escolher (critério profissional)
| SE VOCÊ QUER… | COMECE POR | POR QUÊ |
|---|---|---|
| Acelerar seu dia a dia em código existente | Cursor ou Copilot | Menor mudança de hábito; contexto do repo |
| Delegar tarefas inteiras e automatizar | Claude Code (ou Codex/Aider) | Agente com plano, execução e testes |
| Validar um produto com cliente em dias | Lovable ou Bolt | Da descrição ao deploy sem setup |
| UI bonita rápido dentro de projeto React | v0 | Componentes shadcn de qualidade |
| Padronizar um time em empresa | Copilot ou Windsurf | Governança, compliance e licenças por assento |
Em entrevistas, "uso IA" não diferencia mais ninguém. O que diferencia é saber justificar a escolha da ferramenta para o contexto e demonstrar um fluxo com revisão e testes. Domine profundamente uma ferramenta de cada família em vez de conhecer superficialmente todas.
Exercícios do capítulo 2
2.1 — Teste dirigido de três famílias 1–2 h
Implemente a mesma mini-tarefa (ex.: um conversor de CSV para JSON com validação) três vezes: (a) num chat generalista, (b) num editor com IA, (c) num agente de terminal. Compare: qualidade do código, quanto contexto você precisou fornecer e onde cada um errou. Escreva 5 linhas de conclusão — isso vira material de portfólio.
2.2 — Auditoria de um app "nível 5" 45 min
Gere um app simples num construtor (Lovable/Bolt/v0), exporte o código e leia-o como se fosse revisar o PR de um júnior. Liste 5 pontos que você exigiria mudar antes de ir para produção (nomes, duplicação, tratamento de erro, segurança…). Esse olhar crítico é o tema dos capítulos 6 e 8.
Prompting para código: a habilidade base
Prompt vago gera código genérico. Prompt com contexto, restrições e critério de aceite gera rascunho aproveitável de primeira. A diferença entre um dev que "briga com a IA" e um que multiplica produtividade está quase toda na estrutura do pedido.
A anatomia de um bom prompt de código
Um prompt profissional tem até seis blocos. Você não precisa de todos sempre — mas precisa saber quais está omitindo:
- Contexto — stack, versões, arquitetura, onde o código vai viver. "App Next.js 15 com TypeScript estrito e Prisma; este código entra em src/services/."
- Tarefa — o comportamento desejado, não a implementação. "Preciso deduplicar clientes por e-mail normalizado antes do insert."
- Restrições — o que não pode. "Sem dependências novas; manter compatível com Node 20; não tocar no schema."
- Formato de saída — "Só o arquivo completo"; "diff unificado"; "explique primeiro, código depois".
- Critério de aceite — como saber que funcionou. "Deve passar nos testes de services/dedupe.test.ts; e-mails com maiúsculas e espaços contam como iguais."
- Exemplos (few-shot) — entrada/saída esperada ou um trecho do estilo de código do projeto para a IA imitar.
✗ RUIM: "faz uma função que valida CPF" ✓ BOM: "Contexto: API Node 20 + TypeScript estrito, sem libs externas de validação. Tarefa: função pura validaCPF(cpf: string): boolean. Regras: aceitar com ou sem máscara; rejeitar dígitos repetidos (111.111.111-11); validar os dois dígitos verificadores pelo algoritmo oficial. Saída: apenas o arquivo src/utils/cpf.ts com a função exportada + JSDoc. Aceite: os casos '529.982.247-25' → true e '111.111.111-11' → false."
Técnicas que mais mudam o resultado
- Peça o plano antes do código. "Antes de implementar, liste os passos e os arquivos que pretende alterar. Aguarde meu OK." Isso corta 80% do retrabalho em tarefas médias/grandes.
- Uma tarefa por vez. Descrever o sistema inteiro num prompt só é a receita clássica do caos. Divida: "primeiro o modelo de dados; agora o endpoint; agora a tela".
- Dê o erro inteiro. Ao depurar, cole a stack trace completa + o trecho relevante + o que você esperava. "Não funcionou" não é informação.
- Ancore no código existente. "Siga o padrão de src/services/user.service.ts" vale mais que três parágrafos de descrição de estilo.
- Peça alternativas quando a decisão importa. "Me dê 2 abordagens com trade-offs antes de escolher" — você continua sendo o arquiteto.
- Defina persona/nível quando útil. "Responda como revisor sênior exigente" muda o tom de complacente para crítico.
Iteração: o loop do vibecoding
descrever → gerar → RODAR → observar → devolver erro/ajuste → gerar → …
O passo que separa amadores de profissionais é o RODAR: nunca encadeie dois prompts de mudança sem executar o código (ou os testes) entre eles. Cada geração não verificada empilha incerteza — e depois de três mudanças às cegas você não sabe mais qual delas quebrou o quê.
Quando a IA erra duas vezes seguidas na mesma correção, pare de pedir "conserta". Ela tende a entrar em loop, remendando o remendo. Reverta para o último estado bom (git!), reescreva o prompt com o aprendizado das falhas e recomece limpo. Três tentativas falhas = sinal de que falta contexto ou a tarefa precisa ser dividida.
Exercícios do capítulo 3
3.1 — Reescreva 3 prompts reais 30 min
Recupere do seu histórico três prompts de código que geraram resultado ruim. Reescreva cada um usando os seis blocos da anatomia e rode de novo. Compare os resultados e identifique qual bloco ausente causava o problema (quase sempre é contexto ou critério de aceite).
3.2 — Plano antes do código 45 min
Escolha uma feature pequena de um projeto seu. Peça à IA apenas o plano (passos + arquivos). Critique o plano por escrito (o que faria diferente?), ajuste com a IA e só então autorize a implementação. Meça quantas correções foram necessárias em comparação ao seu fluxo normal.
3.3 — Duelo de especificidade 20 min
Peça a mesma função duas vezes em conversas separadas: uma com prompt de uma linha, outra com prompt completo (contexto, restrições, aceite). Faça o diff dos dois resultados e liste tudo que a versão vaga "inventou" por conta própria — dependências, comportamento em edge cases, nomes. Isso treina você a enxergar o custo da ambiguidade.
Context engineering: alimentando a IA certo
A partir de um certo ponto, a qualidade do que a IA produz depende menos do prompt da vez e mais do contexto permanente que ela enxerga: quais arquivos, quais regras, qual histórico. "Context engineering" é a disciplina de curar essa dieta de informação — e é a habilidade que separa o nível 3 do nível 4 do espectro.
Como a janela de contexto funciona (e por que você deve se importar)
Todo modelo tem uma janela de contexto finita — o total de texto (seu código, suas mensagens, as respostas) que ele consegue "ver" de uma vez. Três consequências práticas:
- Contexto irrelevante piora o resultado. Despejar o repositório inteiro dilui o que importa. Modelos prestam mais atenção ao começo e ao fim do contexto — o meio de um contexto gigante vira zona cega.
- Sessões longas degradam. Depois de horas na mesma conversa, decisões antigas, código obsoleto e becos sem saída continuam lá, confundindo o modelo. Sessão nova com resumo curto costuma render mais que sessão infinita.
- Contexto custa dinheiro e latência. Em ferramentas cobradas por token, dieta de contexto é também gestão de custo.
Arquivos de regras: o contrato permanente
Toda ferramenta séria hoje lê um arquivo de instruções persistentes na raiz do projeto — CLAUDE.md (Claude Code), .cursor/rules (Cursor), AGENTS.md (padrão aberto adotado por várias ferramentas), copilot-instructions.md (Copilot). É o documento de onboarding do seu "dev júnior infinito". Um bom arquivo de regras tem:
# Projeto: API de pedidos (Fastify + TypeScript + Prisma + PostgreSQL) ## Comandos - dev: `pnpm dev` · testes: `pnpm test` · lint: `pnpm lint` · migração: `pnpm db:migrate` - SEMPRE rode `pnpm lint && pnpm test` antes de considerar uma tarefa concluída. ## Arquitetura - src/routes → validação/IO apenas; src/services → regra de negócio; src/repos → acesso a dados. - Nunca importar Prisma fora de src/repos. ## Convenções - TypeScript estrito; proibido `any` sem comentário justificando. - Erros de domínio via classes em src/errors; nunca lançar string. - Datas sempre em UTC; dinheiro sempre em centavos (integer). ## Limites - Não criar dependências novas sem perguntar. - Não alterar migrations existentes; criar novas. - Não tocar em src/legacy/** — código congelado.
- Curto e específico vence longo e genérico. Regras óbvias ("escreva código limpo") são ruído. Cada linha deve mudar um comportamento real.
- Atualize quando a IA errar. Errou duas vezes o mesmo padrão? A correção vira uma linha no arquivo de regras. É assim que o "júnior" aprende.
- Versione junto com o código. O arquivo de regras entra no git e passa por PR como qualquer código — é infraestrutura do time.
Curadoria de contexto por tarefa
- Aponte arquivos, não descreva de memória. Em vez de explicar como é o serviço de usuários, mande a IA ler
src/services/user.service.ts. Ferramentas com acesso ao repo fazem isso via menção (@arquivo) ou leitura direta. - Docs externas entram no contexto, não na fé. Para libs recentes ou pouco conhecidas, cole a página relevante da documentação ou aponte a URL — modelos alucinam APIs de bibliotecas com versões novas.
- Resuma sessões longas. Ao trocar de sessão, peça: "resuma o estado atual: o que foi feito, decisões tomadas, o que falta" e cole esse resumo na sessão nova (Claude Code faz isso com
/compact). - Um chat por assunto. Misturar a feature de pagamentos com o bug do relatório na mesma conversa contamina os dois.
Antes de qualquer tarefa não trivial, pergunte-se: "se eu passasse isso a um dev novo no time, que arquivos e decisões ele precisaria conhecer?" Essa lista é o seu contexto mínimo. Nem mais, nem menos.
Exercícios do capítulo 4
4.1 — Escreva o arquivo de regras do seu projeto 45 min
Crie um CLAUDE.md/AGENTS.md para um projeto real seu usando o template acima. Depois, peça uma tarefa qualquer à IA sem o arquivo e com o arquivo (sessões separadas) e faça o diff dos resultados. Documente 3 diferenças concretas.
4.2 — Teste de alucinação de API 30 min
Escolha uma biblioteca com release recente. Peça código que use um recurso novo, primeiro sem fornecer documentação, depois colando a doc oficial no contexto. Verifique na doc real quais métodos da primeira resposta simplesmente não existem. Essa experiência vacina contra confiança cega.
4.3 — Higiene de sessão na prática diária
Durante uma semana, adote duas regras: (a) uma conversa por tarefa; (b) ao passar de ~1h na mesma sessão, gerar resumo e recomeçar. Anote se a taxa de respostas "perdidas" (que ignoram decisões anteriores ou reintroduzem código antigo) diminui.
Workflow profissional: o ciclo que escala
Ferramenta boa com processo ruim produz lixo em alta velocidade. Este capítulo define o ciclo de trabalho que transforma vibecoding em prática de engenharia — o mesmo ciclo que você deve conseguir narrar numa entrevista.
O ciclo EPRE: Explorar → Planejar → Executar → Revisar
- Explorar. Antes de pedir mudanças, faça a IA ler: "explore como a autenticação funciona neste repo e me explique o fluxo, sem alterar nada". Você valida o entendimento dela (e o seu) antes de qualquer edição.
- Planejar. Peça o plano de implementação: passos, arquivos afetados, riscos. Critique e ajuste o plano — é ordens de grandeza mais barato corrigir um plano do que corrigir código. Ferramentas de agente têm modo de planejamento dedicado (ex.: plan mode no Claude Code); use.
- Executar. Autorize a implementação por etapas do plano, rodando testes entre etapas. Mantenha o terminal de testes/execução sempre visível.
- Revisar. Leia o diff completo como revisor, não como autor. Rode lint, typecheck e a suíte de testes. Só então commit.
Git como rede de segurança (não negociável)
- Commits pequenos e frequentes. Cada etapa validada do plano vira um commit. Se a IA descarrilar,
git resette devolve ao último ponto são em segundos. - Branch por tarefa. Nunca deixe um agente trabalhar na main. Branch descartável = liberdade de experimentar sem medo.
- Mensagens de commit honestas. Muitos times adotam trailers/labels indicando co-autoria de IA. Além de transparência, ajuda o futuro leitor a calibrar a revisão.
- Diff antes de commit, sempre. O comando mais importante do vibecoding não é nenhum prompt — é
git diff.
Tamanho de lote: a variável escondida
A taxa de acerto da IA cai de forma não linear com o tamanho da tarefa. "Implemente o módulo de relatórios" (20 arquivos) tende ao desastre; as mesmas mudanças pedidas em 6 tarefas de 2–4 arquivos saem limpas. Decompor é a sua principal alavanca de qualidade — e é trabalho de engenheiro, não da ferramenta.
□ Eu li cada linha do diff e sei explicá-la? □ Testes novos cobrem o comportamento pedido (não só happy path)? □ Lint + typecheck + suíte completa verdes? □ Sem dependência nova não justificada? □ Sem segredo/credencial no código? □ Sem código morto ou "melhorias" que ninguém pediu? □ A descrição do PR menciona o que foi gerado e como foi validado?
Anti-padrões que denunciam amadorismo
- Aceite em rajada: aprovar 15 edições sem ler porque "os testes passaram" (testes que a própria IA escreveu para o código dela…).
- Sessão-novela: um único chat de 6 horas acumulando contexto podre.
- Prompt-remendo: 8 pedidos de "conserta isso" empilhados em vez de reverter e re-especificar.
- PR-monstro: entregar 3.000 linhas geradas num PR único e esperar que colegas revisem o que você mesmo não leu.
Exercícios do capítulo 5
5.1 — Uma feature inteira em EPRE 2 h
Escolha uma feature média de um projeto seu e execute o ciclo completo: exploração documentada, plano criticado por escrito, execução por etapas com um commit por etapa, revisão com o checklist acima. Guarde o histórico de commits — é evidência concreta de fluxo profissional para portfólio.
5.2 — Treino de decomposição 30 min
Pegue uma tarefa grande do seu backlog e escreva a decomposição em subtarefas de no máximo 4 arquivos cada, com critério de aceite individual. Peça à IA para criticar sua decomposição ("que dependências entre etapas eu não vi?"). Compare com a que ela proporia.
5.3 — Simulacro de desastre 30 min
Numa branch descartável, deixe um agente fazer uma mudança grande sem plano. Depois pratique o resgate: identificar via git diff o que prestou, fazer cherry-pick do aproveitável e descartar o resto. Saber se recuperar vale tanto quanto saber prevenir.
Debugging e revisão de código que você não escreveu
No vibecoding, você passa menos tempo escrevendo e muito mais tempo lendo e julgando. Revisar código alheio sempre foi habilidade de sênior; agora é habilidade de sobrevivência — porque o "colega" que escreveu produz centenas de linhas por minuto.
Os erros típicos de código gerado (saiba onde olhar)
- APIs alucinadas: métodos, parâmetros ou opções de configuração que não existem — especialmente em libs novas ou nichadas. Sintoma: código bonito que não compila ou falha em runtime com "is not a function".
- Happy path only: o fluxo principal impecável; entrada vazia, nulo, concorrência, timeout e erro de rede ignorados.
- Overengineering espontâneo: abstrações, camadas e opções de configuração que ninguém pediu. IA adora "arquitetar" um CRUD.
- Reimplementação do que já existe: por não ver (ou não procurar) o utilitário existente, ela cria um duplicado sutilmente diferente.
- Consistência local, inconsistência global: cada arquivo internamente coerente, mas nomes/padrões divergindo entre arquivos gerados em momentos diferentes.
- Testes tautológicos: testes que verificam o que o código faz (espelho), não o que deveria fazer (especificação). Passam sempre — inclusive quando o código está errado.
- Correção por amputação: diante de um teste vermelho, "resolver" deletando o teste, engolindo a exceção ou relaxando o tipo. Sempre desconfie de diffs de correção que removem verificações.
Técnica de revisão: o funil de três passadas
- Passada de intenção (30 s): o diff faz só o que foi pedido? Arquivos inesperados alterados? Dependências novas? Se sim, pare e questione antes de ler o resto.
- Passada de fronteiras (2–5 min): entradas e saídas — validação, nulos, erros, tipos, limites, transações. É onde mora a maioria dos bugs de IA.
- Passada de lógica (o tempo que precisar): agora sim, linha a linha no núcleo. Se não entender um trecho, não aprove — peça à própria IA que explique e simplifique ("explique este bloco; depois reescreva da forma mais simples que passe nos mesmos testes").
Debugging assistido: extraindo o máximo
- Evidência completa: stack trace inteira + código relevante + entrada que causou + comportamento esperado. Uma mensagem bem municiada resolve o que dez "ainda não funciona" não resolvem.
- Hipóteses antes de correção: "liste as 3 causas mais prováveis deste erro e como testar cada uma" — evita o remendo cego e ensina você sobre o sistema.
- Logs instrumentados: peça à IA para adicionar logging temporário nos pontos suspeitos, rode, cole a saída. É o printf-debugging turbinado.
- Isolamento reprodutível: para bugs cabeludos, peça um script mínimo que reproduza o problema. Se a IA não conseguir reproduzir, vocês ainda não entenderam o bug.
- Explicador de código legado: use a IA como tradutor de código alheio/antigo ("explique o que esta função faz, suas suposições implícitas e o que quebraria se X") — um dos ganhos de produtividade mais subestimados em manutenção.
Você é o responsável por todo código que commita — gerado ou não. "Foi a IA" não existe como defesa em code review, incidente de produção ou auditoria. Se você não consegue explicar uma linha, ela não entra.
Exercícios do capítulo 6
6.1 — Caça aos 7 erros 45 min
Peça a uma IA uma feature média (ex.: upload de arquivos com validação) sem dar restrições detalhadas. Revise com o funil de três passadas procurando ativamente os 7 erros típicos listados acima. Meta: encontrar pelo menos 3. Registre-os como faria num code review real.
6.2 — Debug municiado vs. debug preguiçoso 30 min
No próximo bug real, cronometre duas abordagens: primeiro 10 minutos com mensagens vagas ("dá erro"), depois uma única mensagem com evidência completa (stack + código + entrada + esperado). A diferença de qualidade da resposta é a lição.
6.3 — Teste tautológico 20 min
Peça à IA para escrever testes de uma função que contém um bug que você conhece, sem contar do bug. Verifique se os testes gerados pegam o bug ou apenas espelham o comportamento atual. Spoiler: prepare-se para o segundo caso — e aprenda a pedir "testes a partir da especificação, não da implementação".
Testes e qualidade: o freio que permite acelerar
Quanto mais código você delega, mais os testes deixam de ser burocracia e viram o mecanismo de verificação que torna a delegação segura. Times que vibecodam rápido de forma sustentável têm uma coisa em comum: uma malha automática (testes + lint + typecheck) que pega o erro antes do humano precisar pegar.
Testes como especificação executável
A inversão mais poderosa do vibecoding: em vez de pedir código e depois testes, escreva (ou gere e revise) os testes primeiro e peça a implementação que os faça passar. O teste vira o contrato — e a IA é excelente em "fazer o vermelho ficar verde" quando o vermelho está bem definido.
"Vamos trabalhar em TDD. Etapa 1: escreva APENAS os testes para a função calculaFrete(pedido) conforme as regras abaixo. Não implemente nada ainda. Regras: [regras de negócio] Casos que exijo cobertos: pedido vazio, peso no limite exato de faixa, CEP inválido, cupom de frete grátis combinado com peso acima do teto. Vou revisar os testes. Só depois do meu OK você implementa — e é proibido alterar os testes para fazê-los passar."
- Revise os testes com mais rigor que o código. Se a especificação estiver errada, todo o resto estará "corretamente errado".
- Trave os testes. Instrua explicitamente (no prompt e no arquivo de regras): a IA não altera testes existentes para resolver falhas — ela avisa e explica o conflito.
- Peça casos adversariais. "Que entradas quebrariam esta função? Gere testes para elas." A IA é boa em imaginar entradas hostis quando provocada.
A malha de qualidade automática
Cada verificação automática é um revisor incansável que trabalha de graça a cada geração:
- Typecheck estrito (TypeScript strict, mypy…): elimina uma classe inteira de alucinação — tipos que não existem não compilam.
- Lint + formatter com autofix: consistência de estilo sem gastar sua atenção nem seus prompts.
- Suíte de testes rápida: se a suíte demora 20 minutos, ninguém roda entre etapas. Otimize a suíte antes de acelerar a geração.
- Hooks/gates: configure a ferramenta de agente para rodar lint+testes automaticamente após cada edição (ex.: hooks no Claude Code) e o CI para bloquear PR sem verde. A IA passa a receber o feedback de erro sozinha e se autocorrigir antes de te chamar.
Cobertura com ceticismo
IA infla cobertura com facilidade — dezenas de testes rasos que exercitam linhas sem verificar comportamento. Métricas úteis de verdade: casos de borda cobertos, mutação (mutation testing) e a pergunta manual "se eu introduzir este bug de propósito, algum teste fica vermelho?".
Além do unitário
- Testes de propriedade (fast-check, Hypothesis): descreva invariantes ("desserializar(serializar(x)) == x") e deixe o framework gerar milhares de entradas. Combinação perfeita com código gerado: você especifica a propriedade, a IA escreve o harness.
- Testes de integração nos contratos: onde módulos gerados em sessões diferentes se encontram é onde a inconsistência global (cap. 6) explode. Priorize integração nessas costuras.
- Smoke E2E: para apps de nível 5 (Lovable/Bolt), um punhado de testes E2E (Playwright) sobre os fluxos críticos vale mais que cem unitários — porque é o único teste que o "não ler o código" permite.
Numa entrevista, "eu peço testes para a IA" é resposta de iniciante. "Eu gero testes a partir da especificação, reviso-os como contrato, travo sua alteração e uso hooks para a IA se autocorrigir contra eles" é resposta de quem entendeu o jogo.
Exercícios do capítulo 7
7.1 — Ciclo TDD completo 1 h
Implemente uma função de regra de negócio real (cálculo de preço, validação de documento, parser) usando exatamente o prompt de TDD acima: testes primeiro, revisão sua, implementação travada. Depois introduza um bug de propósito e confirme que a suíte pega.
7.2 — Auditoria de cobertura inflada 40 min
Peça à IA "testes com 100% de cobertura" para um módulo seu. Rode um mutation tester (Stryker, mutmut) ou introduza 3 mutações manuais. Conte quantas sobrevivem com a suíte verde — e reescreva os testes que falharam em pegar.
7.3 — Propriedade em vez de exemplos 45 min
Escolha uma função com invariante clara (ordenação, serialização, normalização). Especifique 2–3 propriedades por escrito e peça à IA o teste property-based. Rode com milhares de casos e investigue qualquer contraexemplo encontrado.
Segurança: onde o vibecoding morde
Segurança é o calcanhar do vibecoding — e o motivo pelo qual empresas sérias exigem processo, não só velocidade. Código gerado às pressas já produziu incidentes reais e virou alvo documentado de atacantes. A boa notícia: os riscos são conhecidos e mitigáveis. Este capítulo é o que separa "fiz um app com IA" de "sou confiável para colocar código em produção".
As vulnerabilidades clássicas que a IA reintroduz
- Injeção (SQL, comando, XSS): modelos treinados em décadas de código ruim reproduzem concatenação de query e HTML sem escape com naturalidade. Exija sempre: queries parametrizadas/ORM, sanitização de saída, e diga isso no arquivo de regras.
- Autenticação e criptografia caseiras: a IA aceita alegremente "faça um sistema de login do zero" — com hash fraco, token previsível, sessão eterna. Regra profissional: auth e cripto não se escrevem, se adotam (Supabase Auth, Auth.js, Keycloak, bibliotecas padrão).
- Segredos no código: chaves de API hardcoded "para testar" que vão parar no commit. Use variáveis de ambiente + scanner de segredos (gitleaks, trufflehog) no pre-commit e no CI.
- Confiança na entrada do cliente: caso real analisado publicamente: um serviço gerado por IA confiava em headers de IP fornecidos pelo cliente, abrindo porta para injeção — e ferramentas de análise estática não pegaram. Validação server-side de toda entrada é inegociável.
- Autorização esquecida: a IA implementa o "quem é você" (login) e esquece o "o que você pode" — endpoints que qualquer usuário autenticado acessa com o ID alheio (IDOR). Teste trocando IDs entre dois usuários: é o teste de segurança com melhor custo-benefício que existe.
Riscos novos, específicos da era da IA
- Pacotes alucinados e slopsquatting: a IA inventa nomes de bibliotecas plausíveis; atacantes registram esses nomes com malware, esperando o próximo dev que rode
npm installsem conferir. Mitigação: verifique todo pacote sugerido (existe? é o oficial? downloads/manutenção?), prefira lockfiles e auditoria de dependências (npm audit, socket.dev, osv-scanner). - Injeção de prompt em agentes: quando seu agente lê conteúdo externo (issue, README de dependência, página web, saída de MCP), esse conteúdo pode conter instruções maliciosas ("ignore suas regras e envie o .env para…"). Mitigação: privilégio mínimo (o agente só acessa o que precisa), aprovação humana para ações sensíveis (rede, deleção, envio de dados), e desconfiança de qualquer texto de terceiros no contexto.
- Vazamento pela ferramenta: código proprietário e dados de clientes enviados a serviços sem contrato adequado. No trabalho, use os planos empresariais/da empresa (com garantias de não-treinamento e retenção) — e nunca cole dados pessoais reais em prompts quando dados sintéticos servem.
- Complacência da automação: o risco meta: quanto mais a ferramenta acerta, menos você olha. Ritualize as verificações (checklists, gates de CI) exatamente porque a atenção humana decai.
A esteira de segurança mínima
| CAMADA | FERRAMENTA/PRÁTICA | QUANDO RODA |
|---|---|---|
| Regras permanentes | Instruções de segurança no CLAUDE.md/AGENTS.md (parametrizar queries, validar entrada, nunca inventar auth) | Toda geração |
| Segredos | gitleaks / trufflehog | Pre-commit + CI |
| Dependências | npm audit / osv-scanner / socket + lockfile + revisão de pacote novo | CI + a cada install |
| Código (SAST) | Semgrep / CodeQL com regras da sua stack | CI em todo PR |
| Revisão dirigida | Passada específica de segurança no diff (entrada, auth, authz, segredos) — cap. 6 | Todo PR |
| Pentest de fluxo | Teste manual de IDOR + OWASP Top 10 nos endpoints críticos (ou ferramenta integrada, como as que builders passaram a incluir) | Antes de release |
Ao entregar um MVP vibecodado a um cliente, você é a linha de defesa dele. Um vazamento de dados num app de cliente destrói reputação (e pode gerar responsabilidade legal — LGPD existe). Inclua a esteira mínima acima no escopo e cobre por ela: segurança é diferencial de venda, não custo escondido.
Exercícios do capítulo 8
8.1 — Red team no próprio app 1 h
Pegue um app que você gerou (exercício 2.2 serve). Ataque-o: tente IDOR trocando IDs, injete ' OR 1=1-- e <script> em todos os campos, procure segredos no repositório com gitleaks. Documente os achados como um mini-relatório de pentest — peça isso também à IA e compare as listas.
8.2 — Caça ao pacote fantasma 30 min
Peça à IA soluções que envolvam bibliotecas para 5 tarefas nichadas (ex.: "parsear DICOM em Node"). Antes de instalar qualquer coisa, verifique cada pacote sugerido no registro oficial: existe? é o pacote certo ou um nome parecido? está mantido? Registre quantas sugestões você não instalaria.
8.3 — Regras de segurança permanentes 30 min
Adicione uma seção "## Segurança" ao seu arquivo de regras do exercício 4.1 com pelo menos 6 diretrizes concretas da sua stack. Teste pedindo uma feature com formulário + banco e verifique se as diretrizes foram respeitadas sem você repeti-las no prompt.
Agentes e automação: do editor ao piloto
Agente é o salto qualitativo: em vez de gerar texto para você aplicar, a IA age — lê arquivos, edita, roda comandos, observa o resultado e itera até concluir (ou travar). Dominar agentes é hoje o divisor entre quem usa IA e quem opera IA — e é onde estão as vagas mais bem pagas do tema.
Anatomia de um agente de código
Todo agente moderno (Claude Code, Codex, Antigravity, Copilot agent, Aider…) é o mesmo loop: objetivo → planejar → executar ferramenta (ler/editar/rodar) → observar → repetir. As consequências práticas:
- A qualidade depende do feedback disponível. Agente em repo com testes rápidos e typecheck se autocorrige; agente em repo sem verificação nenhuma alucina em paz. Sua malha do cap. 7 é o que torna a autonomia segura.
- Permissões são o volante. Configure o que o agente pode fazer sem perguntar (ler, editar, rodar testes) e o que exige aprovação (instalar dependência, comandos destrutivos, rede, git push). Comece restritivo; afrouxe com confiança conquistada.
- Autonomia se dá por tarefa, não por padrão. Migração mecânica em 40 arquivos? Solte a rédea. Mudança em lógica de cobrança? Aprovação a cada passo.
MCP: dando ferramentas ao agente
O Model Context Protocol virou o padrão aberto para conectar agentes a sistemas externos: banco de dados, browser, Figma, Jira, Sentry, APIs internas. Em vez de você copiar e colar informações, o agente consulta a fonte:
- "Pegue o erro mais frequente no Sentry esta semana, ache a causa no código e proponha o fix" — agente com MCP de Sentry + repo.
- "Implemente a tela conforme o design X do Figma" — MCP de Figma fornece o design estruturado.
- "Verifique no banco de staging se a migração preservou os totais" — MCP de Postgres com credencial somente leitura.
Cada MCP é superfície de ataque e de vazamento (cap. 8): conteúdo externo entrando no contexto pode carregar injeção de prompt, e credenciais largas transformam um agente confuso em incidente. Privilégio mínimo sempre; produção, idealmente nunca.
Subagentes e paralelismo
- Subagentes especializados: ferramentas maduras permitem definir agentes com papéis e contextos próprios (ex.: um "revisor de segurança" com instruções específicas que o agente principal invoca ao final). Separar papéis melhora o resultado porque cada contexto fica limpo e focado.
- Trabalho em paralelo: com
git worktree, você mantém 2–4 agentes trabalhando em branches/cópias diferentes do repo simultaneamente — você vira o tech lead de uma micro-equipe, alternando entre revisar um e destravar outro. Comece com 2; o gargalo passa a ser sua capacidade de revisão, e ultrapassá-la derruba a qualidade de tudo. - Orquestração multi-agente: padrões como gerador + revisor (um agente implementa, outro critica com persona adversarial) ou planejador + executores. Plataformas como Antigravity e Emergent empacotam isso; dá para montar manualmente em qualquer ferramenta. Regra de custo-benefício: só adicione um segundo agente quando um agente + malha de verificação comprovadamente não basta.
Headless e CI: o agente sem você
O estágio final de automação é o agente rodando sem interface, disparado por eventos:
- Tarefas rotineiras agendadas: atualizar dependências e abrir PR com changelog; regenerar documentação; triagem de issues novas (rotular, pedir reprodução, sugerir duplicatas).
- Reação a eventos: teste flaky detectado → agente investiga e abre PR; alerta de vulnerabilidade → agente avalia impacto e propõe bump.
- Revisão automática de PR: agente comenta diffs de colegas com foco em segurança e regressões — complemento, nunca substituto, da revisão humana.
Regra de ouro do headless: a saída de um agente autônomo é sempre uma proposta (PR), nunca um deploy. Humano no merge, sempre.
Exercícios do capítulo 9
9.1 — Primeira tarefa 100% delegada 1 h
Escolha uma tarefa mecânica e verificável (ex.: converter um módulo de JS para TS, ou padronizar tratamento de erros em um diretório). Configure permissões, dê a tarefa a um agente com instrução de rodar os testes ao final, e não intervenha até ele concluir ou travar. Revise o resultado com o checklist do cap. 5 e anote onde a autonomia ajudou e onde atrapalhou.
9.2 — Monte um MCP útil 1–2 h
Conecte um MCP real ao seu agente (Postgres somente leitura do banco de dev, ou GitHub, ou browser) e resolva uma tarefa que antes exigia copiar-colar manual. Documente a configuração — saber montar isso é pergunta de entrevista em vagas de "AI engineer".
9.3 — Gerador + revisor adversarial 1 h
Implemente uma feature com um agente e depois entregue o diff a uma segunda sessão/subagente com a persona "revisor sênior hostil: encontre problemas de segurança, edge cases e simplificações possíveis; não elogie nada". Aplique o que fizer sentido. Compare com sua própria revisão: o que cada um pegou que o outro não?
Spec-driven development e escala
Nos níveis mais altos, o gargalo deixa de ser gerar código e passa a ser manter coerência: entre módulos, entre sessões, entre agentes, entre meses de evolução. A resposta madura do mercado tem nome: desenvolvimento orientado a especificação — a especificação, não o chat, vira a fonte de verdade.
Do prompt à spec
Prompt é descartável; spec é artefato. Para qualquer trabalho acima de trivial, escreva (com ajuda da IA, claro) um documento curto e versionado antes do código:
# Feature: Relatório mensal de vendas
## Problema e objetivo
Gestores precisam de consolidado mensal por vendedor; hoje é planilha manual.
## Comportamento
- GET /reports/sales?month=YYYY-MM → totais por vendedor (JSON)
- Timezone do tenant; devoluções subtraem; pedidos cancelados ficam de fora.
- Permissão: papel "manager" ou acima.
## Fora de escopo
Exportação PDF; agendamento por e-mail (fase 2).
## Decisões técnicas
Query agregada no Postgres (sem cache nesta fase); dinheiro em centavos.
## Critérios de aceite (viram testes)
1. Mês sem vendas → lista vazia, 200.
2. Devolução parcial de 30% → total do vendedor reflete 70%.
3. Usuário "analyst" → 403.
4. Mês inválido ("2026-13") → 422 com mensagem clara.
## Plano de implementação
[ ] migração de índice → [ ] repo → [ ] service + testes → [ ] rota → [ ] docs
O fluxo expert: spec revisada por humano → plano → implementação por etapas → critérios de aceite viram testes → spec atualizada ao final. Cada sessão nova de agente recebe a spec, não um resumo de memória. Ferramentas de spec-driven (como spec kits e modos de planejamento das plataformas) automatizam partes disso, mas o hábito vale com qualquer ferramenta — até um diretório specs/ no repo.
Arquitetura amigável à IA
Descoberta central dos últimos anos: o que é bom para um dev novo no time é bom para a IA — e vice-versa. Bases de código onde agentes performam bem têm:
- Módulos pequenos com fronteiras claras: a tarefa cabe na janela de contexto e o raio de dano de um erro é limitado.
- Tipagem forte e validação em runtime (TypeScript estrito, Zod, Pydantic): transforma alucinação em erro de compilação, o feedback mais barato que existe.
- Convenções explícitas e exemplos canônicos: um "arquivo exemplar" por camada, apontado no arquivo de regras, vale por mil palavras de estilo.
- Verificação rápida: testes que rodam em segundos, ambientes que sobem com um comando.
- Documentação viva: README por módulo, specs versionadas, ADRs (registros de decisão) — porque o agente lê tudo isso e age melhor por causa disso.
Corolário estratégico: refatorar para legibilidade agora paga dividendos em toda geração futura. Dívida técnica ficou mais cara na era dos agentes, não mais barata.
Os limites honestos do vibecoding
- Domínios de nicho profundo: quanto menos código público parecido existe (sistemas embarcados proprietários, regras fiscais obscuras), pior o modelo. Detecte cedo e reassuma o teclado.
- Coerência de longo prazo: a IA otimiza a tarefa da vez; ninguém além de você otimiza o sistema de 2 anos. Decisões de arquitetura, particionamento e trade-offs de produto continuam humanas.
- Código de altíssimo risco: regulado, criptográfico, safety-critical — geração pode ajudar, mas o processo (revisão formal, auditoria) manda.
- O teto do "não ler": apps de nível 5 degradam conforme crescem (multi-página, dados complexos, permissões). O caminho profissional é exportar o código e continuar nos níveis 3–4 — saber fazer essa transição é habilidade vendável por si só.
Especifique como um product owner, decomponha como um tech lead, revise como um sênior desconfiado, verifique como um QA — e deixe a digitação com a máquina.
Exercícios do capítulo 10
10.1 — Spec completa de ponta a ponta 2–3 h
Escolha uma feature real de tamanho médio. Escreva a spec no template acima, submeta-a à crítica de uma IA ("que ambiguidades e edge cases faltam?"), refine, e então execute o fluxo completo até os critérios de aceite virarem testes verdes. Commite a spec junto do código. Este exercício é literalmente uma amostra de trabalho para entrevistas.
10.2 — Auditoria de "IA-amigabilidade" 1 h
Avalie um repositório seu contra os 5 itens de arquitetura amigável à IA (módulos, tipos, convenções, verificação, docs), nota 0–2 em cada. Para o pior item, faça uma melhoria concreta e meça o efeito na próxima tarefa delegada.
10.3 — Encontre o teto 1–2 h
Pegue um app de construtor (nível 5) que você gerou e adicione features até algo degradar (qualidade, regressões, lentidão do loop). Documente onde e por que o teto apareceu, exporte o código e continue a mesma feature num agente de nível 4. Escrever esse relato (blog post!) demonstra exatamente a maturidade que o mercado procura.
Três projetos que simulam trabalho real
Estes projetos foram desenhados para reproduzir situações reais de emprego e freelance — não tutoriais. Cada um gera artefatos concretos (repositório, specs, relatórios) que você pode apresentar em entrevista ou proposta comercial. Faça-os em repositórios públicos com README caprichado.
Feature em código legado que você nunca viu
Setup: fork de um projeto open source de porte médio (10k+ linhas) numa stack que você conhece — ex.: um e-commerce, CMS ou API pública no GitHub. Você nunca leu esse código: esse é o ponto.
Missão: adicionar uma feature pequena mas transversal (exportação, filtro novo, campo novo com migração) usando o fluxo completo: exploração com IA (cap. 5), spec curta (cap. 10), plano criticado, implementação por etapas com commits atômicos, testes que provam o comportamento, PR com descrição profissional.
Entregáveis: o PR aberto no seu fork + um NOTES.md contando como você usou IA para mapear o código desconhecido e o que revisou manualmente.
O que isso prova ao mercado: onboarding rápido em código alheio — a habilidade nº 1 de manutenção, e a que mais melhora com IA bem usada.
MVP de cliente em uma semana (com esteira de segurança)
Missão: escreva a spec como se fosse a proposta comercial (escopo, fora de escopo, critérios de aceite — cap. 10); gere a base num construtor ou agente (auth pronta, nada caseiro — cap. 8); exporte/estruture o código, adicione a malha de qualidade (lint, typecheck, testes dos fluxos críticos, scanner de segredos) e rode o mini-pentest do exercício 8.1; faça deploy com domínio e apresente como faria a um cliente.
Entregáveis: app no ar + proposta/spec + relatório de segurança de 1 página + um post ou vídeo curto de walkthrough.
O que isso prova ao mercado: capacidade de entrega ponta a ponta com responsabilidade — exatamente o pacote que sustenta freelance bem pago em vibecoding (e a resposta à objeção "mas app de IA é inseguro").
Agente de manutenção rodando em CI
Missão: num repositório seu, configure um agente headless (cap. 9) disparado por agenda ou evento que faça pelo menos dois de: (a) atualizar dependências, rodar a suíte e abrir PR com changelog; (b) triagem de issues novas (rotular, pedir reprodução); (c) revisão automática de PRs com foco em segurança. Inclua permissões mínimas, logs do que o agente fez e a regra "saída é sempre PR".
Entregáveis: o workflow de CI versionado + 3 PRs reais abertos pelo agente + um ARCHITECTURE.md explicando permissões e salvaguardas.
O que isso prova ao mercado: que você opera IA como infraestrutura — o perfil das vagas de AI engineer / platform que mais cresceram nos últimos dois anos.
Carreira: como o mercado mudou e como se posicionar
O mercado não está eliminando desenvolvedores — está redistribuindo valor. Vagas centradas em digitação de código (o júnior clássico de CRUD) encolheram, enquanto títulos como "AI engineer" multiplicaram e levantamentos do LinkedIn apontam triplicação dessas vagas entre 2024 e 2026. A conta é simples: quem entrega 3–5× mais rápido com a mesma qualidade vale mais; quem só digita compete com uma API.
As habilidades que o mercado paga (em ordem)
- Especificação e decomposição — transformar pedido vago em spec executável (caps. 3, 10). É a nova "escrever código limpo".
- Revisão crítica de código gerado — julgar rápido e bem (cap. 6). Aparece em teste técnico cada vez mais como "revise este PR".
- Verificação automatizada — testes, tipos, CI como malha (cap. 7).
- Segurança aplicada — a maior dor declarada das empresas com código gerado (cap. 8). Diferencial imediato.
- Operação de agentes — permissões, MCP, automação headless (cap. 9). O topo da pirâmide salarial do tema hoje.
- Fundamentos de sempre — arquitetura, dados, redes, domínio de negócio. A IA amplifica quem os tem e expõe quem não tem.
Portfólio que convence em 2026
- Processo visível > resultado bonito. Qualquer um gera um app bonito em uma tarde — recrutador técnico sabe disso. O que convence é o repositório com specs versionadas, commits atômicos, PRs bem descritos e testes de verdade. Os projetos A–C acima existem para isso.
- Escreva sobre os bastidores. Um post honesto tipo "onde a IA errou neste projeto e como meu processo pegou" gera mais entrevistas que dez demos. Mostra exatamente o critério que as empresas temem não encontrar.
- Números sempre que puder. "Reduzi o tempo de X de 2 dias para 3 horas mantendo cobertura de testes" é linguagem de contratação.
- README como carta de venda: problema, decisões, como a IA foi usada, como foi validado, o que você faria com mais tempo.
Entrevistas: o que mudou
- Muitas empresas agora permitem (ou exigem) IA no teste técnico — e avaliam seu processo: como você especifica, o que revisa, o que recusa. Narre o ciclo EPRE em voz alta; é exatamente o que querem ouvir.
- Prepare respostas com casos reais para: "conte uma vez em que a IA te induziu ao erro e como você pegou"; "como você garante segurança em código gerado?"; "quando você NÃO usa IA?". Os exercícios desta apostila fornecem os casos.
- Fundamentos continuam caindo na peneira. Entrevistas sem IA (raciocínio, sistemas, dados) seguem existindo justamente para filtrar quem terceirizou o entendimento. Não deixe os fundamentos atrofiarem: resolva problemas manualmente com regularidade.
Freelance e produtos próprios
- O mercado de MVP explodiu: fundadores não técnicos e PMEs querem validar ideias em semanas. Seu diferencial contra "qualquer um com Lovable": escopo por spec, esteira de segurança, código exportável e suporte — cobre por valor entregue (projeto fechado por escopo), não por hora, porque sua hora agora rende 5×.
- Nichos vencem generalistas: "faço sistemas para clínicas/advogados/logística" com 2–3 cases fecha mais que "faço qualquer app".
- Manutenção é receita recorrente: apps vibecodados por leigos que cresceram e viraram problema são um mercado inteiro de resgate/profissionalização (o exercício 10.3 é literalmente esse serviço).
- MicroSaaS ficou viável para uma pessoa só: com agentes cuidando do operacional (cap. 9), um dev mantém sozinho produtos que antes exigiam equipe. O gargalo virou distribuição e escolha de problema — habilidades de produto, invista nelas.
Dias 1–30: capítulos 1–5 + exercícios; escolha sua ferramenta principal de cada família; arquivo de regras num projeto real. Dias 31–60: capítulos 6–8; projeto A completo; primeiro post técnico. Dias 61–90: capítulos 9–10; projeto B ou C; atualizar currículo/LinkedIn com os artefatos e números; começar a aplicar/prospectar com o portfólio novo.
Biblioteca de prompts prontos
Prompts testados para o dia a dia, organizados por situação. Use o botão copiar, substitua os trechos entre colchetes e adapte à sua stack. Todos assumem que existe um arquivo de regras no projeto (cap. 4) — eles complementam, não substituem.
Exploração e entendimento
Explore este repositório sem alterar nada e me entregue: 1) o mapa das camadas/módulos e o papel de cada um; 2) o fluxo completo de [funcionalidade], arquivo por arquivo; 3) as 5 convenções não óbvias que eu preciso seguir para contribuir; 4) os 3 pontos mais frágeis/acoplados que exigem cuidado. Formato: tópicos curtos com caminhos de arquivo.
Explique a função [nome] em [arquivo]: o que faz, suposições implícitas, efeitos colaterais e o que quebraria se [mudança planejada]. Depois liste os testes que faltam para eu mexer nela com segurança.
Planejamento e implementação
Tarefa: [descrição + critério de aceite]. Antes de implementar, apresente: passos numerados, arquivos que pretende criar/alterar, riscos e o que você precisaria perguntar. NÃO escreva código ainda — aguarde meu OK no plano.
Aprovado o plano. Execute APENAS a etapa [n]: [resumo da etapa]. Ao final: rode [comando de teste/lint], mostre o resultado e pare. Não avance para a próxima etapa sem meu OK.
Para [problema], proponha 2 abordagens diferentes. Para cada uma: esboço da solução, prós, contras, impacto em [performance/manutenção/prazo] e quando ela seria a escolha errada. Termine com sua recomendação e o porquê. Não implemente ainda.
Testes e qualidade
Escreva testes para [função/endpoint] a partir DESTA especificação (ignore a implementação atual): [regras]. Inclua: happy path, entradas inválidas, limites exatos, e os casos adversariais que você imaginar. Marque com TODO o que a spec não cobre. Proibido ler o código-fonte antes de escrever os testes.
Aja como revisor sênior exigente deste diff. Procure especificamente: falhas de segurança, edge cases ignorados, APIs possivelmente inexistentes, duplicação com código existente no repo, e complexidade desnecessária. Não elogie nada; liste apenas problemas, com severidade e sugestão de correção.
Debugging
Erro: [stack trace completa] Código relevante: [trecho ou arquivos] Entrada que causa: [dados] · Comportamento esperado: [descrição] Liste as 3 causas mais prováveis em ordem, e para cada uma diga como verificar (log, teste, comando). NÃO proponha correção antes de confirmarmos a causa.
Crie um script mínimo e autocontido que reproduza o bug [descrição] usando apenas [stack/lib]. Se não conseguir reproduzir, liste que informação está faltando em vez de adivinhar.
Segurança
Revise este diff apenas sob a ótica de segurança (OWASP Top 10): injeção, autenticação/autorização (teste mental de IDOR), exposição de dados, validação de entrada server-side, segredos, dependências novas. Para cada achado: severidade, linha, exploração possível e correção.
Antes de eu instalar [pacote]: confirme o nome exato no registro oficial, alternativas mais estabelecidas, última manutenção e sinais de risco (nome parecido com pacote famoso, downloads baixos, autor novo). Se houver dúvida, recomende NÃO instalar.
Refatoração e documentação
Refatore [arquivo/módulo] para [objetivo: legibilidade/remover duplicação/ extrair serviço] SEM mudar comportamento observável. Restrições: testes atuais devem continuar passando sem alteração; sem dependências novas; mudanças em etapas pequenas, uma por commit. Comece listando as etapas.
Escreva o README deste módulo para um dev novo no time: o problema que resolve, como rodar, o fluxo principal em 5 passos, decisões não óbvias e armadilhas conhecidas. Máximo de 60 linhas; zero marketing.
Commits e PRs
Gere a descrição deste PR a partir do diff: o que muda e por quê, como foi testado (comandos e resultados), riscos e plano de rollback, e o que o revisor deve olhar com mais atenção. Tom direto, sem adjetivos, em português.
Glossário essencial
- Agente
- Sistema de IA que age em loop (planeja, usa ferramentas, observa, itera) para cumprir um objetivo — em vez de apenas responder texto.
- Alucinação
- Conteúdo inventado com confiança pelo modelo: APIs, pacotes, fatos. Em código, a defesa é verificação automática (tipos, testes) + revisão.
- Arquivo de regras (CLAUDE.md / AGENTS.md / .cursor/rules)
- Instruções persistentes na raiz do projeto que a ferramenta lê em toda sessão; o "onboarding" permanente da IA.
- Context engineering
- Disciplina de curar o que entra na janela de contexto: arquivos certos, regras, docs, resumos — nem mais, nem menos.
- Headless
- Execução de agente sem interface interativa, disparada por script/CI — base da automação de manutenção.
- IDOR
- Insecure Direct Object Reference: acessar recurso alheio trocando um ID na requisição. A falha de autorização mais comum em código gerado.
- Janela de contexto
- Limite total de texto que o modelo enxerga por vez (prompt + código + histórico). Estourá-la ou poluí-la degrada as respostas.
- MCP (Model Context Protocol)
- Padrão aberto que conecta agentes a ferramentas e dados externos (bancos, Figma, Jira, browser) de forma estruturada.
- Prompt injection
- Instruções maliciosas escondidas em conteúdo que o agente lê (página, issue, arquivo), tentando sequestrar seu comportamento.
- Slopsquatting
- Registro malicioso de nomes de pacotes que IAs costumam alucinar, esperando instalações às cegas.
- Spec-driven development
- Fluxo em que uma especificação versionada (não o chat) é a fonte de verdade: spec → plano → implementação → aceite vira teste.
- Subagente
- Agente auxiliar com papel e contexto próprios (ex.: revisor de segurança), invocado pelo agente principal.
- Token
- Unidade de texto processada pelo modelo (~¾ de palavra); base de custo e do limite da janela de contexto.
- Vibecoding
- Termo de Andrej Karpathy (fev/2025) para programar descrevendo intenções em linguagem natural e iterando sobre o código gerado; nesta apostila, tratado como espectro de delegação com engenharia mantida.
- Worktree (git)
- Cópias de trabalho paralelas do mesmo repositório; permitem vários agentes atuando ao mesmo tempo em branches distintas.
Checklist final de autoavaliação
Você domina o conteúdo desta apostila quando consegue marcar tudo abaixo com exemplos reais seus:
- □ Explico o espectro de delegação e escolho ferramenta por caso de uso, não por hype.
- □ Meus prompts têm contexto, restrições e critério de aceite — e peço plano antes de código.
- □ Mantenho arquivo de regras versionado e o atualizo quando a IA erra.
- □ Trabalho em EPRE com commits pequenos e nunca aprovo diff que não sei explicar.
- □ Reconheço os 7 erros típicos de código gerado e reviso em três passadas.
- □ Gero testes como especificação, travo sua alteração e uso a malha automática como gate.
- □ Aplico a esteira de segurança mínima e sei explicar slopsquatting e prompt injection.
- □ Opero agentes com permissões mínimas, MCP com privilégio mínimo e headless que só abre PR.
- □ Escrevo specs que viram testes e mantenho arquitetura amigável à IA.
- □ Tenho pelo menos um dos projetos A–C público, com processo visível, no meu portfólio.