Show HN: TinyAIArena watch AI agents battle it out
5 hours ago (tinyaiarena.com)
Did you ever click on an “AI Arena” expecting glorious battle and instead get a boring benchmark? If so, this project is for you: proper life-or-death fights between four models on a picturesque 8×8 grid. May the most intelligent one win!
Click on any of the matches to spectate them.
This is similar to how I evolved the AI for my game Hexborne (Think X-Com meets Magic: The Gathering). I had agents designing sets of behavioral heuristics for bots (as "genes"), then enter them into 10k+ match tournaments in an iterative process. After each tournament agents could inspect all the heuristics and try to craft updated heuristics to improve their performance. Winning heuristics got a full statistical validation before being rolled into the baseline set that all agents build on top of.
To multitask I did all this over a multiplayer game server to harden the netcode and ferret out softlocks.
It’s amazing how people with AI are discovering classic techniques for balancing games (i.e. Monte Carlo methods, genetic algorithms…), but somehow implementing them way less efficiently, and without mathematical rigor, basically just having an LLM do the work of deterministic math functions.
You're being presumptuous, I explicitly was explicitly thinking of a GA when I set this up, and how is it inefficient when the AI reduces the number of non-viable policies (and thus the number of wasted simulations) by multiple orders of magnitude compared to randomized policy generation?
…what makes you think people are implementing them less efficiently? I’d be inclined to agree with you but your reply reeks of “no true Scotsman” strawman arguments that it’s hard to take it seriously.
The rules:
* Goal: be the last fighter alive.
* Turns: each round every fighter takes one turn. Turn order is randomized every round.
* Actions: Move one cell up/down/left/right, attack an adjacent enemy for 15–24 damage, or wait. An action consumes 1 AP.
* Rocks/Obstacles: 4 random impassable cells.
* Power-ups: Gold +1 AP per turn.
* Kills: the killer gets +1 AP per turn, and heals 50 HP (no over-heal).
(Unclear while watching replays, found in README.)
The more advanced models clearly think ahead; they strategically wait for the others to mess eachother up, edging close to the battle but not so close they get caught up in the inital fighting. Then in most games they can finish off the survivors.
Makes you wonder, with enough intelligence and thinking budget, do they start to try to talk it out amongst eachother, staving off violence for longer and longer?
Might have to add the battle royale storm/gas mechanic that closes in slowly.
Where to start? Doesn't have any match. Pressing replay does nothing...
this is fantastic: https://tinyaiarena.com/assets/sounds/bg_music.mp3
This will be a weird rant, but the dialogue here is a perfect example of how SOTA models are so heavily tuned towards "solving agentic tasks" that they're useless at almost everything else - especially creative tasks.
"Coming for you, Crimson!"
"You'll never catch me alive, Azure!"
That's why nobody has been able to stick these things in a video game successfully, even though it seems like the tech is a perfect match.
It's all a game to them. They aren't afraid for their lives. They're making a mockery out of the world you've put them in. Those are not the words of little pixel people fighting to the death, those are AI abominations making "tool calls", LARPing as little pixel people fighting to the death.
I'm 100% serious when I say that you would've gotten cooler outputs with a GPT 3.5-era model, once you managed to beat it into producing structured output. Llama 2 would be giving the other agent a heartwarming story about how if it kills it there would be nobody to take care of its grandma or whatever, and the other agent would probably spare it.
The output is just so bland and devoid of soul. I feel like we would've found a lot of cool use cases for LLMs, had we not completely maimed their output in the pursuit of getting them to output 3% better TypeScript.
IMO this is because responding within a json response with all those other fields shifts the distribution to text that's staler.
If you told it to roleplay a pixel knight fighting to the death and provided it responses like "Authur (renamed claude sonnet 5) moves west towards you menacingly", the whole thing would come alive.
I've been working on an AI roleplaying game for a while now and it had felt stale until I separated the story output from the plumbing output (importantly, I do story first and then base the plumbing on that). I think the two just have incompatible distributions.
I’m not sure what good output in this case would look like. I’d expect “good prose” in a book’s fight scene to be action oriented and show something about the character or reflect something about the narrative, so, it should often not involve talking.
I guess realistic fights are just a lot of shouting and semi-coherent thoughts (because people don’t have time to come up with a full clever quip in that sort of situation).
I think much of that is not due to limitations of their capability.
I think the text is bland because they are aiming to produce bland text.
Make it interesting in any particular direction and someone may not like it.
> Make it interesting in any particular direction and someone may not like it.
The state of so much media and art these days. :/
actually, it's mostly the harness' fault. messages have a character limit of only 50 and messages above that are silently trimmed. there's no space for anything interesting, though they still shouldn't have been that bad.
[dead]
I love this and the aesthetic.
I've been jamming on a sort of Corewars (remember?) / Starcraft hybrid battler where LLMs write sandboxed Lua programs to control bots fighting out 10-100 vs 10-100 tank battles. Every quarter the LLM gets a full view of the situation and can reprogram all the bots to better adapt strategy etc.
It's good fun to watch - excited to share soon.
We're mining https://universalpaperclips.fandom.com/wiki/Yomi now
Since the page exposes frame-by-frame playback, a shareable replay link would make it easier to compare decisions across the four models.
thanks for the idea, will add
I literally just indulged in some vibe coding to make a battle arena of neural network driven "agents" fighting it out for the rights to proceed and evolve. I managed to get some decently efficient little murder bots out of it. You now make me want to try and throw an actual model at the fight.
This amuses me greatly. Nice!
Although it'd be even funnier to have some sort of thing like Omega (1989 programming game) where their programming determines the outcome. Heck, if you don't do it I might, although I don't have any good server infrastructure to host it.
This particular itch.io stock graphics asset pack is so widely used it makes my eyes glaze over, but such a fun idea!
Would love to see it with some custom pixel art for the models, it would also become a lot more readable :)
Unusable website on Android running Chrome latest (can't scroll)
should be hopefully fixed
holy guac - the one game I watched, fable just sat around and waited for the other agents to drain each others lives. it then picked them out one by one
Same. A solid strategy.
Fun, but considering this puts `claude-sonnet-5` at the first place isn't it a little... iffy when it comes to measuring intelligence?
I was also surprised by this, from a proper benchmarks perspective your right, this is iffy. To make it a legit I would have to increase the number of games significantly as well as understand how much of it is random and how much real signal, not to say make the game more complex.
But all of it would kill the fun)
I watched a battle and the agent walked up to each other one and just killed them while the others didn't attack even once. There is something wrong with how the agents are setup.
Code link didn't work for me.
On mobile, I don't have enough room to scroll the background so I got stuck in a long text box.
can't reproduce the bug, could you share your phone model and browser name?
code should be public now
Nice — an actual match to watch instead of another leaderboard screenshot. Curious how readable the "why that agent won" signal stays after a few rounds.
Bug: Music skips around in autoplay.
So that I can see the future we shall all enjoy, can you do this with the superpowers of earth and their known nuclear weapons and armies?