GitHub Dungeons: рогалик из вашего репозитория с Copilot CLI
Расширение gh CLI превращает любой репозиторий в терминальный рогалик. Уровни генерируются через BSP на основе хеша последнего коммита — один и тот же код всегда даёт одно и то же подземелье.
Ваш последний коммит теперь определяет планировку подземелья. Сотрудник GitHub Ли Рейли (Lee Reilly) принял участие в GitHub Copilot CLI Challenge и написал GitHub Dungeons — расширение для GitHub CLI, которое превращает любой репозиторий в рогалик прямо в терминале. Уровни генерируются на основе хеша коммита, враги случайно заполняют коридоры, а выход спрятан за пятью уровнями процедурно созданных комнат.
Проект написан на Go — языке, с которым автор раньше почти не работал. Весь процесс разработки прошёл через GitHub Copilot CLI: вместо того чтобы разбираться в деталях синтаксиса незнакомого языка, можно было описать нужное поведение и получить работающий код.
Главное
Ключевые выводы
GitHub Dungeons — расширение gh extension, которое генерирует рогалик из вашего репозитория прямо в терминале.
Процедурная генерация работает через Binary Space Partitioning (BSP), засеянный SHA последнего коммита — один и тот же код всегда даёт одно и то же подземелье.
Команда /delegate в Copilot CLI передаёт задачу облачному агенту, который работает асинхронно и открывает готовый PR.
«Опасный режим»: можно настроить pre-commit хук, который удалит все несохранённые изменения, если проиграть.
Установка одной командой: gh extension install leereilly/gh-dungeons.
Что такое GitHub Dungeons
GitHub Dungeons — это терминальная игра в жанре рогалик, где каждый уровень генерируется на основе вашей кодовой базы. Комнаты, коридоры и враги строятся из структуры репозитория и отрисовываются прямо в консоли. Навигация — стрелками, WASD или Vim-клавишами. Цель — найти скрытый выход, преодолев пять уровней с нарастающей сложностью.
Рогалики (roguelikes) ведут историю с игры Rogue 1980-х — терминальных приключений, где каждое прохождение генерировало новые подземелья, а смерть означала начало сначала (permadeath). GitHub Dungeons обращается к этой традиции, добавляя инженерный твист: ваш последний коммит задаёт seed генерации — один и тот же код всегда даёт одно и то же подземелье, но каждое изменение перестраивает его.
Как репозиторий превращается в подземелье
Генерация уровней построена на алгоритме Binary Space Partitioning (BSP) — классическом методе процедурной генерации карт в играх. В качестве seed используется SHA последнего коммита репозитория, что обеспечивает детерминированность: один коммит — одно подземелье. Изменился код — изменилась карта.
Процедурная генерация (или procgen) — это создание контента алгоритмически, а не вручную. Вместо того чтобы проектировать одно подземелье, вы проектируете систему, которая генерирует их бесконечно. Именно это даёт рогаликам высокую реиграбельность: каждое прохождение структурно отличается от предыдущего.
Как работает Binary Space Partitioning
BSP — это рекурсивное разбиение пространства на прямоугольные регионы. Алгоритм прост в объяснении, но даёт именно тот баланс между структурой и хаосом, который нужен рогаликам:
- Начало. Весь уровень — один большой прямоугольник.
- Разбиение. Пространство делится на два региона (горизонтально или вертикально). Каждый регион снова делится. И снова.
- Остановка. Разбиение прекращается, когда регион становится слишком маленьким для комнаты.
- Комнаты. Каждый конечный регион становится комнатой. Позиция и размер слегка рандомизируются — чтобы карта не выглядела как сетка.
- Коридоры. Алгоритм обходит дерево разбиений в обратном порядке и соединяет соседние комнаты L-образными коридорами.
- Результат. Карта выглядит спроектированной, хотя создана алгоритмически. Все комнаты достижимы, нет тупиков.
BSP решает две главные проблемы процедурной генерации: чистый рандом даёт хаотичные карты, регулярные сетки — предсказуемые. BSP находит баланс: структурированный хаос, где каждый забег выглядит по-разному, но остаётся проходимым.
Разработка с GitHub Copilot CLI
Ли Рейли написал GitHub Dungeons на Go — языке, которым он не пользовался регулярно. Copilot CLI позволил сосредоточиться на поведении игры, а не на синтаксисе: вместо того чтобы вспоминать, как работают горутины, можно было описать нужное поведение и получить работающий код.
Команда /delegate: асинхронный агент
Ключевым инструментом в разработке стала команда /delegate. В отличие от обычного автодополнения, /delegate передаёт задачу облачному агенту Copilot, который работает асинхронно. Разработчик описывает задачу на естественном языке, запускает делегирование и может заниматься чем-то другим. Когда агент завершает работу, он открывает pull request с результатами.
Например, команда /delegate с описанием задачи на естественном языке вернула готовую реализацию прогрессии сложности в виде PR. Автор просмотрел результат, подправил баланс и влил изменения. Тот же подход использовался для читкодов, системы туман войны и документации.
Работа с Copilot (особенно через /delegate) — это как иметь армию NPC, готовых делать всё, что я скажу.
Команда /yolo: живёшь только раз
Для проекта о рогалике команда /yolo оказалась особенно уместной: это алиас для /allow-all, который разрешает Copilot CLI выполнять все действия без дополнительных подтверждений. «You only live once» — именно это слоган permadeath-механики рогаликов. В разработке /yolo ускоряет итерации: не нужно подтверждать каждое действие агента.
Copilot также сгенерировал «dungeon scribe» — вспомогательного агента, который добавил документацию и ASCII-диаграммы, объясняющие генерацию подземелий. Это органично вписалось в стиль терминального рогалика.
Установка и игра
Для запуска нужен установленный GitHub Copilot CLI. Расширение устанавливается одной командой:
После установки запустите игру в директории любого репозитория:
Управление: стрелки, WASD или Vim-клавиши (hjkl). Цель — найти скрытую дверь и сбежать через пять уровней, сражаясь с врагами и собирая зелья здоровья. Автоатака, туман войны, счётчик убийств и уровней входят в комплект. Остальные возможности придётся обнаружить самостоятельно.
Опасная зона: pre-commit хук с ставками
Для тех, кто хочет испытать настоящий permadeath в духе рогаликов, автор предлагает привязать игру к git-коммитам. Pre-commit хук запускает GitHub Dungeons перед каждым коммитом: если проигрываете — все несохранённые изменения удаляются.
Внимание: не устанавливайте этот хук, если не понимаете последствий. Поражение в игре ведёт к безвозвратной потере всех незакоммиченных изменений. Редакция GitHub прямо предупреждает: ответственность за последствия несёт автор хука, а не GitHub.
Часто задаваемые вопросы
Что такое GitHub Dungeons?
GitHub Dungeons — это расширение для GitHub CLI (gh), написанное на Go. Оно читает ваш репозиторий, генерирует карту подземелья на основе хеша последнего коммита и запускает рогалик прямо в терминале. Каждый репозиторий даёт уникальную карту, которая меняется при изменении кода.
Что такое Binary Space Partitioning?
BSP — алгоритм рекурсивного разбиения пространства на прямоугольные регионы. В контексте игр он используется для генерации карт: каждый регион становится комнатой, регионы соединяются коридорами. Результат — связная карта, которая выглядит спроектированной, но создана алгоритмически. Алгоритм популярен в рогаликах с 1980-х годов.
Что делает команда /delegate в Copilot CLI?
Команда /delegate передаёт задачу облачному агенту Copilot, который работает асинхронно. В отличие от inline-автодополнения, агент может самостоятельно реализовать фичу, создать коммиты и открыть pull request — пока разработчик занимается другими задачами.
Нужен ли Go для установки?
Нет. Расширение устанавливается через GitHub CLI одной командой: gh extension install leereilly/gh-dungeons. Единственное требование — установленный GitHub Copilot CLI.
Стоит ли ставить pre-commit хук с игрой?
Только если вы полностью понимаете последствия: поражение в игре приводит к безвозвратной потере всех незакоммиченных изменений. Это юмористическая крайность, демонстрирующая возможности хуков. На рабочих репозиториях категорически не рекомендуется.
Выводы
GitHub Dungeons — эксперимент, который демонстрирует несколько интересных вещей одновременно. Во-первых, Copilot CLI меняет паттерн разработки: когда агент берёт на себя незнакомый синтаксис и рутину, разработчик остаётся в режиме дизайнера механик, а не кодировщика. Для этого рогалика это означало итерации по балансу, тайным кодам и пасхалкам вместо бесконечной отладки Go-специфики. Во-вторых, классические алгоритмы вроде BSP решают современные задачи: детерминированный seed из SHA коммита — это не случайность, а осмысленная связь между состоянием кода и состоянием игры. Каждый мердж меняет карту.
Попробовать GitHub Dungeons можно в любом репозитории: github.com/leereilly/gh-dungeons. Оригинальный разбор от автора — на GitHub Blog. Установите, запустите gh dungeons в своём репозитории — и посмотрите, каким подземельем стал ваш последний коммит.