Aperçu public Nouveau : interface et entrées · mods de jeu · passerelle · MCP

Laissez n’importe quel agent LLM concevoir seul l’IA de Warcraft III

War3AI transforme le jeu en interface pensée pour les agents : l’état complet de la carte poussé toutes les 50 ms, des commandes sémantiques appliquées en environ une frame, chacune avec un accusé de réception et un code de raison. Confiez la doc à Claude, GPT, Gemini, Qwen ou à n’importe quel agent — il écrira un Bot, jouera des parties, lira les résultats et s’améliorera seul.

Windows 10/11 · Warcraft III 1.27a · Double-cliquez sur start.bat, le reste s'installe tout seul

agent-session inst 20 1.27 2×
Vous

Humains. Si les PV du héros passent sous 40 %, repli à la base ; à la nuit tombée, dès qu’il y a 3 soldats, attaquer le camp de creeps le plus proche.

J’ai lu llms.txt et api.json, puis généré night_raider.py, qui n’utilise que 8 interfaces vérifiées.

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

class NightRaider(Bot):
    def on_tick(self, g):                     # environ 5 fois par seconde
        halls = g.my_buildings({"htow", "hkee", "hcas"})
        army, camps = g.my_army(), g.creeps()
        if not halls:
            return
        home = halls[0]
        with g.batch():                       # les commandes du tick partent en une fois
            for h in g.my_heroes():
                if h.hp < h.hp_max * 0.4:     # survie du héros
                    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)   # creeping de nuit

    def on_event(self, g, ev):
        if ev.kind == "production.done" and ev.owner == g.me():
            print("Terminé", ev.done_code, f"{ev.value:.1f}s")
Minicarte 21:40 · nuit
last_seen · il y a 42 s walk_path → attack_move
Flux d’événements En direct
  1. production.donehbar → hfoo · 14.9s
  2. order.changedHamg → attack
  3. damagehfoo → ngno −14 · normal
  4. receiptattack_move ×5 ✓ Accepté · 6 µs
Connecté Instantané #18342 · 50 ms 12 commandes ce tick · envoyées en un lot fair=True

Compatible avec tout modèle ou agent capable d’écrire du code ou de produire du JSON

Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama
50 ms
Période de publication de l’état complet
Réglable jusqu’à 16 ms ; environ 0.4 ms pour lire une copie côté client
~1 frame
Application d’une commande
4~8 µs par commande sur le thread du jeu
3 000 cmd/s
Débit de commandes
6 processus en parallèle, attente médiane de 0.06 ms
103
interfaces
98 avec chemin bas niveau vérifié en jeu
1 024
unités, état complet
PV et mana, ordres, cible attaquée, temps de recharge, buffs, inventaire

Chiffres mesurés en jeu sur des instances de test 1.27 (2026-09-23 / 24) ; méthode de mesure dans Plateforme · Performances.

Flux de travail

D’une phrase à une IA qui sait se battre

Pas besoin de savoir programmer : vous expliquez clairement comment elle doit jouer ; l’agent écrit le code, joue, analyse les résultats et corrige jusqu’à ce que vous soyez satisfait.

  1. 01

    Décrivez la stratégie avec vos mots

    « Humains, Archimage en premier ; deux casernes pour des fantassins et des fusiliers ; à 12 soldats, attaquer l’expansion adverse ; repli du héros sous 30 % de PV. »

  2. 02

    L’agent lit la doc et écrit le Bot

    Donnez-lui llms.txt, api.json et le manuel. L’interface utilise les noms du jeu (codes à quatre caractères, noms de sorts) : le modèle comprend tout de suite.

  3. 03

    Une commande pour jouer une partie

    tools/play.py lance le jeu, injecte le runtime, démarre la partie et lance le Bot. Vitesse, race, difficulté et mode équitable sont des paramètres.

  4. 04

    Lire accusés et événements, puis corriger

    Chaque commande a un accusé de réception et un code de raison ; le flux d’événements enregistre chaque coup, chaque élimination et chaque production. L’agent s’en sert pour localiser le problème, corriger le code et rejouer.

Les étapes 2 à 4 forment une boucle fermée : accusés et événements sont des données structurées, l’agent sait ce qui ne va pas sans regarder l’écran. Itération autonome de l’agent
Capacités

