# SERMO-BBS A telnet server that drops every caller into a simulated **Margittai machine** from the [Neumatronic universe](https://wiki.teletypegames.org/en/projects/neumatronic-universe/universe/alternative-history). It runs a dual-architecture power-on, loads **SERMO** — *„a Szó"*, the Word — and leaves you at a green-phosphor `> ` prompt. SERMO is the canonical OS of the dual machine: a *single* prompt with *two* destinations. A literal, exact command goes to the **digital** side (the first, von Neumann architecture) and is served by built-in commands; anything typed in **natural language** is treated as a question and routed over the **ADI-76** bus to the **Lapis-ACP** (the second, analog-cognitive architecture) — SERMO's conversational core. Black screen, green letters, one blinking line: exactly as the canon describes it. Built on the [rubbs](https://git.teletype.hu/tools/rubbs) gem, using its configurable `BBS::FakeOS` character-mode OS simulator. ## Running **Directly (Ruby 3.x):** ```bash bundle install ruby sermo.rb ``` **Docker Compose:** ```bash docker compose up --build # exposes telnet on host port 2324 ``` Connect: ```bash telnet localhost 2323 # or 2324 with docker compose ``` ## Configuration | Variable | Default | Description | |------------|---------|--------------------------------| | `BBS_PORT` | `2323` | TCP port to listen on | | `BBS_IDLE` | `900` | Idle seconds before disconnect | ## Layout ``` sermo.rb entry point — config, flow, BBS.start lib/sermo/sermo_os.rb the SERMO profile (BBS::FakeOS.define): dual-architecture boot, the digital-side command table, and the on_unknown → ACP hook (natural language over the ADI-76 bus) lib/sermo/oracle.rb the Lapis-ACP conversational core (canned replies for now) ``` ## Talking to SERMO / wiring an LLM At the `> ` prompt the **digital side** answers literal commands: `VER`, `DATUM`, `IDO`, `MOND`, `MEM`, `KAT`, `ADI`, `VOX`, `CLS` and `KILEP` (English aliases like `DATE`, `TIME`, `ECHO`, `DIR`, `EXIT` still work; `SUGO`/`HELP`/`?` lists them). Type anything else and it crosses the ADI-76 bus to the **Lapis-ACP** via `Sermo::Oracle.answer`, which currently returns canned, in-character replies (its voice follows the canon — *ExistentialAI* and *Nokia-punk*: a doubting, intimate machine, because there is no other interface). To make SERMO actually think, replace the body of `Sermo::Oracle.answer` (`lib/sermo/oracle.rb`) with a call to your model and return its text — that method is the only integration point. ## Adding more operating systems A simulated OS is pure configuration: a `BBS::FakeOS.define { … }` block with a `prompt`, `colors`, a `boot` sequence, a `command` table and an `on_unknown` fallback. To add another character-mode OS from the universe (an earlier Sermo line, a **DOS/NT** operator terminal, a **ProDOS X** session…), drop a new file in `lib/sermo/` and point the flow at it in `sermo.rb`. No changes to the rubbs engine are needed. ## Lore references - [Alternative History](https://wiki.teletypegames.org/en/projects/neumatronic-universe/universe/alternative-history) — Neumann's dual architecture; Sermo („a Szó"), Vox, the ADI-76 bus, the roots of terminal/BBS culture. - [Reference Tables](https://wiki.teletypegames.org/en/projects/neumatronic-universe/universe/reference) — system software (Sermo, Solus), Lapis/Sonus hardware, ADI-76. - [ExistentialAI](https://wiki.teletypegames.org/en/projects/neumatronic-universe/universe/existential-ai) & [Nokia-punk](https://wiki.teletypegames.org/en/projects/neumatronic-universe/universe/tone-bible/nokia-punk) — the ACP's voice and the screen's mood.