Scene cards, character sheets, dice rolls, and AI-assisted trigger detection — all inside your server, without leaving the channel where the fiction happens.
Can Pedro protect Lin before the captain reaches her?
P
Pedro
L
Lin
CA
Captain
Pedro stands between Lin and the captain. The alley exit is cut off.
Pedro · PreparedLin · Afraid
AI Prosthetic
⚡
Emergency Hook
Sonnet · full scene context
Trigger Candidates
Defend and Maneuver87%
"Pedro stepped between Lin and the soldier…"
Confirm
Dismiss
Pre-computed Hooks
The captain recognizes Lin from a wanted poster — this becomes personal.
Design Philosophy
Three load-bearing principles
Every decision in avatar-PbtA defers to these. They're not aspirational — they're load-bearing.
01
Players see the movie. The GM sees the machine.
Mechanical state lives behind the GM's screen. Players see fiction — scene cards, character portraits, dramatic questions. The same data point renders differently per surface. Discord Activities make this possible without a browser tab.
02
The bot detects, the GM decides, the player acts.
No mechanical event fires automatically from fiction. Haiku flags candidates. The GM confirms or dismisses. The player is notified in fictional language. Human authority is preserved at every step — the AI is a prosthetic, not a referee.
Visual style flows from campaign → kingdom → element → character → scene. AI compute escalates from regex → classifier → Haiku → Sonnet. Decisions flow from Sonnet → GM → player → backend → all surfaces. Everything composes.
"At any point, a new observer should be able to drop into the channel, read the last fifty messages, and watch a coherent scene unfold — not a mechanical readout."— The Observer Test, §9
The channel stays cleanThe bot speaks only on confirmed mechanical events. It never narrates. Never describes. The fiction stream is for fiction.
Mobile is the canonical targetCaio running a session from his couch on Android is the design target, not a degraded fallback. Touch-native, Safe Area-aware, asset-optimized.
Fiction first, mechanics secondApproaches replace stats. Conditions clear by acting in fiction. Triggers fire only when stake, opposition, and posture are all detectable — not just when someone types a keyword.
The Surfaces
Two Activities, one bot
No browser tab. No extension install. Everything lives inside Discord — launched from the App Launcher with a single tap.
GM Cockpit
Arc tracker, scene queue, AI prosthetic panel, NPC manager, hard-moves list. The machine behind the screen.
apps/cockpit · GM only
Player View
Scene viewer, character sheet, dice rolls, balance slider, bonds. The movie the players watch.
apps/player · all players
Chargen Wizard
Sonnet interview → playbook → approaches → moves → bonds → portrait. Characters built from fiction.
apps/player · wizard flow
Campaign Graph
Zoomable session graph with arc outlines, transition summaries, and a 6-step campaign creation wizard.
apps/cockpit · GM only
NPC Producer
Quick-create or full-form. Sonnet fills principle and moves from name + role. JSON export for the state store.
packages/ui · GM tool
Narrator-Sidekick
The Discord bot. Reads channel fiction, surfaces trigger candidates to the GM, delivers ephemeral roll prompts.
apps/bot · always on
How it works
From fiction to mechanics and back
01
Players narrate
Pedro types as his character in the Discord channel. Normal prose. The channel is for fiction, not commands.
02
Bot listens
Narrator-Sidekick reads every message. A four-tier AI cascade — regex → classifier → Haiku → Sonnet — watches for move triggers.
03
GM decides
Trigger candidates surface in the Cockpit privately. The GM confirms or dismisses. No automatic mechanical effects from fiction.
04
Player rolls
An ephemeral bot message reaches the player with a roll button. Dice animate. The result band appears. Fatigue and statuses update.
05
Scene updates
State propagates to all surfaces simultaneously. The Scene Viewer evolves in place. The channel stays clean for the next line of fiction.
Built for one table first
avatar-PbtA ships as an Unverified Discord Activity for a private group of up to 25 members. Sign in with Discord to claim early access — your player profile and Discord account get linked in the same step.