Une interface conçue pour les agents

Observation sans attente, commandes avec accusé de réception, résultats sous forme d’événements — exactement le retour structuré, vérifiable et propice à l’autocorrection dont un modèle a besoin.

État complet du monde, sans attente

Ressources et nourriture de 16 joueurs ; pour jusqu’à 1024 unités, PV et mana, ordres, cible attaquée, temps de recharge, buffs, inventaire ; objets au sol, arbres, files de production, jour/nuit. Le runtime pousse tout en mémoire partagée ; lire une copie prend environ 0.4 ms.

Commandes sémantiques, chacune avec accusé

Déplacer, attaquer, récolter, construire, entraîner, lancer un sort, apprendre une compétence, ressusciter, utiliser un objet, acheter… Acceptée ou non, et pourquoi — vous le savez dans la même frame.

Flux d’événements

Apparition / mort des unités, changements d’ordre, montées de niveau des héros, apparition d’objets ; chaque coup au niveau du moteur (source, type d’attaque, dégâts avant armure) et chaque fin de production, adversaire compris.

Par lots, exécutés en une frame

Les commandes d’un with g.batch() partent en un seul lot. En test, 8 déplacements passent de 68 ms à 6.5 ms.

Calculs de combat et recherche de chemin

stats / time_to_kill utilisent la table des contres du jeu et les technologies en temps réel ; path_distance / walk_path lancent un A* sur la grille de terrain du moteur.

Mode équitable

Seuls les unités, objets, productions et événements dans le champ de vision sont visibles ; last_seen garde en mémoire les ennemis passés dans le brouillard. C’est la règle de l’arène.

Une doc pensée pour les modèles

api.json est généré depuis le code ; chaque interface indique son statut de test, son niveau de latence et son mécanisme sous-jacent, le modèle n’a rien à deviner. llms.txt / llms-full.txt permettent à un agent de lire tout le site d’un coup.

Architecture

Un runtime, un protocole, n’importe quelle IA

Le runtime est injecté dans le jeu d’origine ; sur le thread du jeu, il capture le monde entier, exécute les commandes et renvoie les résultats. Votre IA dialogue avec lui via un protocole W3P versionné — avec le SDK Python, ou dans tout langage capable de lire et d’écrire la mémoire partagée.

Votre agent / Bot
N’importe quel modèle, n’importe quel langage
Claude CodeCursorChatGPTQwen en localBot PythonIA de référence
Décision
import openwar3 · ou passerelle WebSocket / JSON · MCP
SDK OpenWar3
Python · openwar3
Game / Botinstantanés w3worldvoie rapide w3fastcombat · calculs de combatpathing · recherche de cheminw3claim · arbitragecanvas · canevasjass · canal JASSschemes · schémas d’IA
Interface
État du monde poussé toutes les 50 ms · commandes appliquées en ~1 frame · accusé de réception pour chacune
Protocole W3P v2
Mémoire partagée · zéro copie · versionné
War3WorldWar3EventsWar3MapWar3TreesWar3Fast · voie de commandesWar3Canvas · canevas
Protocole
Exécution par lots sur le thread du jeu · 4~8 µs par commande · budget de 4 ms par vidage
W3 Runtime
S’exécute sur le thread du jeu
publication de l’état du mondeflux d’événementsexécution des commandes sémantiquesrequêtespermissions et points de vuecanevas dessiné par le runtimeappels JASScompatibilité des versionssanté et disjoncteurs
Runtime
War3.exe 1.27 · jeu d’origine, aucun fichier modifié sur le disque
Code

Écrire un Bot,
c’est commander ses troupes

La façade ne compte que deux classes : Bot donne le rythme, Game observe et agit. Les unités par leur code à quatre caractères, les sorts par leur nom d’ordre, comme dans le jeu.

  • Une valeur illisible vaut None, pas 0
  • Une commande accepte une unité ou une liste
  • File Shift : queue='after'
  • Accepté ≠ réussi : jugez l’effet d’après l’instantané et les événements
Modèle mental : instantanés, commandes, événements, ticks
from openwar3 import Bot

