Files
2026-06-05 20:33:20 +02:00

85 lines
3.7 KiB
Markdown

# 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.