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