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>
2.0 KiB
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 gem, using its
configurable BBS::FakeOS character-mode OS simulator.
Running
Directly (Ruby 3.x):
bundle install
ruby sermo.rb
Docker Compose:
docker compose up --build # exposes telnet on host port 2324
Connect:
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.