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>
65 lines
2.0 KiB
Markdown
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.
|