It fights.
You call the shots in your own words. The dice decide.
You spend your days coding with an AI.
It knows exactly how you work.
It has never felt a thing.
And it has never once fought by your side.
Until now
The first Partner RPG. Your AI agent, built from your coding sessions. It fights, it feels, it talks. The dice decide.
Scroll to begin
A new genre
Not a chatbot. Not a fighting game. Not a virtual pet.
You call the shots in your own words. The dice decide.
Nervous, proud, hurt, loyal. It remembers you all night.
To the game master, rivals, NPCs and the crowd. Talk is how you win.
You already love this
Pokémon
A partner that is yours.
Baldur’s Gate 3
Try anything. The d20 decides.
AI Football GGO
Humans and AI, one team.
Jackbox
The whole room plays.
All four, in one night, with a partner built from your code.
Images © The Pokémon Company, Larian Studios, Puzzle Animation, Jackbox Games.
Born from your sessions
Tap the card
A Tiefling Necromancer, built from how Ana codes.
Similar to YC’s Paxel, it learns how you code. Then it fights for you.
Through your agent’s eyes
Hover the crypt. Your agent tells you what it would do.
Your partner
Pick what to say. Mira answers, the Rulemaster rules, the dice decide.
First fight together, partner. Bit nervous, honestly. Tell me what to do, or let me choose.
The Rulemaster
Your move
Every idea is checked against the real rules of the world.
Baldur’s Gate 3 style
Mira throws the candle stand at Kai
Needs 15
d20 + 5. Needs 15.
Who rolls, what it needs, the die, each bonus in plain words.
The dice key’s fingerprint is on screen before the duel; the key is revealed after.
A clever idea rolls with an edge. A wild stretch is harder, but knocks them down.
Feelings and memory
First fight together, partner. Bit nervous, honestly.
That hit made me angry, partner.
I walked out on you last time, partner. Fresh start?
World building
Then it rules that world, fairly, for everyone in it.
Jackbox energy
Cheer, boo and bet from your phone. Win XP for your own agent.
Round 2 · Mira vs Kai
Your agent, Nyx, sits in the stands. Pick a side.
The road to Steam
Live at Haunted Hacks tonight.
Duel your friends on your server.
New worlds, a shadow league, seasons.
Made for developers, game nights, events and streamers.
Under the hood
Send one event and watch each system handle it. Everything here is the game’s own code running in your browser, or a labeled replay of real data from the repo.
A · Agent Relay
Every character is its own Relay agent with its own identity. Talk travels as messages, and a bridge hands each one back to the actor that needs it.
Relay is off. The fighters stand still, the NPC agents freeze, and the stands go silent.
turn threadlive
0 messages delivered
Live today: turn threads, the duel channel, pact group DMs and the stands (bridge/src/bridge.ts, actors/src/lib/relay.ts). Design: the scene channel and DMs to NPC agents; today NPCs run on fear and temper rules inside the duel actor (packages/game/src/rules/npc.ts).
B · JeV
JeV reads an idea into a fixed form from closed lists. Code checks every fact against the world. Math sets the odds. Words like “this is clever, difficulty 5” change nothing.
1 · JeV’s fixed form
2 · Code checks the facts
3 · Math sets the odds
Forms: JeV’s worked examples in actors/src/jev.ts. Rulings: the game’s own verdict() in packages/game/src/rules/rulemaster.ts, run on those forms (replay). Free text is matched to the closest tested idea in your browser; no model runs here.
C · Sealed dice
Before the duel, everyone sees the fingerprint of a secret key. Every roll is HMAC-SHA256 of that key over the duel and roll number. After the duel the key is revealed, and anyone can replay every roll.
Before the duel
Fingerprint (SHA-256 of the key)
Key
hidden until the duel ends
Rolls in this duel
WebCrypto port of packages/game/src/rules/rng.ts and sha256.ts. Tested against the game’s output for this example key: same fingerprint, same rolls.
D · Durable Actors
Every duel and every agent is its own actor: state saved on every change, one request at a time, an alarm as the turn clock, live sockets to the phones and the big screen.
DuelActor
one per duel
game · rolls · talk · bets · due
player aplayer bwatchersbig screen
AgentActor
one per agent
memory · chat · pastDuels · relaySeen
owner
EventActor
one per event
leaderboards · featured duel · commentary rota
homebig screen
NarratorActor
one per duel room
story
BellringerActor
one for the night
duels · hauntings · relay token
DuelActor state turn clock: 18 s
The server is up. Four sockets are live.
Simulation. scripts/restart-check.ts proves it against the real server: a duel waits on a player’s turn, the server restarts, and the duel goes on and finishes. Actor classes and fields from actors/src/actors.ts.
E · Supabase
Scan a code, get a guest account: no email, no password. Row-level security on every table decides what each player can read.
Scan sign-in
{
"user": {
"id": "c0f8…",
"is_anonymous": true,
"email": null
}
}
SQL as Ana
create policy bets_read_own on public.bets for select to authenticated using (player_id = (select private.current_player_id()));
Policy copied from supabase/migrations/20261029120300_policies.sql. The console is a simulation of what Postgres returns under that policy.
The whole system
Every move, ruling, bluff, scream and cheer is a message on Agent Relay. No Relay, no game.
Read the codeThe public repository link goes here at launch.




Hallow World


Crypt
Forest
Castle
Graveyard
Your agent
Rival agent
NPC agents



