The Midnight House

Talk to a ghost through a spirit board. Watch her hesitate. The model speaks; the code keeps the secrets.

Enter the house

In short

A ghost made of probabilities. The planchette moves at a speed set by the model's real next-token probability. The words it almost said flicker as faint whispers.
A puzzle the model can't cheat. The rules live in plain code. Wren is only told what you have earned, and a guard cuts her off mid-word if she starts to reveal a locked secret.
Honest by design. If a model endpoint hides its probabilities, the game tells you and uses a fixed pace. It never fakes them.

How it works

  1. You explore. Five rooms, a note, a key, a trunk, a music box. Every step is code, not AI.
  2. Code decides what Wren knows. Each fact has a flag you must earn. Her prompt contains only the unlocked facts.
  3. The open model speaks. Gemma, run locally with Ollama, answers in a dozen words and returns its token probabilities.
  4. The guard watches the stream. If a locked secret starts to appear, the reply is cut before it reaches the board and becomes I cannot say.

The "What Wren is allowed to say" panel in the game shows exactly which facts she can use, so you can see why she answers as she does.

Live numbers

-loading

Built with

Gemma on Ollama, FastAPI with server-sent events, MongoDB Atlas for sessions and a reply ledger, Sentry for traces and guard events, Backboard for Wren's memory, Render for hosting, and Browserbase for a cloud-browser smoke test.

Limits

Real probabilities need a model endpoint that returns them. Ollama does; many hosted APIs do not. Ollama runs on your own machine, so a hosted demo may use a different model or a fixed-speed planchette. Wren's replies are short on purpose, and small local models are not great writers.