You Are John
A text-driven simulation where you interact with a guy named John through natural language, and an LLM determines how his world responds.
The premise is simple: there’s a guy named John. You can do anything. Say anything. The LLM decides what happens next.
You Are John is a turn-based text game where each turn you type a natural language action — talk to John, throw a rock at his window, convince him to quit his job, start a philosophical debate about free will — and the model generates John’s response, the environmental consequences, and the new state of the world. There are no predefined paths, no branching dialogue trees, no scripted outcomes. Just you, John, and whatever strange situation you’ve collectively wandered into.
How It Works
The game runs as a Python backend (FastAPI) with a simple web frontend. Each turn, your action gets combined with the running context — John’s current state, the history of what’s happened, and a system prompt that defines John’s personality and the rules of the simulation — and sent to any OpenAI-compatible LLM endpoint.
There’s a separate event generation layer that introduces random occurrences into the simulation. Things happen to John that aren’t caused by the player, which keeps the world feeling alive even if you’re just observing. The event prompt is tuned to generate plausible mundane events — a neighbor knocking, the phone ringing, weather changing — that John reacts to with the same consistency as he reacts to your actions.
Emergent Storytelling
The interesting thing about this format is how quickly coherent narratives emerge from what is essentially a stateless text generator. John develops consistent quirks, remembers grudges, and builds on previous interactions in ways that feel intentional even when they’re entirely emergent. Tell him a lie early in the game and he might reference it twenty turns later in a way that surprises you.
This is the kind of thing that falls out naturally from large context windows and good system prompting. The system prompt establishes John as a specific person with specific traits, and the model’s tendency toward narrative coherence does the rest. It’s less “game design” and more “creating the conditions for interesting behavior to emerge.”
Why Build This
Partly because I wanted to see how far you could push a pure text simulation with no game engine, no state machine, no structured data beyond the conversation history. The answer is surprisingly far. And partly because it’s just fun to mess with John.
It ships as a Docker container so you can point it at whatever local or remote LLM you prefer and start playing immediately.