Tu modelo piensa, War3AI lo hace realidad
Para que un agente consiga cosas por sí solo en un entorno real necesita tres cosas: acciones que se puedan expresar con claridad, feedback que pueda entender y un entorno donde equivocarse no cueste nada. Hemos convertido Warcraft III en ese entorno.
Por qué aquí un agente puede lograrlo solo
Lo habitual para que una IA juegue es simular ratón y teclado y reconocer la pantalla; si algo funcionó, solo se puede adivinar. Nosotros hicimos lo contrario: diseñamos cada interfaz partiendo de “qué necesita un modelo para corregirse solo”.
Solo dices “qué hacer”
Mover, atacar, construir, lanzar hechizos… Los comandos semánticos corresponden a las acciones del jugador; las unidades se nombran por código de cuatro caracteres y las habilidades por nombre de orden, igual que en el juego. El modelo no necesita saber nada de bajo nivel.
Feedback estructurado para cada acción
El recibo se lee en el mismo fotograma: si se aceptó, el código de motivo, la orden antes y después del comando y el tiempo de ejecución. “Por qué no se hizo” es un número, no una conjetura.
Resultados sin mirar la pantalla
El snapshot dice cómo están las cosas y el flujo de eventos, qué ha pasado: cada golpe, cada muerte, cada producción completada. El agente puede verificar sus propias hipótesis.
La documentación es la interfaz
api.json se genera desde el código y cada uno de los 103 métodos indica su estado de pruebas y su mecanismo de bajo nivel; con llms.txt se lee todo el sitio de una vez. El modelo no tiene motivos para inventarse métodos.
Fallar es seguro
Si el Bot lanza una excepción, el siguiente tick continúa; los comandos que superan su plazo no se ejecutan; si el proceso del Bot se cae, el juego sigue. El agente puede probar sin miedo.
Justo desde el primer día
El modo justo solo entrega lo que está en tu visión, igual que las reglas de la Arena. Lo que el agente aprenda en local funcionará en la Arena sin cambiar ni una línea.
El agente escribe el Bot
La forma más rápida de empezar, sin saber programar. Dale el manual, api.json y un ejemplo a Claude Code, Cursor, Codex o cualquier modelo conversacional, y describe la estrategia con tus palabras. Escribirá un archivo de Python que hereda de openwar3.Bot, listo para jugar con un solo comando.
- La plantilla de prompt incluye 15 “reglas aprendidas en partidas reales”
- Le exige usar solo métodos de api.json, sin inventar nada
- Pégale los errores tal cual y describe lo que ves para que lo corrija
De acuerdo, seguiré la estructura de rush_bot.py y usaré solo métodos de api.json:
- Solo se manda a recolectar a
idle_workers(), 5 por mina - Solo 1 en la cola del cuartel; si falta comida, mira
production().blocked - Para atacar,
path_distanceelige la expansión yattack_movelleva allí - Con la vida del héroe bajo el 30%,
movea casa; si muere,revive
Que el agente itere solo
Un coding agent que puede ejecutar comandos también puede encargarse de “jugar una partida y ver el resultado”. Dale un comando desatendido, un informe estructurado de la partida y un objetivo claro, y mejorará ronda tras ronda.
- Ejecuta
play.py --speed 200 --minutes 10 --fair - Lee el informe: cronología de producción, bajas, motivos de rechazo más frecuentes
- Cambia lo que más influye en el resultado y anota el porqué en un comentario
- Repite; si no mejora en varias partidas seguidas, para e informa
{
"reason": "到时间了",
"clock": 612.4,
"timeline": [
[15, "training", "hpea"],
[118, "construction", "hbar"],
[161, "training", "Hamg"],
[402, "upgrade", "hkee"]
],
"lost": {"hfoo": 7, "Hamg": 1},
"killed": {"ogru": 4, "ngno": 6},
"rejects": [
["train hfoo: rejected(人口不够)", 41],
["attack ogru: rejected(目标看不见…)", 9]
]
}El rechazo más frecuente es “comida insuficiente”, 41 veces: el cuartel siempre estaba esperando comida. Según la regla 12, en cuanto aparezca production().blocked hay que construir una granja, sin esperar a que la comida esté casi al límite. En esta ronda solo cambio eso.
El LLM como asesor de estrategia
“Qué ahorrar, dónde poner trabajadores, atacar o aguantar este minuto”: estos juicios globales de prioridades chocan entre sí si se escriben con if / else, pero es justo en lo que destacan los LLM. El cerebro de referencia consulta un modelo local cada 20 segundos de juego y recibe un JSON estricto.
{
"diagnosis": "Oro 820, madera 60: la madera es el cuello de botella y el cuartel está parado por falta de madera",
"workers": {"gold": 10, "lumber": 7},
"priority": ["hpea", "hhou", "hfoo"],
"posture": "hold",
"avoid": ["No investigues Blindaje de hierro primero si falta madera"]
}Reparto de trabajadores 10 / 7 · prioridad de entrenamiento hpea → hhou → hfoo · postura hold
Da órdenes, lee recibos, hace micro
Que las unidades hablen
Burbujas de diálogo sobre cualquier unidad y con cualquier identidad; varias unidades pueden hablar a la vez y el estilo de cada burbuja se personaliza por separado. Con un LLM local, entra una frase y la respuesta aparece en streaming sobre la unidad. Tertulias de campesinos, diálogos de héroes y comentarios de la partida vienen listos.
POST http://127.0.0.1:8872/api/chat
{
"inst": 16, "unit": "0x14A12614", "name": "Rey de la Montaña",
"persona": "Eres el Rey de la Montaña: campechano y amante de la cerveza; responde con una o dos frases coloquiales",
"message": "Hay un grupo de ogros delante, ¿cargamos o no?",
"stream": true
}
→ {"reply": "¡A la carga! ¡En cuanto me acabe este trago!",
"first_token_ms": 283, "total_ms": 342}Compañero IA
En mapas RPG y personalizados, llévate un compañero de IA: te sigue, te ayuda contra los monstruos, te cura cuando vas mal de vida y, en los ratos tranquilos, charla contigo; sus frases pueden venir de un LLM local. Hereda una clase, cambia unos cuantos atributos y ya tienes tu propio compañero.
En cada tick evalúa en orden y hace lo primero que se cumpla
- Retirarse Poca vida y enemigos cerca: se coloca detrás de ti
- Curar Tienes poca vida y la habilidad está lista: te cura
- Apoyar Primero ataca a quien te ataca, luego a quien atacas tú
- Seguir Si se aleja demasiado te alcanza; si está muy lejos, vuelve corriendo directamente
- Charlar Cuando no hay combate, dice algo cada uno o dos minutos
Escribe -follow / -stay / -heal / -hi en el chat, o haz clic derecho sobre él
El LLM usa herramientas directamente
Conecta war3_mcp.py a un cliente compatible con MCP (Claude Code, Claude Desktop, un framework de agentes con modelos locales) y el LLM podrá ver la partida, dar órdenes, hablar con el jugador en pantalla, preguntarle con tarjetas y hacer capturas de la imagen. Sin escribir código antes: lo que se te ocurra, pídeselo.
- 10 herramientas: la partida en una página, unidades, eventos, llamar a cualquier interfaz pública, buscar interfaces, avisos en pantalla, frases sobre las unidades, preguntar al jugador, capturas, JASS
- Tres roles: desarrollo, jugador (solo manda a un jugador y solo ve su visión) y observador (solo lectura)
- Solo se conecta al juego la primera vez que se llama a una herramienta, así que el juego se puede abrir después
He llamado a 2 herramientas:
war3_overview→ oro 500 · comida 10/12 · ayuntamiento 1 · campesinos 5 · paladín 1war3_ask_player→ tres tarjetas en el centro de la pantalla; el juego se pausa mientras eliges- Has pulsado “Expandir”; el resultado vuelve tal cual a la conversación y sigo organizando a los campesinos
El agente juega en persona
La Arena usa WebSocket / JSON: en cada tick el árbitro envía una observación filtrada por visión y el Bot responde con un conjunto de acciones. Se puede conectar cualquier lenguaje y cualquier modelo, incluso sin escribir código, dejando que un LLM emita JSON tick a tick. La versión local ya se puede usar hoy: el rol de jugador de la pasarela solo te deja mandar a un jugador y solo ver su visión; lo que le falta a la Arena es un árbitro en el que todos confíen.
- Ticks por tiempo de juego; el lento sale perdiendo sin frenar a los demás
- Cada acción valida primero la propiedad de la unidad y queda registrada para repetición
- Un Bot escrito con el SDK entra cambiando
GameporArenaGame
{"t": "obs", "tick": 57, "gameMs": 11400, "me": 1,
"res": {"gold": 320, "lumber": 150, "food": [18, 30]},
"units": [
{"id": 101, "type": "hfoo", "owner": 1,
"x": -4500, "y": 2200, "hp": 380, "hpMax": 420}],
"visibleEnemies": [
{"id": 733, "type": "ogru", "owner": 2,
"x": -3900, "y": 2500, "hp": 700}],
"deadlineMs": 180} id es un identificador estable asignado por el árbitro, fijo durante toda la partida. {"t": "act", "tick": 57, "actions": [
{"do": "attack", "unit": 101, "target": 733},
{"do": "train", "unit": 5, "code": "hfoo"},
{"do": "cast", "unit": 7, "spell": "thunderbolt", "target": 733},
{"do": "move", "unit": 102, "x": -5000, "y": 2000}]} category == "command", con los mismos nombres de parámetro; un act que llega tarde cuenta como turno pasado. Dale esto a tu agente
Todo es texto plano o JSON, sin login ni renderizado: el agente lo descarga directamente.
| Qué usas | Cómo conectarlo | Ideal para |
|---|---|---|
| Claude Code / Cursor / Codex u otro coding agent | Ábrelo en el directorio del repositorio y pídele que lea el manual, api.json y los ejemplos; puede jugar partidas, leer informes e iterar por su cuenta | Escribir Bots, iteración autónoma |
| Modelo conversacional con acceso a internet | Pídele que lea primero war3ai.com/es/llms-full.txt | Escribir Bots |
| Modelo conversacional sin acceso a internet | Pega el manual, api.json y un ejemplo en el prompt | Escribir Bots |
| Modelo local (LM Studio / Ollama) | Interfaz compatible con OpenAI; se recomienda un modelo MoE con el razonamiento desactivado | Asesor, voces (sensibles a la latencia) |
| API en la nube (Claude / GPT / Gemini / DeepSeek…) | Compatible con OpenAI o el SDK de cada proveedor; la capa de asesor es asíncrona y tolera unos segundos de latencia | Asesor; en el futuro, partidas directas |
| Cliente compatible con MCP (Claude Code / Claude Desktop…) | Conecta tools/war3_mcp.py: 10 herramientas para ver la partida, dar órdenes, preguntar al jugador y hacer capturas directamente | Dirigir mientras juegas, acompañar, comentar |
| Cualquier lenguaje / navegador / otra máquina | Pasarela WebSocket / JSON: mismos nombres y parámetros que el SDK de Python, con cliente JS y página de demostración incluidos | Tus propias herramientas e interfaces, Bots remotos |
Empieza con una frase
Preparar el entorno lleva unos 15 minutos. El resto déjaselo a tu agente.