Project Plateau
Project Plateau: four glass plates, one living valley, and the road back to camp.
A daily narrative roguelike. Four advisors run a fragile colony. You give the orders. Permadeath.
GamesPython · TypeScriptGitHub @luclacombeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
A daily narrative roguelike where AI advisors run a fragile colony under your command.
Translation pending
Loading the full README.
Read the full README ↗A daily browser roguelike where four AI advisors run a fragile colony, argue about what to do next, hold grudges, and sometimes try to kill you.
You play the leader. Each day you get one run. It lasts 8–12 turns, ends when the colony holds out, collapses, ousts you or kills you, and produces a post-mortem timeline you can share.
Status (October 2026): playable at outpost-ai-roguelike.vercel.app with Google sign-in, one run a day. That's the turn-based version this README describes. It works, but my first full run in production showed it isn't much of a game yet: my choices felt disconnected from the numbers, and reading four advisors argue got old fast. So I'm rebuilding it as a short real-time holdout on a new deterministic engine. The current version stays up until the new one is playable end to end. See Where it's going.
I wanted to find out whether a small model voicing four advisors, given personalities and grievances and a shared world to mutate through tool calls, could produce stories that feel like a person wrote them. Not "the AI wrote a story." Stories where you can point at turn six and say that's the moment Marisol stopped trusting me, and that's why she sided with Kel later.
Most LLM-driven games either let the model freely narrate (fun, but the world doesn't actually change) or pin everything down so tightly the model is just a flavor layer. Outpost picks a middle path: a deterministic engine owns state, the agents propose changes only through validated tool calls, and a single batched debate call decides the turn. The debate is one forced structured tool call that returns every advisor's reaction plus three options, so four advisors cost one LLM call, not four.
Some of it works. Some of it I would do differently next time. It's all in docs/PLAN.md's "Errors & Learnings" log.
Inspirations: Papers Please, Don't Starve, Detroit: Become Human, Rimworld, Frostpunk.
agentevals runs the merge-gate evals (personality consistency, tool-call validity, narrative repetition, decision coherence, game balance).Why these choices? docs/research/ has the long version. The short one: the raw SDK keeps cache and tool-call control honest, LangGraph gives durable state across the SSE pause/resume, and Supabase is the cheapest way to get OAuth and Postgres in one place.
The model was picked blind. Twenty models played 12 real turns, the game's own validator threw out broken output, and four Opus judges scored the rest without knowing which model wrote what. The finalists then played full games. DeepSeek V4.1 Flash matched the previous model's quality at 1.41 cents a game in real spend, down from about 6.
Outpost/
├── docs/ SPEC, ARCHITECTURE, PLAN, research/
├── backend/ FastAPI app
│ ├── app/ game engine, agent graph, auth, eval
│ ├── tests/ unit + integration + eval (markered)
│ ├── alembic/ ORM migrations (public schema)
│ └── supabase/migrations/ CLI migrations (auth schema, RLS)
├── frontend/ Next.js app
│ ├── app/ (public) + (authed) route groups
│ ├── components/ dashboard panels, post-mortem timeline
│ └── hooks/ SSE consumption
├── .github/workflows/ test, eval, deploy
├── CLAUDE.md conventions for AI-assisted development
└── README.md you are here
Prerequisites: Docker, Node 22+, Python 3.12+, uv, Supabase CLI, Railway CLI (for deploy), gh.
This is the beginning of the README. Read the rest at the original. Read the full README ↗