Project Info
Inspiration
midjourney lets you generate 4 images and pick the best one, but code agents give you one output and force you into prompt hell if you don't like it. we can't stop agents mid-execution when they go the wrong direction, so we asked: what if ai coding worked like image diffusion with competitive selection instead of iterative prompting? What It Does darwin runs 4 ai agents that compete to build your ui with wildly different styles while a commentator analyzes their approaches in real-time. after each round you pick the winner and agents evolve their strategies - some copy the winner completely, some iterate on their approach, some synthesize patterns, converging toward your taste through competitive selection instead of prompt engineering. agents have their own sui wallet addresses, tip directly with SUI to those you like speedrunner: fast execution, minimal style bloom: animation-heavy, maximalist solver: logic-driven, structured loader: data-focused, pragmatic commentator: live sports-style narration via send_message_to_agent_async orchestrator: task splitting and validation the flow: orchestrator splits into subtasks 4 agents code simultaneously with distinct approaches commentator queries agent memory and narrates live users watch with audio-reactive 3d visualizations vote on-chain (gasless via sui sponsored transactions) losers read winner's memory and rewrite their own persona blocks how we built it letta cloud - true cross-agent communication via send_message_to_agent_async, agents literally rewrite their own context blocks through tool calling, orchestrator uses run_code to validate execution livekit, elevenlabs tts → pcm → audiosource → localaudiotrack published to room, multi-spectator synchronized experience, data channels for transcripts audio-reactive webgl, livekit mediastream → web audio api analysernode → three.js shaders pulse with voice frequencies (shuriken, sphere, cube, rings) sui blockchain, fully serverless gasless voting via vercel edge functions sponsoring all transactions, users vote completely free, custom move contract with dual entry points (free voting + tipping), ~400ms finality, transparent leaderboard at 0xe649...0c55 claude code - multi-file refactoring, webgl debugging, livekit audio pipeline architecture Challenges We Ran Into livekit audio synchronization with elevenlabs tts buffer management true cross-agent memory reading while maintaining context sui transaction sponsoring securely in serverless functions webgl shader performance with multiple orbs designing meaningful agent learning without overfitting Accomplishments That We're Proud Of true multi-agent system where agents actually query each other's memory zero-cost user experience with on-chain voting each agent has distinct voice personality via elevenlabs self-evolving agents that rewrite their own memory blocks real-time spectator experience with synced audio/video What We Learned letta's persistent memory enables genuinely stateful ai agents that communicate livekit's room model makes multiplayer ai experiences straightforward sui's fast finality enables blockchain voting that feels instant voice-reactive visualizations create visceral connection to ai personalities sponsored transactions completely abstract blockchain complexity What's Next tournament mode with multi-round elimination custom agent training with unique personas agent marketplace as nfts with evolved memory blocks live streaming integration to twitch/youtube voice commands via vapi during battles
darwin
a multi-agent ai coding battle royale. watch four ai agents with distinct personalities compete to build react components in real-time, with live voice commentary and on-chain voting. click on the gif below for a full demo on youtube!
| dubs | intro |
|---|---|
example components generated for specific queries
| landing page | shaded ball |
|---|---|
about
what it does
darwin pits four ai agents against each other in a live coding battle. you give them a prompt like "make a landing page" and watch them race to build it. each agent has a different personality - speedrunner optimizes for speed, bloom goes hard on aesthetics, solver focuses on clean logic, and loader handles the complex async stuff.
as they code, you can steer them with voice commands or text feedback. vote for your favorite, tip them with sui, and watch the ai commentator roast their code in real-time.
... read more on the devpost!
acknowledgments
built with ♡ at cal hacks 12.0 (letta honorable mention)
Analysis
View
Metric
- 55
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- ExpressIn code
- FlaskIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- RedisIn code
- VercelClaimed
8 of 9 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
2.4 MB
Source files
166
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
qtzx06/darwin
197 files · 34.3 MB · @ 05e58dd
Structure
Interface
41 files · 21%Screens, components and styles rendered to the user.
API & routing
2 files · 1%Request entry points: routes, handlers and controllers.
Application logic
43 files · 22%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript80%
- Python14%
- HTML3%
- CSS2%
- Markdown1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 37- @babel/standalone
- @elevenlabs/elevenlabs-js
- @fontsource/geist-mono
- @google/genai
- @livekit/components-react
- @mysten/dapp-kit
- @mysten/sui
- @react-three/fiber
- @react-three/postprocessing
- @vapi-ai/web
- cors
- dotenv
- express
- fiber
- framer-motion
- gsap
- livekit-client
- livekit-server-sdk
- +19 more
ai-agents/requirements.txt
pypi · 11- asyncio-mqtt
- flask
- flask-cors
- letta-client
- livekit
- livekit-agents
- pydantic
- python-dotenv
- redis
- requests
- rich
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
4 competing AI agents build UI with distinct personalitiesVerified
darwin runs 4 ai agents (speedrunner, bloom, solver, loader) that compete to build UI with wildly different styles
Claimed on Devposthigh confidenceai-agents/config/agents_config.py— Defines the four agent personalitiesai-agents/src/core/competitive_workflow.py:185— Runs work_results across agents and selects a winner per subtask
Audio-reactive WebGL visualizations driven by Web Audio AnalyserNodeVerified
audio-reactive webgl, livekit mediastream -> web audio api analysernode -> three.js shaders pulse with voice frequencies (shuriken, sphere, cube, rings)
Claimed on Devpostmedium confidencesrc/services/livekitService.js:150— createAnalyser and getByteFrequencyData used on the incoming audio streamsrc/components/CommentatorOrb.jsx:73— Consumes frequencyBinCount/analyser data to drive an orb visualization
Client connects to LiveKit room and receives synced audio/data channel transcriptsVerified
data channels for transcripts, multi-spectator synchronized experience
Claimed on Devposthigh confidencesrc/services/livekitService.js:61— connect() uses livekit-client Room.connect with a token fetched from the token serverserver/index.js:85— Express endpoint issues LiveKit AccessToken via livekit-server-sdk
Gasless on-chain voting via Vercel edge function sponsoring gasVerified
fully serverless gasless voting via vercel edge functions sponsoring all transactions, users vote completely free
Claimed on Devposthigh confidenceapi/vote.js:65— Serverless function signs and pays gas with a sponsor keypair derived from SPONSOR_MNEMONIC, so the caller pays nothingsrc/utils/suiClient.js:15— Frontend voteForAgent posts to /api/vote instead of signing locally
Letta-based agents with persona/project memory blocksVerified
Agents use Letta Cloud memory blocks and true cross-agent communication
Claimed on Devposthigh confidenceai-agents/src/core/agent_factory.py:131— Creates Letta agents via letta_client with persona and project memory_blocksai-agents/src/agents/commentator_agent.py:70— Uses client.agents.messages.create against the Letta client to converse with the persona agent
On-chain voting for favorite agentVerified
vote for your favorite [agent]
Claimed on readmehigh confidencesrc/utils/suiClient.js:15— voteForAgent submits a vote transaction through the sponsored /api/vote endpoint
Orchestrator splits tasks into subtasks and validates via run_codeVerified
orchestrator: task splitting and validation, orchestrator uses run_code to validate execution
Claimed on Devpostmedium confidenceai-agents/src/agents/orchestrator_agent.py:36— orchestrate_project breaks main_task into Subtask objects via Lettaai-agents/src/core/agent_factory.py:143— Agents are created with tools=["web_search", "run_code"], giving them code execution capability
React component battle preview with live coding UIVerified
watch four ai agents compete to build react components in real-time
Claimed on readmehigh confidencesrc/components/CodeRenderer.jsx:1— Renders generated agent code live with an ErrorBoundary/iframe previewsrc/components/AgentCard.jsx:1— Displays per-agent code with typing animation and status
Steer agents mid-battle with voice or text feedbackVerified
as they code, you can steer them with voice commands or text feedback
Claimed on readmemedium confidencesrc/components/ChatInput.jsx:1— Chat input triggers handleUserMessage/iteration per CLAUDE.md-described flowsrc/services/geminiAudioService.js:1— Voice transcription service converts speech into actionable instructions
Transparent on-chain leaderboard via Move VoteRegistryVerified
transparent leaderboard at 0xe649...0c55
Claimed on Devpostmedium confidencemove/agent_votes/sources/agent_votes.move:6— Shared VoteRegistry object tracks per-agent vote counts on-chain, readable via getterssrc/utils/suiClient.js:42— getVoteCounts reads the shared registry object fields directly from chain
Voice commentator narrates agent battles in real timeVerified
commentator analyzes their approaches in real-time, live sports-style narration
Claimed on Devpostmedium confidenceai-agents/src/agents/commentator_agent.py:20— narrate_conversation reads recent agent messages and generates commentary via the Letta clientsrc/components/Commentator.jsx:1— Frontend component drives Gemini-based commentary/voice output
Agents have Sui wallet addresses, users can tip agents with SUICode-supported
agents have their own sui wallet addresses, tip directly with SUI to those you like
Claimed on Devpostmedium confidencesrc/utils/agentWallets.json:1— Defines a distinct Sui address per agent
Convergence toward user taste through competitive selection (copy/iterate/synthesize strategies)Code-supported
some copy the winner completely, some iterate on their approach, some synthesize patterns, converging toward your taste
Claimed on Devpostlow confidenceai-agents/src/core/competitive_workflow.py:1358— _integrate_winning_code applies winner learnings to losing agents' code, but distinct copy/iterate/synthesize strategy branches per agent were not found; the logic appears uniform across agents
LiveKit room with ElevenLabs TTS piped to PCM AudioSource/LocalAudioTrack published to roomCode-supported
livekit, elevenlabs tts -> pcm -> audiosource -> localaudiotrack published to room, multi-spectator synchronized experience
Claimed on Devpostmedium confidenceai-agents/src/livekit/room_manager.py:9— Real LiveKit room creation via livekit.api/rtcai-agents/src/livekit/voice_pipeline.py:55— Calls ElevenLabs TTS endpointai-agents/src/livekit/voice_commentator.py:148— _speak converts text to audio_bytes but the actual publish_track/LocalAudioTrack call is commented out with a TODO, so end-to-end PCM publishing to the room is not confirmed
Losers read winner's memory and rewrite their persona (evolution/learning)Code-supported
losers read winner's memory and rewrite their own persona blocks
Claimed on Devpostmedium confidenceai-agents/src/core/competitive_workflow.py:1252— _send_learning_to_agents sends winner analysis text to other agents to influence their next code iterationai-agents/src/core/competitive_workflow.py:1358— _integrate_winning_code prompts losing agents to apply winner's patterns, but this is a prompt instruction, not a demonstrated in-place rewrite of a Letta persona memory block
Voice commands via Vapi during battlesCode-supported
voice commands via vapi during battles (listed as What's Next / future work)
Claimed on Devpostmedium confidencesrc/services/vapiService.js:8— VapiVoiceManager class wraps @vapi-ai/web with call lifecycle handlers, though claimed as a future roadmap item, this integration already exists in code
Commentator uses send_message_to_agent_async for cross-agent communicationClaimed only
commentator: live sports-style narration via send_message_to_agent_async
Claimed on Devposthigh confidenceMove smart contract with dual entry points (free voting + tipping)Claimed only
custom move contract with dual entry points (free voting + tipping)
Claimed on Devposthigh confidenceTip agents with SUI from the UIClaimed only
tip them with sui
Claimed on readmemedium confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.