Загрузка...

Cursor под капотом: куда пропал Reindex, как устроен Instant Grep и работа с AI-скиллами

Cursor под капотом: куда пропал Reindex, как устроен Instant Grep и работа с AI-скиллами

Разработчики, открывающие настройки свежих версий Cursor в поисках кнопки «Resync» или статуса переиндексации проекта, обнаруживают, что привычных тумблеров больше нет ни в меню IDE, ни в палитре команд, ни в настройках агента. При этом в сети до сих пор гуляют устаревшие мануалы про облачные эмбеддинги. Ниже — разбор того, почему команда Cursor полностью вырезала старый семантический индекс, как теперь устроен локальный Instant Grep и почему .cursorignore стал еще более критичным для чистоты контекста.

Куда исчезла кнопка Reindex: отказ от серверных эмбеддингов

В ранних версиях редактора кодовая база индексировалась через классический облачный RAG: файлы нарезались на чанки, улетали на серверы Cursor, где для них генерировались векторные представления (embeddings). При расхождении кэша требовалось вручную нажимать кнопку «Resync» в настройках.

В актуальных версиях Cursor разработчики намеренно удалили семантический индекс и серверные базы эмбеддингов по трем причинам:

  1. Галлюцинации векторного поиска: семантический поиск по эмбеддингам хорош для документации, но в коде часто вытягивал внешне похожие, но архитектурно нерелевантные фрагменты из других модулей.
  2. Проблемы синхронизации: фоновая отправка тысяч файлов на удаленные серверы постоянно отставала от реального состояния веток в Git, вынуждая разработчиков искать кнопку ручного сброса.
  3. Эволюция моделей: современные frontier-модели (Claude 3.5 Sonnet, GPT-4o) с поддержкой Function Calling на порядки точнее находят код через детерминированный поиск по ключевым словам, AST и точным путям, чем через «размытые» векторы.

Именно поэтому кнопки «Reindex» больше нет — серверный индекс упразднен, и переиндексировать в облаке больше нечего.

Как устроен Instant Grep под капотом

Вместо облачных эмбеддингов агент теперь опирается на связку из двух инструментов: прямое чтение конкретных файлов и локальный поисковый движок Instant Grep.

Архитектура Instant Grep работает следующим образом:

  • Локальное хранение: служебный индекс хранится не на серверах, а локально прямо внутри вашего репозитория по пути .git/cursor/.
  • Инкрементальность: движок привязан к дереву коммитов Git. При сохранении файлов и переключении веток индекс автоматически и бесшумно пересчитывает только измененные дельты в фоновом потоке.
  • Принудительный сброс: если вам по какой-то причине требуется жестко обнулить локальный поисковый кэш, достаточно удалить директорию .git/cursor/ в корне проекта — при следующем обращении к агенту она соберется заново с нуля.

Зачем нужен .cursorignore, если индекса больше нет

Если серверный векторный индекс удален, зачем настраивать .cursorignore? В новой архитектуре его роль стала еще более жесткой.

Когда агент пытается решить задачу в проекте, он запускает поиск через Instant Grep. Если репозиторий не изолирован, поисковый движок начнет грепать миллионы строк в директориях vendor/, node_modules/, логах и минифицированных бандлах. Агент получает простыню нерелевантных совпадений, сжигает свои шаги (tool calls) и засоряет контекстное окно сторонними библиотеками.

Движок Instant Grep соблюдает два уровня ограничений:

  1. Ваш штатный .gitignore.
  2. Файл .cursorignore в корне проекта — это жесткий фильтр (hard block) для всех внутренних поисковых инструментов редактора.

Минимальный рабочий набор правил для бэкенд-проекта:

# Зависимости
vendor/
node_modules/

# Логи и кэши фреймворков
storage/logs/
storage/framework/
*.log

# Билды и скомпилированные ассеты
public/build/
dist/
*.min.js
*.min.css
*.map

# Лок-файлы и Git
composer.lock
package-lock.json
pnpm-lock.yaml
.git/

Подхватывает ли Cursor универсальные скиллы и инструкции агентов

В современной разработке стандартом стало описание правил в виде кросс-платформенных Markdown-файлов: SKILL.md, каталоги .skills/, .agents/ или ARCHITECTURE.md. Разработчики держат эти правила универсальными, чтобы они работали одинаково в консольных агентах, CI-пайплайнах и различных редакторах без привязки к проприетарным настройкам одной среды.

В Cursor такой подход работает нативно благодаря связке Instant Grep и контекстного роутинга:

  • Автоматическое обнаружение архитектурных стандартов: Агент в режимах Composer и Agent перед началом работы сканирует структуру проекта. Если в корне лежат понятные файлы архитектуры (например, ARCHITECTURE.md или папка .skills/), агент через Instant Grep находит их по ключевым словам задачи и учитывает зафиксированные соглашения.
  • Точечный вызов без раздувания контекста: В отличие от файла .cursorrules, который редактор принудительно вклеивает в каждый системный промпт (сжигая токен-бюджет на нерелевантные для текущей подзадачи инструкции), универсальный скилл можно вызвать явно: @.skills/laravel-strict.md прямо в чате. Агент прочитает файл как актуальный контекст только для текущей сессии.
  • Zero Vendor Lock-in: Модели Claude 3.5 Sonnet и GPT-4o идеально считывают YAML-frontmatter и маркированные списки правил из обычных *.md файлов. Требования вроде «валидация только через FormRequest, отсутствие статических фасадов» исполняются одинаково строго как в Cursor, так и в сторонних автономных тулчейнах.

Резюме

  1. Искать кнопку «Reindex» больше не нужно — облачный семантический индекс упразднен в пользу локального Instant Grep в .git/cursor/.
  2. Обновление поисковой базы происходит автоматически на основе Git-дерева; ручной сброс сводится к очистке локальной папки .git/cursor/.
  3. Файл .cursorignore обязателен для отсечения `vendor/` и логов, чтобы агент не сжигал вызовы инструментов на поиск по стороннему коду.
  4. Универсальные markdown-скиллы нативно читаются агентом без необходимости дублировать их в специфичные форматы редактора.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *