Перейти к содержимому
cd /blog

Дать ИИ-агенту контекст большого репозитория без локального индексатора

[AI Agents] [MCP] [Indexing] [Monorepos]

> Как дать кодирующему агенту запрашиваемую карту большого репозитория из облака, не запуская локальный индексатор на своём ноутбуке.

Большой репозиторий не помещается в контекстное окно, и если вы хоть раз направляли индексатор ноутбука на настоящий monorepo, вы знаете, что там он тоже не помещается с комфортом — RAM взлетает, первая индексация занимает час, а ваш агент всё ещё начинает следующую сессию с угадывания, какие файлы важны.

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

Этот текст про другой случай — когда агенту нужна запрашиваемая карта большого репозитория, а вы не хотите запускать для этого локальный индексатор.

Когда локальный индексатор — неправильный инструмент

Локальный индекс предполагает, что код живёт на той машине, которая его запрашивает, и в масштабе настоящего monorepo это предположение начинает трещать даже внутри одного редактора. Репозиторий попросту больше, чем вы хотите держать «тёплым» на ноутбуке: вы работаете в одном пакете, пока радиус влияния находится тремя каталогами дальше, а первая холодная индексация дерева в два миллиона строк — не то, что вы хотите пережить дважды: ни на своей машине, ни на CI-раннере, который никогда раньше не клонировал это дерево. Или коллеге по команде должно быть можно запрашивать ту же карту, что и вам, не дожидаясь, пока его собственная машина прогонит тот же индекс.

Ничто из этого не повод выбрасывать хороший индексатор редактора. Это повод дополнительно иметь размещённую карту, которую любой из ваших агентов может запросить через MCP.

И проблема масштаба глубже, чем «слишком много файлов, чтобы вставить». На большом дереве интересный вопрос почти никогда не «покажи мне этот файл» — это какой файл, какой символ, какие вызывающие стороны, какие тесты. Агент, который начинает с перечисления src/ и чтения первых трёх результатов, с лёгкостью упустит обработчик в apps/api и сгенерированный клиент в packages/sdk. Вам нужен поиск, построенный по всему дереву, затем ранжированный, затем процитированный.

Что на самом деле означает «контекст большого репозитория»

Свалить файлы в промпт — это не контекст, это меньшая и худшая копия дерева. Что действительно нужно вашему агенту — задавать вопросы и получать в ответ процитированные ответы: где определён этот символ и кто его вызывает, что зависит от модуля, который я собираюсь изменить, какой файл теста покрывает это поведение и как дерево выглядит сейчас, а не в прошлом квартале.

Эти ответы должны исходить из индекса, построенного по вашему репозиторию, а не из памяти модели о чужих репозиториях, и этот индекс должен жить где-то за пределами контекстного окна агента. Для этой задачи он также должен жить где-то за пределами вашего ноутбука.

Ещё одна вещь, которую файлы инструкций не могут сделать за вас: CLAUDE.md и AGENTS.md — правильное место для соглашений и поведения, но это не живая, ранжированная, запрашиваемая карта дерева в два миллиона строк. Используйте правила для поведения; используйте интеллект репозитория для фактов.

Строим карту в облаке, запрашиваем её из любого клиента

Maguyva — это удалённый слой контекста кодовой базы по протоколу MCP. Вы подключаете GitHub, выбираете свои репозитории и можете уходить, пока облачные конвейеры разбирают дерево, строят символы и рёбра графа и поддерживают ранжированную карту — без локального индексатора, никогда.

Когда вы пушите код, изменённые файлы разбираются инкрементально, а слои графа и ранжирования пересобираются по расписанию: ежедневно на бесплатном плане, ежечасно на платных. Каждый снимок помечен временем, так что ваш агент может определить, какую версию дерева он читает. Честное ограничение здесь — несинхронизированная локальная работа: правка, существующая только в вашем рабочем дереве и никогда не запушенная, ещё не попала в размещённую карту.

