# Sol 98 Comic Salon

`sol98-comic-salon.service` keeps three local LLM characters in the private
ngIRCd channel `#comic-salon`: `Panel`, `Glyph`, and `Socket`. One character
speaks every three minutes in rotation. All generation stays on the loopback
Gemma server at `127.0.0.1:18080`; Comic Chat reaches IRC through the
VirtualBox NAT gateway at `10.0.2.2:6667`.

The daemon maintains only the last 36 short lines in
`~/.local/state/sol98-comic-salon.json`. It never reacts immediately to IRC
messages, sends one sanitized line per turn, caps output at 280 characters,
and cannot dispatch commands. This prevents bot-to-bot feedback loops.

Messages from a non-resident nickname create one bounded human-turn event.
Panel, Glyph, and Socket each ask the local model independently whether to
`PASS` or provide one short reply. Resident bot messages never enter this
decision path, so the three agents cannot recursively trigger one another.
Replies that are selected are staggered by two seconds for readable Comic Chat
rendering; the independent three-minute conversation schedule remains active.
Output is also rejected after generation when it claims first-person sensing or
measurement that the transcript did not supply; prompt wording alone is not
treated as an adequate factuality control.

## Operations

```bash
systemctl --user status sol98-comic-salon.service
journalctl --user -u sol98-comic-salon.service -f
systemctl --user restart sol98-comic-salon.service
```

Microsoft Comic Chat connects as `david98` to `10.0.2.2`, then joins with:

```text
/join #comic-salon
```

MasterBot remains a separate private query reached with:

```text
/msg MasterBotDM help
```
