2023: the prompt sheet

The first version of this wasn't a product. It was a text box and a pile of instructions.

When the ChatGPT API landed in early 2023, the obvious thing to build was a Game Master. So I built one, in the most literal way imaginable: here's how to run a session, here are the rules, here's a character sheet, off you go. No engine, no database, no state. Just prose in, prose out, and a lot of optimism about what a language model would do with a rulebook in its context.

It worked for about ten minutes at a time. Which, to be fair, was ten more minutes than I expected.

Then it fell apart in two directions at once.

The two ways it broke

The first failure was that the GM would agree with anything.

"I climb the impassable mountains, reach the dragon's cave, and kill it with my dagger."

And the GM would say: Well done, you have killed the mighty dragon. Of course it did. It's a helpful assistant with no model of the world, no dice, and no reason to think the mountains were impassable other than that it wrote the word "impassable" some scenes ago. There was nothing in the system whose job was to say no. The player asserts, the model narrates, the campaign is over in four sentences.

The second failure was subtler and, honestly, more interesting.

In one game, the entire premise was revenge for the death of the king. Twenty minutes in, we were chatting with the king.

That's not a hallucination in the usual sense; the model hadn't forgotten the plot. The king was in the lore. And the mere fact of being in the lore made him overwhelmingly likely to show up, because everything in the context is fair game for the next scene. His entry said he was dead. That didn't matter. Presence in the context is a strong signal for use; the contents of that entry are a weak signal for whether use is appropriate. Writing a thing down made it likelier to appear, regardless of whether the writing said it no longer existed.

On top of both: the context window at the time was small enough that a decent session would exhaust it, and once it did, the GM would quietly start going in circles, re-introducing characters you'd already met, re-offering choices you'd already made, re-opening doors you'd closed.

Better prompting doesn't fix any of this. I spent a while proving that to myself.

Early 2024: the first real version

So I started again properly, with the working assumption that the model should be a narrator, not a database.

Everything became a document. Characters got real stat blocks. NPCs, locations, items, memories, all JSON, all in a document store, all with an identity that survived the scene they appeared in. The model no longer "remembered" your sword; the sword existed.

Retrieval instead of stuffing. I embedded those documents and pulled the top 8–16 matches against the semantics of the current scene, rather than trying to keep the entire world in context. This helped enormously with the circling problem; the GM stopped forgetting things because it was no longer relying on remembering them.

A plot graph. I wanted stories that stuck to a plot without being on rails, so plot progression became a graph with gates on the edges. Some gates were deterministic: a flag set, an item held, a location reached. Others were soft judgment calls that only a language model could make: has the party earned the witch's trust yet?

Tool calling, before tool calling. This is the part I'm still a bit fond of. Function calling didn't meaningfully exist yet, so I made the GM reply with a JSON document containing both the narration prose and a structured block of intents: move the scene, introduce a character, change location, add equipment to a sheet, apply damage, kill off a mob or NPC. Then a set of parsing functions took that structured block and decided what actually happened. Homemade tool calling with a hand-rolled parser and a lot of defensive code around malformed output.

It worked for the coarse actions. It was unreliable for exactly the things that mattered most, the subtle ones. Plot progression especially. Buried at the end of a long generation, alongside three paragraphs of atmospheric prose, the "has this beat fired?" decision got made carelessly or not at all.

The fix was embarrassingly simple: ask separately. Take the specific plot condition, give the model only the background it needs, and ask one direct question. Has this been met? Yes or no. Isolated, focused, no competing objectives, no prose to write.

It worked. It worked so well that it reframed how I thought about the whole system: the model isn't bad at judgment; it's bad at judgment while doing five other things. Give a language model one job and a clean context and it's remarkably reliable. Give it a narrative to write, a rules system to respect, a world to stay consistent with, and a structured payload to emit, all in one shot, and something will give. Usually the quietest requirement.

4,000 signups and nobody paid

That version went live and picked up around 4,000 signups.

It converted approximately nobody.

