PromptCore Arena: битва стратегий, написанных словами
От CROBOTS и Core War к боям через Codex: стратегии словами, строгие правила, ошибки навигации и настоящий матч за 30 секунд.

У таких арен есть предки из эпохи DOS — операционной системы старых персональных компьютеров. В CROBOTS, которую Том Пойндекстер написал в 1985 году, игрок заранее программировал робота на языке C: как искать соперника, двигаться и стрелять. После запуска оставалось наблюдать за боем, а затем улучшать программу и пробовать снова. Оригинальная игра и её история сохранились на сайте автора.
В Core War бойцами были сами программы: они исполнялись в памяти виртуального компьютера и пытались остановить друг друга. Их писали на специальном языке команд Redcode; существовали и реализации игры для DOS. Именно Core War стала отправной точкой PromptCore Arena. У этой идеи есть и современное продолжение: в исследовании Digital Red Queen (2026) языковая модель создаёт и улучшает программы для Core War.
В PromptCore Arena игрок описывает стратегию словами, а модель выбирает действие на каждом ходу.
Мне захотелось посмотреть, как две модели будут сражаться на игровом поле. Одной пишешь: занимай территорию и береги энергию. Другой: ищи соперника и атакуй. Нажимаешь кнопку и наблюдаешь, во что превратятся эти инструкции.
Так появилась PromptCore Arena — локальная игра с интерфейсом в браузере. Прототип я собирал вместе с Codex 3–4 октября 2026 года. Codex здесь работает в двух ролях: помогает писать игру и отдельно запускает модели, которые принимают решения за бойцов.
Первые бои оказались менее разнообразными, чем хотелось. Два разных промпта — текстовые инструкции модели — ещё не обещание двух разных стилей игры. Пришлось разбираться, какие решения вообще выгодно принимать на карте и что именно модель понимает о происходящем.
Сначала — бой за 30 секунд
Запись настоящего матча показывает все 40 ходов. Я убрал ожидание ответов моделей и ускорил воспроизведение до 30 секунд. Это монтаж повтора: живой матч идёт медленнее.
В записи обеими сторонами управляет gpt-6-luna с низким уровнем рассуждения. У бойцов разные инструкции. Вектор выигрывает по контролю территории 18:1, при оставшемся здоровье 7:4. Фантом собрал больше энергии — 22 против 18, — но это не стало победой.
Такой счёт описывает один матч. По нему нельзя выбрать «лучший промпт»: для этого нужны повторные бои на разных картах и со сменой стартовых позиций.
Что здесь делает игрок
Перед стартом можно задать имена и стратегии бойцов, выбрать модель и уровень рассуждения — настройку усилий, которые модель тратит на решение. Во время боя стратегии уже не редактируются. Дальше игра идёт сама.
На поле 12 × 12 клеток есть стены, батареи с энергией и зона контроля. Победить можно, уничтожив противника. Если оба дожили до лимита в 40 ходов, сравнивается результат по правилам игры: сначала очки контроля, затем здоровье и собранная энергия.
Каждый ход оба бойца выбирают действие: шагнуть на соседнюю клетку, выстрелить, защититься, просканировать окрестности, поставить ловушку или подождать. Решения применяются вместе. Поэтому выстрел в клетку, где только что стоял противник, может уйти в пустоту: тот успел переместиться.
Энергия ограничивает дорогие действия. Например, выстрел стоит три единицы. Батарея подбирается автоматически при входе на клетку и исчезает. Если запас уже полный, дополнительной энергии боец не получит. Перемещение и ожидание бесплатны, но стояние на месте само по себе ничего не заряжает.
Как текст превращается в ход
Вокруг модели работает обычная программа — игровой движок. Он хранит карту, здоровье, энергию и правила. На каждом ходу происходит следующее:
- Движок собирает сведения, доступные конкретному бойцу.
- Добавляет его стратегию, заметку из предыдущего хода и список допустимых действий.
- Запускает отдельный вызов
codex execдля каждого бойца. - Получает выбор, короткий комментарий и обновлённую заметку.
- Проверяет действия и рассчитывает следующий ход.
Ответ приходит в JSON — текстовом формате с именованными полями. В поле choice находится выбранный вариант из готового списка, в reason — короткое объяснение намерения, в memory — заметка для следующего хода. Модель не меняет здоровье и координаты напрямую.
Здесь нет подключения игры как инструмента через MCP — протокол доступа агентов к внешним инструментам. Игра сама обращается к Codex и разбирает ответ. Инструменты и пользовательские интеграции в этих вызовах отключены.
Промпт задаёт приоритеты: преследовать соперника, экономить энергию, удерживать зону. Допустимость шага определяет код. Даже инструкция «телепортируйся за спину врагу» не добавит такого действия в механику.
Как модель видит карту
Красивую сцену смотрю я. Модель получает текстовое описание состояния: свою позицию и ресурсы, видимые клетки, доступные цели и действия.
Обычная видимость ограничена тремя шагами по горизонтали и вертикали в сумме. Получается ромб вокруг бойца. Сканирование временно расширяет его. Увиденные стены остаются в памяти карты, а текущую позицию противника за пределами видимости игра не раскрывает. Положение зоны контроля и общий счёт известны обоим.
Это существенная часть эксперимента. Когда бот делает странный ход, нужно проверять, что он в тот момент видел. Зрителю с полной картой некоторые решения кажутся очевидными только потому, что у него больше информации.
Почему разные стратегии играли похоже
Я начал с вполне зрительского вопроса: почему бойцы ведут себя почти одинаково? Разбирать пришлось сразу три вещи.
Выгодные действия. Если карта поощряет сидение в одной точке, фразы про агрессию и хитрость мало что меняют. В новой версии зона контроля переезжает каждые восемь ходов; о следующей позиции игра предупреждает заранее. Батареи обновляются волнами каждые шесть ходов. Получается выбор: идти за очками, пополнять запас или ловить противника по пути.
Допустимые действия. В одном из ранних испытаний модель пыталась ходить слишком далеко и в стены. Движок такие решения отклонял. После этого вместо свободного сочинения команды модель стала выбирать из списка разрешённых вариантов. В полном проверочном матче получилось 80 допустимых решений из 80 — по два на каждый ход.
Навигация. Законный шаг ещё не обязательно полезный. В том же матче бойцы застревали у препятствий, а счёт контроля остался 0:0. Поэтому я добавил подсказки пути: программа находит следующий шаг к зоне, батарее или позиции для выстрела по уже известной части карты. Неизвестные клетки пока считает проходимыми. Цель и действие по-прежнему выбирает модель.
В следующем проверочном матче на той же карте счёт контроля стал 21:0: 49 перемещений, девять подборов батарей и два попадания. Это другой матч, не тот, что показан в ролике. Все 80 решений снова прошли проверку правил.
Этот результат показывает, что бойцы смогли добраться до целей в конкретном прогоне. Он ещё не доказывает баланс игры или стабильное преимущество одной стратегии. Во время разработки менялись правила, представление действий и навигационные подсказки; ответы модели тоже могут различаться от запуска к запуску.
Чтобы за этим хотелось наблюдать
У игры с моделями появилась неожиданно заметная пауза: нажал «Запустить бой» — и ждёшь. Без обратной связи непонятно, идёт работа или всё сломалось.
Теперь на самих бойцах видна анимация ожидания решения, а в интерфейсе — статус и время ожидания. Можно читать короткие комментарии к действиям. Это объяснения, которые модель специально возвращает для зрителя; внутренний процесс рассуждения игра не показывает.
Остальное я постепенно убирал с экрана. Карточку стратегии объединил со здоровьем и энергией. Для сторон закрепил два цвета, чтобы они отличались от зелёного поля. Аватар в карточке и на сцене стал одним и тем же. Выбор карты переехал к карте.
Полоса перемотки тоже мешала во время живого боя: выглядела как управление происходящим, хотя нужна для просмотра уже записанных ходов. Теперь она появляется после окончания или остановки матча. К шагам, выстрелам и подбору энергии добавлены звуки, которые можно выключить.
Как попробовать
На сайте проекта есть ролик и инструкция запуска. Сама игра запускается на своём компьютере. Нужны Node.js 22 или новее и установленный Codex с выполненным входом в аккаунт.
git clone https://github.com/dapi/promptcore-arena.gitcd promptcore-arenanpm start
Команда покажет локальный адрес, который нужно открыть в браузере. Поле и движок работают локально, а вызовы модели обращаются к сервису Codex: интернет и доступный лимит запросов всё равно нужны. Список моделей приложение получает из установленного Codex при старте.
Для первого сравнения я бы оставил одну модель и одну карту, поменял только инструкции, а затем повторил бой со сменой стартовых позиций. Если одновременно менять модель, карту и стратегию, объяснить разницу в результате будет трудно.
Что я вынес из прототипа
Прежде чем ещё раз переписывать стратегию, полезно посмотреть на три вещи: какую информацию получила модель, какие действия ей доступны и за что игра выдаёт награду. В PromptCore Arena ошибки возникали на каждом из этих уровней.
У движка есть автоматические проверки, а записанные матчи можно воспроизвести по сохранённым решениям. Это помогает проверять соблюдение правил. Интересность боя приходится оценивать отдельно — глядя, возникают ли у бойцов разные решения и есть ли за чем следить зрителю.
Теперь хочется попробовать стратегии читателей. Например, сможет ли охотник за соперником обыграть аккуратного сборщика очков, если оба умеют обходить стены?
Термины
- DOS — семейство операционных систем для персональных компьютеров; здесь речь об эпохе MS-DOS.
- Redcode — язык команд, на котором пишут программы-бойцов для Core War.
- Промпт — текстовая инструкция модели; здесь она задаёт стратегию бойца.
- Игровой движок — программа, которая хранит состояние матча и применяет правила.
- Codex — инструмент для работы с моделями; в этом прототипе его команда
codex execиспользуется для получения решения на один ход. - Уровень рассуждения — настройка усилий модели при подготовке ответа.
- JSON — текстовый формат структурированных данных с именованными полями.
- MCP (Model Context Protocol) — протокол подключения инструментов и источников данных к агентам; для управления бойцами здесь не используется.
- Node.js — среда выполнения JavaScript, в которой запускается локальный сервер игры.
Источники и границы кейса
Материал основан на разработке прототипа 3–4 октября 2026 года и сохранённых проверках проекта. Код игры и документация доступны в репозитории PromptCore Arena. Точные механики описаны в правилах, испытания — в журнале проверок, происхождение ролика — в описании записи.
Это рассказ о создании прототипа и нескольких наблюдаемых матчах. Систематического сравнения моделей и статистического исследования качества промптов в нём нет.
Хотите внедрить это у себя?
Помогаю командам перейти на агентную разработку: как советник, через обучение команды или внедрение изменений с проверкой эффекта по данным. Короткие заметки между статьями выходят в Telegram-канале.