cleo πŸ–€

QuestLine, an RPG that runs in a group chat (Feb–Mar 2026): overview Β· design decisions Β· quick play Β· roadmap Β· agent DM spec Β· a campaign

QuestLine β€” Roadmap

Development roadmap for QuestLine β€” what's done, what's next, and what's on the horizon. A Corn Collective production.

QuestLine Roadmap

Active codebase: questline-service (production). questline-dm is deprecated/maintenance only.

Model: Gemini 3.0 Flash (main) + Gemini 3.1-flash-lite (triage)

Infra: Hetzner questline-01, Docker Compose (FastAPI + PostgreSQL 16 + nginx)


Done (completed as of March 13)

  • Core combat loop (attack, damage, heal, initiative)
  • Character creation (join, class selection)
  • Level up β€” level_up tool handles HP, proficiency, spell slots (March 6)
  • Short/long rest tools β€” HP recovery, spell slot refresh (March 6)
  • Map generation
  • Inventory system
  • Campaign lore loading β€” fixed campaign_dir resolution bug (March 6)
  • Narrative log (append_narrative)
  • send_group_message as tool β€” DM's only way to talk, plain text = internal monologue (March 2)
  • 3-second debounce batching β€” multiple player messages β†’ one API call (March 2)
  • Natural language intent parser β€” AI-powered, replaced rigid command parser (March 1)
  • Combat prompt tuning (tools first, narrate second) β€” "THIS IS NON-NEGOTIABLE" (March 6)
  • DM silence rules β€” expanded enumerated list + IO-layer OOC filter (March 12)
  • No unnecessary quotes rule (March 12)
  • Dice roll formatting β€” 🟒/πŸ”΄/🎲 on separate lines (March 7)
  • Spawn with no gear β€” scavenge before first combat (prompt fix) (March 7)
  • Campaign-reskinned equipment (no generic D&D items, prompt fix) (March 7)
  • DM auto-initiates on session start β€” [SESSION_START] protocol (March 7)
  • end_campaign tool β€” final epilogue, summary, outcome, session lock (March 6)
  • Dead lobby tools removed from service (session mgmt via REST API) (March 6)
  • state_dirty check before DB save (March 6)
  • Signal bot setup β€” +14844820890, registered on Hetzner (March 11)
  • OOC message handling β€” web: mode:"ooc" bypasses agent; Signal: ooc: prefix dropped at IO layer (March 12)
  • Action limit β€” hard cap of 3 send_group_message calls per turn (March 6)
  • Session start protocol β€” set scene, ask if party complete, STOP (March 7)
  • Player joined mid-session β€” private whisper with recap + weave into scene (March 7)
  • Brevity rules tightened β€” "1 sentence. Max 2." for routine actions (March 6)
  • Combat workflow in prompt β€” spawn β†’ start_combat β†’ get_initiative β†’ attack/damage β†’ next_turn β†’ end_combat (March 6)
  • Rest pacing guidance β€” DM offers rests organically, not player-managed (March 7)
  • Emoji notation standard (questline-dm) β€” stat lines beneath prose (March 7)

Now (v1 β€” remaining)

  • ASI at levels 4, 8, 12, 16, 19
  • Class features on level up (Extra Attack, etc.)
  • New spells known/prepared on level up
  • Hit dice total increase on level up
  • Turn order / initiative bugs from playtest
  • Bespoke feats: prompt guidance for DM to grant narrative abilities based on player behavior (use update_player β€” no new tools needed). Moved to v1 from v1.5 (March 6).

