Перейти к содержимому
Экосистема AI Vibe

Разборы

Перестаньте кормить агента целыми файлами: карта кода callgraph для Claude Code, Cursor и MCP

Редакция 10 ноября 2026 г.

Перестаньте кормить агента целыми файлами: карта кода callgraph для Claude Code, Cursor и MCP

Одна правка в методе, и агент снова тянет сотни строк сервиса целиком: лимит уходит на поиск пути, а не на задачу. callgraph сжимает репозиторий до структуры, вызовов и цепочки callers; skill в Claude Code, CLI из терминала или MCP-сервер для Cursor и других клиентов протокола: три входа к одному read-only бинарнику, исходники не уезжают в облако вместе с «картой всего проекта».

Зачем агенту карта, а не исходник целиком

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

Карта складывается в каталог .callgraph/ и обновляется пофайлово. Межфайловый вопрос «кто вызывает этот метод» опирается на уже построенный граф, а не на полный повторный обход дерева исходников.

Если контекст в облаке тарифицируется по токенам, смена формата с «целый файл» на «карта + точечный --body» экономит лимит на обход репозитория, а не на смысл задачи.

Три входа: skill, CLI и MCP в Cursor

Три режима работы с одним и тем же бинарником:

  • Claude Code: skill; установщик может зарегистрировать навык и MCP-сервер.
  • Любой терминал: прямые вызовы CLI (удобно в скриптах и вне IDE).
  • MCP: для Cursor, VS Code, Claude Desktop и прочих клиентов; рецепты настройки на callgraph.eu/mcp.

Для vibe-coding в Cursor это прямой ответ на вопрос «как не заливать агенту весь app/Services»: сервер инструментов отдаёт outline и поиск по вызовам, а не сырой файл на каждом шаге рассуждения.

Установка: пакет под ОС с callgraph.eu, затем bash callgraph/install.sh. Продукт заявлен как open source под MIT; исходники на github.com/GeRiY/callgraph. На машине не нужны отдельные PHP, Node или Rust: один статический бинарник для macOS, Linux и Windows.

Карта по AST, команды сужения и поддерживаемые языки

Разбор идёт по AST, а не по regex. Автор перечисляет языки для полноценной карты: PHP (в т.ч. Laravel, Yii), JavaScript и TypeScript, Vue, Rust, Swift; для CSS, SCSS, JSON и Markdown работает outline-режим.

При синтаксической ошибке в файле инструмент описывает код до сломанного места и помечает предупреждением (формат с syntax error at L… в треде обсуждения). Для агента это лучше, чем «файл не прочитан»: частичная карта сохраняет нить рассуждения.

На примере Laravel в публикации Dev.to показан типовой набор:

callgraph.sh app/Services/OrderService.php
callgraph.sh app/Services/OrderService.php::updateOrders --body
callgraph.sh app --grep '(^|::|\.|->)updateOrders$'
callgraph.sh app --grep 'updateOrders' --depth 2
callgraph.sh locate CheckoutController applyCoupon coupon
callgraph.sh profile
  • Обзор файла даёт структуру и вызовы с типами (ORM, фасады, внутренние хелперы, статика).
  • --body: только тело одного метода, когда outline уже сузил фокус.
  • --grep и --depth 2: цепочка callers на уровень глубже, с учётом интерфейсов, трейтов и родительских классов.
  • locate: ранжированные точки входа по ключевым словам задачи.
  • profile: около пятнадцати строк про слои, паттерны и направление вызовов между слоями (архитектурная шпаргалка для незнакомого репо).

Режим --format api для PHP выводит полную сигнатуру с типами параметров и возврата, чтобы агент мог проверить контракт без вытаскивания всего тела. В комментариях к публикации автор признаёт пробелы для TypeScript и сложных DocBlock @return и отмечает запросы на Python и Go как следующие языки, без заявления, что они уже в релизе.

Свежесть карты, слабые места outline и практический итог

Главный риск code map: сдвиг номеров строк после правок. В треде Dev.to описана цепочка обновления:

  1. Перед ответом сверяются mtime и size затронутых файлов с картой в .callgraph/; переанализируется только изменившееся.
  2. MCP-сервер следит за проектом и обновляет карту коротко после сохранения.
  3. В Claude Code: опциональный hook после записи агента; callgraph.sh refresh даёт полное обновление после git pull.

Content hash пока нет: редкий restore с сохранённым timestamp может быть пропущен; удаление .callgraph/ пересобирает карту при следующем запросе. Для соло-workflow с агентом, который часто пишет в файлы, это практичнее, чем вручную перечитывать в чат целые модули «на всякий случай».

Формального бенчмарка против LSP, tree-sitter или @codebase автор не приводит: только качественный контраст «400 строк сервиса против outline». Количественный выигрыш в токенах на вашем monorepo придётся замерять самим.

В комментариях KolmoPDF поднимает динамический dispatch и обёртки репозитория: компактного outline иногда мало. Автор соглашается и перечисляет те же пробелы по типам, что и выше. Lior предлагает ручной map-файл в репо; в ответе отмечается, что близкий смысл у callgraph.sh profile, но profile вычисляется из кода и не «уплывёт» при переносе папки без обновления заметки. Ручную строку «зачем эта папка» всё равно стоит оставить как слой для агента.

Итог для настройки агентного контура: skill, CLI или MCP (выбор по IDE); контент для модели: карта и точечные тела, а не заливка файлов; свежесть карты: через локальные watch и refresh, а не через повторное чтение всего репозитория в промпт.

Источники

  • Пост на Dev.to (основной материал): Dev.to
  • Сайт и загрузка: https://callgraph.eu/
  • Настройка MCP: https://callgraph.eu/mcp
  • Репозиторий (MIT): https://github.com/GeRiY/callgraph