Мы сверили графы кода, которые строят CodeAlive и открытые индексаторы, с графами вызовов от компилятора. Вызовы в графе CodeAlive почти всегда верные, и реальных вызовов он находит примерно вдвое больше, чем лучший из открытых инструментов, которые мы смогли оценить.
Это важно, потому что агент графу верит. Если на вопрос «кто вызывает этот метод» граф выдумал вызывающего, агент читает не тот код и строит ответ на нём. Если граф вызов пропустил, агент так и не узнает, что он есть.
Как мерили
Мы взяли три открытых репозитория, Playwright, Zod и FluentValidation, и для каждого построили эталонный граф компиляторными средствами: для TypeScript через TypeScript Compiler API, для C# через индекс на основе компилятора.
Каждый вызов определяется строго: точное место в исходнике плюс точное объявление, к которому он разрешается. Если метод трижды вызывает validate(), это три факта. Если индексатор привязал вызов не к той перегрузке, это ошибка, даже когда имя совпадает.
Результаты по репозиториям
P — precision, R — recall, обе по вызовам. Если считать все виды связей, включая ссылки на типы, наследование, реализации интерфейсов и переопределения, у CodeAlive precision 0,976–0,987 и recall 0,85–0,94.
DeusData/codebase-memory-mcp — самый сильный открытый инструмент из тех, что мы смогли оценить целиком. Вызовы он хранит не так, как компилятор, поэтому мы сопоставляли их по более мягкому ключу: строка вызова и строка цели. Это сравнение в его пользу, и всё равно он нашёл меньше половины вызовов.
Остальные инструменты
colbymchenry/codegraph нашёл на Playwright много вызовов (recall 0,72), но с компилятором совпали только 12% из них. Иерархию классов он строит гораздо лучше: extends P 0,86 · R 0,96, implements P 1,00 · R 0,95. Его мы запускали на 1 307 файлах Playwright, которые его парсер обработал чисто.
vitali87/code-graph-rag публикует собственные замеры: Django P 0,977 · R 0,938, Zod v4 P 1,00 · R 0,75. Но ключ там грубее нашего: вызов засчитывается, если совпали вызывающий файл и имя вызываемой функции, поэтому перегрузки и повторные вызовы схлопываются в один факт. С таблицей выше эти числа сравнивать нельзя. На FluentValidation мы запустили его сами: реализации интерфейсов получили P 0,95 · R 0,62, а у вызовов нет места вызова, так что строго оценить их не получилось.
GitNexus стабильно строил графы для Zod и FluentValidation, но место вызова тоже не хранит, поэтому строгую оценку посчитать нельзя.
Где CodeAlive пока слабее
Recall по вызовам на Playwright 0,82, а реализации интерфейсов там получили только P 0,71. Над этими местами мы сейчас и работаем, на тех же компиляторных эталонах.
По скорости мы наравне, а не впереди. На FluentValidation codebase-memory-mcp проиндексировал код за 1,5 секунды, CodeAlive — за 2,8. На Playwright CodeAlive потратил 22 секунды на индексацию вместе с оценкой, codebase-memory-mcp — 31 секунду только на индексацию.
Ограничения
Замеры сделаны с 30 июля по 10 августа 2026 года на зафиксированных коммитах каждого репозитория и каждого инструмента. Три репозитория на двух языках не дают общего рейтинга, а ключи для других инструментов лишь приближают наш. Честнее прогнать все инструменты на одном замороженном списке файлов с единым форматом связей, это наш следующий шаг.
Помогает ли точный граф агенту?
Не автоматически. Когда мы отдали этот граф нашему исследовательскому агенту, на большом репозитории он помог, на среднем почти ничего не изменил, а некоторые модели им вообще не пользовались: GraphRAG по коду. Агент вокруг инструментов повлиял сильнее, чем граф: Harness CodeAlive против OpenCode.