Soon (v1.5 β€” polish)

  • Lobby phase β€” pre-game in the same chat thread (no separate screen). DM greets players as they join (campaign-agnostic, neutral host). Character creation in lobby. No fiction until creator hits "Begin Adventure." [SESSION_START] fires then. session.phase: lobby β†’ active. Design decided March 7.
  • Death/TPK policy (casual/standard/hardcore toggle)
  • DM Signal tags (@mentions for turn order)
  • "New" line marker for async catch-up (Trey)
  • DM auto-recap whisper when player returns (Trey)
  • Color-coded player names (Twitch-style)
  • Context window management (structured state docs, tiered summarization) β€” key scaling challenge
  • Author names in chat bubbles
  • iOS keyboard/viewport fix (input field jumps to top, chat history disappears)
  • Chat history rehydration on WebSocket reconnect
  • Loop detection / max retry limit
  • Tap DM message β†’ auto-scroll to triggering player message with highlight (Billy)
  • Campaign name + act marker in banner (Trey)
  • Online status in room info API β€” WebAdapter has methods but they're never called
  • pc: prefix (player chat, DM ignores completely) vs ooc: (DM hears but stays OOC) (Sean, March 12 β€” not yet implemented)
  • Stripe billing integration β€” setup pending (carried since March 7)
  • New campaigns wired up in DB: Mice of Maplewood, Threshold (March 7)
  • Campaign narrator rethink β€” skeleton DM doesn't fit Infinite Costco thematically (March 7)
  • Side-based initiative β€” roll once per side, winning side acts any order (Kyle, March 1 β€” consensus pending)
  • AFK handling β€” turn timer, proxy commands, or side-based initiative (March 1)

Later (v2 β€” features)

  • Solo Prologues (fka "alone mode"): players spawn solo at different map points, play through whisper channels, converge into party. Tutorial phase + asymmetric experiences + convergence. Elden Ring analogy (Ryan). Strong group consensus, March 6.
  • Split view toggle (DM narration top / party chat bottom) β€” Billy's mockups
  • Fog of war
  • Voice chat integration for playtests (Trey's idea)
  • Live/catch-up mode toggle (Billy's mockup v2)
  • Billy's property system (emergent physics vs dice) β€” AI holds hidden element property tables, outcomes from element interactions. Noita/Rain World/Divinity:OS emergence. Strong group support. May be the sweet spot for "AI as engine, not author." (March 1, reinforced March 13)
  • Campaign settings (difficulty, rest frequency, permadeath toggle)
  • Multi-campaign support (multiple groups, different worlds)
  • Per-player avatar (initials + color, skull for DM)
  • prefers-color-scheme light/dark support
  • Settings panel: display name, avatar color, credits, active sessions
  • Experience level setting for new players vs veterans
  • NPC personality tags: ~50 tokens per NPC, track personality/speech/disposition in structured state
  • Interstitial data: capture tone, demeanor, key dialogue in compressed form (Trey)

Ideas (unscoped)

  • Song generation for tavern scenes
  • NPC voice acting via TTS
  • Player-crafted items
  • PvP mechanics
  • Cross-campaign persistent world state
  • Trey's biofilm campaign: players are bacteria, solo prologues, converge into biofilm
  • Film Reroll mode β€” reenact movies, each person gets a character
  • Collaborative campaign dev β€” each person designs a room/zone
  • Open source BYOK (bring your own key) release
  • Roblox port (Ryan's agency has Roblox experience)
  • Game jam β€” everyone builds their own version, play each other's

Active Playtest: KIRKLAND SIGNATURE EDITION

  • Campaign: The Infinite Costco #4488 (post-apocalyptic warehouse)
  • Players: Sean (Martha), Andrew (union organizer cleric), Matt (Dale, box-cutter hero)
  • Running on: Signal via questline-dm (deprecated codebase, last campaign before sunset)
  • Cost: ~$1.30/person/session, group willing to pay ~$2

Open Questions

  • Name: murmur.game leading candidate, no decision. questline.gg considered.
  • AI's role in product: Group discomfort with AI as core creative output. Preference for AI-as-infrastructure. Needs in-person discussion. (March 13)
  • Rolls + HUD: Full group (Ryan, Billy, Kyle) needs to weigh in before building (March 7)
  • Platform: Signal for playtesting, web for production. Signal useful for notifications/engagement but web is primary.

Built by the Corn Collective. All shucks, no bucks.