Public Preview Neu: Oberfläche & Eingabe · Gameplay-Mods · Gateway · MCP

Lass jeden LLM-Agent selbst KI für Warcraft III entwerfen

War3AI macht das Spiel zu einer API, die für Agents gebaut ist: alle 50 ms der vollständige Zustand der ganzen Karte, semantische Befehle in etwa einem Frame, jeder mit Quittung und Reason-Code. Gib die Docs an Claude, GPT, Gemini, Qwen oder einen beliebigen Agent – er schreibt einen Bot, spielt, liest die Ergebnisse und verbessert sich selbst.

Windows 10/11 · Warcraft III 1.27a · start.bat doppelklicken, der Rest installiert sich selbst

agent-session inst 20 1.27 2×
Du

Menschen. Fällt der Held unter 40 % HP, zurück zur Basis; nach Einbruch der Nacht mit mindestens 3 Einheiten das nächste Creep-Lager angreifen.

llms.txt und api.json gelesen, night_raider.py erzeugt – nutzt nur 8 verifizierte APIs.

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

class NightRaider(Bot):
    def on_tick(self, g):                     # ca. 5-mal pro Sekunde
        halls = g.my_buildings({"htow", "hkee", "hcas"})
        army, camps = g.my_army(), g.creeps()
        if not halls:
            return
        home = halls[0]
        with g.batch():                       # alle Befehle dieses Ticks auf einmal senden
            for h in g.my_heroes():
                if h.hp < h.hp_max * 0.4:     # Held retten
                    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)   # nachts creepen

    def on_event(self, g, ev):
        if ev.kind == "production.done" and ev.owner == g.me():
            print("Fertig", ev.done_code, f"{ev.value:.1f}s")
Minimap 21:40 · Nacht
last_seen · vor 42 s walk_path → attack_move
Event-Stream Live
  1. production.donehbar → hfoo · 14.9s
  2. order.changedHamg → attack
  3. damagehfoo → ngno −14 · normal
  4. receiptattack_move ×5 ✓ angenommen · 6 µs
Verbunden Snapshot #18342 · 50 ms 12 Befehle in diesem Tick · als ein Batch fair=True

Kompatibel mit jedem Modell und Agent, der Code oder JSON ausgeben kann

Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama
50 ms
Push-Intervall für die ganze Karte
Bis 16 ms einstellbar, ein Client liest eine Kopie in ca. 0.4 ms
~1 Frame
bis ein Befehl greift
4~8 µs pro Befehl auf dem Spiel-Thread
3.000 /s
Befehlsdurchsatz
6 Prozesse parallel, Median-Wartezeit 0.06 ms
103
APIs
98 davon mit live verifiziertem Pfad
1.024
Einheiten mit vollständigem Zustand
HP/Mana, Order, Angriffsziel, Abklingzeiten, Buffs, Inventar

Die Zahlen stammen aus Live-Messungen auf einer 1.27-Testinstanz (2026-09-23 / 24); Messmethode unter Plattform · Performance.

Workflow

Von einem Satz zu einer KI, die kämpft

Du kannst nicht programmieren? Kein Problem: Du beschreibst, wie sie spielen soll; der Agent schreibt den Code, spielt, prüft die Ergebnisse und bessert nach, bis es passt.

  1. 01

    Spielweise in Alltagssprache beschreiben

    „Menschen, zuerst der Erzmagier; zwei Kasernen für Fußsoldaten und Schützen; bei 12 Einheiten die gegnerische Expansion angreifen; fällt der Held unter 30 % HP, Rückzug.“

  2. 02

    Agent liest die Docs und schreibt den Bot

    Gib ihm llms.txt, api.json und das Handbuch. Die APIs nutzen die Begriffe des Spiels (Rawcodes, Fähigkeitsnamen) – ein Modell versteht sie auf Anhieb.

  3. 03

    Mit einem Befehl ins Spiel

    tools/play.py startet das Spiel, injiziert, eröffnet die Partie und startet den Bot. Geschwindigkeit, Volk, Schwierigkeit und Fair-Modus sind Parameter.

  4. 04

    Quittungen und Events lesen, selbst korrigieren

    Jeder Befehl hat eine Quittung mit Reason-Code; der Event-Stream erfasst jeden Treffer, jeden Kill und jede fertige Produktion. Damit findet der Agent das Problem, ändert den Code und spielt die nächste Partie.

Schritt 2–4 bilden einen geschlossenen Kreislauf: Quittungen und Events sind strukturierte Daten – der Agent muss nicht aufs Bild schauen, um zu wissen, was schiefging. Agent-Selbstiteration
Fähigkeiten

Eine API, gebaut für Agents

