lefteros_by SomniusX
EL ↗Say hello

LEFTEROS / PERSONAL NOTES

ShadowRealms AI 0.29 to 0.31: the Storyteller remembers

19 October 2026 / Lefteris Iliadis / SomniusX

ShadowRealms AI 0.31: the Storyteller remembers

On 18 and 19 October, ShadowRealms AI, my local AI Storyteller for World of Darkness chronicles, went from 0.28.0 to 0.31.0. The previous post was about the chronicle so far: the local model writing the chat up as minutes, night by night. These three releases are what you can do once those minutes exist. The first one gives them to the Storyteller itself. The other two use them for the one thing a chronicle never forgets: a character’s death.

The Storyteller remembers (0.29)

Until now the AI Storyteller saw the room’s recent history and the long-term memory from RAG, and that was it. It did not know the chapters it had just written. Since 0.29, every reply gets a short block from the chronicle so far: the story so far in short, the open threads, the last three nights of this room (skipping what the room history already holds), one line for the last night of up to four other rooms, and the paragraphs that are for the Storyteller’s eyes only.

The rules I set for it:

  • It never costs a wait. The block is built from what is already written, with no model call. Nothing written means nothing added. It is cached for a minute.
  • It never crowds out the chat. At most a quarter of the prompt budget, and never more than 1,500 tokens; the room history gets the rest.
  • It is the Storyteller’s view. It already sees hidden rolls and closed rooms in its history, so the memory is the Storyteller’s part of the chronicle too. The prompt tells the model it is private memory, never to be quoted to players.
  • On for every chronicle, with a switch in Chronicle settings → The chronicle so far. Admins can see the exact block with /ai context, and only they see it: it is no longer saved to the room.

A review before release found four real bugs, all fixed: /ai context was being saved to the room, the off switch and a language change did not reach the second worker, a stored translation of the digest was ignored, and a short line could push a whole night out of the block.

A death in writing (0.30)

An admin could already kill a character, and the log got one of three fixed sentences. Now, when an admin kills a character, the chronicle writer (the same local model that writes the minutes) writes two to four sentences of the death, in the chronicle’s language, from the character’s name and clan, the story so far and the character’s last nights. Only from the player view: no closed rooms, nothing meant for the Storyteller, because players will read it. The tone follows the death type. On any failure, a 25-second timeout, or an answer in the wrong language, the fixed sentence is used, now in Greek too, and the reply says which one you got. Kill also retires the character now; until 0.30 only the log row said so.

Two smaller things in the same release: the slash commands come from the server. GET /api/ai/slash/commands returns the composer’s list with English and Greek text, admin-only commands go only to admins, the browser fetches it once per session and keeps its own list as the fallback, and a test keeps the list in step with the commands the server actually runs. And a chronicle created through the API without a language now takes the creator’s app language, as the creation page already did.

The kill page (0.31)

Version 0.30 had the death text but no page to ask for it from. Version 0.31 is that page: Admin → Characters. Every player character with its owner, chronicle, edition and whether it has fallen, with search and an alive/fallen filter, cards in one column on phones.

  • Kill picks the death: soft, a sacrifice, or horrible, with a line explaining each. It warns that this retires the character for good, shows a writing state while the model works, then the death text and whether the AI wrote it or the fixed sentence was used. A character that has already fallen cannot be killed again (the server refuses before any model call).
  • Revive undoes a death. The kill stays in the log; only an admin revive brings a fallen character back.
  • The deaths log, in the same tab: who killed or revived whom, when, the type and the text. Both also go to the general moderation log.
  • The fallen show it. The owner’s profile card and the character sheet show the death text. It comes with the sheet, so the same people see it: the owner, the chronicle’s Storyteller, admins and helpers.

The death text also got stricter. In the first live tries the model added a bit: details of a clan that were not in the chapters, a Latin letter inside a Greek word. The prompt now forbids invented names, clans, titles, places and lore, and Greek text must use Greek letters, except for names the material spells in Latin. An answer with mixed scripts, or a Latin word the material does not have, gets the fixed sentence instead. The names themselves (character, clan, cast, places) are not counted against the check.

One fix outside the release notes, from the same morning: on phones the whole character sheet now scrolls as one page, and only the name bar stays on top. The edition badge and the PDF buttons used to take a third of the screen.

The specification

The app is at 0.31 with, by now, a lot of parts: two editions, the Forge, the chronicle so far, voice, moderation, the admin panel. So there is now a SPEC.md in the repository: what the system is and what it must do, roles and permissions, the data it keeps, what is in and out of scope. Not a changelog and not a plan; a reference to check a change against.

What’s still open

The kill page was tried live on a throwaway character: the death text came back in Greek in under a second, a second kill was refused, so was switching the character back to active, and the revive worked. A kill on a real character in a real chronicle hasn't happened yet, and I'm in no hurry. The /ai help text and the permission replies are still English only. Screens for the chronicle so far and Previously on… are still owed; they will come from a test chronicle, not from my friends’ game.

Every change, one by one, is in the CHANGELOG, the releases are on GitHub (0.29.0, 0.30.0, 0.31.0), and the app itself is on the ShadowRealms AI page.