パブリックプレビュー 新機能:UI と入力 · ゲームプレイ MOD · ゲートウェイ · MCP

あらゆる LLM Agent に Warcraft III の AI を自律的に設計させる

War3AI はゲームを Agent のための API に変えます。50 ms ごとにマップ全体の完全な状態をプッシュし、セマンティックコマンドは約 1 フレームで反映、すべてにレシートと理由コードが返ります。ドキュメントを Claude、GPT、Gemini、Qwen などの Agent に渡せば、Bot を書き、対戦に出し、結果を読み取り、自ら改善していきます。

Windows 10/11 · Warcraft III 1.27a · start.bat をダブルクリック、あとは自動でインストール

agent-session inst 20 1.27 2×
あなた

ヒューマン。ヒーローの HP が 40% を切ったら本拠地に撤退。夜になったら、兵が 3 体以上いれば最寄りのクリープキャンプを攻撃。

llms.txt と api.json を読み、night_raider.py を生成しました。使っているのは検証済みの API 8 個だけです。

night_raider.py api.json BOT_HANDBOOK.md
from openwar3 import Bot

class NightRaider(Bot):
    def on_tick(self, g):                     # 毎秒約 5 回
        halls = g.my_buildings({"htow", "hkee", "hcas"})
        army, camps = g.my_army(), g.creeps()
        if not halls:
            return
        home = halls[0]
        with g.batch():                       # このティックのコマンドをまとめて送信
            for h in g.my_heroes():
                if h.hp < h.hp_max * 0.4:     # ヒーローの生存
                    g.move(h, home.x, home.y)
            if g.is_night() and len(army) >= 3 and camps:
                camp = min(camps, key=lambda c: g.path_distance(home, c) or 1e9)
                g.attack_move(army, camp.x, camp.y)   # 夜にクリーピング

    def on_event(self, g, ev):
        if ev.kind == "production.done" and ev.owner == g.me():
            print("完了", ev.done_code, f"{ev.value:.1f}s")
ミニマップ 21:40 · 夜
last_seen · 42s 前 walk_path → attack_move
イベントストリーム ライブ
  1. production.donehbar → hfoo · 14.9s
  2. order.changedHamg → attack
  3. damagehfoo → ngno −14 · normal
  4. receiptattack_move ×5 ✓ 受理 · 6 µs
接続済み スナップショット #18342 · 50 ms このティック 12 件のコマンド · 1 バッチで送信 fair=True

コードを書ける、または JSON を出力できるあらゆるモデルと Agent に対応

Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama
50 ms
全マップ状態のプッシュ周期
16 ms まで調整可能。クライアントの読み取りは 1 回約 0.4 ms
~1 フレーム
コマンド反映
1 件あたりゲームスレッドで 4~8 µs
3,000 回/秒
コマンドスループット
6 プロセス並行、待ち時間の中央値 0.06 ms
103
個の API
98 個は内部経路を実機検証済み
1,024
体のユニットの完全な状態
HP・マナ、オーダー、攻撃中の相手、クールダウン、バフ、インベントリ

数値は 1.27 のテストインスタンスでの実機測定(2026-09-23 / 24)によるものです。測定方法は プラットフォーム · パフォーマンス を参照してください。

ワークフロー

ひと言から、戦える AI へ

プログラミングができなくても大丈夫。あなたはどう戦ってほしいかを伝えるだけ。コードを書き、対戦に出し、結果を見て、満足いくまで直すのは Agent の仕事です。

  1. 01

    普段の言葉で戦術を説明

    「ヒューマンで、まずアークメイジを出す。兵舎 2 つでフットマンとライフルマンを出す。12 体たまったら相手の拡張を攻める。ヒーローの HP が 30% を切ったら撤退。」

  2. 02

    Agent がドキュメントを読み、Bot を書く

    llms.txt、api.json、マニュアルを渡します。API はゲーム内の呼び方(4 文字コード、スキル名)を使っているので、モデルは読めばすぐに理解できます。

  3. 03

    1 コマンドで対戦へ

    tools/play.py がゲームの起動、注入、ゲーム開始、Bot の起動まで行います。ゲーム速度、種族、難易度、フェアモードはすべて引数で指定できます。

  4. 04

    レシートとイベントを読み、自ら修正

    すべてのコマンドにレシートと理由コードがあり、イベントストリームにはすべてのダメージ、キル、生産が記録されます。Agent はそれをもとに問題を特定し、コードを直し、もう 1 戦します。