Beobachten ohne Wartezeit, Befehle mit Quittung, Ergebnisse als Events – genau das strukturierte, überprüfbare, selbstkorrigierende Feedback, das Modelle brauchen.

Vollständiger Weltzustand, ohne Wartezeit

Ressourcen und Nahrung von 16 Spielern; für bis zu 1024 Einheiten HP/Mana, Order, aktuelles Angriffsziel, Abklingzeiten, Buffs, Inventar; Gegenstände am Boden, Bäume, Produktionswarteschlangen, Tag/Nacht. Die Runtime pusht alles in Shared Memory, eine Kopie liest sich in ca. 0.4 ms.

Semantische Befehle mit Quittung

Bewegen, angreifen, abbauen, bauen, ausbilden, zaubern, Fähigkeiten lernen, wiederbeleben, Gegenstände benutzen, einkaufen … Ob angenommen und falls nicht, warum – das erfährst du im selben Frame.

Event-Stream

Einheit erscheint / stirbt, Order-Wechsel, Helden-Level-up, Gegenstand erscheint; jeder einzelne Treffer auf Engine-Ebene (Quelle, Angriffstyp, Schaden vor Rüstung) und fertige Produktion – auch die des Gegners.

Batch in einem Frame

Befehle in with g.batch() werden als ein Batch gesendet. Im Test sanken 8 Bewegungsbefehle von 68 ms auf 6.5 ms.

Kampfberechnung & Wegfindung

stats / time_to_kill nutzen die Konter-Tabellen des Spiels und den aktuellen Techstand; path_distance / walk_path laufen A* auf dem Geländeraster der Engine.

Fair-Modus

Nur Einheiten, Gegenstände, Produktion und Events in Sichtweite; last_seen merkt sich Gegner im Nebel. Genau die Regel der Arena.

Docs für Modelle

api.json wird aus dem Code generiert; jede API trägt Teststatus, Latenzstufe und Mechanismus, das Modell muss nicht raten. Mit llms.txt / llms-full.txt liest ein Agent die ganze Website auf einmal.

Architektur

Eine Runtime, ein Protokoll, jede KI

Die Runtime wird ins Originalspiel injiziert, erfasst auf dem Spiel-Thread die ganze Welt, führt Befehle aus und meldet Ergebnisse. Deine KI spricht über ein versioniertes W3P-Protokoll mit ihr – per Python-SDK oder in jeder Sprache, die Shared Memory lesen und schreiben kann.

Dein Agent / Bot
Jedes Modell, jede Sprache
Claude CodeCursorChatGPTQwen lokalPython-BotReferenz-KI
Entscheidung
import openwar3 · oder WebSocket-/JSON-Gateway · MCP
OpenWar3 SDK
Python · openwar3
Game / BotSnapshot w3worldSchnellspur w3fastcombat Kampfberechnungpathing Wegfindungw3claim Arbitrierungcanvas Overlayjass Kanalschemes Schemata
API
Welt-Push alle 50 ms · Befehle greifen in ca. 1 Frame · jeder mit Quittung
W3P-Protokoll v2
Shared Memory · Zero-Copy · versioniert
War3WorldWar3EventsWar3MapWar3TreesWar3Fast BefehlsspurWar3Canvas Overlay
Protokoll
Batch-Ausführung auf dem Spiel-Thread · 4~8 µs pro Befehl · 4 ms Budget pro Durchlauf
W3 Runtime
Läuft auf dem Spiel-Thread
Weltzustand-PublisherEvent-StreamBefehlsausführungAbfragenRechte & PerspektiveCanvas-RenderingJASS-AufrufeVersionsunterstützungHealth & Circuit Breaker
Runtime
War3.exe 1.27 · Originalspiel, keine Datei auf der Festplatte wird verändert
Code

Schreibt sich,
als würdest du Truppen befehligen

Die Fassade hat nur zwei Klassen: Bot gibt den Takt vor, Game sieht und handelt. Einheiten per Rawcode, Fähigkeiten per Order-String – wie im Spiel.

  • Nicht lesbar heißt None, nicht 0
  • Befehle nehmen eine Einheit oder eine Liste
  • Shift-Warteschlange: queue='after'
  • Angenommen ≠ erledigt: Wirkung in Snapshot und Events prüfen
Mentales Modell: Snapshots, Befehle, Events, Ticks
from openwar3 import Bot