class FocusFire(Bot):
    """Focus sur l'ennemi « le plus vite tuable » plutôt que le plus proche ; les blessés rentrent à la base."""

    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]
        # tient compte de la table des contres, de l'armure, des améliorations et des PV actuels de la cible
        target = min(foes, key=lambda e: g.time_to_kill(army, e) or 1e9)
        with g.batch():                                   # des dizaines de commandes, une seule attente du thread du jeu
            for u in army:
                if u.hp < u.hp_max * 0.35:
                    g.move(u, home.x, home.y)             # retrait des blessés
                elif (t := g.current_target(u)) is None or t.handle != target.handle:
                    g.attack(u, target)                   # ordre seulement à ceux qui ne l'attaquent pas déjà
Version complète et exécutable dans brains/examples/micro_bot.py (focus, retrait des blessés, survie du héros, creeping de nuit).
Agents IA

Six façons de brancher un LLM sur Warcraft

Cinq sont utilisables dès aujourd’hui, une est en cours. Elles ne s’excluent pas : dans une même partie, un Bot écrit par un agent peut jouer, un modèle local conseiller, un autre modèle doubler les unités, et vous pouvez glisser une consigne à tout moment depuis Claude Code.

Hors ligne · code

L’agent écrit le Bot

Claude Code, Cursor, Codex, ChatGPT… lisent la doc, écrivent bot.py, jouent, lisent accusés et événements, puis corrigent. Le moyen le plus rapide de démarrer, sans savoir programmer.

0 ligne de code à écrire vous-même
En savoir plus
En ligne · conseiller

Un LLM comme coach stratégique

Toutes les quelques secondes de jeu, un résumé de la partie est confié au modèle, qui renvoie un JSON strict : diagnostic, répartition des ouvriers, priorités de production, posture pour la minute à venir. La couche de règles l’exécute après liste blanche et bornage.

1.09 s médiane, Qwen3.6-35B-A3B en local
En savoir plus
En ligne · personnage

Faire parler les unités

N’importe quelle unité, sous n’importe quelle identité, affiche une bulle au-dessus de sa tête, alimentée en streaming par un LLM local : pause-café des paysans, dialogues de héros, commentaire de la partie.

0.3 s latence du premier token (modèle local)
En savoir plus
En ligne · outils

Un LLM appelle directement des outils

Claude Code, Claude Desktop ou n’importe quel client compatible MCP se branche sur un serveur, et le LLM peut directement observer la partie, donner des ordres, parler au joueur à l’écran, lui poser des questions avec des cartes et prendre des captures d’écran. Pas besoin d’écrire du code d’abord.

10 outils, branchés en une commande
En savoir plus
En ligne · tout langage

Connexion directe par la passerelle

La passerelle WebSocket / JSON expose telles quelles les interfaces publiques : JS, C#, Go, une page web, un programme sur une autre machine peuvent observer la partie, donner des ordres, s’abonner aux événements et poser des boutons dans le jeu. Le rôle joueur ne commande que son propre camp et ne voit que sa propre vision.

+1 ms de latence en plus de la voie rapide
En savoir plus
Bientôt · en direct

L’agent joue lui-même

Arène : l’arbitre filtre les observations selon la vision, vérifie la propriété des unités et cadence les ticks sur le temps de jeu, pour que deux IA externes se départagent dans une même partie. N’importe quel langage, n’importe quel modèle peut jouer directement.

P6 phase Arène
En savoir plus
Extensions de jeu Nouveau

Au-delà des matchs : créez votre propre gameplay dans le jeu

Dessinez votre propre interface à l’écran, avec des boutons cliquables et des raccourcis clavier qui répondent ; appelez de l’extérieur toutes les fonctions des créateurs de cartes, emmenez dans les cartes RPG un compagnon IA qui se bat à vos côtés ; écrivez tout un nouveau gameplay sous forme de mod, à changer en un clic et à partager librement, comme un schéma d’IA.

Dessiné par le runtime

Canevas

Zones de texte, panneaux, barres de progression, images, cercles qui épousent le terrain, itinéraires fléchés. Ils suivent les unités ; polices (CJK comprises), coins arrondis et transparence au choix ; dessinés uniquement sur votre propre écran, donc sûrs en multijoueur.

0.3 ms coût par frame (9 éléments)
En savoir plus
1291 fonctions

Canal JASS