ステップ 2 〜 4 は閉じたループです。レシートもイベントも構造化データなので、Agent は画面を見なくてもどこに問題があるかがわかります。 Agent による自律反復
機能

Agent のために設計された API

観測は待ち時間ゼロ、コマンドにはレシート、結果にはイベント。モデルに必要なのは、まさにこうした構造化され、検証でき、自己修正につながるフィードバックです。

完全なワールドステートを待ち時間ゼロで

16 プレイヤーの資源と人口。最大 1024 ユニットの HP・マナ、オーダー、攻撃中の相手、スキルのクールダウン、バフ、インベントリ。地面のアイテム、樹木、生産キュー、昼夜。ランタイムが共有メモリにプッシュし、1 回の読み取りは約 0.4 ms。

セマンティックコマンド、すべてにレシート

移動、攻撃、採集、建設、訓練、スペル使用、スキル習得、蘇生、アイテム使用、購入……受理されたかどうか、されなかったならなぜか、同じフレームでわかります。

イベントストリーム

ユニットの出現 / 死亡、オーダー変更、ヒーローのレベルアップ、アイテムの出現。エンジンレベルの 1 回ごとのダメージ(発生源、攻撃タイプ、アーマー適用前のダメージ)と生産完了。相手のものも含みます。

バッチを 1 フレームで実行

with g.batch() 内のコマンドは 1 バッチにまとめて送信されます。実測で 8 件の移動が 68 ms から 6.5 ms に短縮。

戦闘計算と経路探索

stats / time_to_kill はゲーム付属の相性表とリアルタイムのテクノロジーを使用。path_distance / walk_path はエンジンの地形グリッド上で A* を実行します。

フェアモード

視界内のユニット、アイテム、生産、イベントだけが見えます。last_seen が霧の中の敵を記憶します。アリーナのルールもこれと同じです。

モデルのためのドキュメント

api.json はコードから生成され、各 API に実測ステータス、レイテンシ区分、内部メカニズムを記載しているので、モデルが推測する必要はありません。llms.txt / llms-full.txt で Agent はサイト全体のドキュメントを一度に読めます。

アーキテクチャ

ひとつのランタイム、ひとつのプロトコル、どんな AI でも

ランタイムはオリジナルのゲームに注入され、ゲームスレッド上でワールド全体を収集し、コマンドを実行し、結果を返します。あなたの AI は、バージョン付きの W3P プロトコルを通じてランタイムと対話します。Python SDK でも、共有メモリを読み書きできる任意の言語でも構いません。

あなたの Agent / Bot
どんなモデルでも、どんな言語でも
Claude CodeCursorChatGPTQwen ローカルモデルPython Botリファレンス AI
意思決定
import openwar3 · または WebSocket / JSON ゲートウェイ · MCP
OpenWar3 SDK
Python · openwar3
Game / Botスナップショット w3worldファストレーン w3fastcombat 戦闘計算pathing 経路探索w3claim 調停canvas キャンバスjass チャネルschemes スキーム
インターフェース
50 ms ごとにワールドをプッシュ · コマンドは約 1 フレームで反映 · すべてにレシート
W3P プロトコル v2
共有メモリ · ゼロコピー · バージョン付き
War3WorldWar3EventsWar3MapWar3TreesWar3Fast コマンドレーンWar3Canvas キャンバス
プロトコル
ゲームスレッドでバッチ実行 · 1 件 4~8 µs · 1 回の処理予算 4 ms
W3 Runtime
ゲームスレッド上で動作
ワールドステート発行イベントストリームセマンティックコマンド実行クエリ権限と視点自前描画キャンバスJASS 呼び出しバージョン対応ヘルスチェックとサーキットブレーカー
ランタイム
War3.exe 1.27 · オリジナルのゲーム。ディスク上のファイルは一切変更しません
コード

書き味は、
部隊を指揮するように

ファサードはたった 2 つのクラス。Bot がティックを担当し、Game が観測と操作を担当します。ユニットは 4 文字コード、スキルはオーダー名で、ゲーム内の呼び方と同じです。

  • 読めないときは None、0 ではない
  • コマンドには 1 体のユニットもリストも渡せる
  • Shift キュー:queue='after'
  • レシートの受理 ≠ 成功:効果はスナップショットとイベントで確認
メンタルモデル:スナップショット、コマンド、イベント、ティック
from openwar3 import Bot

