Files
sermo-bbs/README.md
T
mr.zeroandClaude Opus 4.8 25b985c7a2 Initial SERMO-BBS: a telnet PC that boots SERMO-DOS
A rubbs-based telnet server that drops every caller into a simulated PC:
it POSTs, boots, loads SERMO-DOS, and lands at a C:\> prompt. Built-in DOS
commands (VER/DATE/TIME/ECHO/MEM/DIR/CLS/HELP/EXIT) behave; anything else
is routed to Sermo::Oracle as a question — the hook for a future LLM.

Built on rubbs' configurable BBS::FakeOS engine; the whole OS lives in
lib/sermo/dos.rb as a FakeOS.define block, so new character-mode OSes are
added as config files, not engine changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 20:08:34 +02:00

65 lines
2.0 KiB
Markdown

# SERMO-BBS
A telnet server that drops every caller into a simulated PC. It POSTs, boots,
loads **SERMO-DOS**, and leaves you at a `C:\>` prompt. Built-in DOS commands
behave like the real thing; anything else you type is treated as a question and
answered by SERMO's conversational core.
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/dos.rb the MS-DOS profile (BBS::FakeOS.define): boot sequence,
DOS commands, and the on_unknown → conversation hook
lib/sermo/oracle.rb the conversational core (canned replies for now)
```
## Talking to SERMO / wiring an LLM
At the `C:\>` prompt, `VER`, `DATE`, `TIME`, `ECHO`, `MEM`, `DIR`, `CLS`,
`HELP` and `EXIT` are real commands. Type anything else and it goes to
`Sermo::Oracle.answer`, which currently returns canned, in-character replies.
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 (CP/M, an AmigaDOS CLI, …), drop a
new file in `lib/sermo/` and point the flow at it in `sermo.rb`. No changes to
the rubbs engine are needed.