repopedia - открытый инструмент, который строит граф кода прямо на вашей машине. Парсинг выполняет tree-sitter, результат ложится в обычный файл SQLite, а MCP-сервер отдаёт AI-агенту точный ответ с указанием file:line за один вызов. Ни облака, ни Docker, ни API-ключей. Лицензия MIT, текущая версия 0.2.1, поддержка Python и TypeScript.
Автор сделал инструмент под свою задачу: он работал с большой Python-кодовой базой и не мог надёжно определить, кто вызывает общую функцию, когда её пора менять. grep показывал все упоминания имени, включая комментарии, строки и одноимённые методы, и на этом поиск заканчивался. Граф вызовов отвечает на вопрос иначе: он хранит связи между сущностями кода, а не текстовые совпадения. Пост автора в r/LocalLLaMA описывает и саму проблему, и то, как она решается.
Инструмент распространяется под MIT, и это принципиальный момент: многие похожие проекты либо требуют загрузки репозитория в облако, либо разворачивают Docker-стек с векторной базой данных. Для рабочих проектов с закрытым кодом такой вариант часто неприемлем. repopedia оставляет весь анализ на локальном диске.
Что такое repopedia и зачем она нужна
repopedia решает задачу навигации по зависимостям в кодовой базе. Вы задаёте вопрос о вызовах функций и получаете структурированный ответ, а не список строк, где встречается нужное имя. Дальше этот ответ можно отдать AI-агенту через MCP, чтобы он не тратил раунды на текстовый поиск.
Проблема, которую решает repopedia
grep ищет подстроку. Если функция называется process, поиск вернёт и реальные вызовы, и упоминания в комментариях, и строковые литералы, и методы с тем же именем в совсем других классах. Разбирать этот список вручную в большом проекте дорого, а ошибиться легко: пропущенный вызывающий превращается в поломку на проде.
Отдельная сложность - транзитивные зависимости. Перед изменением общей функции полезно понимать не только прямых вызывающих, но и всех, кто вызывает их. Автор называет это blast radius и описывает именно такой сценарий из своей практики: изменение общей функции в большой Python-кодовой базе, где надёжно определить вызывающих через grep не получалось.
Ключевые особенности
- Лицензия MIT, исходники открыты.
- Полностью локальная работа: без сервера, без Docker, без API-ключей. Ничего не загружается на сторонние серверы, граф лежит файлом
.dbна диске. - Парсинг через tree-sitter, хранение в обычном SQLite.
- MCP-сервер для AI-агентов: точный ответ с file:line за один вызов.
- Установка через pip и запуск на репозитории.
- Выгрузка wiki по кодовой базе (автор добавлял эту функцию в основном для собственных нужд).
- Embedding-модели не используются: работает только граф связей.
Инструмент появился как альтернатива GitNexus, который автор хотел использовать, но отказался из-за лицензии PolyForm. Именно вопрос лицензии и полной локальности стал отправной точкой проекта.
Как работает локальный граф кода
Схема простая и не требует внешней инфраструктуры: парсер разбирает исходники, извлекает сущности и связи, а результат складывается в один файл базы данных.
Парсинг через tree-sitter
tree-sitter строит синтаксическое дерево файла, и уже по нему инструмент выделяет функции, классы и методы, а также связи вызовов между ними. Такой подход даёт структуру, привязанную к реальному синтаксису языка, а не к регулярным выражениям.
Обратная сторона - ограничение по языкам. В версии 0.2.1 поддерживаются только Python и TypeScript. Проект на Go, Java, C# или Rust с этим инструментом анализировать не получится, и это стоит проверить до установки.
Хранение в SQLite
Граф сохраняется в обычный файл SQLite. Его можно открыть любым клиентом, посмотреть таблицы и выполнить собственные запросы. Никаких внешних серверов, Docker-контейнеров и API-ключей не требуется: база лежит рядом с проектом, на том же диске.
Отсутствие embedding-модели означает, что поиск идёт по структуре кода, а не по семантической близости. Формулировка «найди код, который делает X» здесь не сработает так, как в RAG-системах с векторным индексом. Зато вопросы о связях получают однозначный и воспроизводимый ответ.
MCP-сервер: точные ответы для AI-агентов за один вызов
MCP-сервер - самая интересная часть проекта для тех, кто работает с кодинг-агентами. Вместо того чтобы самому разбираться с grep и регулярками, агент обращается к графу и получает готовый ответ.
Как MCP-сервер ускоряет работу агента
Обычный сценарий выглядит так: агент делает несколько раундов текстового поиска, уточняет запросы, отсеивает ложные совпадения и постепенно приближается к ответу. Каждый раунд съедает токены и место в контекстном окне, а результат всё равно может оказаться неполным.
С repopedia агент задаёт вопрос графу напрямую и получает точный ответ с указанием file:line за один вызов. Это меньше шагов, меньше токенов и меньше поводов ошибиться при сборке картины зависимостей.
Почему это особенно важно для локальных моделей
Автор прямо говорит, что MCP-сервер может быть ещё полезнее для локальных моделей, поскольку они не очень хорошо справляются с поиском. Модель, работающая на вашем железе, часто уступает облачным в многошаговых задачах навигации по репозиторию: ей сложнее удерживать состояние поиска и корректно обрабатывать длинные списки совпадений.
Граф снимает эту нагрузку. Вместо серии проб и уточнений локальная модель получает структурированный ответ, на который можно опереться при формулировке правки. Похожую логику разбирают в материале про TeaRAGs и локальный слой понимания кода, где граф вызовов тоже отдаётся агенту как готовое досье, а не как сырой список файлов.
Автор использует Claude Code как основной кодинг-агент, и обычно тот опирается на grep. Подключение MCP-сервера меняет источник данных: агент спрашивает граф, а не перебирает текст.
Практические сценарии: кто вызывает функцию и blast radius
Два вопроса, ради которых инструмент и создавался, звучат буднично, но закрывают частую боль при рефакторинге.
Поиск вызывающих
Запрос к графу возвращает список мест, где функция реально вызывается, с точной привязкой file:line. Комментарии, строки и одноимённые методы в него не попадают, потому что связи построены по синтаксису, а не по совпадению текста.
Оценка blast radius
Blast radius - это все транзитивные вызывающие: функции, которые вызывают изменяемую напрямую, и те, что зависят от них дальше по цепочке. Перед правкой общей функции такой список показывает реальный масштаб последствий и помогает не пропустить участок, который сломается.
Именно здесь текстовый поиск проигрывает сильнее всего. Чтобы собрать транзитивную цепочку вручную, нужно пройти по вызовам уровень за уровнем, и каждый шаг добавляет риск пропуска. Инструменты этого класса, включая CodeSlicer с проверяемым графом влияния, решают ту же задачу: дать разработчику и агенту проверяемую картину зависимостей вместо догадок.
Дополнительно repopedia умеет выгружать wiki по кодовой базе. Автор отмечает, что делал эту функцию в основном для себя, так что воспринимать её как полноценный генератор документации не стоит.
Ограничения и подводные камни версии 0.2.1
Номер версии говорит сам за себя: это ранняя стадия. Ниже перечислены ограничения, о которых автор предупреждает прямо, а не в мелком шрифте.
Поддерживаемые языки
Только Python и TypeScript. Если ваш стек другой, инструмент не подойдёт, и никакие настройки этого не изменят. Даже внутри поддерживаемых языков поведение зависит от качества разбора конкретных конструкций.
Проблема с self. и большими иерархиями классов
Вызовы методов через self. разрешаются сопоставлением по имени. Автор описывает это как «настолько ненадёжно, насколько звучит» для больших деревьев классов: если в иерархии есть методы с одинаковыми именами, граф может связать вызов не с тем методом. Для плоских модулей и утилитного кода риск невелик, для глубокого ООП-наследования он реален и требует проверки результатов вручную.
Ещё один момент: отсутствие embedding-модели означает, что семантический поиск недоступен в принципе. Инструмент отвечает на вопросы о структуре и связях, а не о смысле кода.
Автор также просит сообщать о случаях некорректной работы, то есть сам допускает, что инструмент может ошибаться. Независимых бенчмарков и сторонней проверки по этому проекту нет: все описанные возможности заявлены в исходном посте автора, и опираться стоит именно на этот статус данных.
Как установить и запустить repopedia
Порог входа низкий: пакет ставится через pip, после чего инструмент запускается на репозитории. Дальше он строит файл SQLite с графом кода, и этот файл можно исследовать запросами или отдать MCP-серверу.
- Установите пакет через pip.
- Запустите инструмент на корне нужного репозитория, чтобы он разобрал исходники и создал базу графа.
- Подключите MCP-сервер к вашему AI-агенту, чтобы он мог обращаться к графу напрямую.
- При необходимости выгрузите wiki по кодовой базе.
Точные имена пакета и параметров запуска в исходном описании не приводятся, поэтому перед установкой сверьтесь с репозиторием проекта. Это же касается формата подключения MCP-сервера к конкретному агенту: конфигурация отличается от клиента к клиенту.
Для сравнения: часть инструментов требует развернуть Docker-стек с векторной базой, прежде чем вы получите первый ответ. Здесь достаточно pip и локального SQLite. Если вы уже пробовали похожие решения, полезно посмотреть на Archex с детерминированным отбором контекста и на Agent DevTools, который хранит рабочий контекст агента в SQLite рядом с проектом: у них другой фокус, но требования к локальности совпадают.
Сравнение с альтернативами и контекст
Ключевое отличие repopedia от многих проектов того же класса лежит не в алгоритмах, а в условиях использования. Автор хотел взять GitNexus, но отказался из-за лицензии PolyForm. Многие инструменты графа кода требуют загрузить репозиторий в облако или поднять Docker-стек с векторной базой данных. На работе автора такой вариант не подходил.
repopedia закрывает эту нишу: MIT-лицензия, работа на локальной машине, один файл SQLite на выходе. Для команд, где код нельзя отправлять на сторонние серверы, это не удобство, а условие, без которого инструмент просто не может применяться.
| Критерий | repopedia | Типичный облачный анализатор |
|---|---|---|
| Лицензия | MIT | Проприетарная или ограниченная |
| Где обрабатывается код | Локально | На серверах вендора |
| Что нужно для запуска | pip и репозиторий | Аккаунт, ключи, иногда Docker |
| Хранение графа | Файл SQLite на диске | Индекс на стороне сервиса |
| Языки в версии 0.2.1 | Python, TypeScript | Зависит от сервиса |
Обратная сторона свободы - зрелость. Облачные сервисы обычно дают более широкую поддержку языков и меньше сюрпризов при разборе сложных конструкций. repopedia на версии 0.2.1 предлагает узкий, но предсказуемый набор возможностей.
Кому подходит repopedia и стоит ли её использовать
Инструмент имеет смысл пробовать, если ваш проект написан на Python или TypeScript, а в работе вы используете кодинг-агента. Второе условие обязательно: без MCP-сервера вы получите только граф и запросы к нему, а основной выигрыш проявляется именно в связке с агентом.
Отдельная аудитория - пользователи локальных моделей. Когда модель работает на вашем железе и уступает облачным в навигации по репозиторию, структурированный ответ с file:line компенсирует часть этого разрыва и снижает число шагов, которые модели приходится делать самостоятельно.
Не подойдёт инструмент в трёх случаях. Первый: проект на языке за пределами Python и TypeScript. Второй: нужен семантический поиск по смыслу, а не по связям, ведь embedding-модели здесь не используются. Третий: кодовая база построена на глубокой иерархии классов с активным использованием self., где сопоставление методов по имени даёт ошибки.
Разумный способ проверить пользу - взять один модуль со сложными зависимостями и сравнить список вызывающих, собранный графом, с тем, что вы получите через grep. Разница в точности обычно видна сразу. Если результат совпадает с вашими ожиданиями, инструмент можно пробовать на всей кодовой базе; если нет, вы потеряете полчаса, а не неделю на интеграцию.