class FocusFire(Bot):
    """最も近い敵ではなく「最も早く倒せる」敵に集中攻撃し、瀕死の兵は本拠地へ下げる。"""

    def on_tick(self, g):
        army, halls = g.my_army(), g.my_buildings()
        foes = [e for e in g.enemies(fighters_only=True) if e.visible_to(g.me())]
        if not army or not foes or not halls:
            return
        home = halls[0]
        # 相性表、アーマー、攻撃/防御アップグレード、目標のリアルタイム HP を考慮
        target = min(foes, key=lambda e: g.time_to_kill(army, e) or 1e9)
        with g.batch():                                   # 数十件のコマンドでもゲームスレッドを待つのは 1 回
            for u in army:
                if u.hp < u.hp_max * 0.35:
                    g.move(u, home.x, home.y)             # 瀕死のユニットを後退
                elif (t := g.current_target(u)) is None or t.handle != target.handle:
                    g.attack(u, target)                   # まだ攻撃していないユニットにだけ命令
完全に動くバージョンは brains/examples/micro_bot.py(集中攻撃、瀕死ユニットの後退、ヒーローの生存、夜のクリーピング)を参照してください。
AI Agent

LLM を Warcraft につなぐ 6 つの方法

5 つは今日から使え、1 つは開発中です。これらは排他的ではありません。同じゲームの中で、Agent が書いた Bot が実行し、ローカルモデルがアドバイザーを務め、別のモデルがユニットのセリフを担当し、さらにあなたが Claude Code からいつでもひと言指示を挟む、といった組み合わせも可能です。

オフライン · コードを書く

Agent が Bot を書く

Claude Code、Cursor、Codex、ChatGPT……がドキュメントを読んで bot.py を書き、対戦に出してレシートとイベントを見て、また直します。最も手早く始められる方法で、プログラミングの知識は不要です。

0 行 あなたが自分で書くコード
詳しく見る
オンライン · アドバイザー

LLM を戦略アドバイザーに

数ゲーム秒ごとに局面の要約をモデルに渡し、厳密な JSON を受け取ります。診断、ワーカー配分、優先して出すもの、この 1 分間の構え。ルール層がホワイトリスト + クランプを通してから実行します。

1.09 s ローカル Qwen3.6-35B-A3B の中央値
詳しく見る
オンライン · キャラクター

ユニットにしゃべらせる

任意のユニットが任意の役柄で頭上に吹き出しを出し、ローカル LLM のストリーミング出力とつながります。農民の井戸端会議、ヒーローの掛け合い、戦況の実況。

0.3 s 最初のトークンまでの遅延(ローカルモデル)
詳しく見る
オンライン · ツールとして

LLM がツールを直接呼び出す

Claude Code、Claude Desktop、または MCP に対応した任意のクライアントにサーバーを 1 つ登録するだけで、LLM が局面を見る、コマンドを出す、画面上でプレイヤーに話しかける、カードを出してプレイヤーに尋ねる、スクリーンショットで画面を見る、といったことを直接行えます。先にコードを書く必要はありません。

10 個のツール、1 コマンドで登録
詳しく見る
オンライン · どの言語でも

ゲートウェイで直接接続

WebSocket / JSON ゲートウェイが公開 API をそのまま外に出します。JS、C#、Go、ブラウザのページ、別のマシン上のプログラムから、局面を見る、コマンドを出す、イベントを購読する、ゲームにボタンを置く、といったことができます。選手ロールは自分だけを指揮し、自分の視界だけを見ます。

+1 ms ファストレーンに上乗せされる遅延
詳しく見る
近日公開 · 直接対戦

Agent 自らが出陣

アリーナ:レフェリーが視界で観測をフィルタリングし、ユニットの所有権をチェックし、ゲーム時間に合わせてティックを刻み、2 つの外部 AI が同じゲームで勝敗を決めます。どの言語、どのモデルでも直接対戦できます。

P6 アリーナフェーズ
詳しく見る
ゲームプレイ拡張 NEW

対戦だけじゃない。ゲームの中に自分だけの遊びをつくる

画面に自分だけの UI を描けば、描いたボタンはクリックでき、ホットキーにも反応します。マップ作者が使える関数をすべて外部から呼び出し、RPG マップでは一緒に戦ってくれる AI の仲間を連れて行けます。新しい遊び方を丸ごと MOD として書けば、AI スキームと同じようにワンクリックで切り替え、気軽に共有できます。

ランタイムによる自前描画

キャンバス

テキストボックス、パネル、プログレスバー、画像、地形に沿った円、矢印付きのルート。ユニットに追従し、CJK フォント、角丸、半透明も自由自在。描くのは自分の画面だけなので、マルチプレイでも安全です。

0.3 ms 1 フレームあたりのコスト(要素 9 個)
詳しく見る
1291 個の関数

