Gimmikghoul, a Gimmighoul in a lab coat with coin spectacles
GIMMIKGHOUL · HARNESS

Bounce your teambuilding ideas off it

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.

One turn

The harness

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

Meta harness

Turns open team sheets into plans, a matchup matrix and per-event shares. What was played, and how it did.

Engine and calculator

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.

Graph over MCP

The agent reads and writes FalkorDB through its MCP server, so the memory outlives the chat.

What the agent can see

Three layers

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.

Example

The Raichu X idea graph

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.

Long-horizon planning

Plans are paths

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.

Datasets

Three Regionals, 3,004 teams

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.

FileWhat it holdsSize
teams.csvOne row per team: event, place, Day 1 record, made Day 2, six battle forms with items0.5 MB
matches.csvEvery pairing: team indices, whether team A won (0.5 = tie), round0.2 MB
teams.jsonFull sets and the engine-derived tokens each team is analysed with6.5 MB
plans.json16 learned plans, strengths, the plan-vs-plan matrix, raw records, confirmed loops, probe accuracy, team map67 KB
cases.jsonEvery number in the report4 KB
mechanics.jsonEngine checks: speeds, Electric Seed, Sleep Powder over 40 seeds, Lightning Rod1 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.