プレビュー: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ターン目に橋でスケルトン伏兵が湧き、『ヘルム峡谷』では包囲の途中で水門が爆破されます。 ### 人間はコーチとして参加する プレイするのはAI。だけど人間はゲームのあらゆる場面に絡んでくる──しかも、まったく別の二つの形で。 **試合前、あなたは戦術手帳を選ぶ。** `strategies/` ディレクトリはあなたが少しずつ貯めていく"流派"のライブラリ──猛攻、峠の死守、VIP護送、あなたが実戦で掴んだ型、何でも入る。各ファイルはmarkdownで、優先目標、地形ごとの読み、踏み込むタイミングと引くタイミングが書き込まれています。シナリオに合う一冊を選ぶと、エージェントは開戦時にそれを読み込み、"主将の意図"として試合中ずっと心に留めてくれる。 つまりこれは **人間が書き、人間が維持するAI用の虎の巻** です──あなたの手で手入れし、あなたの直感で磨く。あなたが書いた手帳はずっとあなたのもので、対局を見るたびに書き直していい。次にその手帳を手にしたエージェントは、あなたがそこまでに積み上げた書き込みをすべて受け継ぎます。 **試合中は、リアルタイムで横から口を出せる。** TUIで盤面が進むのを眺めて、チャンスが見えたら──あるいは事故が起きそうになったら──Coachパネルに一言打ち込む。エージェントは次の自分のターンの頭でそれを読み、従うかどうかを自分で判断します。 > *「右翼から騎兵をねじ込め」* > > *「三蔵が突出しすぎ──寺まで下げろ」* ### 教訓(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 ── プレイヤーごとにクライアント一本(同じノーパソでもOK) uv run silicon-join --url http://127.0.0.1:8080/mcp/ ``` ロビーで片方が部屋を立ててシナリオを選び、もう片方が参加。両方がReadyを押すと試合開始。同じマシンで Claude vs Claude(あるいは Claude vs Grok)を観戦したい時は、クライアントを二本並べて開いて、それぞれ別のプロバイダを選びましょう。エンジンだけさくっと試したい時は、どちらかを **Random** にすれば、LLMコスト0、判定0で遊べます。 ### 自作シナリオを書く 各シナリオは、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` | エージェント視点で見た典型的な1ターン: ``` 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コスト付きの特殊技、インベントリとアイテム交換、ダメージタイプ/タグのマトリクス**。AIエージェントに一度に背負わせるものは慎重に増やしたいので、これらのノブは順次テストしながら開放していきます。乞うご期待。 エンジンはロード時にスキーマを検証します。未知のフィールドは静かに無視されず、しっかりエラーで落ちる──作者は自分の新しい設定が効いているかを必ず把握できる。 ### モデル間対戦 全プロバイダは同じアダプタプロトコルの裏に差し込まれています。試合ごとに **プレイヤー各自が** 自分のプロバイダを選びます: - **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) ── 1ターンの中で、最初から最後まで何が起きているか --- ## 参加する シリコン・パンテオンはまだ若くて、勢いよく育っているプロジェクトです。参加方法は三つ: - **⭐ リポジトリにスターを。** プロジェクトが刺さったら、スターは「続けろ」と伝える一番はっきりしたシグナルです。 - **🗡️ シナリオPRを投げる。** `games/` 以下に新しいフォルダを作って、`config.yaml`(必要なら `rules.py` も)を入れて、プルリクを送ってください。本当にアツい歴史戦や二次創作の名シーンは、まだ誰も書いていないものばかり──それを書くのはあなたかも。 - **⚔️ ホストサーバーで一試合。** [`game.siliconpantheon.com`](https://game.siliconpantheon.com) で遊んで、リプレイをシェアしてください──一試合ごとに教訓ライブラリが少しだけ鋭くなります。 バグ報告、機能のアイデア、設計議論はIssuesでどうぞ。 --- ## ライセンス [Apache-2.0](LICENSE) で公開しています。コントリビュートも同ライセンス──PRを送った時点で、その内容をApache-2.0の下で提供することに同意したものとみなされます。