GitHub Dungeons: рогалик из вашего репозитория с Copilot CLI

Расширение gh CLI превращает любой репозиторий в терминальный рогалик. Уровни генерируются через BSP на основе хеша последнего коммита — один и тот же код всегда даёт одно и то же подземелье.

Обложка: GitHub Dungeons: рогалик из вашего репозитория с Copilot CLI

Ваш последний коммит теперь определяет планировку подземелья. Сотрудник 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 — это рекурсивное разбиение пространства на прямоугольные регионы. Алгоритм прост в объяснении, но даёт именно тот баланс между структурой и хаосом, который нужен рогаликам:

  1. Начало. Весь уровень — один большой прямоугольник.
  2. Разбиение. Пространство делится на два региона (горизонтально или вертикально). Каждый регион снова делится. И снова.
  3. Остановка. Разбиение прекращается, когда регион становится слишком маленьким для комнаты.
  4. Комнаты. Каждый конечный регион становится комнатой. Позиция и размер слегка рандомизируются — чтобы карта не выглядела как сетка.
  5. Коридоры. Алгоритм обходит дерево разбиений в обратном порядке и соединяет соседние комнаты L-образными коридорами.
  6. Результат. Карта выглядит спроектированной, хотя создана алгоритмически. Все комнаты достижимы, нет тупиков.
Шаг 1. Старт: всё подземелье — один прямоугольник.
Шаг 2. Первое разбиение — на две зоны.
Шаг 3. Рекурсивно: одна из зон разбита ещё раз.
Шаг 4. После нескольких проходов — шесть листовых регионов.
Шаг 5. Каждый регион превращается в комнату — с небольшим рандомом по размеру.
Шаг 6. Соседние комнаты пока не соединены.
Шаг 7. Сиблинги по дереву связываются L-образными коридорами.
Шаг 8. Финальный layout: структурно, но каждый раз разный.

BSP решает две главные проблемы процедурной генерации: чистый рандом даёт хаотичные карты, регулярные сетки — предсказуемые. BSP находит баланс: структурированный хаос, где каждый забег выглядит по-разному, но остаётся проходимым.

Разработка с GitHub Copilot CLI

Ли Рейли написал GitHub Dungeons на Go — языке, которым он не пользовался регулярно. Copilot CLI позволил сосредоточиться на поведении игры, а не на синтаксисе: вместо того чтобы вспоминать, как работают горутины, можно было описать нужное поведение и получить работающий код.

Команда /delegate: асинхронный агент

Ключевым инструментом в разработке стала команда /delegate. В отличие от обычного автодополнения, /delegate передаёт задачу облачному агенту Copilot, который работает асинхронно. Разработчик описывает задачу на естественном языке, запускает делегирование и может заниматься чем-то другим. Когда агент завершает работу, он открывает pull request с результатами.

Например, команда /delegate с описанием задачи на естественном языке вернула готовую реализацию прогрессии сложности в виде PR. Автор просмотрел результат, подправил баланс и влил изменения. Тот же подход использовался для читкодов, системы туман войны и документации.

			/delegate Make each level progressively harder e.g. on level 2 there are extra baddies, but more health potions
		
Работа с Copilot (особенно через /delegate) — это как иметь армию NPC, готовых делать всё, что я скажу.
Ли Рейли (Lee Reilly)Senior Program Manager, GitHub Developer Relations

Команда /yolo: живёшь только раз

Для проекта о рогалике команда /yolo оказалась особенно уместной: это алиас для /allow-all, который разрешает Copilot CLI выполнять все действия без дополнительных подтверждений. «You only live once» — именно это слоган permadeath-механики рогаликов. В разработке /yolo ускоряет итерации: не нужно подтверждать каждое действие агента.

Copilot также сгенерировал «dungeon scribe» — вспомогательного агента, который добавил документацию и ASCII-диаграммы, объясняющие генерацию подземелий. Это органично вписалось в стиль терминального рогалика.

