// редактор
Cursor
Где вы на самом деле пишете код.
Для пользователей Cursor
Cursor — это редактор. В монорепозитории агенту всё равно нужна карта того, какой файл имеет значение. Maguyva индексирует вашу кодовую базу и отдаёт её обратно через MCP (семантика, AST, граф и текст), так что запрос «где происходит авторизация» возвращает реальный поток авторизации, а не семь тестовых заглушек.
Тариф Free: 3 репозитория, До 50 тыс. проиндексированных строк, без карты.
Cursor редактирует то, на что вы указали. Maguyva подсказывает агенту, на какой файл указать.Четыре элемента. У каждого своя роль.
// редактор
Где вы на самом деле пишете код.
// ручной контекст
Ручной контекст работает — пока репозиторий не станет большим.
// кодовая база
Автоматические факты о кодовой базе через MCP.
// кто платит
Агенты не платят за места. Смотреть тарифы
Проблема не в IDE. Автодополнение по табу, edit-with-AI, правки по нескольким файлам и .cursor/rules в Cursor превосходны, и вы уже используете их для:
.cursor/rules для соглашений репозитория и стилистических ограничений.@-упоминаний, чтобы подтянуть конкретный файл в контекст.Продолжайте делать это. Никуда это не денется.
Но в настоящем монорепозитории (TypeScript с зависимостями между рабочими пространствами, сервисы на Python, смешанные пакеты) контекст агента ломается в тот момент, когда нужный файл ещё не попал в ваше поле зрения.
Четыре ручных приёма и то, как они ломаются. Слева — то, что вы делаете сегодня. Справа — где это даёт сбой.
// the fix
Вы @-упоминаете три файла, которые кажутся важными. Cursor аккуратно редактирует внутри них.
// where it breaks
Закрепление работает, когда вы уже знаете, какие файлы задействованы. Весь смысл инструментов контекста — показать файлы, о которых вы даже не догадывались, что их нужно закрепить.
// the fix
Вы вставляете 200 строк из другого пакета в чат, чтобы дать агенту достаточно контекста.
// where it breaks
Фрагмент, который вы вставили в 9 утра, не отражает ребейз, который коллега влил в 11. Агент редактирует код против призрачной версии пакета.
// the fix
Вы пишете файл .cursor/rules или markdown с архитектурой. Сегодня он верен.
// where it breaks
Всё, что вы пишете вручную, со временем расходится с реальностью. Источник истины — код. Документ, объясняющий слой очередей, верен неделю, а потом неверен навсегда.
// the fix
Вы добавляете .cursor/rules для именования, линтера, команд сборки. Отлично работает для поведения.
// where it breaks
.cursor/rules — правильное место для “всегда запускай pnpm tsc -b перед коммитом”. Но это не индекс с возможностью запроса по каждому символу, файлу и месту вызова в вашем монорепозитории.
Это не замена Cursor. Слой контекста репозитория, который подключается через поддержку MCP в Cursor.
.cursor/rules продолжает делать своё дело. @-упоминания — своё. Maguyva закрывает пробел, который они не закрывают.Cursor редактирует файл, на который вы указали.
Maguyva подсказывает агенту, на какой файл указать.
Между пакетами, между языками. Обоснованно — на основе реального графа вызовов, а не grep'а Cursor.
// workflow 01
cursor> где в этом монорепозитории происходит авторизация? graph::query("authentication flow") packages/web/src/auth/session.ts:42 middleware packages/api/src/auth/jwt.ts:88 проверка токена packages/shared/src/auth/types.ts:12 AuthContext packages/admin/src/auth/admin-only.ts:31 RBAC-шлюз → 4 точки входа в 4 пакетах, отсортированы по плотности мест вызова. [exit 0]
Вы не закрепили ни одного файла. Вы не вставили ни одного фрагмента. У агента есть четыре нужных файла в правильном порядке, и он может сделать обоснованную правку.
// workflow 02
cursor> как normalizePhoneNumber обрабатывает E.164? semantic::query("normalize phone E.164") packages/shared/util/phone.ts:88 normalizePhoneNumber() ← реальная реализация packages/api/test/phone.spec.ts:14 jest.mock(...) ← заглушка [exit 0]
Имена лгут. Моки заслоняют настоящий код. Maguyva ранжирует настоящую реализацию выше тестового мока, в каждом пакете.
// workflow 03
cursor> что вызывает QueueDispatcher.publish во всём монорепозитории? graph::callers(QueueDispatcher.publish) 3 в packages/billing/* 1 в packages/audit/* 1 в packages/notifications/* 1 в services/python-worker/* ← межъязыковой вызов через gRPC-заглушку [exit 0]
Между пакетами и, если у вас полиглотный репозиторий, между языками — места вызова всплывают прямо в выводе. Дифф обоснован реальными импортёрами, а не grep'ом Cursor.
Три шага. Тариф Free: 3 репозитория, До 50 тыс. проиндексированных строк, без карты.
// step 01
Выберите монорепозиторий, где нехватка контекста ощущается острее всего.
// step 02
// ~/.cursor/mcp.json
{
"mcpServers": {
"maguyva": {
"url": "https://maguyva.tools/mcp",
"headers": {
"Authorization": "Bearer <your-key>"
}
}
}
}// step 03
Не начинайте сразу со всей компании. Начните с одного репозитория и одного проверяемого вопроса — например, «что вызывает formatInvoice в разных пакетах?»