Claude Code Mastery3 / 12
Escrever prompts que funcionam
"Deixa melhor" não é prompt. "Refatore para performance" não é prompt. Aqui está a estrutura de quatro partes que faz o Claude Code de fato terminar o que você pediu.
A maioria das pessoas escreve prompts para Claude Code do mesmo jeito que escreve para ChatGPT. Esse é o bug.
ChatGPT é motor de pergunta-resposta. Claude Code é agente. O formato de uma boa pergunta não é o formato de um bom objetivo.
Depois de um ano rodando Claude Code em codebases de produção, reduzi a quatro partes que sempre precisam estar no prompt:
- Objetivo — como o sucesso se parece.
- Restrições — o que não pode mudar.
- Definition of Done — como o agente sabe que terminou.
- Contexto — ponteiros para os arquivos / tickets / erros relevantes.
Pule alguma e você tem deriva. Inclua as quatro e o agente roda em silêncio por 5 minutos e volta com um diff limpo.
O prompt ruim
> Refatore o user service para performance.
Por que falha:
- "Performance" não é definida. Latência? Memória? Throughput?
- Sem restrições — pode reescrever seu schema de DB.
- Sem definition of done — para quando enjoa.
- Sem contexto — precisa adivinhar qual arquivo é "o user service".
Você recebe algo que parece trabalho mas não é.
O prompt bom
> Objetivo: Reduzir latência p95 de GET /api/users/:id de 240 ms para menos de 80 ms.
>
> Restrições:
> - NÃO mudar o formato da API pública.
> - NÃO adicionar dependências novas.
> - Manter código em app/api/users — sem novas camadas.
>
> Definition of Done:
> - Os testes existentes passam.
> - Adicionar um load test (50 chamadas concorrentes × 100 iterações).
> - p95 < 80 ms localmente em Node 20.
> - Adicionar uma descrição de PR de um parágrafo.
>
> Contexto:
> - app/api/users/route.ts é o ponto de entrada.
> - lib/db/users.ts tem a query N+1 lenta.
> - Usamos Postgres 15 e drizzle ORM.
Mesma tarefa. Resultado diferente. O agente vai:
- Ler os dois arquivos.
- Identificar o N+1.
- Escrever o fix com uma única query batched.
- Adicionar o load test.
- Rodar o teste, confirmar o número.
- Devolver um diff com descrição de PR.
Isso é delegação, não autocomplete.
Por que cada parte importa
Objetivo
Escreva como resultado, não como ação. "Reduzir p95 para 80 ms" é resultado. "Refatorar chamadas à DB" é ação — e um agente fraco vai executar a ação sem atingir o resultado.
Restrições
Restrições são o que te surpreenderia. Se um júnior reescrevendo aquele arquivo te surpreenderia mudando o formato da API, escreva isso. Se te surpreenderia adicionando Redis, escreva isso.
A maioria das histórias "Claude Code fez algo estranho" é restrição faltando, não inteligência faltando.
Definition of Done
A parte mais subutilizada de qualquer prompt. Sem ela, o agente para quando acha que a tarefa terminou — geralmente depois de escrever código, antes de rodar os testes.
DoDs boas são testáveis:
- "Os testes existentes passam."
- "O novo endpoint retorna 201 e um header Location válido."
- "lighthouse-ci não mostra regressão na home."
Se você não consegue escrever uma DoD, a tarefa não está pronta para delegar.
Contexto
Não precisa colar arquivos. Ponteiros bastam:
app/api/users/route.ts— ponto de entrada.tests/api/users.test.ts— testes existentes.- "Vimos a regressão no PR #842."
Claude Code sabe ler e buscar. Só precisa que você aponte o bairro certo.
O template 80/20 que guardo em .claude/commands/
# /goal — cole esse template, preencha os espaços
Objetivo: <resultado com número se possível>
Restrições:
- <coisa que não pode mudar>
- <regra de dependência>
- <regra de estilo ou arquitetura>
Definition of Done:
- <comando de teste que passa>
- <checagem de performance ou correção>
- <descrição de PR em 1 parágrafo>
Contexto:
- <arquivo ou pasta>
- <ticket / erro / log relacionado>
Aliasar isso como slash command faz com que um prompt novo de feature leve 90 segundos. Vamos ver slash commands a fundo no artigo 4.
Anti-padrões para abandonar hoje
- "Deixa mais limpo." Mais limpo por qual métrica? Escolha: linhas de código, complexidade ciclomática ou uma regra de lint específica.
- "Conserta o bug." Qual bug? Qual o comportamento esperado? E o atual?
- "Refatora por legibilidade." Legibilidade é gosto. Escolha um padrão concreto: "extrair para funções puras", "trocar ifs aninhados por early returns".
Prompts vagos produzem código vago. O agente é espelho.
Último truque: o "exemplo negativo"
Às vezes o jeito mais limpo de restringir um agente é mostrar o que não fazer.
> NÃO adicione uma nova camada de abstração.
> A tentativa anterior adicionou uma classe UserRepository — removemos.
> O fix deve ter ~20 linhas em lib/db/users.ts, não 200.
Brutalmente eficaz. Você antecipa o modo de falha mais comum de um agente afobado: construir um reino quando uma única função bastava.
Próximo artigo: Slash commands — como transformar o template acima num comando /feature de uma tecla só, e como encadear /init, /agents, /compact para construir um esqueleto de projeto completo numa sessão.
Série — Claude Code Mastery
- Parte 01Claude Code vs ChatGPT vs Copilot vs agentesA maioria dos desenvolvedores está usando a ferramenta de IA errada para a tarefa errada. Aqui está o porquê — e o que fazer no lugar.
- Parte 02Instalação + o workflow antigravidadeInstalar Claude Code é trabalho de 30 segundos. Configurar o workflow que faz o agente parecer estar carregando o trabalho pesado — essa é a parte que ninguém escreve.
- Parte 03Escrever prompts que funcionam — você está aqui"Deixa melhor" não é prompt. "Refatore para performance" não é prompt. Aqui está a estrutura de quatro partes que faz o Claude Code de fato terminar o que você pediu.
- Parte 04Slash commands — construindo um projeto de A a Z/init, /agents, /compact e seus comandos custom. O kit que te leva da pasta vazia ao app rodando sem sair do prompt do Claude.
- Parte 05Sub-agentes — os 11 especialistas dentro do Claude CodeSlash commands reaproveitam prompts. Sub-agentes reaproveitam personas inteiras — code-reviewer, test-writer, migration-runner. Aqui está o time que você deveria ter no dia um.
- Parte 06Segurança em codebase de produçãoPermissões, guard-rails e o que não automatizar. O artigo nada sexy que decide se Claude Code vira infraestrutura ou vira o motivo de você ter sido chamado às 2 da manhã.
- Parte 07Pipelines multi-agenteEncadear sub-agentes, rodá-los em paralelo e os padrões para 'revisar-enquanto-codifica' sem perder a sanidade. Onde o Claude Code começa a parecer uma pequena org de engenharia.
- Parte 08Construindo features completasDo ticket no Linear ao PR mergeado com Claude Code. Um passo a passo real e honesto — como ficou o prompt, o que o agente acertou, o que peguei na revisão.
- Parte 09Testes e debugDeixar Claude Code dono de todo o loop de testes. Incluindo as partes que deixam engenheiros nervosos: regressões, flakies, testes de integração e o sussurrador de stack-trace.
- Parte 10Workflows de timeComo times de engenharia estão de fato integrando o Claude Code hoje. A pasta .claude/ compartilhada, os rituais de review e os antipadrões que vejo se repetindo no campo.
- Parte 11Padrões avançados — Hooks, servidores MCP, ferramentas custom, system promptsQuando você já cresceu além dos defaults: hooks para efeitos colaterais determinísticos, servidores MCP para dados da organização, ferramentas custom e cirurgia de system prompt.
- Parte 12O futuro do desenvolvimento agênticoPra onde isso vai em 2026 e além. No que eu apostaria, no que não, e a linha além da qual eu fico cético com o hype.