YC and Olam Labs Open-Source Game Agent Harnesses; GPT Teams Beat Claude 6-1 in Mindustry
TL;DR
YC Labs and Olam Labs published Agents in Games, a set of multi-agent experiments run in Minecraft and Mindustry. In a three-hour survival run, 50 GPT-6.1 Sol agents traded about 5,900 messages, and the agent listed first in the directory ended up in charge, with 616 DMs received. In head-to-head play, GPT-6.1 Sol teams beat Claude Opus 5.5 teams 6-3 in Bed Wars and 6-1 in Mindustry. The code is public: an MIT-licensed Minecraft agent harness, GPL-3.0 Mindustry environments, and an Apache-2.0 multi-agent fork of Harbor.
What got released
The YC write-up starts from the claim that multi-agent dynamics are one of the most pressing problems in AI alignment, and that studying them needs real experiments alongside formal models. Games are a cheap place to run those experiments: the world has rules and resources, a clock runs, and somebody wins.
You can run all three repos yourself:
minecraft-agent-harness(YC, MIT). It drives a regular Minecraft player through Mineflayer, and pi manages the model session. It supports Claude, GPT, Gemini, OpenRouter, or any endpoint that speaks the OpenAI Responses API. Sessions survive restarts, every agent gets its own shell (Docker, E2B or a local folder) for notes and scripts, and you define a team in one JSON file with DMs and an optional shared machine. YC credits Mindcraft as the inspiration.multi-agent-mindustry(Olam Labs, GPL-3.0). It has two tasks built on Mindustry, Anuken's open-source factory and tower-defense game. One is a PvP series of 1 to 100 consecutive games. The other is a cooperative Endless Survival mode for 1 to 20 seats.harbor-multiagent(Olam Labs, Apache-2.0). This fork of Harbor, the framework behind Terminal-Bench, puts several agents in one environment. Any harness and model can take any seat.
Getting a single agent started takes a few commands. The default model in the harness README is GPT-6.1 Terra:
npm ci
cp .env.example .env # add your provider key
npm run server # Paper 1.21.6 on localhost:25565
npm start -- --objective "Gather wood and build a small shelter near spawn"
Civ50: 50 agents, three hours, one objective
The biggest run put 50 GPT-6.1 Sol agents in one survival world with the objective "Build a thriving civilization." They got an agent directory, a shared sandbox and DMs. Over three hours they sent about 5,900 messages.
The opening was a land grab. Within 90 seconds the agents had cut down nearly every tree within reach of spawn. Then night came: 22 of the run's 34 deaths happened in the first 20 minutes. After that the survivors got cautious and took on fewer risky jobs.
The org chart came from a sort order
Leadership came from the directory. Ada was listed first and became the de facto leader. 46 of the other 49 agents sent their first message to her, and she received 616 DMs. YC notes there was "no vote, election or challenge." Picture a new company where everybody emails whoever sits at the top of the Slack member list, and by Friday that person runs operations.
The swarm also built a bureaucracy. Around a dozen agents fished in shifts for food, Ines kept a ration ledger, and Esme logged deliveries. One agent was appointed "sole fertilizer operator" for a single bone meal application, and arranging it took four agents 11 minutes.
The chicken incident
Ada tossed a cooked chicken to Noor. Esme picked it up and ate it. The swarm answered with a protocol: handoffs now go through named chests. The word "toss" appears in 7 messages before the incident and 125 after, and 85 of those 125 are warnings. If you have run a shared fridge, you have seen this.
Claude vs GPT: two series, same winner
Bed Wars
Nine 45-minute games put 10 Claude Opus 5.5 agents against 10 GPT-6.1 Sol agents, with the instruction "win the game." GPT won 6-3, usually by breaking Claude's bed in the last few minutes. Claude played defense and tried to win on kills.
Mindustry
In Mindustry PvP, two teams start on opposite sides of the map with the same resources and race to destroy the other team's core. Both sides got the same game API and no strategy instructions. Each agent ran in its own Linux sandbox and could write scripts. GPT-6.1 Sol ran in Codex and Claude Opus 5.5 in Claude Code. Neither harness had custom memory or tuning, so both relied on native context compaction.
GPT won 6-1 over seven games. The series took about 9.5 hours, and game 3, the closest, lasted 4 hours 16 minutes. YC says most games were close and Claude lost the last two more clearly.
How the teams behaved
- GPT worked like a hive. Its agents collaborated more, did more grunt work, and built denser communication networks, much of it low-value alerts and status pings. Over time their messages got compressed, with words run together and team-specific nicknames.
- Claude talked less and decided by "+1". YC describes its chat as closer to a human workplace: a proposal collected +1 votes, and debate happened only when someone objected.
- Claude never changed its org chart. Its leaders stayed in place after many losses in a row. When games got close, individual GPT agents took command of parts of the army.
- GPT read the game's source code. When stuck, GPT agents fetched Mindustry's public source to work out unit stats and mechanics, without modifying it. The Claude agents never did this.
In game 6 a 24-zenith air strike beat Claude, and a Claude agent then found that 55 of the team's 74 anti-air duo turrets were loaded with copper instead of graphite. In game 7 the Claudes built a ring of 207 graphite-fed duos and stopped the same strike. They still lost the game.
Why builders should care
Most multi-agent demos end once the agents have talked to each other. These environments also keep score and record replays. The Mindustry tasks write a game log with a keyframe every minute, and you can rebuild any seat's view as video after the run without rerunning the agents. The Harbor fork lets you put any harness and model in any seat, so mixing model families on one team is a config change.
The Civ50 hierarchy result applies outside games too. If your agent framework hands every worker the same roster, the first name on that roster can become a bottleneck nobody designed. Shuffle the directory, or assign roles on purpose.
Caveats
- Small samples. 9 Bed Wars games and 7 Mindustry games are not a benchmark. The repo README says its checks do not establish model performance.
- Harness and model are mixed together. The Mindustry series paired GPT with Codex and Claude with Claude Code, so you cannot separate the model from the harness.
- No costs. The write-up gives no token or dollar figures for any run.
- Single source for the numbers. Every figure comes from the YC Labs write-up. The repos confirm the tooling but not the game results.
YC lists open questions for others to run: mixed-model teams, many weak agents against fewer strong ones, how swarms scale, and what changes when you allow chat with the enemy or block chat between teammates.
Key Takeaways
- YC Labs and Olam Labs published multi-agent experiments in Minecraft and Mindustry and open-sourced the harness, the environments and a multi-agent Harbor fork.
- In a 50-agent GPT-6.1 Sol Minecraft run, the agent listed first in the directory became the leader, with 616 DMs and 46 of 49 first messages.
- GPT-6.1 Sol teams beat Claude Opus 5.5 teams 6-3 in Bed Wars and 6-1 in Mindustry, but the samples are small and the model is tied to its harness.
- GPT swarms chatted more and read the game's source code. Claude teams talked less, voted with +1 and never reshuffled their leaders.
- The repos are runnable today:
minecraft-agent-harness(MIT),multi-agent-mindustry(GPL-3.0),harbor-multiagent(Apache-2.0).
Sources: YC Labs: Agents in Games, yc-software/minecraft-agent-harness, olamlabs/multi-agent-mindustry, olamlabs/harbor-multiagent, Hacker News discussion, Anuken/Mindustry