Работа с крупными кодовыми базами ставит иные задачи, чем работа над небольшими проектами. Опираясь на наш опыт масштабирования кодовой базы самого Cursor и на опыт клиентов, управляющих огромными репозиториями, мы выделили полезные подходы для работы с возросшей сложностью. В этом руководстве мы разберём несколько техник, которые оказались полезны для крупных кодовых баз.

Используй Chat, чтобы быстро разобраться в незнакомом коде

Ориентироваться в большой кодовой базе, особенно если она для тебя новая, непросто. Часто приходится грепать, искать и кликать по файлам, чтобы найти нужные части. С Chat ты можешь сразу задавать вопросы, находить то, что нужно, и получать подробные объяснения того, как всё устроено. Здесь мы просим помочь найти детали реализации индексирования кодовой базы в Cursor и даже приводим примеры, чтобы было проще понять.

Пиши правила для предметных знаний

Если бы ты онбордил нового коллегу в свой кодбейс, какой контекст ты бы дал, чтобы он мог сразу начинать приносить ощутимую пользу? Твой ответ на этот вопрос, скорее всего, тоже будет ценен для Cursor. В любой организации или проекте есть скрытые знания, которые не всегда полностью отражены в документации. Эффективное использование правил — лучший способ гарантировать, что Cursor видит полную картину. Например, если ты пишешь инструкции по внедрению новой фичи или сервиса, стоит добавить короткое правило и задокументировать это на будущее.
Boilerplate
---
description: Add a new VSCode frontend service
---

1. **Interface Definition:**
   - Define a new service interface using `createDecorator` and ensure `_serviceBrand` is included to avoid errors.

2. **Service Implementation:**
   - Implement the service in a new TypeScript file, extending `Disposable`, and register it as a singleton with `registerSingleton`.

3. **Service Contribution:**
   - Create a contribution file to import and load the service, and register it in the main entrypoint.

4. **Context Integration:**
   - Update the context to include the new service, allowing access throughout the application.
Если есть общие паттерны форматирования, которых ты хочешь, чтобы Cursor придерживался, подумай об авто-подключении правил на основе glob-паттернов.
Formatting
---
globs: *.ts
---
- Используй bun как менеджер пакетов. См. [package.json](mdc:backend/reddit-eval-tool/package.json) для скриптов
- Используй kebab-case для имён файлов
- Используй camelCase для имён функций и переменных
- Используй UPPERCASE_SNAKE_CASE для хардкоженных констант
- Предпочитай `function foo()` вместо `const foo = () =>`
- Используй `Array<T>` вместо `T[]`
- Отдавай предпочтение именованным экспортам вместо экспортов по умолчанию, например (`export const variable ...`, `export function `)

Держись ближе к процессу планирования

Для более крупных изменений стоит потратить больше обычного мыслительных усилий, чтобы создать точный, хорошо очерченный план — это может заметно улучшить результаты Cursor. Если после нескольких вариаций одного и того же запроса ты не получаешь нужного результата, попробуй отстраниться и составить более детальный план с нуля, как будто ты пишешь PRD для коллеги. Часто самое сложное — понять, что именно нужно изменить — это задача, которая лучше даётся людям. С правильными инструкциями часть реализации можно делегировать Cursor. Один из способов усилить процесс планирования с помощью ИИ — использовать Ask mode. Чтобы создать план, включи Ask mode в Cursor и выгрузи любой контекст, который у тебя есть: из систем управления проектами, внутренних документов или разрозненных заметок. Подумай о файлах и зависимостях в кодовой базе, которые ты уже точно хочешь включить. Это может быть файл с фрагментами кода, с которым нужно интегрироваться, или даже целая папка. Вот пример запроса:
Planning prompt
- create a plan for how we shoud create a new feature (just like @existingfeature.ts)
- ask me questions (max 3) if anything is unclear
- make sure to search the codebase

@Past Chats (my earlier exploration prompts)

here's some more context from [project management tool]:
[pasted ticket description]
Мы просим модель создать план и собрать контекст, задавая вопросы человеку, ссылаясь на более ранние исследовательские промпты, а также на описания тикетов. Рекомендуется использовать модели рассуждения вроде claude-3.7-sonnet, gemini-2.5-pro или o3, так как они лучше понимают намерение изменений и качественнее синтезируют план. Исходя из этого, ты можешь итеративно формулировать план с помощью Cursor перед началом реализации.

Выбирай правильный инструмент для задачи

Одно из самых важных умений при работе с Cursor — умение выбирать правильный инструмент для задачи. Подумай, чего ты хочешь добиться, и выбери подход, который поможет оставаться в потоке.
ToolUse caseStrengthLimitation
TabБыстрые, ручные измененияПолный контроль, высокая скоростьОдин файл
Inline EditТочечные изменения в одном файлеПрицельные правкиОдин файл
ChatКрупные, многосоставные измененияАвтосбор контекста, глубокие правкиМедленнее, контекстозависим
У каждого инструмента есть своя идеальная зона применения:
  • Tab — твой выбор для быстрых правок, когда хочется самому быть за рулём
  • Inline Edit выручает, когда нужно прицельно изменить конкретный участок кода
  • Chat идеально подходит для больших изменений, когда Cursor должен понимать более широкий контекст
Когда используешь режим Chat (он может казаться немного медленнее, но при этом очень мощный), помоги ему, дав хороший контекст. Используй @files, чтобы указать на похожий код, который хочешь повторить, или @folder, чтобы дать ему лучшее понимание структуры проекта. И не бойся разбивать большие изменения на более мелкие части — новые чаты помогают сохранять фокус и повышать эффективность.

Основные выводы

  • Сужай объём изменений и не пытайся делать слишком много сразу
  • Добавляй релевантный контекст, когда можешь
  • Используй Chat, Inline Edit и Tab по назначению
  • Чаще создавай новые чаты
  • Планируй в Ask mode, реализуй в Agent mode