# Как скормить репозиторий нейросети

Есть инструмент, который обещает, что если пришлешь ссылку на репозиторий, то можно забрать «оригинальный промт». Почти полторы тысячи звёзд на GitHub, ссылка ходит по всем подборкам инструментов.
Но сервис забирает метаданные, дерево файлов глубины 1 и README. Всё. Ни одного файла с кодом он не открывает.

Инструменты, которые «превращают репозиторий в промт», делают разные вещи, и разница видна только в их документации. Один читает описание проекта и список папок в корне. Другой забирает содержимое всех файлов. Ниже - что каждый реально берёт, в каком порядке действовать и что делать, когда проект не влезает в контекст.

## Четыре инструмента: что каждый реально читает

- 01 «GitReverse» — метрика «метаданные, дерево глубины 1 и README» — Забирает метаданные репозитория, дерево файлов глубины 1 и README. Дальше модель сочиняет один короткий промт по этому описанию. Сам разработчик называет результат синтетическим промтом. Когда брать: когда надо за минуту понять, о чём незнакомый проект. Как источник «того самого» промта - нет: код при этом не открывается вообще.
- 02 «Gitingest» — метрика «структура каталогов и содержимое файлов» — Забирает структуру каталогов и содержимое файлов одним текстовым дайджестом. Работает в браузере, из командной строки (`pip install gitingest`) и как расширение. Когда брать: когда нужен весь код чужого проекта одним куском текста, чтобы вставить в чат.
- 03 «uithub» — метрика «полный контекст по адресу» — Полный контекст репозитория прямо по адресу: в ссылке меняется одна буква, github.com становится `uithub.com`. Когда брать: разовый быстрый вброс в чат без установки чего-либо.
- 04 «Repomix» — метрика «весь репозиторий в один файл» — Весь репозиторий в один файл. Форматы XML, Markdown, JSON и plain. Счётчик токенов по каждому файлу, сжатие структуры через Tree-sitter, проверка на утёкшие секреты через Secretlint, уважает `.gitignore`. Когда брать: рабочий проект, локально и повторяемо. Запуск без установки: `npx repomix@latest`.

Трюк с адресом работает у трёх из четырёх. В ссылке на репозиторий меняется часть домена: hub на reverse - синтетический промт, hub на ingest - текстовый дайджест кода, github на uithub - полный контекст. Одинаковый жест, три совершенно разных результата на выходе.

## Порядок действий

- 01 «Сформулируй задачу до того, как вставишь ссылку» — «Понять, о чём проект» и «дать нейросети код» - это два разных инструмента. Половина разочарований начинается с того, что взяли первый, а ждали второго.
- 02 «Посмотри, есть ли у проекта описание» — Всё, что синтезирует промт по обложке, опирается на README. Если описания нет или оно в одну строку - на выходе будет уверенный текст ни о чём.
- 03 «Забирай содержимое файлов, а не дерево» — Список папок говорит модели, как проект называется. Ответ на вопрос «как он работает» лежит только в самом коде.
- 04 «Выкини лишнее до упаковки» — Файлы блокировок зависимостей, сборки, картинки, тесты-фикстуры, кэш. Это половина объёма и ноль смысла. Проще всего через списки исключений в конфиге упаковщика.
- 05 «Посчитай токены до вставки, а не после» — Repomix показывает счётчик по каждому файлу и по всему проекту сразу. Так видно, какие три файла съедают половину бюджета, ещё до того, как ты открыл чат.
- 06 «Прогони проверку на секреты» — Ключи и токены живут в файлах окружения, конфигах и старых коммитах. Перед тем как отправлять код в чужой сервис, проверь его автоматически - в Repomix эта проверка встроена.
- 07 «Не выдавай синтетический промт за исходный» — Если инструмент реконструировал промт по описанию - это гипотеза о проекте, а не история его создания. Пользоваться можно, ссылаться как на факт - нет.
- 08 «Свой контекст держи в файле проекта, а не в чужом промте» — Для собственного репозитория постоянный контекст живёт в CLAUDE.md: команды сборки, соглашения, структура. Стартовую версию генерирует `/init`, дальше держи файл в пределах 200 строк - длинные читаются хуже.

## Когда проект не влезает в контекст

- 01 «Сжать» — Режим сжатия оставляет сигнатуры функций, классы и структуру, выбрасывая тела. Проект перестаёт быть дословным, но остаётся понятным - для вопросов об архитектуре этого достаточно.
- 02 «Сузить» — Упакуй одну папку и один слой: только серверную часть, только модели данных, только миграции. Точный маленький контекст работает лучше, чем полный и обрезанный посередине.
- 03 «Разбить» — Упаковщик умеет резать вывод на несколько файлов. Ещё надёжнее - склонировать репозиторий локально и дать агенту читать файлы самому, по мере надобности.

врезка-пара: левый callout — метка `// Правило одного вопроса`, текст «Собирай контекст под конкретный вопрос, а не «на всякий случай». Проект целиком в окне модели чаще мешает, чем помогает: чем больше лишнего, тем слабее то, что действительно нужно.»; правый callout — метка `// Проверка перед отправкой`, текст «Открой упакованный файл и пролистай глазами. Если там оказались картинки в base64, чужие ключи или папка со сборкой - фильтры настроены неправильно.»

## Красные флаги

- 01 ««Оригинальный промт»» — Промта, которым собрали чужой проект, не существует в репозитории - его там физически негде хранить. Всё, что выдаётся под таким названием, реконструировано моделью.
- 02 «Инструмент не говорит, что именно он читает» — Первое, что стоит найти в документации: берёт он дерево, README или содержимое файлов. Если это нигде не написано - считай, что берёт минимум.
- 03 «В репозитории нет файла лицензии» — Отсутствие лицензии не означает «делай что хочешь». По умолчанию это все права защищены: поднять свою копию у себя юридически нельзя. У GitReverse файла лицензии нет, у Gitingest и Repomix - MIT.
- 04 «Приватный код уходит в чужой веб-сервис» — Веб-версии удобны для публичных репозиториев. Рабочий проект компании упаковывай локально, командой на своей машине.
- 05 «Вера в размер окна» — Большое контекстное окно не означает, что модель одинаково хорошо помнит всё, что в него положили. Середина длинного контекста теряется первой - поэтому важное кладут ближе к вопросу.

---

Источник: https://localhost:3000/m/repository-ai
