GitReverse — реверс-инжиниринг любого GitHub-репозитория в исходный промпт
📂 Исходный код на GitHubОткрытый веб-сервис (Next.js 16, React 19, TypeScript), который по метаданным репозитория, корневому дереву файлов и README восстанавливает с помощью LLM один короткий разговорный промпт, из которого можно «свайпкодить» проект с нуля. Поддерживает Grok, OpenRouter, Azure OpenAI и Google AI Studio, опционально Supabase и Stripe.
Что если взять любой публичный репозиторий на GitHub и спросить не «как он устроен», а «какое задание попросил бы человек, чтобы AI-агент написал это с нуля»? Именно это делает GitReverse — открытый проект с почти двумя тысячами звёзд, который превращает репозиторий в один синтетический пользовательский промпт. Тот самый, который кто-то мог бы вставить в Cursor, Claude Code или Codex, чтобы «завайбкодить» проект с нуля. Живой экземпляр сервиса доступен на gitreverse.com.
Идея одновременно шутливая и глубокая: в эпоху, когда заметная часть кода пишется по одному промпту, «обратный инжиниринг промпта» становится отдельным жанром prompt engineering. GitReverse — практичный инструмент этого жанра.
Реверс промпта как жанр
За последними годами сложилась любопытная асимметрия. Раньше главным артефактом разработчика был код, а задание — расходным материалом. Сейчас всё чаще наоборот: промпт или спецификация становятся долгоживущим артефактом, а код — генерируемым выводом, который можно пересоздать. Отсюда растёт интерес к «декомпиляции промптов»: если проект написан агентом по короткому заданию, то по коду теоретически можно восстановить это задание.
GitReverse доводит идею до логического конца и применяет её к любому репозиторию — даже к тому, который никогда не был написан AI. Результат — не архивная истина, а синтетическая реконструкция: «каким мог бы быть промпт, из которого вырос бы такой проект». Это делает каждый открытый репозиторий материалом для изучения того, как формулировать задания для агентов.
Проект органично вписался в культуру vibe coding: 1.8 тысячи звёзд, 306 форков и 286 коммитов, а на GitHub он помечен темами prompt-engineering, reverse-engineering и vibe-coding.
Как это работает
Пайплайн намеренно простой и прозрачный:
- Приложение забирает через GitHub API метаданные репозитория — название, описание, звёзды, язык.
- Получает корневое дерево файлов (глубина 1) — верхнеуровневую структуру проекта.
- Читает README.
- Отдаёт этот контекст LLM, которая генерирует один короткий разговорный промпт, «заземлённый» в реальном контексте репозитория.
Что значит «заземлённый»: модель не фантазирует абстрактное ТЗ, а опирается на то, что реально видит — стек из метаданных, типичные файлы конфигурации в корне, заявленные фичи из README. На выходе получается текст в духе «сделай мне приложение на таком-то стеке, с таким-то страницами и таким-то поведением» — разговорный, но конкретный.
На главной странице достаточно вставить URL репозитория или просто owner/repo. Есть и shareable-ссылки вида /owner/repo (например, /vercel/next.js), которые запускают тот же процесс. GitHub-подобные пути /owner/repo/tree/... редиректятся на /owner/repo, чтобы ссылки не отдавали 404. Пока реверс использует весь репозиторий целиком; поддержка контекста по конкретной подпапке заявлена в планах.
Кому и зачем это нужно
Сценарии применения, вокруг которых проект и собрал аудиторию:
- Изучение prompt engineering. Хотите понять, как выглядит промпт, из которого вырастает реальный проект, а не «напиши мне TODO-приложение»? GitReverse показывает это на любом известном репозитории.
- Эталонные промпты для vibe coding. Сгенерированный промпт можно взять за скелет собственного ТЗ: структура, стек, ключевые фичи уже сформулированы.
- Обзор незнакомых проектов. Короткий разговорный промпт — своеедельный «реферат» репозитория: что внутри и зачем.
- Бенчмаркинг агентов. Взяли промпт из репозитория A, скормили своему агенту, сравнили результат с оригиналом — получили дешёвый способ оценить качество vibe coding-инструментов.
- Обучение команд. На больших открытых проектах промпты GitReverse наглядно показывают, насколько конкретным должно быть задание, чтобы агент выдал структурированное приложение, а не набор разрозненных файлов.
Стек
Проект написан на современном фронтенд-стеке и сам является продуктом эпохи AI-кодинга:
| Технология | Роль |
|---|---|
| Next.js 16 (App Router) | Фреймворк приложения |
| React 19 | UI |
| TypeScript | Язык |
| Tailwind CSS 4 | Стили |
| GitHub API | Метаданные, дерево файлов, README |
| Supabase | Опционально: кэш промптов, страница /library, синхронизация истории |
| Stripe | Опционально: монетизация |
Поддерживаемые LLM-провайдеры
Quick reverse работает с четырьмя провайдерами. Переменная GITREVERSE_QUICK_LLM закрепляет конкретного, а без неё включается режим auto — приложение берёт первый найденный ключ.
| Провайдер | Ключ | Модель по умолчанию |
|---|---|---|
| Grok (xAI) | XAI_API_KEY |
grok-3 |
| OpenRouter | OPENROUTER_API_KEY |
google/gemini-2.5-pro |
| Azure OpenAI | AZURE_OPENAI_API_KEY + AZURE_OPENAI_BASE_URL |
gpt-5.4 |
| Google AI Studio | GOOGLE_GENERATIVE_AI_API_KEY |
gemini-2.5-pro |
В режиме auto приоритет такой: Grok → OpenRouter → Azure → Google. Azure-реверс по умолчанию использует gpt-5.4 с reasoning effort medium, а генерация заголовков — gpt-5.4-mini без reasoning.
Embeddings и библиотека промптов
Кэш сгенерированных промптов индексируется эмбеддингами Azure (по умолчанию text-embedding-3-small, 512 измерений), что даёт гибридный поиск по странице /library. Если в вашем Azure-ресурсе ещё нет embedding-деплоя, можно временно задать OPENAI_API_KEY как fallback только для эмбеддингов — quick reverse и генерация заголовков останутся на Azure.
Маршруты приложения
| Путь | Назначение |
|---|---|
/ |
Главная — быстрый реверс (кодовая база или сайт) |
/library |
Просмотр кэшированных промптов (требует Supabase) |
/history |
История ваших промптов, синхронизируется с Supabase |
/[owner]/[repo] |
Shareable-ссылка на быстрый реверс |
/[owner]/[repo]/tree/... |
Редирект на /[owner]/[repo] |
Запуск и конфигурация
pnpm install
pnpm dev
После этого приложение доступно на http://localhost:3000. Сборка и линтинг — стандартные:
pnpm build
pnpm start
pnpm lint
Конфигурация — через .env.local (образец в .env.example). Ключевые переменные:
- Хотя бы один ключ LLM из таблицы выше — обязателен.
GITHUB_TOKEN— опционально, повышает лимиты GitHub API.SUPABASE_URL+SUPABASE_PUBLISHABLE_KEY— опционально, включает серверный кэш промптов и страницу/library.VIEWS_IP_SALT— обязательна в продакшене: приложение откажется стартовать со значением по умолчанию. Генерируется черезopenssl rand -hex 32.
Ограничения
Стоит трезво понимать границы инструмента. Реверс опирается только на метаданные, корневую структуру и README — глубокий анализ кода не выполняется, поэтому промпт отражает «фасад» проекта, а не его внутреннюю логику. Результат — синтетическая реконструкция: красиво и правдоподобно, но это не «настоящий» исходный промпт (которого у большинства проектов, разумеется, никогда и не было). Пока не поддерживается реверс отдельной подпапки — только репозиторий целиком.
Итог
GitReverse — лёгкий, хорошо собранный и ироничный проект, который ухватил дух времени: если код теперь пишется из промптов, то и промпты можно «декомпилировать» из кода. Для практикующих vibe coding это генератор референсных ТЗ, для интересующихся prompt engineering — песочница на реальных репозиториях, а для всех остальных — быстрый способ взглянуть на знакомые open-source проекты под неожиданным углом.
Репозиторий: filiksyos/gitreverse, живой сервис — gitreverse.com. Темы на GitHub: prompt-engineering, reverse-engineering, vibe-coding.
Источник: https://github.com/filiksyos/gitreverse