Running a Realm
A realm is an OTP release, a PostgreSQL history, an Ed25519 identity, an archipelago.toml, and a body of authored content. The current code runs one default realm per node. Multi-realm concepts exist in stream IDs and tests, but the SSH boot path still reads one configured default_realm and default_start_room.
The working surface
The engine already provides:
- immutable events, snapshots, projections, and upcasters
- room, item, NPC, detail, and conversation content
- SSH and WebSocket sessions
- parser, movement, speech, sensory verbs, inventory, local economy, and maps
- NPC schedules, scripted responses, memory, reflection, planning, and budget gates
- content-addressed rules and a Rhai sandbox
- capability and writ primitives
- formal speech records
- AFP/1 peering and border-signal propagation
- OpenTelemetry traces and structured logs
The sea layer, cross-realm transfer, customs, sealed mail, provenance chains, confederations, moderation console, archive, and atlas are not operational yet.
Authoring content
The durable source format is Markdown:
content/<realm>/rooms/*.md
content/<realm>/npcs/*.md
content/<realm>/items/*.md
mix content.new room my-realm/harbor
mix content.new npc my-realm/keeper
mix content.validate my-realm
mix content.seed my-realm
Rooms use frontmatter for identity and exits, an H1 for name, the first italic paragraph for the brief, body prose for the full description, and ## Details / ### name sections for examinable features. NPC headings encode greetings, topics, gift reactions, action reactions, idle lines, and schedules.
Seeding is additive. If a stream already contains events, mix content.seed skips it. Edit the source before first seed or use build-mode events afterward.
Live modes
The session model recognizes four modes:
| Mode | Prompt | Required capability |
|---|---|---|
| play | > | none |
| build | chart> | :write |
| script | rig> | :author_scripts |
| admin | watch> | :realm_admin |
The mode and command implementations are tested, but the current SSH account login does not load a capability into the connection state. Operators can exercise them through an embedded or test-harness connection; production account-to-capability assignment still needs wiring.
Tending the node
Watch PostgreSQL pool pressure, NIF failures, SSH and WebSocket connection rates, LLM envelope consumption, and federation link state. The admin dispatcher currently covers LLM budgets, ambient line-bank review, partial harbormaster controls, and peer management. It does not yet provide general player kick/ban/trust commands.
An operator should read absence as a boundary. If a command appears in a design specification but has no dispatcher or handler in the running branch, it is not part of the realm.