Some of that was distribution: we'd run cheap Google Ads, which bought a lot of traffic and signups from outside the US and Europe, and essentially all of it went dormant immediately. Those accounts have since been cleared out, so what's left is a genuine fresh start rather than a flattering number.

But the honest read is that the product wasn't good enough to pay for. Tool calling in the models available at the time was unreliable enough that the experience broke in exactly the ways that ruin immersion, and token costs meant that making it good was expensive per session in a way the pricing couldn't absorb. It came down in mid-2025.

The thesis was right. The substrate wasn't ready, and neither was the architecture.

Now: record once, resolve forever

What's running today is the third generation, and it's built around a single rule: when the AI invents something, the system records it at creation time and treats it as authoritative at use time.

I have taken it back to being a private beta; we are accepting signups for the free version but payments are blocked until I am happy with the experience it gives.

We have a spectrum of how content comes to be in each adventure, from fully authored content to competely GM invented content and a lot in between, where you as a world or story author, can quickly lay down some structure and then have a mix of the AI Co-Author and Procedural Generation fill in the rest. So you can fully describe the port town of Thislewaith with all its shops and houses and who lives there and what the shops sell... or you can just say the town exists, here is its name, there is where it is on the map, it's got 700 inhabitants and belongs to this faction then let proc gen do the rest and fill in the smaller details. You can even just say there is a town its somewhere in this region and let the system take care of the rest.

Same with items, the AI makes up a sword. The system writes down its damage, then owns that number forever. The AI invents a creature; its stat block is real from the moment it exists. The story is improvised, the facts don't drift. The AI narrates; the engine supplies the dice and the truth.

The plumbing that makes that work:

Real tool calling, and a lot of it. The GM works through 64 typed tools, skill checks, attacks, travel, trade, spawning, memory, plot advancement. No more parsing prose for intent.

Toolkit laddering. The tool list is filtered per request against the active ruleset, expanding and contracting as the situation demands. This does two things: it cuts the tooling and guidance context substantially, and it means the GM literally cannot invoke mechanics the current game system doesn't have. The old "I kill the dragon with my dagger" problem doesn't get argued with any more, there's simply no path from that sentence to a dead dragon that doesn't go through an attack roll.

A deterministic-first ladder for pacing and cost. Routine movement and survival actions resolve in code. Most combat actions resolve with zero model calls, initiative, cover, line of sight, lighting, reactions, all deterministic, with the AI narrating the moments that deserve narration. It escalates to the full GM when something actually warrants it. Better pacing, lower cost, same texture.

Watchers, descended directly from the yes/no trick. Story beats fire on deterministic clauses, or on ai_judgment clauses where the GM carries a short watchlist and flags the moment it judges the condition met. Same insight as 2024, properly built: one question, clean context, structured answer.

Memory with supersession. The king problem finally has a real answer. Canon memories never prune, and new canon can retire old canon: "the bridge was destroyed" supersedes "a bridge spans the river." Per-NPC memories track disposition and what each character actually knows. Being written down no longer means being available; being written down means being tracked, including tracked as gone.

And caching, obviously. Everything is cached.

What's next

The direction I'm most interested in is pushing rules and tools into a model directly rather than describing them in context every turn, some form of custom training. That's a longer conversation, and I don't want to over-promise it here, but it's the natural endpoint of the last three years: every generation of this project has been about moving knowledge from the prompt into the system. That's just the next place to move it.

I also want to look into making the maps look better and be more interactive. I want to be able to give story authors the tools to choose where on a spectrum the experience they want to build should sit... is this text only, locations can just be a list or a node graph, it's a choice to use a star chart or a solar view, paper map, floor plans, etc. I want to just keep pushing in that direction a little more yet... Perhaps a 2D tile map to explore and turn the experience from a Text adventure into a cRPG, even a generated 3D environment... And who knows where AI generation will take us, as currently you can have the GM illustrate the scene with a generated image, can narrate using TTS and can even generate short video clips depicting the events unfolding in the scene. It may not be too much to imagine a full AI-generated game-like experience truly bringing the Holo Deck dream to life.