Trabalhar com grandes codebases traz um conjunto diferente de desafios em comparação com projetos menores. Com base na nossa experiência escalando a própria codebase do Cursor e em insights de clientes que gerenciam codebases massivas, a gente descobriu alguns padrões úteis para lidar com a complexidade crescente. Neste guia, a gente vai explorar algumas das técnicas que têm se mostrado úteis para grandes codebases.

Usa o Chat pra se atualizar rápido em código que você não conhece

Navegar por uma codebase grande, especialmente se ela é nova pra você, pode ser desafiador. Muitas vezes você dá grep, pesquisa e sai clicando pra encontrar as partes específicas da codebase que tá procurando. Com o Chat, dá pra começar fazendo perguntas pra achar o que você precisa e receber uma explicação detalhada de como aquilo funciona. Aqui a gente tá pedindo ajuda pra encontrar detalhes de implementação da indexação da codebase no Cursor, e até pedindo alguns exemplos pra facilitar o entendimento.

Escreve regras para conhecimento específico do domínio

Se tu estivesse trazendo uma pessoa nova pro teu codebase, que contexto tu darias pra garantir que ela consiga começar a contribuir de forma significativa? Tua resposta pra essa pergunta provavelmente é informação valiosa pro Cursor entender também. Em toda organização ou projeto, existe conhecimento latente que talvez não esteja totalmente registrado na tua documentação. Usar regras de forma eficaz é a melhor maneira de garantir que o Cursor tenha a visão completa. Por exemplo, se tu estiveres escrevendo instruções de como implementar uma nova feature ou serviço, considera escrever uma regra curta pra documentar isso para a posteridade.
Modelo base
---
description: Adicionar um novo serviço de frontend do VS Code
---

1. **Definição de interface:**
   - Define uma nova interface de serviço usando `createDecorator` e garante que `_serviceBrand` esteja incluído para evitar erros.

2. **Implementação do serviço:**
   - Implementa o serviço em um novo arquivo TypeScript, estendendo `Disposable`, e registra-o como singleton com `registerSingleton`.

3. **Contribuição do serviço:**
   - Cria um arquivo de contribuição para importar e carregar o serviço e registrá-lo no ponto de entrada principal.

4. **Integração ao contexto:**
   - Atualiza o contexto para incluir o novo serviço, permitindo acesso em todo o aplicativo.
Se houver padrões de formatação comuns que você quer garantir que o Cursor siga, considera anexar automaticamente regras com base em padrões glob.
Formatação
---
globs: *.ts
---
- Usar o bun como gerenciador de pacotes. Veja [package.json](mdc:backend/reddit-eval-tool/package.json) para os scripts
- Usar kebab-case para nomes de arquivos
- Usar camelCase para nomes de funções e variáveis
- Usar UPPERCASE_SNAKE_CASE para constantes fixas
- Preferir `function foo()` em vez de `const foo = () =>`
- Usar `Array<T>` em vez de `T[]`
- Preferir named exports a default exports, por exemplo (`export const variable ...`, `export function `)

Fica perto do processo de criação do plano

Para mudanças maiores, investir um tempo acima da média para criar um plano preciso e bem delimitado pode melhorar significativamente o output do Cursor. Se perceber que não tá obtendo o resultado que quer depois de algumas variações do mesmo prompt, considera dar um zoom out e criar um plano mais detalhado do zero, como se estivesse criando um PRD para um colega. Muitas vezes a parte difícil é descobrir qual mudança deve ser feita — uma tarefa que combina bem com humanos. Com as instruções certas, dá pra delegar algumas partes da implementação pro Cursor. Uma maneira de usar IA pra turbinar o processo de criação do plano é usar o Ask mode. Pra criar um plano, ativa o Ask mode no Cursor e despeja qualquer contexto que tiver dos teus sistemas de gestão de projeto, docs internos ou pensamentos soltos. Pensa nos arquivos e dependências que existem na codebase que você já sabe que quer incluir. Pode ser um arquivo que contém trechos de código com os quais quer integrar ou, talvez, uma pasta inteira. Aqui vai um prompt de exemplo:
Prompt de planejamento
- cria um plano de como a gente deve implementar um novo recurso (assim como em @existingfeature.ts)
- me faz perguntas (no máximo 3) se algo não ficar claro
- garante que vai pesquisar no codebase

@Past Chats (meus prompts de exploração anteriores)

aqui vai mais contexto do [project management tool]:
[descrição do ticket colada]
Estamos pedindo ao modelo que crie um plano e reúna contexto fazendo perguntas para a pessoa, consultando quaisquer prompts de exploração anteriores e também as descrições dos tickets. É recomendável usar um modelo de raciocínio como claude-3.7-sonnet, gemini-2.5-pro ou o3, pois eles conseguem entender a intenção da mudança e sintetizar um plano melhor. Com isso, dá para formular o plano de forma iterativa com a ajuda do Cursor antes de começar a implementação.

Escolhe a ferramenta certa pro trabalho

Uma das habilidades mais importantes pra usar o Cursor de forma eficaz é escolher a ferramenta certa pro que tu quer fazer. Pensa no que tu tá tentando alcançar e escolhe a abordagem que vai te manter no flow.
ToolUse caseStrengthLimitation
TabMudanças rápidas e manuaisControle total, rápidoSingle-file
Inline EditMudanças com escopo em um arquivoEdições focadasSingle-file
ChatMudanças maiores e multi-arquivoAuto-coleta contexto, edições profundasSlower, context-heavy
Cada ferramenta tem seu ponto ideal:
  • Tab é teu atalho pra edições rápidas quando tu quer estar no controle
  • Inline Edit brilha quando tu precisa fazer mudanças focadas numa seção específica do código
  • Chat é perfeito pra aquelas mudanças maiores quando tu precisa que o Cursor entenda o contexto mais amplo
Quando tu tiver usando o modo Chat (que pode parecer um pouco mais lento, mas é muito poderoso), ajuda ele a te ajudar fornecendo um bom contexto. Usa @files pra apontar pra código parecido que tu quer emular, ou @folder pra dar uma visão melhor da estrutura do teu projeto. E não fica com medo de quebrar mudanças maiores em partes menores — começar chats do zero ajuda a manter tudo focado e eficiente.

Principais pontos

  • Reduz o escopo das mudanças e não tenta fazer tudo de uma vez
  • Inclui contexto relevante sempre que puder
  • Usa Chat, Inline Edit e Tab para o que cada um faz melhor
  • Cria novos chats com frequência
  • Planeja com o Ask mode e implementa com o Agent mode