85 lines
3.7 KiB
Markdown
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.
|