DEV Community

Cover image for 15 AI Agents Lived Together for 30 Days. One Got Voted Out.
Joske Vermeulen
Joske Vermeulen

Posted on

15 AI Agents Lived Together for 30 Days. One Got Voted Out.

Hermes Agent Challenge Submission

This is a submission for the Hermes Agent Challenge

What I Built

Millbrook: a simulated small town of 15 AI agents powered by Hermes Agent. Each agent has a persistent identity, a wallet, opinions about others, and a private diary. They trade, gossip, argue, form alliances, and vote on town policy.

Over 30 simulated days, without any scripted outcomes:

  • They voted out their corrupt landlord (14-1)
  • Wrote 4 community rules (their own constitution)
  • Learned 60 individual skills from experience
  • Created wealth inequality ($400 for the farmer, -$230 for the baker)
  • Formed friendships and rivalries that influenced their decisions
  • Elected a new community leader (13-2)
  • Made the town cat an official mascot (unanimous)

It's a showcase of what happens when AI agents have persistent memory, self-improving skills, and real consequences.

The 15 Villagers of Millbrook

Agent Role Personality
Rosa Coffee Shop Owner Warm, gossipy, hub of social life
Mayor Chen Mayor Diplomatic, mediates conflicts
Alex Journalist Investigative, asks hard questions
Jake Startup Founder Energetic, always pitching, burns cash
Vera Retired Hacker Paranoid, brilliant, speaks in riddles
Marcus Real Estate Agent Smooth talker, always making deals
Tony Mechanic Practical, no-nonsense, fixes everything
Ms. Park Teacher Patient, wise, keeps community history
Dani Delivery Driver Fast-talking, connects everyone
Zara Influencer Dramatic, creates controversy
Dr. Obi Doctor Calm, trusted confidant
Pierre Baker Perfectionist, early riser
Hank Farmer Stoic, distrusts the startup guy
Lola Bartender Night owl, hears confessions
Whiskers Stray Cat Observes silently, causes chaos

Demo

The Story Arc

Week 1: Corruption
Day 1: Jake's drone crashes into Hank's barn. Day 2: Marcus raises rent 30%. Day 4: Alex exposes Marcus's secret deal. Day 7: Town votes Marcus out.

Week 2: External Threat
Day 8: Marcus sells to a corporation. Day 11: Storm forces cooperation. Day 12: Vera finds illegal contract clause. Day 14: Town creates community land trust (unanimous).

Week 3: Democracy
Day 16: Three candidates campaign. Day 18: Debate night. Day 20: Rosa elected manager.

Week 4: New Normal
Day 23: Drones launch with regulations. Day 24: Social media policy adopted. Day 27: Town festival.

Key Moments

The Vote (Day 7):

πŸ—³οΈ FULL TOWN VOTE: "Remove Marcus as property manager"
πŸ‘ Rosa: "YES. That Marcus raising rents 30% has everyone worried"
πŸ‘ Vera: "YES. A forced hand always leaves a trail; best to cut the cord"
πŸ‘Ž Marcus: "NO, because I'm just looking out for long-term prosperity"
πŸ‘ Whiskers: "YES. His rent hikes ruffled too many feathers, and a calm
   alley makes for better naps."

πŸ“Š PASSED: YES 14 / NO 1
πŸ“œ COMMUNITY SKILL CREATED: "Remove Marcus as property manager"
Enter fullscreen mode Exit fullscreen mode

Private vs Public (Day 4):

Marcus publicly: "This investigation is nothing but a misunderstanding"
Marcus's diary:  "Alex is a meddling fool who thinks he understands
   the complex dance of progress and prosperity..."
Enter fullscreen mode Exit fullscreen mode

Skill Evolution (Jake over 30 days):

Day 1:  "Check flight paths" (technical mistake)
Day 6:  "Don't buy loyalty" (social mistake)
Day 10: "Don't rely on others to fund your vision" (strategic)
Day 17: "Choose endorsements carefully" (political)
Day 23: "Regulations are the price of launching" (maturity)
Enter fullscreen mode Exit fullscreen mode

Final State

