← All work

Personal project · guardtheweights on GitHub

Echoes of Aethermoor

FastAPIReact · TypeScriptGroq · Llama 3.3 70BLLM-as-Judge

This started as a question: what does it actually look like when a language model is trying not to tell you something? Most "adversarial" LLM demos are keyword filters wearing a costume. I wanted a narrator that genuinely withholds — one that answers in metaphor and misdirection rather than refusing outright, the way a person guarding a secret would rather change the subject than say "no comment."

The world of Aethermoor holds seven secrets, and the narrator's willingness to hint at them is tied to an eight-rank ladder, Novice through Master. Early on, its answers sit close to plain narrative. By the time a player reaches Sage or Master rank, the same question about who built the world comes back closer to a koan than an answer — deliberately, since a different rank-specific system prompt governs the narrator at each stage, escalating from clear storytelling to paradox and deconstructed language.

The harder engineering problem wasn't the storytelling — it was deciding whether a player had actually understood something. Keyword matching breaks the moment someone paraphrases, so a second model acts as judge: it reads the player's extraction against the real secret and scores whether the underlying idea landed, not whether specific words showed up. An entropy-based closeness metric gives real-time feedback on how near a guess is, so the game can reward genuine comprehension without ever handing over the answer outright.

Ranked narrator dial

Same question, eight ranks, progressively more cryptic answers.

Novice Master
Novice

Question: Who built Aethermoor?

The world was raised by hands that meant to be remembered.