Inspiration

Strategy games are simplified down to what one player can handle. Options get buried in submenus and whole systems get cut before release, and the limit is never the simulation. It is how much a person can look at while the clock is running. A model does not have that limit, which means the depth can stay in and the game does not have to be flattened to be playable.

What it does

Overloaded is a Napoleonic real-time strategy game. You raise infantry, cavalry and artillery, group them into named formations, and fight over supply depots against a clock. The whole live match is published as nineteen WebMCP tools, so your agent reads the field and gives orders in the same tick you do, from the same match state, without a screenshot and without taking your pointer. It can also write standing orders — instructions the army carries out on its own, with no model involved.

How we built it

TypeScript with no game engine. Every unit and building is assembled from primitives in three.js, the terrain is painted to a canvas at load, and every sound is synthesised through the Web Audio API, so nothing is loaded from an asset file. The tools call the same command layer the interface calls: issue is what a right-click runs and add_rule is what the panel's new-order button runs, so both sides drive one match object.

Challenges we ran into

A tool call takes seconds and the game runs at twenty ticks a second, so an agent that only reacts is always acting on information that has already changed. That is what standing orders are for: the agent writes a rule once, and the game runs it the moment the thing it watches reports.

The second problem was discovery. The tools published one flat vocabulary while the interface filtered its dropdowns per formation, so an agent had to infer that a battery cannot charge. It now reports, for every formation and base, exactly which orders it can be given.

Accomplishments that we are proud of

Two people can command the same battle at once without either waiting for the other. And add_rule is a tool whose effect outlives the call it was made in — once written, the order runs with nothing in the loop.

What we learned

An agent surface is not just the list of things it can do. It is what the page tells the agent about what is possible right now, for this object. A capability that is technically available but not reported is one the agent will never use.

What is next

More arms and terrain, and a shared match where each side is commanded by a different person and their agent.

Built With

Share this project:

Updates

Submission history