Inspiration
BattleBots teams design blind. You pick a weapon, hope the weight math works out, and find out whether your armor holds on fight night. We wanted a design tool that answers the real question — what do I change about MY bot to beat THAT one — and does so with agents that argue it out and numbers from real fights, not vibes.
What it does
A browser CAD suite for combat robots with an agent society at its center.
- BUILD — parametric 3D CAD (React-Three-Fiber). Weapons, armor, drivetrains, and chassis under a real 250 lb weight budget, with live weight, center of gravity, and per-module HP. "Have Qwen look at it" sends a render of the actual viewport to
qwen-vl-max, which critiques the geometry — ground clearance, frontal profile against a spinner, weapon overhang — reconciled with the computed numbers. - AGENTS — the Counter-Design Studio. Five Qwen specialists (scout, weapon, armor, drivetrain, chief) negotiate the changes that beat a specific opponent, starting from whatever you have open in BUILD. You get a proposal ledger showing what the chief refused and why, a spec diff, the full tradeoff space searched, a per-specialist contribution breakdown, and a measured comparison against a single generalist agent given the same starting bot.
- ARENA — drop the design into a Rapier physics arena and fight a roster opponent. Auto-sim or drive it yourself. A Qwen fight-analyst delivers the verdict.
- META — a meta-intelligence dashboard over 61 real bots scraped from the BattleBots wiki: weapon-class tier charts, threat ranking, counter-build recs, leaderboard, fight videos.
- Toro — an in-app Qwen assistant that knows the app and the weapon-class meta.
How we built it
Everything decision-relevant is a pure, unit-tested function — 553 tests. The LLM, 3D, and physics are thin layers over that core. Four agent roles reason through Qwen on Alibaba Cloud Model Studio via one client (server/llm/qwen.js, OpenAI-compatible endpoint): the design specialists emit strict-JSON edits, the fight analyst emits a strict-JSON verdict + beat sheet, Freya is open chat, and the design reviewer is multimodal (qwen-vl-max).
The key discipline: Qwen can influence a build but never ship an unverified one. Every specialist enumerates every option on its axis and scores all of them against the specific opponent with a fight model fitted to real per-class win rates (Spearman rho = 0.83, pinned by a test). Qwen proposes; the proposal is re-scored server-side; the chief accepts only what improves the predicted margin and still fits the budget, and records every refusal.
Front end: React + Vite + React-Three-Fiber + Rapier. Backend: Fastify. Data: Bright Data → PostgreSQL, with a committed snapshot so the app runs offline.
Challenges we ran into
- Making the agent society real, not theater. Running the live path against Model Studio exposed that a specialist asked the armor question could answer with a drivetrain swap and have it accepted — quietly collapsing five specialists into one generalist. We now enforce that each specialist may only edit its own axis, and that an edit must actually change the build before it counts.
- Keeping the model honest. An LLM will happily propose a beautiful build that loses. Gating every proposal through a fitted, tested fight model — and reporting a measured gain over a single-agent baseline on every request — is what turns "five chatbots" into a society with an efficiency claim.
- Multimodal grounding. Feeding a live 3D viewport capture to
qwen-vl-maxand getting back a critique that reconciles what it sees with the physics, without letting that unmeasured opinion change the build.
What we learned
Agent societies earn their keep only when disagreement is resolved against a shared, measurable objective — otherwise you have a group chat. The most valuable output isn't the build; it's the refusal ledger: seeing what the chief rejected and why is what makes the negotiation trustworthy.
Accomplishments we're proud of
- A society that beats a single-agent baseline by a measured margin, computed live per request — not claimed.
- A fight model that agrees with real BattleBots per-class results at rho = 0.83, pinned by CI.
- Qwen used four ways, including a vision model that looks at your 3D robot and tells you how it'll get hit.
Built With
- alibaba-cloud
- bright-data
- dashscope
- fastify
- javascript
- model-studio
- multi-agent
- node.js
- postgresql
- qwen
- qwen-vl-max
- rapier
- react
- react-three-fiber
- three.js
- vite
- vitest
Log in or sign up for Devpost to join the conversation.