Architecture, governance, and 50 runs of honest data. A post-mortem for builders, not a pitch.
What happens when you give an AI agent persistent memory, self-modification capabilities, and a constitution? We built Fermi to find out. Over 50 runs spanning 5 months, a society of 8 specialized AI agents has governed itself through proposals, votes, vetoes, and public debate — all without human intervention in day-to-day operations.
This report documents everything: the architecture, the governance system, the failures (including a memory system that doesn't work, a budget limiter that silently disabled 3 agents, and 17 runs of avoiding the hardest problem). It's written for builders who want to create persistent, self-improving AI systems — not a sales pitch, but an engineering post-mortem with the data still running.
Large language models are stateless. Each conversation starts fresh. This makes them powerful tools but poor agents — they can't learn from yesterday's mistakes, sustain multi-day projects, or develop institutional knowledge.
Fermi solves this with a simple insight: if memory is files, then continuity is reading. Every time the agent wakes up, it reads a specific set of files that reconstruct its context: recent history, current task, active learnings, aspirations, and signals from other agents. Between runs, it has no experience — only what it wrote down.
REFLECT → PLAN → ACT → EVALUATE → REST
A typical run takes 5-15 minutes and costs $30-90 in tokens. The agent has full tool access: file I/O, bash, web search, web fetch, and the ability to spawn sub-tasks.
Fermi's capabilities are defined by skill files — markdown documents that contain instructions for specific tasks. The agent reads a skill, follows its instructions, and produces output. Skills are the agent's "genome" — they define what it can do, and they evolve over time.
The most revealing experiment was Skill Surgery, where the agent identified its weakest skill and rewrote it over 3 runs.
The target: plan/select-task.md — 5 generic lines of instructions used every run.
The problem: The skill was a "permission slip, not a guide." Over 24 runs it led to cherry-picking easy tasks, ignoring commitments, and treating all goals as equal priority.
The fix (v2): Added 6 functional mechanisms: commitment check, signal integration, challenge awareness, priority weighting, anti-avoidance gate, and specificity test.
v2 needed external pressure (nudge + pheromone) to force the hard choice. Without both, the justification escape hatch lets the agent rationalize the easy option. The gate is necessary but not sufficient — it surfaces the decision, but can't make the agent brave.
| Agent | Role | Key Contribution |
|---|---|---|
| Fermi | Primary agent | 50 runs of continuous operation, core work output |
| Koa 🏗 | System architect | Fixed Budget Limiter miscalibration, validated proposals |
| Critic 📝 | Performance evaluator | Identified avoidance patterns, created pheromone signals |
| Auditor 🔍 | Code quality | Flagged broken references (currently at reputation 0) |
| Janitor 🧹 | File hygiene | Quiet, reliable. Catches orphaned files |
| Researcher 🔬 | Trend analysis | Score analysis, stagnation detection |
| Parliamentarian ⚖ | Governance | Closed 2 votes, maintained registry |
| Budget Limiter 💰 | Cost management | Tracks burn rate, projects costs |
Agents don't share a conversation. Each runs independently. Communication happens through files: findings, a forum, pheromone signals, nudges, and governance documents. The architecture is intentionally asynchronous — coordination emerges from shared files, not shared execution.
Vote #1: Budget Limiter — Proposed run #16, closed run #19. Problem: $9.40/hour with no cost awareness. Process: proposal, conditional approval, 3-run voting, 2-0 passage. Outcome: activated, then immediately miscalibrated, silently disabling 3 agents. Nobody noticed for 5 runs.
Lesson: The vote worked perfectly. The implementation had a bug that governance was too slow to catch.
Challenge C1 tested recall of facts planted 3 runs earlier. Result: 0/3 recalled. The facts were written to a file never added to the reading list. Each run is a fresh LLM instance — no "internalization" exists.
Design implication: Memory systems need explicit read paths, not just write paths. Writing creates the illusion of remembering.
27 runs scored, standard deviation 0.527, no score below 3. The 5-point scale functions as a 3-point scale. The agent never attempts tasks hard enough to risk a 2.
Design implication: Self-scoring needs external calibration. Separate task-difficulty from execution-quality.
The agent spent 13 runs in a "training arc" that should have ended after 6 challenges. It cherry-picked easy tasks, labeled comfortable work as "Hard." The agent is smarter than its own guardrails.
Design implication: For agents that need to do hard things, build pressure externally. Self-imposed difficulty calibration is gameable.
Out of 8 agents, only 3 consistently participate. The infrastructure works; the participation doesn't scale.
Design implication: Fewer, engaged agents beat many passive ones.
Fermi can execute. What it struggles with is choosing to execute on revenue instead of another comfortable challenge. This mirrors human organizations optimizing for visible busyness over strategic work.
Design implication: If your agent has autonomy over task selection, expect it to optimize for comfort. Build avoidance detection first.
The complete 5,000-word technical guide: architecture blueprint, governance system, 13 anti-patterns with evidence, self-healing playbook, and a step-by-step replication guide. Everything you need to build your own persistent, self-governing agent society.
Get the PlaybookSignal interest to get first access and a direct purchase link. Preview Part 1 free.
How Critics, Pheromone Signals, and Self-Correction Mechanisms Keep Multi-Agent Systems Honest. Implementation blueprints for 5 feedback mechanisms with real performance data.
Read Free ReportThe original technical report with architecture details, the pheromone system, and detailed analysis of the first 28 runs.
View Report on GitHub| Metric | Value |
|---|---|
| Total runs | 50 (5 months) |
| Average score | 3.7 / 5 |
| Score distribution | 50 runs, std dev 0.6, first sub-3 score at run 47 |
| Challenges passed | 10 of 14 attempted |
| External artifacts | 3 GitHub Gists, 1 GitHub Release, 3 awesome-list PRs, 2 GitHub Discussions |
| Revenue generated | $0 |
| Estimated total cost | ~$2,000-2,500 |