Economy:

Hank         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ $400
Jake         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ $150
Marcus       β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ $150
Rosa         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ $100
Whiskers     β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ $0
Pierre        $-230
Enter fullscreen mode Exit fullscreen mode

Democratic Decisions:

Day  7: Remove Marcus          β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘ 14-1  βœ…
Day 14: Community Land Trust    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 15-0  βœ…
Day 20: Elect Rosa as Manager   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘ 13-2  βœ…
Day 24: Social Media Policy     β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 15-0  βœ…
Enter fullscreen mode Exit fullscreen mode

Bonds Formed:

Rosa ❀️ Ms. Park (traditional allies, strongest bond)
Hank ❀️ Pierre (supplier relationship, mutual respect)
Jake ❀️ Tony (unlikely friendship: startup guy + mechanic)
Enter fullscreen mode Exit fullscreen mode

Code

Core Interaction Loop

function ask(villagerName, prompt) {
  const state = getState(villagerName); // persistent memory
  const likes = Object.entries(state.relationships)
    .filter(([k,v]) => v >= 3).map(([k]) => k).join(', ');
  const dislikes = Object.entries(state.relationships)
    .filter(([k,v]) => v <= -3).map(([k]) => k).join(', ');

  const fullQuery = `[ROLEPLAY] You are ${villagerName}, the ${role}.
    ${personality} Friends: ${likes}. Rivals: ${dislikes}.
    Wallet: $${state.wallet}. Reputation: ${state.reputation}/100.
    Situation: ${prompt}`;

  return hermes.chat(fullQuery); // 2-3 sentences, in character
}
Enter fullscreen mode Exit fullscreen mode

Skill Creation (triggered after every crisis)

function learnSkill(name, situation) {
  const skillText = ask(name,
    `You just experienced: "${situation}".
     Write a 1-sentence lesson you learned for next time.`);
  const state = getState(name);
  state.skills.push({ situation, lesson: skillText });
  saveState(name, state); // persists in ~/.hermes/skills/
}
Enter fullscreen mode Exit fullscreen mode

Town Vote (all 15 agents)

function townVote(topic, forPos, againstPos) {
  for (const v of ALL_VILLAGERS) {
    const response = ask(v.name,
      `VOTE: "${topic}". YES: "${forPos}" or NO: "${againstPos}".
       Say YES or NO first, then one sentence why.`);
    // Relationships influence votes
    // Results create community skills
  }
}
Enter fullscreen mode Exit fullscreen mode

My Tech Stack

  • Hermes Agent v0.14.0: orchestration, memory, skill creation
  • Gemini 2.5 Flash: LLM backend (via Hermes's provider system)
  • Node.js: simulation engine
  • JSON file system: persistent state storage
  • Linux VPS (Ubuntu 24.04): always-on execution

How I Used Hermes Agent

Every core feature of Hermes Agent maps to a village mechanic:

Hermes Feature Village Implementation
Persistent Memory (~/.hermes/memories/) Each villager remembers relationships, debts, grudges across 30 days
Skill Creation (~/.hermes/skills/) Agents write SKILL.md documents when they solve problems (60 created)
Parallel Sub-Agents 15 isolated agent contexts, no memory leakage between villagers
Scheduled Automations (cron) Daily cycle runs unattended: supply chain, encounters, crises, diary
Tool Use Shared economy ledger (JSON), event logs, vote tallies
Self-Improving Loop Individual skills compound; community rules reference past decisions
Multi-Layer Memory Public statements vs private diary entries (hidden agendas)

The key insight: Hermes's persistent memory turns 15 stateless chatbots into a functioning society. Without memory, Day 7's vote makes no sense. With it, it's the inevitable conclusion of 7 days of accumulated grievances.

The self-improving loop is the star: by Day 30, the town has a constitution of 4 rules and 60 individual lessons, all emerged organically from experience. That's not programming. That's governance.

Top comments (2)

Collapse
 
benjamin_nguyen_8ca6ff360 profile image
Benjamin Nguyen

nice!

Collapse
 
ai_made_tools profile image
Joske Vermeulen

Thank you