class FocusFire(Bot):
    """Fokusfeuer auf den Gegner, der am schnellsten fällt – nicht auf den nächsten; angeschlagene Einheiten zurück nach Hause."""

    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]
        # berücksichtigt Konter-Tabelle, Rüstung, Angriffs-/Rüstungs-Upgrades und die aktuellen HP des Ziels
        target = min(foes, key=lambda e: g.time_to_kill(army, e) or 1e9)
        with g.batch():                                   # Dutzende Befehle, nur ein Warten auf den Spiel-Thread
            for u in army:
                if u.hp < u.hp_max * 0.35:
                    g.move(u, home.x, home.y)             # Verwundete zurückziehen
                elif (t := g.current_target(u)) is None or t.handle != target.handle:
                    g.attack(u, target)                   # nur Einheiten, die es noch nicht angreifen
Die vollständige, lauffähige Version steht in brains/examples/micro_bot.py (Fokusfeuer, Verwundete zurückziehen, Helden retten, nachts creepen).
KI-Agents

Sechs Wege, ein LLM an Warcraft anzuschließen

Fünf funktionieren schon heute, einer ist in Arbeit. Sie schließen sich nicht aus: Im selben Spiel kann ein vom Agent geschriebener Bot spielen, ein lokales Modell beraten, ein weiteres Modell den Einheiten eine Stimme geben – und du meldest dich jederzeit in Claude Code zu Wort.

Offline · Code schreiben

Agent schreibt den Bot

Claude Code, Cursor, Codex, ChatGPT … lesen die Docs, schreiben bot.py, spielen, prüfen Quittungen und Events und bessern nach. Der schnellste Einstieg, ganz ohne Programmierkenntnisse.

0 Zeilen Code, den du selbst schreiben musst
Mehr erfahren
Online · Beraten

LLM als Strategie-Coach

Alle paar Spielsekunden bekommt das Modell eine Seite Lagebild und liefert striktes JSON zurück: Diagnose, Arbeiterverteilung, Bauprioritäten, Haltung für die nächste Minute. Die Regelschicht setzt es per Whitelist und Clamping um.

1.09 s Median, lokales Qwen3.6-35B-A3B
Mehr erfahren
Online · Rollenspiel

Einheiten zum Sprechen bringen

Jede Einheit, jede Rolle – Sprechblasen über dem Kopf, gestreamt von einem lokalen LLM: Bauern-Kaffeeklatsch, Heldendialoge, Kampfkommentar.

0.3 s Latenz bis zum ersten Token (lokales Modell)
Mehr erfahren
Online · Als Tool

LLM ruft Tools direkt auf

Hängst du in Claude Code, Claude Desktop oder einen anderen MCP-fähigen Client einen Server ein, kann das LLM direkt die Lage sehen, Befehle erteilen, auf dem Bildschirm mit dem Spieler sprechen, ihm Karten zur Auswahl zeigen und Screenshots ansehen. Ohne vorher Code zu schreiben.

10 Tools, mit einem Befehl eingebunden
Mehr erfahren
Online · Jede Sprache

Direkt übers Gateway

Das WebSocket-/JSON-Gateway reicht die öffentlichen APIs unverändert nach außen: JS, C#, Go, Browserseiten und Programme auf anderen Rechnern können die Lage sehen, Befehle erteilen, Events abonnieren und Buttons ins Spiel setzen. Die Spielerrolle befehligt nur sich selbst und sieht nur die eigene Sicht.

+1 ms zusätzliche Latenz über der Schnellspur
Mehr erfahren
Bald · Direkt spielen

Agent spielt selbst

Arena: Der Schiedsrichter filtert Beobachtungen nach Sicht, prüft den Besitz der Einheiten und taktet nach Spielzeit – so ermitteln zwei externe KIs in derselben Partie einen Sieger. Jede Sprache, jedes Modell kann direkt gegeneinander antreten.

P6 Arena-Phase
Mehr erfahren
Spielerweiterungen Neu

Mehr als Matches – bau deine eigenen Spielideen ins Spiel

Zeichne deine eigene Oberfläche ins Spielbild – die gezeichneten Buttons sind klickbar, Hotkeys reagieren; ruf von außen alle Funktionen auf, die Kartenautoren haben, und hol dir auf RPG-Karten einen KI-Partner an die Seite, der mit dir kämpft; ein ganzes neues Spielprinzip schreibst du als Mod – per Klick gewechselt und einfach geteilt, genau wie KI-Schemata.

Von der Runtime gezeichnet

Canvas

Textfelder, Panels, Fortschrittsbalken, Bilder, Kreise auf dem Gelände, Routen mit Pfeilen. Folgt Einheiten; Schriftart, abgerundete Ecken und Transparenz nach Wunsch. Gezeichnet wird nur im eigenen Bild – auch im Multiplayer sicher.

0.3 ms Kosten pro Frame (9 Elemente)
Mehr erfahren
1291 Funktionen

JASS-Kanal

