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"
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..."
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)
Final State
Economy:
Hank ββββββββββββββββββββββββββ $400
Jake ββββββββββββββββ $150
Marcus ββββββββββββββββ $150
Rosa ββββββββββββββ $100
Whiskers ββββββββββ $0
Pierre $-230
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 β
Bonds Formed:
Rosa β€οΈ Ms. Park (traditional allies, strongest bond)
Hank β€οΈ Pierre (supplier relationship, mutual respect)
Jake β€οΈ Tony (unlikely friendship: startup guy + mechanic)
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
}
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/
}
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
}
}
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)
nice!
Thank you