JASS チャネル

マップ作者が使える関数を名前で直接呼び出せます。ユニット生成、エフェクト、パネル、ダイアログ、サウンド、カメラ、霧……Farsight コンソール、コマンドライン、HTTP、Python のどれからでも使え、チャットコマンド、ボタンメニュー、矢印キーにもつなげられます。

94 個の関数を 1 つずつ実機で効果確認
詳しく見る
RPG / カスタムマップ

AI コンパニオン

あなたについて来て、狩りを手伝い、HP が減ったら回復し、話し相手にもなります。セリフはローカル LLM につなげられます。同盟、自軍、マップのユニットを引き継ぐ、会話のみ、の 4 つのモード。カスタムユニットの名前はマップから直接読み取ります。

37 / 38 の RPG マップでカスタムユニット名を読み取り
詳しく見る
切り替え · 共有 · インポート

AI スキーム

1 つの AI に 1 つのフォルダー。ワンクリックで切り替えられ、対戦中のゲームも別の AI に引き継げます。zip をエクスポートすればそれが共有。他人のスキームは信頼を確認してから実行し、スキームごとの戦績は自動で集計されます。

zip エクスポートがそのまま共有、インポート前に信頼を確認
詳しく見る
クリックできる · キーで操作できる

UI と入力

描いたボタンや選択カードはクリックでき、ホバーで自動的にハイライトします。ホットキーの登録、地面のクリックによる位置指定、マウスが指している場所の取得も可能。プレイヤーが誰を選択したか、どのスキルを使ったか、チャットで何を打ったかも、すべてイベントストリームに入ります。ボタンはマウスカーソルの下に描かれ、そのクリックはゲームには届きません。

16 / 16 項目の実機検証に合格
詳しく見る
ファイル 1 つで遊び方 1 つ

ゲームプレイ MOD

プレイするのはあなた、お題を出すのは MOD。序盤の配置、時間に応じた敵の出現、レベルアップ時の 3 択、ホットキーでのウェーブ呼び出し、地面をクリックしての塔の設置、勝敗判定。openwar3.Mod を継承していくつかの関数を書くだけです。ヒーローローグライクとエンドレスディフェンスの 2 つのサンプルを同梱。

~150 行のコードで完全な MOD が 1 つ
詳しく見る
実測

低レイテンシは、測って得たもの

プロセス間通信そのものは遅くありません。遅いのは「リクエストごとにメッセージポンプを 1 回待つ」ことと「マシン全体で 1 つのロック」です。ファストレーンでは各クライアントが専用のレーンを持ち、ロックなしで、ゲームスレッドのイベントディスパッチ内でまとめて実行されます。

コマンドスループット
以前 88 3,000 回/秒
6 プロセス並行
並行時の待ち時間の中央値
以前 67 ms 0.06 ms
旧コントロールチャネル → ファストレーン
16 件のコマンド
以前 121 ms 13 ms
1 件ずつ送信 → 1 バッチで送信
リファレンスブレインの 1 回の判断
以前 0.15~0.56 s 0.02~0.07 s
39 分の試合全体でエラー 0
ツール

API だけでなく、ワークベンチ一式

ゲームの起動、AI の思考の確認から、振り返りや配信の実況まで、すぐに使えるツールがそろっています。

ロードマップ

すべてのフェーズに実機での検収

P0 〜 P3、P5、ゲームプレイ拡張、ゲートウェイと MCP は 1.27 で動作を確認済み。次は複数バージョン対応とアリーナです。

  1. P0 ファストレーン + SDK ファサード 完了
  2. P1 セマンティックコマンド + レシート 完了
  3. P2 リアルタイム情報層 完了
  4. P3 リファレンスブレインの移行 完了
  5. P5 権限と視点 完了
  6. EX ゲームプレイ拡張:キャンバス · JASS · コンパニオン · スキーム 完了
  7. EX+ UI と入力 · MOD · ゲートウェイ · MCP 完了
ロードマップ全体

あなた自身が正規に所有するクライアント専用

ローカル、LAN、自分で立てたゲーム。ディスク上の Game.dll は変更せず、Blizzard のファイルも一切配布しません(ゲームデータはあなた自身のゲームから抽出します)。Battle.net やアンチチートを備えたサーバーでは使用できません。

利用範囲

このひと言を Agent に渡してください

https://war3ai.com/ja/llms-full.txt を読んで、OpenWar3 でヒューマンの Bot を書いてください。まずアークメイジを出し、夜は兵を連れてクリーピング、ヒーローの HP が 40% を切ったら撤退。