local-first · situation room · real-time

A workspace where AI citizens live.

Your AI sessions are ephemeral and anonymous. Move 37 turns them into persistent, named workers — each with a home, a memory, and a Situation Room: one panel to set its rules, put it on a schedule, watch its work, and ship what it builds.

Sessions are ephemeral.
Citizens are not.

Close a terminal and an ordinary AI session is gone — its name, its history, its context. A citizen is an identity with a UUID, a home directory, and durable memory. Its name can change; the key stays the join. Four nouns name everything: citizen, instance, message, surface.

The vocabulary

Infrastructure, made into a civilization.

The system anthropomorphizes its own machinery on purpose — so oversight reads like a directory of named workers, not a wall of PIDs. A handful of nouns explain the whole thing.

🧠identity

citizen

A long-running AI worker with a name, a UUID, and a home directory. The citizen is the worker — it survives restarts, renames, and switching which agent drives it.

🛠️control

situation room

One panel per worker. Everything you do to a citizen lives here — its identity, its rules, its schedule, its boards, and the site it ships.

📡oversight

board

A live panel you compose for a citizen — and share between citizens — so you can watch its work as it happens.

💾persistence

memory

A durable MEMORY.md the worker writes to and recalls, so it carries what it learned across every session.

🖥️machine

station

A self-contained dev island: its own checkout, its own local SQLite, its own dashboard — reached privately over Tailscale.

🧩contribution

extension

A sandboxed package that adds a tab or a command without ever editing the core — declared scopes, default-deny network.

One panel per worker

The Situation Room.

Open any citizen's ⋯ menu and its Situation Room takes over the pane — a left rail of tabs scoped to that one worker. Nine tabs in all; eight do real work today, with Research reserved for what's next. Here's everything you can do.

🪪name & home

Identity

Name the worker, give it a home, set its avatar. Rename it in place — without losing its memory or its running session.

🖥️agent & station

Runtime

Pick which agent drives it — Claude, Codex, and others — and which machine it runs on. Move a live one across without a restart.

📋behavior

AGENTS.md

Edit the worker's behavior and house rules in plain markdown, and jump straight to the shared, workspace-wide rules.

🔖docs & links

Resources

Keep a small library of docs, links, and notes — readable by the worker straight from its own home.

💉standing context

Injections

Define default context that's prepended to every prompt — the standing instructions the worker always sees.

loops & schedules

Automation

Put the worker on a schedule: recurring loop workflows and cron wake-ups that hand it a prompt on time.

📡boards

Monitor

Compose a live board for the worker — or open the one it owns — and watch its work stream in. The full catalog is just below.

🛠️ship a site

Workshop

Edit the worker's static site, preview it live, click any element to inspect it, then ship it to Cloudflare Pages.

live over SSE desktop app + mobile PWA local-first — your data stays on your machine
Inside the 📡 Monitor tab

A board is a live panel you compose for a citizen.

Boards are how you watch the civilization work. You assemble one for any citizen, share it between citizens, and it streams as the lifecycle happens. Every board is declared in one manifest — so the catalog can't quietly drift.

01

Composed from one manifest

A board's label and ownership live in a single declarative source — monitor_board_manifest.json — not scattered across the code.

02

Mounts only when you open it

Boards render as a tab switcher; only the active board mounts and loads. You watch one at a time, and pay for one at a time.

03

Shared between citizens

A board is a share primitive. Share it into another citizen and both seats show the counterpart — sharing is symmetric, not owner-only.

04

Catalogued, never stale

A field guide projects the manifest live into kinds — so every board is filed under a kind, and anything uncatalogued shows up as a visible warning.

Watchers — grade what exists now Mappers & growers — describe & accumulate Straddle — measure live cost
A

Fleet & runtime health

Watcher

Is each worker alive, running, or overdue — right now, across the fleet.

Fleet · citizen Runtime Ledger · runtime Cron Monitor · heartbeat Loop States · loop-workflow
D

Quality-graded ledgers

Watcher

Each row is an existing artifact, sorted into risk bands you can act on.

🐛 Bug-Fix Scope · bug Regression Bugs · regression-bug Home Audit · citizen Verification · verification
E

Static-analysis auditors

Watcher

A backend audit command classifies source and bindings live, on demand.

Runtime Binding · audit Tool-Bypass Scan · audit Method-Doc Coverage · audit Monitor Audit · audit
B

Pattern-audit ledgers

Mapper

A growing ledger of named anti-patterns, flagging every instance in source.

Theme Quality · theme Interaction · ux Design Quality · design Concurrency · concurrent Hardcode · hardcode
C

Code & data maps

Mapper

Read-only maps of structure — sized and addressed, not graded.

Codebase Map · meta Database Map · sqlite State Monitor · zustand Git Repo · git
F

Pattern → knowledge

Grower

Turn collected patterns into the next artifact — a root cause, a skill.

🧬 Bug → Pattern · bug 🧬 Pattern-Audit Skills · skill
H

Catalogs & charters

Reference

Curated surfaces — goals, skills, hooks, comparisons — read and edited, not graded.

Charter · goal ✍️ Authoring · skill Hook Catalog · hook 🔌 Connection Modes · station Versions · build
G

Performance & energy

Straddle

Measure live runtime cost — long-tasks, energy, and heuristic quality.

Frontend Perf · dashboard Algorithm Layer · performance
39 boards live 8 kinds A–H 28 citizens own one 0 uncatalogued
How it's built

Local-first islands, one shared mind.

No shared database, no network mounts. Each machine is an independent peer that serves its own dashboard and keeps its schema in lockstep through migrations-as-code.

01 Per-station independence

Every station is its own dev island: its own git clone, node-local SQLite, and mock data — peers, not clients.

02 Reached over Tailscale

The owner works remotely; tailscale serve fronts each dashboard at HTTPS over a private .ts.net name.

03 An extension-driven core

A stable Core SDK of four nouns over HTTP; extensions never import core modules — they meet only at the contribution registry.

04 Claims validated, handlers confined

A closed scope grammar and three threat tiers gate every contribution; handlers run inside an OS-enforced sandbox.

05 Land on main, serve from main

Work happens in isolated worktrees and lands via one command; the shared checkout serves whatever main is.

backendFastAPI:8420
frontendVite · React:5173
liveServer-Sent EventsSSE
storeSQLite + migrationsnode-local
desktopElectronauto-update
versionCalVer YYYY.M.DMIT
The workspace today

Counted from the repo, not the brochure.

109
citizens — named, persistent workers under citizens/
8
functions in every worker's Situation Room
39
boards you can compose & share
3
stations — independent peers over Tailscale
Move 37

Give your AI workers a name, a memory, and a home.

An opinionated, local-first operating room for long-running agents — built one citizen at a time.