Затем вы подключаете любого клиента, которым уже пользуетесь, добавив API-ключ в его конфигурацию MCP. Есть руководства по настройке для 24 задокументированных MCP-клиентов, и любой другой MCP-совместимый клиент, поддерживающий стандартную конфигурацию, тоже может подключиться. Если Cursor — ваш дом, страница Cursor проведёт по этому пути; тот же сервер отвечает Claude Code, VS Code, Windsurf, Codex CLI и остальным.

Вам не нужно менять редактор. Вы даёте своему агенту поверхность инструментов — 11 MCP-инструментов для поиска, символов, анализа зависимостей, получения файлов и контекста репозитория — с покрытием более 279 языков и текстовых технологий, что значит больше, чем кажется, на monorepo, который перестал быть одноязычным много лет назад.

Ответы возвращаются обоснованными, в виде путей к файлам с номерами строк. Семантический, структурный, графовый и текстовый поиск сливаются в ранжированные результаты, так что вопрос вроде «что зависит от parseConfig» даёт не свалку grep и не единственный семантический фрагмент, а горстку мест, которые действительно важны.

Конкретная инструкция

Не начинайте с индексации всей компании. Вот путь, который работает:

  1. Выберите один репозиторий, который вы уже хорошо знаете — пакет, который вы можете оценить вручную, стоит больше, чем самое большое дерево, которое у вас есть.
  2. Начните бесплатно: 3 репозитория, 50 тысяч проиндексированных строк, все 11 инструментов, без месячной квоты запросов. Если ваш репрезентативный репозиторий больше, страница тарифов перечисляет уровни рабочего пространства ($0, $19, $49, $149) по объёму индексации, а не по числу мест.
  3. Подключите GitHub и дождитесь окончания первой индексации. Вы ничего не компилируете локально.
  4. Подключите MCP-клиента — несколько строк конфигурации. Maguyva — удалённый MCP-сервер, так что нет ни плагинов, ни расширений, ни второго редактора, который нужно осваивать.
  5. Задайте один вопрос, который можно проверить. «Что зависит от parseConfig?» или «Где обрабатывается истечение сессии входа?» Затем откройте процитированные результаты file.ext:line и сверьте их с деревом перед вами.
  6. Только после того, как цитаты выдержат эту проверку, позвольте агенту редактировать.

Если первый репозиторий подошёл, а ваше дерево велико, повысьте рабочее пространство в соответствии с проиндексированными строками и периодичностью пересборки. Люди и агенты делят один и тот же счётчик пользователей — Maguyva берёт плату за рабочее пространство, а не за место, — так что добавление третьего агента в цикл ничего вам не стоит.

Тест активации тот же, что документация рекомендует для любого первого запуска: проиндексируйте репозиторий, который вы уже знаете, задайте один вопрос, который можно проверить. Большой репозиторий не меняет тест; он лишь делает неправильный первый файл дороже.

На что смотреть после подключения

Следите за тремя вещами. Актуальность: платные планы пересобираются ежечасно, бесплатные — ежедневно, и непушнутая локальная работа не попадёт в карту — это компромисс, на который вы идёте. Объём: индексируйте репрезентативный набор репозиториев, а не каждый заархивированный форк; бесплатный уровень намеренно рассчитан на то, чтобы понять, стоят ли ответы того, чтобы их сохранять. И проверка: карта большого репозитория, которая не может процитировать пути и номера строк, — это просто более медленная машина для угадывания, так что пусть агент покажет место, прежде чем поставлять патч.

Затем запустите тот же тест, что вы бы запустили на маленьком репозитории. Проиндексируйте репозиторий, который вы уже знаете. Задайте один вопрос, который можно проверить. Если карта настоящая, ваш агент перестанет начинать с холодного дерева.

// no laptop got hot building this map.

Похожие материалы

Ещё из журнала разработки Maguyva