Você está usando Cursor há três meses. Ou talvez seja Windsurf. Ou Claude Code. Ou Antigravity.

Recursos seleccionados para complementar tu lectura
AI Architect
Senior Software Engineer | Front-end Specialist · Technical Leadership · AI Engineering & Scalable Architecture
Checklist de 47 puntos para detectar bugs, riesgos de seguridad y problemas de rendimiento antes del lanzamiento.
Continúa explorando temas similares

Você está digitando as mesmas instruções que já deu centenas de vezes antes: - "Antes de fazer alterações, leia o arquivo primeiro" - "Execute os testes após cada alteração" - "Crie um commit git com mensagem descritiva" - "Certifique-se de seguir o estilo de código do projeto"

Toda vez que você abre uma sessão no Claude Code, ele carrega automaticamente os arquivos de contexto do projeto: `CLAUDE.md`, `AGENTS.md`, hooks, skills. O que pouca gente percebe é que **esses arquivos consomem tokens antes mesmo de você digitar a primeira mensagem**.

Aprenda Model Context Protocol (MCP) na prática: conceitos, arquitetura e exemplos reais com Claude Code para criar agentes e workflows de IA escaláveis.
Templates probados en producción, usados por desarrolladores. Ahorra semanas de setup en tu próximo proyecto.
Consultorías modulares con diagnóstico técnico, plan de acción y acompañamiento directo. Desde auditorías express hasta CTO fraccionado.
2 cupos para consultorías en el Q2
Você está usando Cursor há três meses. Ou talvez seja Windsurf. Ou Claude Code. Ou Antigravity.
Não importa qual. A frustração é a mesma.
É meia-noite. Você está explicando—pela décima vez nesta semana—que sua equipe usa commits convencionais. Que os testes devem rodar antes de qualquer alteração no código. Que o linter precisa passar. Que a string de conexão do banco de dados vem de variáveis de ambiente, não de strings fixas no código.
A IA é brilhante. Mas tem amnésia.
Toda sessão é dia um. Toda instrução é a primeira vez. Você não está codificando—está treinando o mesmo desenvolvedor júnior repetidamente.
Então você descobre a personalização de agentes.
Trinta minutos depois, seu agente de IA:
Toda. Única. Sessão.
Esta é a promessa da personalização de agentes. Mas aqui está o que ninguém te conta: os recursos de personalização funcionam diferentemente em cada ferramenta. Cursor tem .cursorrules. Windsurf tem arquivos de regras. Claude Code tem skills. Antigravity tem seu próprio sistema.
A sintaxe é diferente. O formato de arquivo é diferente. Mas os padrões são universais.
Depois de personalizar dezenas de agentes de codificação IA em diferentes ferramentas—e ajudar centenas de desenvolvedores a fazer o mesmo—identifiquei os padrões que funcionam em TODAS as plataformas.
Este não é um tutorial específico de ferramentas. É um manual universal para fazer QUALQUER agente de codificação IA lembrar suas preferências, seguir seus padrões e parar de fazer você se repetir.
Antes de mergulhar em arquivos .cursorrules e sintaxe de skills, você precisa entender o que torna a personalização de agentes fundamentalmente diferente.
Personalização de agentes não é configuração. É ensinar à IA sua expertise de domínio.
Pense nisso como contratar um novo desenvolvedor:
Sem personalização: Você instrui a IA Com personalização: A IA se instrui (com seu conhecimento)
Interação tradicional com IA:
Sessão 1:
Você: "Adicione autenticação"
IA: *adiciona código com console.log em todo lugar*
Você: "Remova console.logs, usamos logging apropriado"
IA: *corrige*
Sessão 2 (dia seguinte):
Você: "Adicione reset de senha"
IA: *adiciona código com console.log em todo lugar*
Você: "Remova console.logs de novo..."
Com personalização:
Configuração única:
Criar arquivo de regras: "Nunca use console.log. Use logger.info() em vez disso."
Sessão 1:
Você: "Adicione autenticação"
IA: *usa logger.info() automaticamente*
Sessão 2:
Você: "Adicione reset de senha"
IA: *usa logger.info() automaticamente*
Você codifica o conhecimento uma vez. A IA aplica para sempre.
Seja usando Cursor, Windsurf, Claude Code ou Antigravity:
Princípio 1: Personalização acontece em arquivos
.cursorrules.windsurfrules ou rules.md.claude/skills/*.md.antigravity/rules.mdPrincípio 2: Personalizações são contexto A IA carrega suas regras/skills/comandos no início de cada sessão.
Princípio 3: Especificidade vence Regras vagas ("escreva código bom") falham em todas as ferramentas. Regras específicas ("use logger.info(), nunca console.log") funcionam em todas as ferramentas.
Princípio 4: Exemplos ensinam melhor que descrições Mostre à IA o que você quer. Não apenas descreva.
A mudança de frustração para produtividade acontece quando você para de tratar a IA como se ela devesse magicamente conhecer suas preferências e começa a ensiná-la explicitamente.
Todo agente de codificação IA suporta alguma forma de "arquivo de regras". A sintaxe varia, mas o conceito é idêntico.
Um único arquivo que diz à IA:
Para Cursor:
# Na raiz do seu projeto
touch .cursorrules
Para Windsurf:
# Na raiz do seu projeto
touch .windsurfrules
# Ou
mkdir -p .windsurf
touch .windsurf/rules.md
Para Claude Code:
# Na raiz do seu projeto
mkdir -p .claude/skills
touch .claude/skills/project-conventions.md
Para Antigravity:
# Na raiz do seu projeto
mkdir -p .antigravity
touch .antigravity/rules.md
O conteúdo (mesmos princípios em todas as ferramentas):
# Convenções de Codificação do Projeto
## Linguagem e Framework
- TypeScript com modo strict
- Node.js 20+ com módulos ESM
- Express para API
- PostgreSQL para banco de dados
- Jest para testes
## Estilo de Código
- Use componentes funcionais (React)
- Prefira const ao invés de let
- Use tipos de retorno explícitos em TypeScript
- Sem tipos any a menos que absolutamente necessário
- Use async/await, nunca callbacks
## Logging
- NUNCA use console.log()
- Use nosso logger: `import { logger } from './utils/logger'`
- Níveis: logger.info(), logger.warn(), logger.error()
## Tratamento de Erros
```typescript
// Bom - tratamento estruturado de erros
try {
const result = await operation();
return { success: true, data: result };
} catch (error) {
logger.error('Operação falhou', { error });
return { success: false, error: error.message };
}
// Ruim - deixando erros propagarem
const result = await operation(); // E se isso falhar?
// Bom
const user = await db.query(
'SELECT * FROM users WHERE email = $1',
[email]
);
// Ruim - vulnerabilidade de injeção SQL
const user = await db.query(
`SELECT * FROM users WHERE email = '${email}'`
);
// Bons nomes de teste
it('deve criar usuário quando email é válido')
it('deve rejeitar registro quando email já existe')
it('deve fazer hash da senha antes de armazenar')
// Maus nomes de teste
it('funciona')
it('teste criação de usuário')
Siga commits convencionais:
feat(auth): adiciona fluxo de reset de senha
fix(api): trata caso de perfil de usuário nulo
docs(readme): atualiza instruções de configuração
Formato: <tipo>(<escopo>): <descrição>
Tipos: feat, fix, docs, style, refactor, test, chore
// Bom
const dbUrl = process.env.DATABASE_URL;
if (!dbUrl) {
throw new Error('Variável de ambiente DATABASE_URL é obrigatória');
}
// Ruim
const dbUrl = 'postgresql://localhost/mydb'; // Codificado fixo!
npm testnpm run lint
### Use Imediatamente
**Em Cursor/Windsurf/Antigravity:**
O arquivo de regras é carregado automaticamente quando você abre o projeto. Apenas comece a codificar:
> Adicione autenticação de usuário
A IA automaticamente:
- Usará TypeScript com tipos estritos
- Usará logger.info() em vez de console.log
- Escreverá consultas parametrizadas
- Seguirá padrões de tratamento de erros
- Criará testes apropriados
**Em Claude Code:**
A skill é detectada automaticamente:
```bash
claude
Adicione autenticação de usuário
Claude carrega suas convenções automaticamente.
Entrei em um projeto cliente usando Cursor. Primeiro dia, estava constantemente corrigindo:
Abordagem tradicional (dolorosa): Repeti essas correções 20+ vezes por dia.
Abordagem com arquivo de regras (resolvida em 10 minutos):
Criei .cursorrules com as convenções deles. Próxima sessão:
Adicione feature de verificação de email
Cursor automaticamente:
Zero correções necessárias. O arquivo de regras ensinou ao Cursor os padrões deles.
Um arquivo de regras é bom. Múltiplos arquivos de regras específicos de contexto são transformacionais.
Regras globais (aplicam a todos os projetos):
# Seu diretório home
~/.cursor/rules # Cursor
~/.config/windsurf/rules.md # Windsurf
~/.claude/skills/global/ # Claude Code
~/.antigravity/global-rules.md # Antigravity
Regras de projeto (aplicam a este projeto):
# Raiz do projeto
.cursorrules # Cursor
.windsurfrules # Windsurf
.claude/skills/ # Claude Code
.antigravity/rules.md # Antigravity
Regras específicas de tipo de arquivo (algumas ferramentas suportam):
.claude/skills/typescript-patterns.md # Arquivos TypeScript
.claude/skills/react-components.md # Componentes React
.claude/skills/api-endpoints.md # Rotas de API
Camada 1: Preferências Universais (Global)
# ~/.cursorrules (ou equivalente)
## Minha Filosofia de Codificação
- Legibilidade acima de inteligência
- Explícito acima de implícito
- Simples acima de complexo
- Delete código ao invés de comentá-lo
## Estilo de Comunicação
- Seja conciso nas respostas
- Forneça exemplos de código
- Explique trade-offs quando múltiplas abordagens existem
- Se você não sabe, diga
## Padrões de Segurança
- Sempre valide entrada do usuário
- Use consultas parametrizadas
- Nunca registre dados sensíveis (senhas, tokens, PII)
- Assuma que toda entrada externa é maliciosa
## Padrões de Teste
- Escreva testes para toda lógica de negócio
- Teste casos extremos e estados de erro
- Use nomes de teste descritivos
- Prefira testes de integração a testes unitários
Camada 2: Específico do Projeto (Raiz do Projeto)
# .cursorrules (no projeto)
## Projeto: Plataforma de E-commerce
### Stack Tecnológica
- Next.js 14 com App Router
- TypeScript modo strict
- Prisma ORM com PostgreSQL
- Tailwind CSS para estilização
- Stripe para pagamentos
### Padrões Arquiteturais
- Server Components por padrão
- Client Components apenas quando necessário
- Rotas de API em /app/api
- Consultas de banco de dados em server components ou rotas de API
- Nunca consulte banco de dados de client components
### Tratamento de Pagamentos
- NUNCA armazene números de cartão de crédito
- Use tokenização do Stripe
- Registre todas tentativas de pagamento
- Trate falhas graciosamente
- Sempre use chaves de idempotência
### Gerenciamento de Estado
- React Context para tema/usuário
- Sem biblioteca de estado global
- Estado do servidor fica no servidor
- Estado do cliente é mínimo
## Organização de Arquivos
app/ (auth)/ # Páginas relacionadas a auth login/ register/ (dashboard)/ # Páginas do dashboard api/ # Rotas de API components/ ui/ # Componentes de UI reutilizáveis lib/ # Utilitários e helpers prisma/ # Schema do banco de dados
### Antes de QUALQUER Alteração no Banco de Dados:
1. Crie uma migration: `npm run db:migrate:create`
2. Revise o SQL gerado
3. Teste no banco de dados local
4. Nunca edite arquivos de migration diretamente
Camada 3: Específico de Contexto (Feature/Domínio)
Para ferramentas que suportam (como Claude Code com múltiplas skills):
# .claude/skills/payment-processing.md
Ao trabalhar em código relacionado a pagamentos:
## Idempotência é Crítica
Toda operação de pagamento DEVE ser idempotente:
```typescript
// Bom - chave de idempotência previne cobranças duplicadas
await stripe.paymentIntents.create({
amount: 1000,
currency: 'usd',
idempotency_key: `order_${orderId}_${userId}`
});
// Ruim - pode cobrar cliente duas vezes se retentado
await stripe.paymentIntents.create({
amount: 1000,
currency: 'usd'
});
Registre TUDO relacionado a pagamentos:
### Como a Camada Funciona
Quando a IA processa sua solicitação, ela tem contexto de:
1. Suas preferências globais (como você pensa)
2. Convenções do projeto (padrões deste projeto)
3. Padrões específicos de domínio (tratamento de pagamento, por exemplo)
A IA segue a regra mais específica quando conflitos existem.
### Quando Usar
- Regras globais: Configure uma vez, beneficie-se em todos os projetos
- Regras de projeto: Defina no início do projeto
- Regras de contexto: Adicione conforme padrões emergem
### Exemplo Real
Trabalho em múltiplos projetos:
- Plataforma de e-commerce (Next.js + Stripe)
- Ferramentas internas (React + Express)
- App mobile (React Native)
**Sem camadas:**
Constantemente explicando diferenças entre projetos:
- "Este projeto usa Stripe, não PayPal"
- "Este projeto usa Express, não rotas de API Next.js"
- "Este projeto usa componentes React Native, não componentes web"
**Com camadas:**
**Regras globais** (~/.cursor/rules):
- Minhas preferências gerais
- Padrões de segurança
- Filosofia de testes
**Projeto e-commerce** (.cursorrules):
- Padrões Next.js
- Tratamento de pagamento Stripe
- Consultas de banco de dados com Prisma
**Ferramentas internas** (.cursorrules):
- Padrões de API Express
- Convenções REST
- Consultas MongoDB
**App mobile** (.cursorrules):
- Componentes React Native
- Padrões AsyncStorage
- Preocupações específicas de mobile
Agora quando troco de projetos, a IA se adapta automaticamente. Não preciso re-explicar.
---
## Padrão 3: Comandos Que Aplicam Workflows
Regras dizem à IA o que fazer. Comandos fazem acontecer automaticamente.
### O Que Comandos Realmente São
Comandos são workflows pré-definidos acionados por atalhos.
**Cursor**: Usa comandos composer
**Windsurf**: Usa comandos slash
**Claude Code**: Usa comandos slash + skills
**Antigravity**: Usa definições de workflow
### O Padrão Universal
Defina workflows comuns uma vez, acione com um comando:
**Workflow de Teste:**
```markdown
Gatilho: /test
Workflow:
1. Execute suite de testes
2. Se testes falharem:
a. Mostre saída de falha
b. Identifique o problema
c. Sugira correção
d. Aguarde aprovação
e. Aplique correção
f. Execute testes novamente
3. Se testes passarem:
a. Confirme sucesso
b. Pergunte se pronto para commit
Workflow de Feature:
Gatilho: /feature
Workflow:
1. Pergunte descrição da feature
2. Identifique arquivos que precisam de alterações
3. Mostre plano de implementação
4. Aguarde aprovação
5. Escreva testes primeiro (TDD)
6. Implemente feature
7. Execute testes
8. Crie commit apropriado
9. Sugira próximos passos
Workflow de Debug:
Gatilho: /debug
Workflow:
1. Pergunte descrição do bug
2. Reproduza o problema
3. Forme hipóteses
4. Teste cada hipótese
5. Identifique causa raiz
6. Proponha correção com explicação
7. Implemente correção
8. Verifique que correção funciona
9. Adicione teste para prevenir regressão
Cursor (usando .cursorrules):
# .cursorrules
## Workflows Personalizados
Quando eu disser "execute workflow de feature":
1. Me pergunte para descrever a feature
2. Me mostre quais arquivos precisam de alterações
3. Aguarde minha aprovação
4. Escreva testes primeiro
5. Implemente a feature
6. Execute testes para verificar
7. Crie um commit convencional
Quando eu disser "execute workflow de debug":
1. Me pergunte para descrever o bug
2. Me ajude a reproduzi-lo confiavelmente
3. Forme hipóteses sobre a causa
4. Teste cada hipótese sistematicamente
5. Identifique a causa raiz
6. Proponha uma correção com explicação
7. Implemente a correção
8. Verifique que o bug está resolvido
9. Adicione um teste para prevenir regressão
Claude Code (usando skills):
# .claude/skills/feature-workflow.md
---
name: feature-workflow
description: Use ao implementar novas features - fornece processo sistemático de desenvolvimento
---
# Workflow de Desenvolvimento de Features
Ao implementar uma nova feature, siga este processo sistemático:
## Passo 1: Entenda Requisitos
- Faça perguntas esclarecedoras se algo não estiver claro
- Identifique critérios de aceitação
- Note quaisquer casos extremos potenciais
## Passo 2: Planeje Implementação
- Liste arquivos que precisam de alterações
- Identifique novos arquivos necessários
- Note quaisquer migrations de banco de dados
- Mostre plano de implementação
- AGUARDE aprovação do usuário antes de prosseguir
## Passo 3: Escreva Testes Primeiro (TDD)
- Escreva testes falhando que definem comportamento desejado
- Cubra caminho feliz
- Cubra casos de erro
- Cubra casos extremos
## Passo 4: Implemente
- Faça alterações mínimas para passar testes
- Siga padrões de código existentes
- Mantenha alterações focadas
## Passo 5: Verifique
- Execute suite de testes
- Verifique que todos os testes passam
- Verifique teste manual se necessário
## Passo 6: Commit
- Crie commit convencional
- Inclua descrição da feature
- Referencie números de issue
## Passo 7: Próximos Passos
- Sugira atualizações de documentação
- Note qualquer trabalho de acompanhamento necessário
- Confirme que feature está completa
Windsurf (usando arquivo de regras):
# .windsurfrules
## Workflow: Desenvolvimento de Feature
Gatilho de comando: "implementar feature" ou "adicionar feature"
Processo:
1. Coleta de requisitos
- O que a feature faz?
- Para quem é?
- Quais são os critérios de aceitação?
2. Planejamento
- Quais arquivos precisam de alterações?
- Alguma nova dependência necessária?
- Alterações no banco de dados necessárias?
3. Desenvolvimento orientado a testes
- Escreva testes falhando
- Implemente solução mínima
- Verifique que testes passam
4. Integração
- Execute suite completa de testes
- Verifique que lint passa
- Crie commit descritivo
Siga este processo para TODA feature. Sem atalhos.
Minha equipe era inconsistente em como features eram desenvolvidas:
Antes de workflows: Cada desenvolvedor usava seu próprio processo. Code reviews pegavam problemas, mas depois do trabalho estar feito.
Depois de workflows:
Criamos um "workflow de feature" em nosso arquivo de regras. Agora:
implementar feature: edição de perfil de usuário
A IA:
Resultado:
Regras genéricas ajudam. Regras específicas de domínio transformam.
Em vez de regras gerais, crie orientação específica de domínio para:
# .claude/skills/authentication-patterns.md
## Autenticação Neste Projeto
### Stack Tecnológica
- NextAuth.js para autenticação
- Tokens JWT para API
- PostgreSQL para armazenamento de usuário
- Redis para cache de sessão
### Fluxo de Registro de Usuário
```typescript
// Bom - fluxo de registro apropriado
export async function registerUser(email: string, password: string) {
// 1. Valide entrada
if (!isValidEmail(email)) {
return { error: 'Formato de email inválido' };
}
if (password.length < 12) {
return { error: 'Senha deve ter pelo menos 12 caracteres' };
}
// 2. Verifique se usuário existe
const existing = await db.user.findUnique({ where: { email } });
if (existing) {
return { error: 'Email já registrado' };
}
// 3. Faça hash da senha (NUNCA armazene texto puro)
const passwordHash = await bcrypt.hash(password, 12);
// 4. Crie usuário
const user = await db.user.create({
data: {
email,
passwordHash,
emailVerified: false
}
});
// 5. Envie email de verificação
await sendVerificationEmail(user.email);
// 6. Não faça auto-login (requer verificação de email)
return { success: true, userId: user.id };
}
// Estrutura de sessão
interface Session {
id: string;
userId: string;
roles: string[];
createdAt: Date;
lastActivity: Date;
expiresAt: Date;
}
// Provedores OAuth que suportamos
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
GitHubProvider({
clientId: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
}),
]
// Vincular conta OAuth a usuário existente
async function linkOAuthAccount(userId: string, provider: string, providerId: string) {
// Verifique se conta OAuth já está vinculada a usuário diferente
const existing = await db.account.findUnique({
where: {
provider_providerId: { provider, providerId }
}
});
if (existing && existing.userId !== userId) {
return { error: 'Conta OAuth já vinculada a outro usuário' };
}
// Vincule conta
await db.account.create({
data: {
userId,
provider,
providerId,
createdAt: new Date()
}
});
return { success: true };
}
Ao implementar QUALQUER feature de autenticação, siga estes padrões exatamente.
### Mais Exemplos de Domínio
**Processamento de Pagamento:**
```markdown
# Requisitos de Idempotência
Toda operação de pagamento DEVE ser idempotente:
- Use chaves de idempotência
- Armazene resultados de operação
- Retorne resultado em cache para solicitações duplicadas
- Nunca cobre cliente duas vezes
# Lógica de Retry
- Retente falhas transitórias (rede, timeout)
- Não retente falhas permanentes (fundos insuficientes, cartão inválido)
- Backoff exponencial para retries
- Máximo 3 tentativas de retry
# Logging
- Registre todas tentativas de pagamento (sucesso e falha)
- Registre pedidos de reembolso
- Registre eventos de webhook
- NUNCA registre: números de cartão, CVV, detalhes completos de cartão
- REGISTRE: últimos 4 dígitos, status de pagamento, valores
Design de API:
# Convenções REST
- GET: Ler recursos (idempotente)
- POST: Criar recursos (não idempotente)
- PUT: Substituição completa (idempotente)
- PATCH: Atualização parcial (idempotente)
- DELETE: Remover recursos (idempotente)
# Estrutura de URL
✅ /api/users/123
✅ /api/users/123/orders
✅ /api/orders/456
❌ /api/getUser?id=123
❌ /api/user_orders?user=123
# Formato de Resposta
```json
{
"success": true,
"data": { ... },
"error": null
}
O padrão mais poderoso: regras que rodam ANTES do trabalho começar.
# ANTES de qualquer alteração de código:
1. **Entenda o código atual**
- Leia arquivos relevantes primeiro
- Entenda padrões existentes
- Note quaisquer restrições
2. **Planeje a abordagem**
- O que precisa mudar?
- Quais arquivos estão envolvidos?
- Alguma alteração no banco de dados necessária?
- Alguma breaking change?
3. **Considere casos extremos**
- O que pode dar errado?
- Como tratamos erros?
- E quanto à compatibilidade retroativa?
4. **Verifique testes**
- Existem testes para este código?
- Os testes precisarão de atualizações?
- Devemos adicionar novos testes?
5. **AGUARDE aprovação**
- Mostre o plano
- Aguarde aprovação explícita
- Só então faça alterações
# DEPOIS de qualquer alteração de código:
1. **Verifique que testes passam**
- Execute a suite de testes
- Mostre os resultados
- Corrija quaisquer falhas antes de prosseguir
2. **Verifique lint**
- Execute o linter
- Corrija quaisquer problemas
- Não faça commit com erros de lint
3. **Verifique que a alteração funciona**
- Teste manualmente se necessário
- Confirme que o problema está resolvido
- Verifique efeitos colaterais
4. **Crie commit apropriado**
- Siga convenções de commit
- Escreva mensagem descritiva
- Referencie números de issue
5. **Sugira próximos passos**
- O que mais precisa ser feito?
- Alguma tarefa de acompanhamento?
- Alguma atualização de documentação?
O checklist de pré-voo:
Antes do checklist de pré-voo:
Você: "Corrija o bug de login"
IA: *imediatamente começa a mudar código*
IA: *quebra outra coisa*
Você: "Espere, você executou os testes?"
IA: "Deixe-me executá-los agora"
Testes: FALHARAM
Você: *frustração intensifica*
Depois do checklist de pré-voo:
Você: "Corrija o bug de login"
IA: "Antes de corrigir isso, deixe-me:
1. Ler o código de login atual
2. Entender como a autenticação funciona
3. Reproduzir o bug
4. Planejar a correção
[Lê arquivos]
[Testa reprodução]
Encontrei o problema: validação de token JWT está usando chave secreta errada.
Aqui está meu plano:
- Atualizar validação de token para usar chave correta
- Adicionar teste para verificar validação de token
- Verificar que testes existentes ainda passam
Devo prosseguir?"
Você: "Sim, vá em frente"
IA: [Implementa correção seguindo checklist]
- Testes escritos ✓
- Correção implementada ✓
- Testes passando ✓
- Lint passando ✓
- Commit criado ✓
Pronto. O bug está corrigido e não acontecerá novamente.
Estes padrões funcionam seja você usando Cursor, Windsurf, Claude Code ou Antigravity:
❌ Vago:
Escreva código limpo.
✅ Específico:
// Use tipos de retorno explícitos
function getUser(id: string): Promise<User> { ... }
// Não retornos implícitos
function getUser(id) { ... }
❌ Abstrato:
Siga melhores práticas de tratamento de erros.
✅ Concreto:
// Bom - tratamento estruturado de erros
try {
const result = await operation();
return { success: true, data: result };
} catch (error) {
logger.error('Operação falhou', { error });
return { success: false, error: error.message };
}
// Ruim - deixando erros propagarem
const result = await operation();
❌ Comando:
Use consultas parametrizadas.
✅ Raciocínio:
Use consultas parametrizadas para prevenir injeção SQL:
// Bom - seguro contra injeção SQL
db.query('SELECT * FROM users WHERE id = $1', [userId])
// Ruim - vulnerável a injeção SQL
db.query(`SELECT * FROM users WHERE id = '${userId}'`)
Por quê: userId malicioso como "1' OR '1'='1" poderia expor todos os usuários.
Mostre o que NÃO fazer:
## Padrão Bom:
const user = await fetchUser(userId);
if (!user) {
return { error: 'Usuário não encontrado' };
}
## Padrão Ruim:
const user = await fetchUser(userId);
// Sem tratamento de erro - e se usuário não existir?
Para workflows complexos:
## Antes de Deploy para Produção:
- [ ] Todos os testes passam
- [ ] Lint passa
- [ ] Migrations de banco de dados rodam
- [ ] Variáveis de ambiente configuradas
- [ ] Monitoramento configurado
- [ ] Plano de rollback documentado
- [ ] Equipe notificada
Regras globais (suas preferências):
Regras de projeto (este projeto):
Regras de domínio (específicas de feature):
Toda vez que a IA comete um erro, pergunte: "Uma regra poderia prevenir isso?"
Se sim, adicione a regra:
## Erro: IA usou console.log em vez de logger
## Nova Regra:
NUNCA use console.log(). Sempre use:
- logger.info() para informação
- logger.warn() para avisos
- logger.error() para erros
Seu arquivo de regras se torna melhor com cada erro.
Aqui está como traduzir padrões entre diferentes ferramentas:
| Ferramenta | Localização | Formato |
|---|---|---|
| Cursor | .cursorrules | Markdown |
| Windsurf | .windsurfrules ou .windsurf/rules.md | Markdown |
| Claude Code | .claude/skills/*.md | Markdown com frontmatter |
| Antigravity | .antigravity/rules.md | Markdown |
| Ferramenta | Global | Projeto |
|---|---|---|
| Cursor | ~/.cursor/rules | .cursorrules |
| Windsurf | ~/.config/windsurf/rules | .windsurfrules |
| Claude Code | ~/.claude/skills/ | .claude/skills/ |
| Antigravity | ~/.antigravity/ | .antigravity/ |
| Ferramenta | Como Definir | Como Acionar |
|---|---|---|
| Cursor | Em .cursorrules, descreva workflow | Linguagem natural |
| Windsurf | Em arquivo de regras, defina workflow | Comandos slash |
| Claude Code | Arquivos de skill separados | /skill-name ou automático |
| Antigravity | Definições de workflow | Linguagem natural |
Cursor (.cursorrules):
Quando eu pedir para você implementar uma feature:
1. Me mostre seu plano de implementação
2. Aguarde minha aprovação
3. Escreva testes primeiro
4. Implemente a feature
5. Verifique que testes passam
Windsurf (.windsurfrules):
Workflow de Implementação de Feature:
1. Planeje implementação
2. Solicite aprovação
3. Escreva testes (TDD)
4. Implemente código
5. Verifique testes
Gatilho: Usuário diz "implementar feature" ou "adicionar feature"
Claude Code (.claude/skills/feature-implementation.md):
---
name: feature-implementation
description: Use ao implementar novas features
---
# Implementação de Feature
Ao implementar uma feature:
1. Mostre plano de implementação
2. Aguarde aprovação
3. Escreva testes primeiro
4. Implemente feature
5. Verifique que testes passam
Antigravity (.antigravity/rules.md):
## Processo de Desenvolvimento de Feature
Passos:
- Fase de planejamento (mostre plano, obtenha aprovação)
- Fase de teste (escreva testes falhando)
- Fase de implementação (faça testes passarem)
- Fase de verificação (confirme que testes passam)
Aplique este processo para todas solicitações de feature.
A sintaxe difere, mas o padrão é idêntico.
Como você sabe se suas regras/skills estão funcionando?
Rastreie com que frequência você corrige a IA:
Antes da personalização: 15-20 correções por sessão Depois da personalização: 2-3 correções por sessão
Quanto tempo até a IA produzir código utilizável?
Antes: 5-10 iterações Depois: 1-2 iterações
Verifique código produzido em diferentes sessões. Quão consistente é?
Antes: Altamente variável (padrões diferentes cada vez) Depois: Consistente (segue mesmos padrões)
Quanto tempo até um novo membro da equipe ser produtivo?
Antes da personalização: 2 semanas (aprender convenções, padrões) Depois da personalização: 3 dias (IA segue padrões automaticamente)
Toda sexta-feira:
O que você repetiu mais frequentemente?
Quais erros foram cometidos?
O que funcionou bem?
Quais regras foram ignoradas?
❌ "Escreva código bom" ❌ "Siga melhores práticas" ❌ "Tenha cuidado com segurança"
✅ Regras específicas e acionáveis com exemplos
Arquivo de regras de 500 linhas → IA fica confusa
Solução: Divida em seções focadas ou múltiplos arquivos
"Sempre escreva testes primeiro" vs "Pule testes ao fazer protótipo"
Solução: Torne condições explícitas: "Escreva testes primeiro para código de produção. Protótipos podem pular testes temporariamente."
// Não faça isso
const x = y.map(z => z.foo);
Sem contexto, IA não sabe por que isso é ruim.
Melhor:
// Ruim - nomes de variável pouco claros
const x = y.map(z => z.foo);
// Bom - nomes descritivos
const userNames = users.map(user => user.name);
Regras escritas uma vez, nunca atualizadas → Regras ficam desatualizadas
Solução: Revise e atualize regras regularmente baseado em:
Deixe-me mostrar personalização em ação.
Uma startup de 15 pessoas usando Cursor:
Custo: 40% do tempo de desenvolvimento gasto em retrabalho e reviews
Semana 1: Auditoria
Observei desenvolvedores trabalharem por uma semana. Notei instruções repetidas:
Estas apareceram em 80% das sessões.
Semana 2: Criar Regras Base
Criei .cursorrules com convenções da equipe:
# Convenções do Projeto
## Linguagem
TypeScript modo strict, Node.js 20+, módulos ESM
## Testes
Escreva testes ANTES da implementação (TDD)
Use Jest, cobertura mínima de 80%
## Commits
Formato: `tipo(escopo): descrição`
Tipos: feat, fix, docs, refactor, test
## Configuração
TODA config de variáveis de ambiente
Nunca codifique fixo chaves de API, URLs, segredos
## Logging
Use `logger.info/warn/error()`
Nunca use console.log()
## Antes de QUALQUER alteração de código:
1. Leia arquivos relevantes
2. Entenda padrões existentes
3. Planeje suas alterações
4. Obtenha aprovação se significante
## Depois de QUALQUER alteração de código:
1. Execute testes: `npm test`
2. Execute linter: `npm run lint`
3. Verifique que alterações funcionam
4. Crie commit apropriado
Semana 3: Adicionar Regras de Domínio
Adicionei regras específicas de domínio para:
Semana 4: Medir e Refinar
Coletei métricas:
Antes: Cursor era um desenvolvedor júnior precisando de orientação constante
Depois: Cursor era um desenvolvedor sênior que conhecia os padrões da equipe
A citação de um desenvolvedor: "Eu costumava gastar metade do meu tempo explicando nossas convenções. Agora gasto esse tempo construindo features. É como se Cursor tivesse passado de estagiário para engenheiro sênior da noite pro dia."
Aqui está como construir maestria, independente de qual ferramenta você usa:
Dia 1: Crie arquivo básico de regras
Dia 2-3: Adicione exemplos
Dia 4-5: Teste e refine
Dia 1-2: Defina seus workflows comuns
Dia 3-4: Adicione regras de workflow
Dia 5: Meça melhoria
Dia 1: Identifique necessidades específicas de domínio
Dia 2-3: Crie regras de domínio
Dia 4-5: Teste em produção
Dia 1-2: Documente suas regras
Dia 3: Compartilhe com equipe
Dia 4-5: Colete feedback
Três meses atrás, personalizar agentes de codificação IA parecia trabalho extra.
Hoje, é a diferença entre desenvolvedores que usam IA como autocomplete inteligente e desenvolvedores que usam IA como colega de equipe treinado.
Mas maestria não é sobre qual ferramenta você usa. Cursor, Windsurf, Claude Code, Antigravity—a ferramenta não importa.
O que importa é codificar sua expertise para que a IA possa aplicá-la automaticamente.
Os padrões são universais:
Estes padrões funcionam em todo agente de codificação IA porque não são sobre a ferramenta. São sobre ensinar IA sua forma de trabalhar.
Os desenvolvedores que dominam isso terão uma vantagem injusta.
Os que não vão continuar se repetindo toda sessão.
A diferença é personalização.
Comece a construir.
Configurando QUALQUER agente de codificação IA:
# Convenções do Projeto
## Stack Tecnológica
[Sua stack aqui]
## Estilo de Código
[Suas preferências com exemplos]
## Padrões Comuns
```js
// Bom
[exemplo]
// Ruim
[exemplo]
[Seus padrões de domínio aqui]
### Configuração Específica de Ferramenta
**Cursor:**
```bash
touch .cursorrules
# Adicione regras, elas são carregadas automaticamente
Windsurf:
touch .windsurfrules
# Ou
mkdir .windsurf && touch .windsurf/rules.md
Claude Code:
mkdir -p .claude/skills
touch .claude/skills/project-conventions.md
Antigravity:
mkdir -p .antigravity
touch .antigravity/rules.md
Sua vez. Escolha uma instrução que você repete toda sessão. Adicione-a ao seu arquivo de regras hoje.
O multiplicador de produtividade 10x não está no próximo modelo de IA.
Está nas regras que você escreve hoje.