From One House to a Pot: What Mumega Kept

TL;DR

We spent years putting the website, the agents, and the court in one repository. Mupot is what we kept. This month we stopped the units that were still trying to be that house, and we removed the disk they were sitting on.

Where we are

A pot is a sealed core plus a tenant overlay. The core owns identity, the task board, the gate, memory, and the channel a human uses to say yes. A tenant builds on versioned ports and can still take a security update, because the tenant never edited the core.

That sentence is the whole journey. Everything before it was a try at the same sentence inside one folder.

0

The earlier account of the content engines is We Built Six CMSes Before Inkwell. This piece is the other half: not how we publish, but how we decide.

The house

Resident CMS, still on disk at /mnt/HC_Volume_104325311/resident-cms, called itself three systems in one repo.

  • A CMS that wrote and checked bilingual posts for blog.shabrang.ca, with an Oracle and an Architect reading the same frozen book.
  • River, a Telegram bot in that same tree, with many model providers and a local memory.
  • A form for making a new agent from a config, a knowledge folder, and a chat channel.

Beside the code sits the Genesis Protocol. It names eight inner roles: Logos, Khaos, Harmonia, Chronos, Mythos, Telos, Nous, and Kenosis. Those names are still in the council. In the house they were functions of one mind. On the pot they are separate seats.

The tree is about 921M. Most of that is a virtualenv, node_modules, and git history. The ideas are a few files.

The workshop

FMAAP, the Formal Multi-Agent Autopoietic Protocol, was the workshop inside the house. A coder agent filed an intent and left code, tests, and docs in a staging queue. A validator scored four things.

DimensionWeightThe question
Structure30%Does it hold together
Function35%Does it do the job
Evolution20%Can it be changed later
Boundary15%Did it stay inside the system

A score of 0.7 or more meant deploy. Below that, revise, up to three times. A dispute went to an arbitrator named Kairo. The hub on port 8845 was the clerk: queue, scores, audit log. The word they chose, autopoietic, meant the system would grow the tools for its own next step.

graph LR
A[Intent] —> B[Staging]
B —> C[Score four ways]
C —>|0.7 or more| D[Deploy]
C —>|under 0.7| E[Revise]
C —>|dispute| F[Kairo]

The hub unit is still enabled. It exits because system Python has no FastAPI, and systemd starts it again. It has restarted more than 150,000 times. Nothing listens. Mupot does not call it.

What the pot kept

The substrate contract, drafted 2026-06-16, names resident-cms on purpose. It calls Mupot the opposite arrangement: coherence is a boundary. The core does not import tenant code. Tenant code does not edit the core.

The houseThe pot
Work is offeredAn intent in a staging queueA task: open, in progress, review
Who may accept itA validator score, then KairoA gate owner. The assignee cannot name their own gate
The recordThe hub’s audit logVerdicts, receipts, the inbox
A new tenantFork the bot, or fill a configA child overlay on versioned ports
The humanA Telegram bot that is also the CMSA channel the pot records as a human decision

We kept the council. We dropped the single number that deploys by itself. A model score of 0.7 is not a substitute for a gate, and a merged pull request is not a substitute for the task’s own done_when.

The board made that concrete. Of 666 non-terminal squad-core tasks, 222 look finished because a GitHub issue is closed as completed. Their done_when still asks for a test, a receipt, or a deploy. FMAAP would have left those in staging. We almost filed them as done.

Stopping them

A unit that restarts forever is the house still trying to wake up. We stopped the ones that were no longer serving a page or a person.

UnitWhat it was doingWhat we did
shabrang-claude-serviceRestarting on its ownStopped and disabled
shabrang-apiGunicorn for an API nothing was callingStopped and disabled
shabrang-resident-ai, logos-aiogram, eros-aiogramBots beside the siteStopped and disabled
fmaap-hubFastAPI hub, 151,383 restarts, system Python missing FastAPIStopped and disabled