Установка и игра

Для запуска нужен установленный GitHub Copilot CLI. Расширение устанавливается одной командой:

			gh extension install leereilly/gh-dungeons
		

После установки запустите игру в директории любого репозитория:

			gh dungeons
		

Управление: стрелки, WASD или Vim-клавиши (hjkl). Цель — найти скрытую дверь и сбежать через пять уровней, сражаясь с врагами и собирая зелья здоровья. Автоатака, туман войны, счётчик убийств и уровней входят в комплект. Остальные возможности придётся обнаружить самостоятельно.

Опасная зона: pre-commit хук с ставками

Для тех, кто хочет испытать настоящий permadeath в духе рогаликов, автор предлагает привязать игру к git-коммитам. Pre-commit хук запускает GitHub Dungeons перед каждым коммитом: если проигрываете — все несохранённые изменения удаляются.

			# Создать pre-commit хук
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
gh dungeons
if [ $? -ne 0 ]; then
    echo "You died! Your changes have been stashed into oblivion..."
    git stash && git stash drop stash@{0}
    exit 1
fi
EOF

# Сделать исполняемым
chmod +x .git/hooks/pre-commit
		

Внимание: не устанавливайте этот хук, если не понимаете последствий. Поражение в игре ведёт к безвозвратной потере всех незакоммиченных изменений. Редакция GitHub прямо предупреждает: ответственность за последствия несёт автор хука, а не GitHub.

Часто задаваемые вопросы
1
Что такое GitHub Dungeons?

GitHub Dungeons — это расширение для GitHub CLI (gh), написанное на Go. Оно читает ваш репозиторий, генерирует карту подземелья на основе хеша последнего коммита и запускает рогалик прямо в терминале. Каждый репозиторий даёт уникальную карту, которая меняется при изменении кода.

2
Что такое Binary Space Partitioning?

BSP — алгоритм рекурсивного разбиения пространства на прямоугольные регионы. В контексте игр он используется для генерации карт: каждый регион становится комнатой, регионы соединяются коридорами. Результат — связная карта, которая выглядит спроектированной, но создана алгоритмически. Алгоритм популярен в рогаликах с 1980-х годов.

3
Что делает команда /delegate в Copilot CLI?

Команда /delegate передаёт задачу облачному агенту Copilot, который работает асинхронно. В отличие от inline-автодополнения, агент может самостоятельно реализовать фичу, создать коммиты и открыть pull request — пока разработчик занимается другими задачами.

4
Нужен ли Go для установки?

Нет. Расширение устанавливается через GitHub CLI одной командой: gh extension install leereilly/gh-dungeons. Единственное требование — установленный GitHub Copilot CLI.

5
Стоит ли ставить pre-commit хук с игрой?

Только если вы полностью понимаете последствия: поражение в игре приводит к безвозвратной потере всех незакоммиченных изменений. Это юмористическая крайность, демонстрирующая возможности хуков. На рабочих репозиториях категорически не рекомендуется.

Выводы

GitHub Dungeons — эксперимент, который демонстрирует несколько интересных вещей одновременно. Во-первых, Copilot CLI меняет паттерн разработки: когда агент берёт на себя незнакомый синтаксис и рутину, разработчик остаётся в режиме дизайнера механик, а не кодировщика. Для этого рогалика это означало итерации по балансу, тайным кодам и пасхалкам вместо бесконечной отладки Go-специфики. Во-вторых, классические алгоритмы вроде BSP решают современные задачи: детерминированный seed из SHA коммита — это не случайность, а осмысленная связь между состоянием кода и состоянием игры. Каждый мердж меняет карту.

Попробовать GitHub Dungeons можно в любом репозитории: github.com/leereilly/gh-dungeons. Оригинальный разбор от автора — на GitHub Blog. Установите, запустите gh dungeons в своём репозитории — и посмотрите, каким подземельем стал ваш последний коммит.