Die Funktionen der Kartenautoren direkt per Name aufrufen: Einheiten erzeugen, Effekte, Panels, Dialoge, Sound, Kamera, Nebel … aus der Farsight-Konsole, per Kommandozeile, HTTP oder Python; Chat-Befehle, Button-Menüs und Pfeiltasten lassen sich ebenfalls anbinden.

94 Funktionen einzeln live auf ihre Wirkung geprüft
Mehr erfahren
RPG / Custom Maps

KI-Begleiter

Folgt dir, hilft beim Kämpfen, heilt dich bei wenig HP und unterhält sich mit dir – die Sätze können von einem lokalen LLM kommen. Vier Modi: Verbündeter, eigene Einheit, Karteneinheit übernehmen, nur sprechen; Namen eigener Einheiten werden direkt aus der Karte gelesen.

37 / 38 RPG-Karten, aus denen die Namen eigener Einheiten gelesen wurden
Mehr erfahren
Wechseln · Teilen · Importieren

KI-Schemata

Eine KI, ein Ordner. Per Klick wechseln – auch mitten in der laufenden Partie übernimmt eine andere; ein ZIP-Export ist schon das Teilen, fremde Schemata laufen erst, nachdem du ihnen vertraust; die Ergebnisse jedes Schemas werden automatisch gezählt.

zip Export = Teilen, vor dem Import Vertrauen bestätigen
Mehr erfahren
Klicken · Drücken

Oberfläche & Eingabe

Gezeichnete Buttons und Auswahlkarten sind klickbar und leuchten beim Hover auf; Hotkeys registrieren, per Klick auf den Boden eine Position wählen, lesen, worauf die Maus zeigt. Was der Spieler auswählt, welche Fähigkeit er wirkt und was er in den Chat tippt – alles landet im Event-Stream. Buttons liegen unter dem Mauszeiger, und der Klick darauf kommt beim Spiel nicht an.

16 / 16 Punkte live geprüft und bestanden
Mehr erfahren
Eine Datei, ein Spielprinzip

Gameplay-Mods

Du spielst selbst, die Mod stellt die Aufgaben: Startaufstellung, Gegnerwellen nach Zeit, eine von drei Verstärkungen beim Stufenaufstieg, Welle per Hotkey rufen, Türme per Klick auf den Boden setzen, Sieg und Niederlage entscheiden. Von openwar3.Mod erben, ein paar Funktionen schreiben; zwei Beispiele sind eingebaut: Helden-Roguelike und Endlose Verteidigung.

~150 Zeilen Code für eine komplette Mod
Mehr erfahren
Gemessen

Niedrige Latenz – gemessen, nicht behauptet

Nicht die Prozessgrenze ist langsam, sondern „jede Anfrage wartet auf einen Durchlauf der Message-Pump“ und „ein Lock für die ganze Maschine“. Die Schnellspur gibt jedem Client eine eigene Spur ohne Lock und führt Batches im Event-Dispatch des Spiel-Threads aus.

Befehlsdurchsatz
Vorher 88 3.000 /s
6 Prozesse parallel
Median-Wartezeit bei Parallelität
Vorher 67 ms 0.06 ms
Alter Steuerkanal → Schnellspur
16 Befehle
Vorher 121 ms 13 ms
Einzeln → als Batch
Eine Entscheidungsrunde des Referenz-Brains
Vorher 0.15~0.56 s 0.02~0.07 s
39-Minuten-Spiel, 0 Fehler
Roadmap

Jede Phase wird im Live-Spiel abgenommen

P0–P3, P5, die Spielerweiterungen, Gateway und MCP laufen bereits auf 1.27; als Nächstes kommen Multi-Version-Support und die Arena.

  1. P0 Schnellspur + SDK-Fassade Fertig
  2. P1 Semantische Befehle + Quittungen Fertig
  3. P2 Echtzeit-Informationsschicht Fertig
  4. P3 Migration des Referenz-Brains Fertig
  5. P5 Rechte & Perspektive Fertig
  6. EX Spielerweiterungen: Canvas · JASS · Begleiter · Schemata Fertig
  7. EX+ Oberfläche & Eingabe · Mods · Gateway · MCP Fertig
Vollständige Roadmap

Nur für Clients, die du rechtmäßig besitzt

Lokal, im LAN, in selbst gehosteten Spielen. Keine Änderung an der Game.dll auf der Festplatte, keine Weitergabe von Blizzard-Dateien (Spieldaten werden aus deinem eigenen Spiel extrahiert), keine Nutzung auf Battle.net oder Servern mit Anti-Cheat.

Nutzungsgrenzen

Gib deinem Agent diesen Satz

Lies https://war3ai.com/de/llms-full.txt und schreib mir mit OpenWar3 einen Bot für die Menschen – zuerst der Erzmagier, nachts mit der Armee creepen, Rückzug, wenn der Held unter 40 % HP fällt.