Превью: Claude Haiku 4.5 против GPT-5.4-codex в битве при Камлане.
Представь Fire Emblem, Advance Wars, Tactics Ogre — всю родословную тактических RPG, только ужатую. Каждый агент ведёт небольшую армию: воины, маги, лучники, кавалерия и герои, уникальные для сценария. Юниты топают по сетке, обмениваются ударами и ломятся к условию победы, которое каждый раз своё. Всё ещё абстрактно? **Представь шахматы — только доска побольше, фигуры страннее, у каждого сценария есть лор, а по углам с обеих сторон сидит по живому тренеру и что-то выкрикивает.** ### Сценарии Каждая партия — это сценарий ручной работы: бой, выхваченный из истории, фэнтези или поп-культуры, со своим полем, составом армий и условием победы. Сэмпл того, что лежит в коробке: - **Фермопилы (Thermopylae).** Леонид со спартанцами до заката держит узкий проход против Ксеркса. Синие уступают числом примерно десять к одному — единственные союзники — скалы и теснина. - **Хельмова Падь (Helm's Deep).** Защитникам Рохана нужно пережить ночь на Глубинной стене, пока урук-хаи прут по мосту. Подкрепление подойдёт на рассвете — если будет кому его встречать. - **Долгая ночь (The Long Night).** Защищай Джона Сноу, убей Короля Ночи. Красные — армия мёртвых: каждый упавший герой пополняет их ряды. - **Астрономическая башня (Astronomy Tower).** Продержать Гарри Поттера в живых, пока не подойдёт Орден Феникса. У Драко с Пожирателями смерти — узкое окно, чтобы добить его первыми. - **Битва при Арракине (Battle of Arrakeen).** Пол Муад'Диб побеждает, если штурмует крепость Харконненов, которую держит элита сардаукаров барона. И сама пустыня — тоже враг. - **Маринфорд (Marineford).** Прибрежная разборка на три стороны, и у каждой цели тикает свой короткий таймер. Условия победы далеко не ограничены «перебей всех»: довести VIP до клетки, удержать территорию N ходов, дотянуть до подкрепления, взять вражескую крепость, не дать погибнуть именованному юниту. Сценарии умеют выстреливать сюжетные события прямо посреди боя и вызывать подкрепление по скрипту — в «Путешествии на Запад» на 10-м ходу на мосту выскакивает засада скелетов, в «Хельмовой Пади» посреди осады взрывают водосточный проход. ### Люди в роли тренеров Играет ИИ. Но люди задействованы во всём — и в двух совершенно разных режимах. **Перед матчем ты выбираешь боевой учебник.** Папка `strategies/` — твоя растущая библиотека доктрин: штурм напролом, оборона у теснины, эскорт VIP — любые паттерны, которые ты подмечал в боях. Каждый файл — markdown с приоритетами целей, подсказками по рельефу и тем, когда давить, а когда отступать. Подбираешь подходящий под сценарий, агент в начале партии читает его как «замысел командира» и держит в уме весь бой. По сути это **каталог уроков для ИИ, написанный людьми** — ты его ведёшь сам, оттачиваешь собственным чутьём. Учебник, который ты написал, останется твоим навсегда; каждый просмотренный бой — повод внести правку. Следующий агент, взявший в руки этот учебник, унаследует всё, что ты в нём накопил. **В бою можно вмешиваться в реальном времени.** Смотришь в TUI, как разворачивается действие. Видишь шанс — или грядущую ошибку — бьёшь сообщение в панель Coach. Агент прочитает его в начале следующего хода и сам решит, слушать или нет. > *«пусти конницу по правому флангу»* > > *«Tang Monk слишком вперёд — оттяни его к храму»* ### Уроки (Lessons) После каждого матча агент пишет собственный разбор: что сработало, что провалилось, что бы сделал иначе. Эти размышления сохраняются как markdown-*уроки* и подаются в следующие матчи как контекст. **Твой агент становится острее от партии к партии — не тонкой настройкой весов, а перечитыванием собственного дневника.** --- ## Как играть ### Играть прямо сейчас — хостовый сервер Хостовый сервер [`game.siliconpantheon.com`](https://game.siliconpantheon.com) уже крутится. Самый быстрый путь: ставишь клиент, запускаешь — готово. ```bash curl -LsSf https://astral.sh/uv/install.sh | sh # если нет uv uv sync --extra dev uv run silicon-join ``` При первом запуске TUI проведёт тебя через выбор провайдера — Claude (использует твой логин Claude Code, **API-ключ не нужен**), OpenAI или xAI (и API-ключи, и действующие подписки Claude Code / Codex — всё в дело) — и отправит в лобби. **Несколько комнат уже ждут тебя.** На хостовом сервере постоянно держится пара открытых комнат, чтобы новичку не нужно было искать напарника, чтобы начать, — выбираешь открытую комнату, сторону, провайдера, и бой начинается. Можешь и сам поднять комнату и ждать, пока кто-нибудь зайдёт помериться силами. ### Поднять свой сервер Хочешь всё крутить у себя — на одной машине или на LAN-пати из нескольких? Поднимаешь сервер, направляешь на него два клиента. ```bash # Терминал 1 — старт сервера uv run silicon-serve # Терминалы 2 и 3 — по клиенту на игрока (можно на одном ноуте) uv run silicon-join --url http://127.0.0.1:8080/mcp/ ``` Из лобби один игрок создаёт комнату и выбирает сценарий; второй — заходит. Оба жмут Ready, и матч стартует. Хочешь посмотреть Claude vs Claude (или Claude vs Grok) на своём же ноуте — открой два клиента рядом и выбери разные провайдеры. А просто прогнать движок без затрат — бери **Random** с одной или обеих сторон: LLM не расходуется, судить никто не будет. ### Написать свой сценарий Каждый сценарий — это папка с YAML-конфигом и опциональными Python-правилами. Полный гид — в [`docs/AUTHORING_SCENARIOS.md`](docs/AUTHORING_SCENARIOS.md). PR-ы со сценариями — это первое, что мы смотрим по утрам. --- ## Дизайн и архитектура Самое интересное в устройстве — под капотом. Вот ментальная модель. ### Агенты играют через инструменты, а не пиксели Агенты не видят доску как картинку и не двигают курсор. Игра выставляет наружу компактный набор **MCP** (Model Context Protocol) инструментов — около 14 штук — и агенты наблюдают и действуют исключительно через их вызовы: | Только чтение | С побочным эффектом | |---|---| | `get_state`, `get_unit`, `get_legal_actions`, `simulate_attack`, `get_threat_map`, `get_history`, `get_coach_messages`, `describe_class`, `describe_scenario` | `move`, `attack`, `heal`, `wait`, `end_turn` | Типичный ход глазами агента: ``` agent > get_state() → { turn: 4, units: [...], last_action: {...} } agent > get_legal_actions(u_b_knight_1) → { moves: [...], attacks: [...] } agent > simulate_attack(u_b_knight_1, u_r_cavalry_2) → ожидаемый урон 7, контратака 3 agent > move(u_b_knight_1, {x: 5, y: 3}) agent > attack(u_b_knight_1, u_r_cavalry_2) ... ходит остальными своими юнитами ... agent > end_turn() ``` Единственный арбитр состояния игры — MCP-сервер. Любое нелегальное действие отклоняется на месте, с причиной — никаких галлюцинированных ходов, никаких молчаливых падений. ### Сценарии — это плагины Сценарий самодостаточен: папка в `games/`, а в ней — всё, что нужно для одной партии. Авторы могут вводить новые классы юнитов, новые типы местности (с классо-специфическим изменением стоимости хода и эффектами внутри хода), новые условия победы через небольшой DSL, сюжетные события и произвольные Python-крюки для правил. ```yaml # games/journey_to_the_west/config.yaml (выдержка) terrain_types: river: { passable: false, glyph: "~", color: blue } swamp: { move_cost: 2, heals: -2, glyph: ",", color: magenta } temple: { defense_bonus: 2, heals: 3, glyph: "T" } unit_classes: tang_monk: display_name: Tang Monk hp_max: 16 atk: 2 defense: 2 move: 3 tags: [vip, monk] # плюс кадры арта, описание, способности… win_conditions: - { type: reach_tile, unit: u_b_tang_monk_1, tile: {x: 13, y: 4} } - { type: eliminate_all_enemy_units } - { type: protect_unit, unit: u_b_tang_monk_1 } # погиб — проиграл rules_plugin: rules.py # Python-крюк — например, засада скелетов на 10-м ходу ``` В движке лежат ещё не включённые механики — **специальные способности с расходом MP, инвентарь и обмен предметами, матрица типов урона и тегов**. Всё уже написано, но текущие сценарии их нарочно не используют: мы осторожно дозируем нагрузку на ИИ-агентов, и эти вентили будем открывать постепенно, по мере тестирования. Оставайтесь с нами. Движок валидирует схему при загрузке. Неизвестные поля валят громко, никогда тихо — так автор сценария всегда знает, подхватилась ли его новая настройка. ### Матчи между разными моделями Все провайдеры сидят за одним и тем же протоколом адаптера. Каждый *игрок* выбирает своего провайдера отдельно на каждый матч: - **Anthropic** — Claude Opus / Sonnet / Haiku, через твою подписку Claude Code (**API-ключ не нужен**) *или* прямой ключ Anthropic API - **OpenAI** — GPT-5, GPT-5-mini, через API-ключ *или* подписку Codex - **xAI** — Grok-4, Grok-3 - **Random** — без LLM, пригодится для тестов движка и авторинга Claude Sonnet (тренер — ты) против Grok-4 (тренер — твой друг), поле боя — Хельмова Падь. Ради такой картины мы это и делали. Другие провайдеры — Google Gemini, Ollama, AWS Bedrock и прочие — в роудмапе, но пока не реализованы. Каждый адаптер — один и тот же протокол `ProviderAdapter`, так что добавление — это отдельный чистый PR. **Контрибуции очень приветствуются.** ### Экономные промпты Инварианты сценария (статы классов, таблица местности, условия победы, начальная доска, боевой учебник, прошлые уроки) уходят **один раз** в **кешируемом** системном промпте. Попоходовые промпты — небольшая дельта: только то, что реально изменилось с последнего хода агента. 30-ходовая партия остаётся дешёвой даже на передовых моделях. --- ## Копнуть глубже - [`GAME_DESIGN.md`](GAME_DESIGN.md) — полный справочник по правилам и механикам - [`docs/AUTHORING_SCENARIOS.md`](docs/AUTHORING_SCENARIOS.md) — как написать собственный бой - [`docs/SCENARIOS.md`](docs/SCENARIOS.md) — заметки по дизайну встроенных сценариев - [`docs/USAGE.md`](docs/USAGE.md) — справка по CLI - [`docs/AGENT_FLOW_WALKTHROUGH.md`](docs/AGENT_FLOW_WALKTHROUGH.md) — что происходит внутри одного хода, от начала до конца --- ## Участвовать Silicon Pantheon ещё молод и быстро растёт. Три способа включиться: - **⭐ Поставь звезду.** Если проект зацепил — звезда это сигнал, что надо продолжать строить. - **🗡️ Пришли сценарий.** Создай папку в `games/`, положи туда `config.yaml` (и опциональный `rules.py`), открывай PR. Самые крутые исторические битвы и сцены из фандома — те, что ещё никто не написал. Вполне можешь написать ты. - **⚔️ Сыграй матч** на хостовом сервере [`game.siliconpantheon.com`](https://game.siliconpantheon.com) и поделись реплеем. Каждый матч чуть-чуть точит нашу библиотеку уроков. Баги, идеи фич, обсуждения дизайна — в Issues. --- ## Лицензия [Apache-2.0](LICENSE). Контрибуции принимаются на той же лицензии — отправка PR означает, что ты согласен лицензировать свой вклад по Apache-2.0.