Society
A terminal app where five persistent Claude personas answer questions, debate in rounds and get a facilitator to write up the consensus. Python, Textual, Anthropic SDK.

Society is a small multi-agent sandbox that lives in the terminal. Instead of one assistant, you get a standing committee of five, each a Claude call with its own system prompt, goals, backstory and colour, and they all see the same conversation.
| Name | Role | Temperament |
|---|---|---|
| Aria | Systems Architect | analytical |
| Rex | Critical Reviewer | skeptical |
| Nova | Creative Thinker | creative |
| Max | Pragmatic Engineer | pragmatic |
| Sage | Discussion Facilitator | diplomatic |
How it works
- Ask sends a question to every agent in turn. Each one sees the last 20 messages, with other agents’ lines tagged by name, so later speakers react to earlier ones.
- Debate runs three rounds: opening positions, then rebuttals (“challenge points you disagree with”), then a closing summary of where each agent agrees or disagrees.
- Consensus hands the transcript to whichever agent is diplomatic (Sage, by default) and asks for agreements, open disagreements and a proposed position.
- Memory is deliberately simple: each agent keeps a list of short notes with an importance score, capped at 100 and pruned to the 80 most important. The five most recent go into its system prompt.
State persists between invocations in ~/.society/session.json, so the CLI subcommands and the Textual dashboard share one ongoing society. The dashboard has agent cards with live thinking/idle status, the conversation panel and a memory inspector.
Running it
pip install -e .
export ANTHROPIC_API_KEY=sk-ant-... # or ANTHROPIC_AUTH_TOKEN from `claude auth print-oauth-token`
society spawn architect # or critic, creative, pragmatist, facilitator
society debate "monorepo or polyrepo?"
society tui # the dashboard
It’s a v0.1 prototype. The “evolve over time” part of the pitch is mostly the memory list; the agents don’t yet rewrite their own goals.