It helps your favourite Pokémon find a job.
An agent answers a team question by running checks, not by recalling. It queries a graph of game mechanics, runs the real battle engine and damage calculator, reads what the field actually played, and writes what it finds into a small just-in-time graph. That graph is the agent's working memory: plans that take several turns become paths through it.
QUESTION ────────▶ AGENT Claude Code / Codex ────────▶ ANSWER "why did 15-2 and │ writes queries and code, plan, leads, 0-8 split?" │ reads results what to accept ▼ ┌───────────────┬───────────────┬───────────────┬────────────────┐ │ META HARNESS │ ENGINE │ CALCULATOR │ GRAPH (MCP) │ │ events.mjs │ Showdown │ Smogon │ FalkorDB │ │ plans.py │ Champions mod │ Champions │ catalog graph │ │ cases.mjs │ mechanics.cjs │ damage rows │ idea graphs │ └───────┬───────┴───────┬───────┴───────┬───────┴────────┬───────┘ └───────────────┴───────┬───────┴────────────────┘ ▼ JIT IDEA GRAPH one per question, kept afterwards nodes Pokémon · moves · field states · plans · events edges carry how they were found: engine, calc, data, source
Turns open team sheets into plans, a matchup matrix and per-event shares. What was played, and how it did.
Answer what the agent can't eyeball: does terrain pop the Seed, does Sleep Powder land, does +2 Draco one-shot. Every answer is re-runnable.
The agent reads and writes FalkorDB through its MCP server, so the memory outlives the chat.
MECHANICS what can happen species · moves · abilities · items · type chart engine │ TEMPORAL what was played events → teams → plans → matchups → shares meta harness │ IDEA what we're testing built per question · revised by adding, never erased agent
Mechanics say what's possible. The temporal layer says what the field did and when, which is what "why now" needs. The idea layer holds the current theory: claims, the check behind each one, and what would break it.
Raichu-Mega-X ──SETS──▶ Electric Terrain ──CONSUMES──▶ Electric Seed │ │ │ BLOCKS │ TRIGGERS ▼ ▼ Sleep Powder Unburden Sneasler 172 → 344 SunRain's Venusaur │ │ OUTSPEEDS ▼ Scarf Garchomp 253 Snarl ──LOWERS SpA──▶ Zap Cannon · Muddy Water · Ice Beam ✗ Volt Tackle · Close Combat Louisville ──FIELD SHIFT──▶ Nice Scarf Garchomp 13 → 27% Snarl 18 → 47%
Each edge carries its evidence: SETS and TRIGGERS come from engine runs, the speeds from battle-form stats, the field shift from the team sheets. Swap Raichu X for Raichu Y and the SETS edge disappears, and so does everything downstream of it. That is the 15-2 and the 0-8, read off the graph.
A win that takes several turns (Mega Evolve, terrain pops the Seed, Swords Dance, sweep) isn't one edge. It's a path. Store each step as an edge with its condition and the check that proved it, and a multi-turn plan becomes a bounded path query:
MATCH p = (start)-[:ENABLES*2..5]->(goal {kind: 'win'})
RETURN p
The agent searches routes instead of re-deriving them, and every route arrives with its receipts. In an exploratory run, a query like this over a stat-effect graph returned about 4,400 setup chains in about 110 ms. Because the graph persists, the next session continues the theory instead of starting over.
Masters division at Frankfurt (Sep 26–27), Louisville (Oct 10–11) and Nice (Oct 17–18), 2026, Pokémon Champions Reg M-C. Player names and team-sheet links are removed. A team is identified only by event and place.
| File | What it holds | Size |
|---|---|---|
| teams.csv | One row per team: event, place, Day 1 record, made Day 2, six battle forms with items | 0.5 MB |
| matches.csv | Every pairing: team indices, whether team A won (0.5 = tie), round | 0.2 MB |
| teams.json | Full sets and the engine-derived tokens each team is analysed with | 6.5 MB |
| plans.json | 16 learned plans, strengths, the plan-vs-plan matrix, raw records, confirmed loops, probe accuracy, team map | 67 KB |
| cases.json | Every number in the report | 4 KB |
| mechanics.json | Engine checks: speeds, Electric Seed, Sleep Powder over 40 seeds, Lightning Rod | 1 KB |
npm ci && npm run prepare:data # pinned Showdown Champions engine node meta/events.mjs # normalise, anonymise, tokenise uv run --with numpy --with scikit-learn python -I meta/plans.py # plans, probe, loops, map node meta/cases.mjs && node meta/mechanics.cjs # report numbers, engine checks for step in 1 2 3 4 5 6; do npm run demo:jit -- "$step"; done # build an idea graph in FalkorDB
Source: RK9 open team sheets and pairings, collected by VGC History. Sprites from Pokémon Showdown. Pokémon is © The Pokémon Company and Nintendo; this is a fan research project.