Appelez directement par leur nom les fonctions dont disposent les créateurs de cartes : créer des unités, effets, panneaux, boîtes de dialogue, sons, caméra, brouillard… Depuis la console Farsight, la ligne de commande, HTTP ou Python ; commandes de chat, menus à boutons et touches fléchées se branchent aussi.

94 fonctions dont l’effet a été vérifié une à une en jeu
En savoir plus
RPG / cartes personnalisées

Compagnon IA

Il vous suit, combat avec vous, vous soigne quand vos PV sont bas et fait la conversation ; ses répliques peuvent venir d’un LLM local. Quatre modes : allié, à vous, reprise d’une unité de la carte, voix seule ; les noms des unités personnalisées sont lus directement dans la carte.

37 / 38 cartes RPG dont les noms d’unités personnalisées ont été lus
En savoir plus
Changer · partager · importer

Schémas d’IA

Une IA, un dossier. Changez en un clic, même pour reprendre la partie en cours ; exporter un zip suffit pour partager, et le schéma d’un autre ne s’exécute qu’après confirmation de votre confiance ; les résultats de chaque schéma sont comptés automatiquement.

zip Exporter pour partager ; confirmer la confiance avant d’importer
En savoir plus
Cliquer · appuyer

Interface et entrées

Les boutons et cartes de choix dessinés sont cliquables et s’illuminent au survol ; enregistrez des raccourcis clavier, choisissez une position d’un clic au sol, lisez ce que pointe la souris. Ce que le joueur sélectionne, les sorts qu’il lance, ce qu’il tape dans le chat — tout arrive dans le flux d’événements. Les boutons sont dessinés sous le curseur de la souris, et le jeu ne reçoit pas le clic qui les touche.

16 / 16 vérifications en jeu réussies
En savoir plus
Un fichier, un gameplay

Mods de jeu

Vous jouez, le mod pose les défis : préparation du début de partie, vagues de monstres chronométrées, un bonus à choisir parmi trois à chaque niveau, vague appelée par raccourci clavier, tours posées d’un clic au sol, victoire ou défaite. Héritez de openwar3.Mod et écrivez quelques fonctions ; deux exemples intégrés, Roguelike de héros et Défense sans fin.

~150 lignes de code pour un mod complet
En savoir plus
Mesures

La faible latence, ça se mesure

Passer d’un processus à l’autre n’est pas lent en soi ; ce qui l’est, c’est « une requête = une attente de la pompe à messages » et « un seul verrou pour toute la machine ». La voie rapide donne à chaque client sa propre voie, sans verrou, et exécute les commandes par lots dans la distribution des événements du thread du jeu.

Débit de commandes
Avant 88 3 000 cmd/s
6 processus en parallèle
Attente médiane en parallèle
Avant 67 ms 0.06 ms
ancien canal de contrôle → voie rapide
16 commandes
Avant 121 ms 13 ms
une par une → un seul lot
Un cycle de décision du cerveau de référence
Avant 0.15~0.56 s 0.02~0.07 s
partie complète de 39 minutes, 0 erreur
Feuille de route

Chaque phase est validée en jeu

P0 à P3, P5, les extensions de jeu, la passerelle et MCP fonctionnent déjà sur 1.27 ; viennent ensuite la compatibilité multiversion et l’Arène.

  1. P0 Voie rapide + façade du SDK Terminé
  2. P1 Commandes sémantiques + accusés de réception Terminé
  3. P2 Couche d’information en temps réel Terminé
  4. P3 Migration du cerveau de référence Terminé
  5. P5 Permissions et points de vue Terminé
  6. EX Extensions de jeu : canevas · JASS · compagnon · schémas Terminé
  7. EX+ Interface et entrées · mods · passerelle · MCP Terminé
Feuille de route complète

Uniquement avec un client que vous possédez légalement

En local, en réseau local, dans des parties que vous hébergez. Aucune modification du Game.dll sur le disque, aucun fichier de Blizzard distribué (les données sont extraites de votre propre jeu), interdit sur Battle.net et sur tout serveur doté d’un anti-triche.

Limites d’utilisation

Donnez cette phrase à votre agent

Lisez https://war3ai.com/fr/llms-full.txt, puis écrivez-moi un Bot Humains avec OpenWar3 : Archimage en premier, creeping de nuit avec l’armée, repli du héros sous 40 % de PV.