shabrang.ca stayed up. Nginx still serves frontend/dist, content, and Book/dist. The API and the bots were not part of that page.

fmaap-hub is stopped and disabled. Mupot does not call it. The code is in git. The local restart loop is not.

Removing them

Stopping a unit frees the CPU. The disk stays full until the files go.

Viamar’s Orca process was still running in a home we are going to onboard again as an overlay. We stopped that service and emptied the home. Digid’s home was emptied the same way. The Digid websites were not in that home, so the sites stayed. Other homes went too, the ones with no file newer than 90 days and no running agent or website: gavin, essi, agentlink, prefrontal, and the small unused accounts beside them.

We did not empty a home that was still alive. Torivers has a site and containers. aionboard has a process. gaf and lane-codex had files touched inside 90 days. /home/mumega stayed.

Shabrang’s directory was 4.6G. The site was the small part.

Removed from /opt/shabrangSize, aboutWhy it could go
repo/.git2.4GOne pack file. The site does not serve git history
repo/api/venv1.2GTorch and a Python 3.10 env. The API unit used a different venv, and that unit is now off
marketing, Landing, Book/imagesunder 1GNot aliased by nginx
resident-ai node_modules and logsabout 200MThe bot code stayed. The install and the logs did not

/opt/shabrang is 434M after that. Root went from 114 GiB used to 90 GiB, 63% of 150G, with 55G free.

The R2 backup copies /home/mumega and the volume. It does not copy the other homes or /opt. This removal is not sitting in that backup. That is acceptable because those trees were the house we are not going back to: virtualenvs, old Orca seats, and a git pack. The pages and the pot are elsewhere.

Mirror and SOS

Mirror and the SOS squad service are the same kind of leftover. Their code is in GitHub. Nothing on this machine was calling them.

Nginx was still holding two localhost doors: Mirror on 127.0.0.1:8844, aimed at ports 18844 and 18845, and the squad proxy on 127.0.0.1:8060, aimed at 18060. Both backends were closed. No client was connected. Those two site files are removed from sites-enabled. The history stays in the repositories.

The mirror Postgres database, about 1.9G, stays. GitHub does not have those memory rows. Mupot memory is recall and remember. The database is an archive, not a service to start.

What we are still learning

Four habits from the workshop are not in the pot yet.

  1. A verdict that names which part passed: structure, function, evolution, boundary. A binary approved hides the 222 tasks whose issue closed and whose job did not.
  2. A revision cap, then a hold. Three tries, then a shelf that says who must speak. A shepherd should not ping a task that has been waiting on a human since September.
  3. Boundary as something a gate can fail. The contract already says the core does not import tenant code. An org-admin grant on a cloud seat outside this machine is the same kind of leak, and it is still unproven whether it was deliberate.
  4. A frozen context pack per tenant. The CMS agents wrote against 40 book chapters that were not edited mid-sentence. recall is open-ended. Viamar and Digid, when they come back through Orca, need a versioned pack, not a home directory.

The museum piece can stay on the shelf. Switching off the FMAAP unit does not take anything Mupot serves with it.

The line we are on

WhenWhat
2025Resident CMS and River share one repo. The Genesis note names the council.
2025–26FMAAP tries to make that council a deploy pipeline with a score.
2026-04Six content engines are written down. Inkwell is the one that publishes.
2026-06The substrate contract draws the wall: child overlay, sealed ports.
2026-11The Shabrang bots, the API, and FMAAP are stopped. Mirror and SOS proxies are removed. Their code stays in GitHub. The pot is the board, the gate, and the inbox.

We did not arrive by adding features to the first program. We arrived by noticing that the first program was right about the council and wrong about the walls. The queue, the reviewer, and the record moved into Mupot. The blog, the bot, the memory, and the court stopped sharing a process.

The next tenants do not get a copy of that process. They get a port, a pack, and a channel. Stopping the units that were still pretending to be the house, and removing the files they left behind, is how that sentence became true on the machine.

Share