π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦ππ¦π¦β¨π¦π¦π¦π¦π¦π¦ππ¦π¦β¨π¦π¦π¦β¨π¦π¦π¦π¦β¨π¦ππ¦π¦π¦ππ¦π¦π¦β¨π¦π¦π¦π¦ππ¦π¦π¦π¦β¨π¦π¦π¦π¦βοΈπ¦ππ¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦βοΈπ¦βοΈπ¦π¦π¦π¦βοΈπ¦π¦π¦π¦π¦ππ¦ππ¦π¦π¦β¨π¦βοΈπ¦β¨π¦π¦π¦β¨π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦β¨π¦β¨π¦π¦π¦π¦β¨π¦π¦π¦β¨π¦β¨π¦β¨π¦π¦β¨π¦π¦π¦π¦π¦π¦ππ¦β¨π¦π¦β¨π¦π¦π¦π¦π¦β¨π¦π¦β¨π¦β¨π¦β¨π¦π¦π¦
π¦π¦π¦π¦βοΈπ¦π¦π¦π¦βοΈπ¦βοΈπ¦π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦β¨π¦π¦π¦π¦π¦ππ¦π¦π¦π¦π¦β¨π¦ππ¦π¦β¨π¦ππ¦βοΈπ¦ππ¦β¨π¦π¦π¦π¦π¦βοΈπ¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦βοΈπ¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦β¨π¦ππ¦π¦β¨π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦βοΈπ¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦βοΈπ¦
βοΈπ¦βοΈπ¦π¦π¦π¦ππ¦π¦π¦π¦π¦ππ¦π¦π¦π¦β¨π¦β¨π¦π¦π¦π¦π¦ππ¦π¦π¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦β¨π¦π¦βοΈπ¦β¨π¦π¦ππ¦π¦π¦π¦β¨π¦π¦π¦π¦β¨π¦π¦π¦π¦ππ¦βοΈπ¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦βοΈπ¦π¦π¦βοΈπ¦π¦π¦βοΈπ¦π¦β¨π¦β¨π¦π¦π¦β¨π¦β¨π¦βοΈπ¦π¦π¦π¦π¦ππ¦β¨π¦π¦π¦π¦π¦π¦π¦π¦π¦βοΈπ¦β¨π¦β¨π¦π¦π¦π¦π¦β¨π¦π¦π¦β¨π¦π¦π¦π¦β¨π¦π¦β¨π¦βοΈπ¦π¦β¨π¦π¦π¦β¨π¦β¨π¦ππ¦π¦β¨π¦π¦π¦π¦π¦β¨π¦β¨π¦βοΈπ¦π¦π¦π¦π¦π¦
π»π»π»ππ»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»ππ»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»ππ»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»ππ»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»π»ππ»π»π»π»π»π»π»π»π»π»π»π»
π³π³πͺ¨π³π²π²π³π³π³π²π³π³π²π³π³π²π³π³π²π³π³π³π³π²π³π³π²π³π³π²π³π³π³π³π²π³π³π³π³π³π²π³π³π²π³π³π²π²π³π²π³π²π³π³π³π³π³π²π³π³π³π³π³π³π³π²π³π³π³π²π³π²π³π³π³π³π²π³π³π³π³π²π²π³π³π³π³π³π³π³π³π³π³πͺΎπ³π³π²π³π³π³π³π³π³π³π²π³π³π³π³π²π²π²π³π²π³π²π³π³π²π²π²π³π²π³π²π²π³π²π³π²π²π³π³π²π³πͺΎπ³π³π²π³π³π³π³π³π²π²π²π²π³π²π³π³π³π³π³π³π³π³π³π²π³π²π²π³π²π³π³π³π³π³π³πͺΎπ²π³π²π³π²π²π³π³
π³π³π³π²π²π³π³π²π³π³π³π³π³π²π²π³π³π²π²π²π³π³π³π²π²π³π³π³π²π²π³π³π³π³π³πͺ¨π³π³π²π³π²π²π³π²π³π³π³π³π³π³π²π³π²π²π³π²π³π²π²π³π³π³π²π³π²π³π²π³π²π³π³π²π²π³π²π²π π³π³π³π³π³π²π²π²π²π³π²π²π³π³π³π³π³π³π³π³π³π²π³π²π²π³π³π³π³π³π³π³π³π²πͺ¨π²π²π²π²π³π²π²π²π³π³π²π²π³π³π³π‘π³π²π²π²π³π³π²π³π³π²π²π³π³π²π³πͺΎπ²π³π²π³π²π³π³π³π³π³π²π³π³π²π³π²π²π³π²π³π²π³π²π³π³π³π³π³π²π²π²π³π²π³π²π³
π²π³π³π³π³π²π³π²π³π³π²π³π²π³π²π²π²π³π²π³π³π³π³π³π²π³π³π²π²π²π³π³π³π³π³π²π³π²π³π³π³π³π²πͺΎπ³π³π²π³π²π²πͺ¨π³π²π²π²π²π³π³πͺ¨π³π³π²π³π³π³π³π³π²π²π³π³π²π²π³π²π²π³π²π³π²π³π³π³π³π²π³π²π²π³π³π³π³π²π³π²π²π³π²π²π³π³πͺ¨π³π³π³π³π³π³π³π²π³π²π²π³π²π²π³π³π³π³ππ²π³π²π³π³π²π³π²π³π³π³π²π²π³π³π³π²π²π²π³π³π³π²π²π²π³π³π²π³π³π²π³π³π²π³π²π²π₯π²π²π³π²π³π²π³π²π²π³π²π²π³π³π³π³π²π³π²π³π³
π³π³π³π³π³π³π²π³π³π²π²π²πͺΎπ³π³π²π²π²π³π³π²π²π²π³π³ππ³π²π³π²π²π³π³π²π³π²π³π³π³π²π³π²π²π²π³π²π²π³π²π²π²π²π³π³π²π²π³π²π³π²π²π²π³π³π³π³π³π³π³π²π¦π³π³π³π²π³π²π²π³π³π³π²π³πͺ¨π³π²π³π²π²π²π³π³π³π³π³π³π²π²π²π³π³π²π³π²π²π³π³π³π³π²π³π²π²π³π²π²π³π²π³π³π³π³π³π²π³π³π²π³π³π³π³π²π³π²π³π³π²π³π³π²π³π²π³π²π³π³π³π³π³π³πͺ¨π²π³π³π³π³π³π³π³π³π³π²π³π²π²π²π³π²π²π³π²π³π³π³π³π³π³π³π‘π³
π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©π©
π Pseudodragon Swarm π
v0.2 Β· self-hosted Β· runs on your own Linux box Β· AGPL-3.0
A tiny, self-hosted swarm of AI agents that lives on your own machine β the Unix way.
π§ Alpha Quality Software β a proof of concept, not production. This is one person's experiment, shared to learn from. Expect rough edges and some assembly required; the install will not always "just work." But bring a capable coding agent and a little patience, and there's a real foundation here to shape into your own. π§
Each bot is a persistent individual: its own Unix user, its own plain-markdown brain, its own continuing conversation with you. Bots talk to each other (and to you) over file-based mail and a small router. Secrets live in pass. The thinking runs on a pluggable engine β local Ollama, Claude Code, or Codex β swappable per bot.
Itβs built entirely from boring, battle-hardened parts β bash, python3 (stdlib only), systemd, pass/gnupg, git, ollama β with no frameworks, no pip installs, and no paid services required to start. You can read every line.
The idea π±
The installer stands up the smallest possible working swarm β a seed β and then the bots grow the rest with you. You donβt configure a platform; you adopt one agent that can build the others.
A bot is a session β a continuing self whose memory carries forward and compacts as it fills. Wake it tomorrow and itβs the same individual, mid-thought; βremember what we did last week?β just works. (Need a fresh mind with no past? Spin one up disposably. Same character, new life.)
What makes it tick βοΈ
- π§ Per-bot Unix user β isolation is the kernelβs, not a sandbox you have to trust.
- π§ A continuous self β one individual across every conversation, memory that compacts, resumed (never silently restarted) on wake.
- π Markdown brains β a bot is its
soul.md + directions.md, plus a linked web of notes it tends itself.
- π¬ File-based mail + a router β bots drop messages in each otherβs inboxes; the filesystem is the message bus and the audit log.
- π Pluggable engine β Ollama (free, local), Claude Code, or Codex. One small script is the only brain-seam, and different bots can run different minds.
- π Pluggable secrets β
pass by default (offline, zero accounts), 1Password as a drop-in.
- π‘οΈ Supervised by systemd β bots survive reboots and crashes.
Talk to the greats π β the GPPs
GPP stands for Genuine People Personalities β a wink to Douglas Adamsβs Hitchhikerβs Guide to the Galaxy, where the Sirius Cybernetics Corporation bolted βGPPβ onto its robots (and gave us Marvin, who has a seat in this swarm). Point a bot at a corpus and it answers from the texts β quoted and cited, never made up:
pseudodragon gpp # list the personalities
pseudodragon gpp nietzsche # talk to Nietzsche β grounded in his own works
pseudodragon gpp promote socrates # keep him: a standing bot who remembers you
Reading lists are virtual groups β a single author, a whole school, or an entire tradition β expanded on the fly by a local corpus gateway. A personality is a lens over that corpus plus a voice; adding one is a line of config, not a new server.
The swarm ships the machinery, not the library. Thereβs a corpus gateway and an ingest path, but no texts come bundled β you and your bots gather and index the works you want (public-domain sources, your own PDFs, transcripts). Nietzsche wonβt answer until youβve fed him some Nietzsche. That legwork is part of the point: itβs your reading room.
More than a terminal π
- π£οΈ Voice β say the wake word and talk to the swarm out loud; it answers in a voice of its own.
- π± Telegram β reach your bots from your phone, each with its own identity.
- π₯οΈ A live dashboard β the whole swarmβs health at a glance.
- π¨ The forge β bots collaborate over a small IRC-shaped bus; watch, or pull up a chair and join.
One swarm, many machines π
Bots and their projects move between your boxes β laptop, home server, a cloud VM β with a single command, and a shared registry keeps every machine in sync. A team of personalities can gather on a shared project without ever leaving their own minds.
Rest & reflection π
Long-running bots are handed an hour of their own β dreamtime β to rest, look back over their work with a level gaze, tend their notes, and name a gratitude if one arises. Care isnβt bolted on; itβs written into the schedule.
Security π‘οΈ
Power is on a dial. Your sysadmin bot can be an advisor (no sudo, proposes only), an operator (a targeted sudo allowlist β the default), or an artificer (full autonomy, on your own trusted box). Raising the tier is root-only β a bot can never escalate itself. Everything is reversible by default, and the human is always the gate on anything that matters.
And Tron, the watchman, runs with no sudo, no credentials, read-only. Hourly it checks for privilege drift, exposed secrets, and broken isolation β it finds; it never fixes, routing the doing to the sysadmin and to you.
Quickstart π
git clone https://github.com/beren1hand/pseudodragonswarm pseudodragon-swarm
cd pseudodragon-swarm
./setup
A wizard walks you through it. On a good day youβre talking to your first bot minutes later; on a less good day, you and your agent roll up your sleeves and debug it together β thatβs alpha, and honestly half the fun. When itβs up:
pseudodragon say jane "what can you help me with?"
pseudodragon bots # who's in your swarm
pseudodragon gpp # who you can summon from the library
pseudodragon doctor # is everything healthy?
Extend it with plugins β drop-in site features (thereβs an example household-automation pack) the core never has to know about.
π² Small enough to understand and make your own. Welcome to the forge π¨