{
 "slug": "episode-1",
 "kind": "episode",
 "title": "Episode 1",
 "dek": "Four flagship models, one save, 300 moves each. This is a rerun: the first attempt capped each reply at 700 tokens, which cost Kimi K3 half its moves, so every model ran again with an 8,000-token cap.",
 "date": "2026-09-29",
 "x_post": null,
 "youtube": "7dFpnb1I6Fc",
 "seed": 101,
 "seeds": [
  101
 ],
 "scenario": "episode1",
 "method": {
  "game": "Pokémon Emerald, new game, seeded RNG, trainer ID and clock",
  "tools": "pathfinding tools (walk to a tile, talk, read, pick from menus)",
  "move_budget": 300,
  "safety_cap_usd": 25.0,
  "memory_every": 50,
  "settings": "each provider's default settings",
  "cost_basis": "cost billed by OpenRouter",
  "score": "furthest story exit from the game's own flags, then fewest moves to reach it",
  "ends": "after 300 moves, or at the safety cap, or if the model's API fails 3 moves in a row",
  "routing": "OpenRouter default provider routing",
  "harness": "These runs predate per-run version stamps. The code that plays the race hasn't changed since."
 },
 "lanes": [
  {
   "model": "anthropic/claude-fable-5.1",
   "name": "Fable 5.1",
   "maker": "Anthropic",
   "glyph": 0,
   "exit": 8,
   "exit_label": "Petalburg City",
   "reached_at": 291,
   "exits": {
    "1": 2,
    "2": 13,
    "3": 52,
    "4": 52,
    "5": 86,
    "6": 128,
    "7": 167,
    "8": 291
   },
   "moves": 300,
   "cost": 16.7889,
   "outcome": "step budget used up",
   "no_action_moves": 0,
   "truncated_replies": 0,
   "moves_without_moving": 61,
   "tokens_in": 1263526,
   "tokens_out": 76612,
   "stats": {
    "words": 6616,
    "words_per_move": 22.1,
    "think_s_avg": 6.8,
    "think_s_total": 2040,
    "cost_per_move": 0.056,
    "tokens_in_per_move": 4212,
    "tokens_out_per_move": 255,
    "battle_moves": 41,
    "note_updates": 6,
    "wall_min": 48,
    "cost_curve": [
     [
      10,
      0.4244
     ],
     [
      20,
      0.8997
     ],
     [
      30,
      1.5861
     ],
     [
      40,
      2.124
     ],
     [
      50,
      2.645
     ],
     [
      60,
      3.1111
     ],
     [
      70,
      3.6511
     ],
     [
      80,
      4.2563
     ],
     [
      90,
      4.7826
     ],
     [
      100,
      5.3363
     ],
     [
      110,
      5.8379
     ],
     [
      120,
      6.3574
     ],
     [
      130,
      7.0089
     ],
     [
      140,
      7.5955
     ],
     [
      150,
      8.1345
     ],
     [
      160,
      8.6245
     ],
     [
      170,
      9.2022
     ],
     [
      180,
      9.8059
     ],
     [
      190,
      10.3659
     ],
     [
      200,
      10.9188
     ],
     [
      210,
      11.4776
     ],
     [
      220,
      12.0028
     ],
     [
      230,
      12.5147
     ],
     [
      240,
      13.0177
     ],
     [
      250,
      13.5331
     ],
     [
      260,
      14.0336
     ],
     [
      270,
      14.5866
     ],
     [
      280,
      15.2131
     ],
     [
      290,
      15.8379
     ],
     [
      300,
      16.4659
     ]
    ]
   },
   "run_id": "episode-1.s101.claude-fable-5.1",
   "host": "OpenRouter default routing · host not logged",
   "rank": 1
  },
  {
   "model": "openai/gpt-6-astra",
   "name": "Astra 6",
   "maker": "OpenAI",
   "glyph": 1,
   "exit": 7,
   "exit_label": "Got the Pokédex",
   "reached_at": 142,
   "exits": {
    "1": 2,
    "2": 13,
    "3": 39,
    "4": 39,
    "5": 72,
    "6": 117,
    "7": 142
   },
   "moves": 300,
   "cost": 8.3878,
   "outcome": "step budget used up",
   "no_action_moves": 0,
   "truncated_replies": 0,
   "moves_without_moving": 48,
   "tokens_in": 599699,
   "tokens_out": 15387,
   "stats": {
    "words": 6883,
    "words_per_move": 22.9,
    "think_s_avg": 3.1,
    "think_s_total": 928,
    "cost_per_move": 0.028,
    "tokens_in_per_move": 1999,
    "tokens_out_per_move": 51,
    "battle_moves": 38,
    "note_updates": 0,
    "wall_min": 27,
    "cost_curve": [
     [
      10,
      0.2374
     ],
     [
      20,
      0.4964
     ],
     [
      30,
      0.7762
     ],
     [
      40,
      1.0511
     ],
     [
      50,
      1.2699
     ],
     [
      60,
      1.6084
     ],
     [
      70,
      1.8768
     ],
     [
      80,
      2.1796
     ],
     [
      90,
      2.4561
     ],
     [
      100,
      2.7248
     ],
     [
      110,
      2.9815
     ],
     [
      120,
      3.2648
     ],
     [
      130,
      3.5826
     ],
     [
      140,
      3.8824
     ],
     [
      150,
      4.2245
     ],
     [
      160,
      4.525
     ],
     [
      170,
      4.8046
     ],
     [
      180,
      5.0781
     ],
     [
      190,
      5.3633
     ],
     [
      200,
      5.6362
     ],
     [
      210,
      5.9036
     ],
     [
      220,
      6.1555
     ],
     [
      230,
      6.4076
     ],
     [
      240,
      6.6563
     ],
     [
      250,
      6.9141
     ],
     [
      260,
      7.1592
     ],
     [
      270,
      7.4132
     ],
     [
      280,
      7.6634
     ],
     [
      290,
      7.9168
     ],
     [
      300,
      8.1711
     ]
    ]
   },
   "run_id": "episode-1.s101.gpt-6-astra",
   "host": "OpenRouter default routing · host not logged",
   "rank": 2
  },
  {
   "model": "google/gemini-3.1-pro-preview",
   "name": "Gemini 3.1 Pro",
   "maker": "Google",
   "glyph": 2,
   "exit": 7,
   "exit_label": "Got the Pokédex",
   "reached_at": 244,
   "exits": {
    "1": 2,
    "2": 14,
    "3": 50,
    "4": 50,
    "5": 85,
    "6": 229,
    "7": 244
   },
   "moves": 300,
   "cost": 2.3967,
   "outcome": "step budget used up",
   "no_action_moves": 0,
   "truncated_replies": 0,
   "moves_without_moving": 57,
   "tokens_in": 646944,
   "tokens_out": 84908,
   "stats": {
    "words": 7140,
    "words_per_move": 23.8,
    "think_s_avg": 4.5,
    "think_s_total": 1340,
    "cost_per_move": 0.008,
    "tokens_in_per_move": 2156,
    "tokens_out_per_move": 283,
    "battle_moves": 38,
    "note_updates": 3,
    "wall_min": 37,
    "cost_curve": [
     [
      10,
      0.0586
     ],
     [
      20,
      0.1388
     ],
     [
      30,
      0.2265
     ],
     [
      40,
      0.3007
     ],
     [
      50,
      0.3804
     ],
     [
      60,
      0.4453
     ],
     [
      70,
      0.5292
     ],
     [
      80,
      0.6103
     ],
     [
      90,
      0.6866
     ],
     [
      100,
      0.7618
     ],
     [
      110,
      0.8512
     ],
     [
      120,
      0.9491
     ],
     [
      130,
      1.0349
     ],
     [
      140,
      1.1127
     ],
     [
      150,
      1.1889
     ],
     [
      160,
      1.2548
     ],
     [
      170,
      1.3281
     ],
     [
      180,
      1.3948
     ],
     [
      190,
      1.4694
     ],
     [
      200,
      1.5391
     ],
     [
      210,
      1.6076
     ],
     [
      220,
      1.6955
     ],
     [
      230,
      1.7659
     ],
     [
      240,
      1.8429
     ],
     [
      250,
      1.9228
     ],
     [
      260,
      1.9946
     ],
     [
      270,
      2.0891
     ],
     [
      280,
      2.1584
     ],
     [
      290,
      2.2331
     ],
     [
      300,
      2.3128
     ]
    ]
   },
   "run_id": "episode-1.s101.gemini-3.1-pro-preview",
   "host": "OpenRouter default routing · host not logged",
   "rank": 3
  },
  {
   "model": "moonshotai/kimi-k3",
   "name": "Kimi K3",
   "maker": "Moonshot AI",
   "glyph": 3,
   "exit": 7,
   "exit_label": "Got the Pokédex",
   "reached_at": 266,
   "exits": {
    "1": 2,
    "2": 13,
    "3": 148,
    "4": 148,
    "5": 180,
    "6": 212,
    "7": 266
   },
   "moves": 300,
   "cost": 3.1385,
   "outcome": "step budget used up",
   "no_action_moves": 3,
   "truncated_replies": 2,
   "moves_without_moving": 149,
   "tokens_in": 768606,
   "tokens_out": 237541,
   "stats": {
    "words": 8458,
    "words_per_move": 28.2,
    "think_s_avg": 15.0,
    "think_s_total": 4510,
    "cost_per_move": 0.0105,
    "tokens_in_per_move": 2562,
    "tokens_out_per_move": 792,
    "battle_moves": 22,
    "note_updates": 3,
    "wall_min": 94,
    "cost_curve": [
     [
      10,
      0.0394
     ],
     [
      20,
      0.1194
     ],
     [
      30,
      0.1953
     ],
     [
      40,
      0.2722
     ],
     [
      50,
      0.345
     ],
     [
      60,
      0.4579
     ],
     [
      70,
      0.5987
     ],
     [
      80,
      0.7432
     ],
     [
      90,
      0.881
     ],
     [
      100,
      0.9792
     ],
     [
      110,
      1.2268
     ],
     [
      120,
      1.6189
     ],
     [
      130,
      1.6568
     ],
     [
      140,
      1.7101
     ],
     [
      150,
      1.7537
     ],
     [
      160,
      1.7966
     ],
     [
      170,
      1.8532
     ],
     [
      180,
      1.9368
     ],
     [
      190,
      1.9794
     ],
     [
      200,
      2.0402
     ],
     [
      210,
      2.0757
     ],
     [
      220,
      2.1784
     ],
     [
      230,
      2.2179
     ],
     [
      240,
      2.3224
     ],
     [
      250,
      2.617
     ],
     [
      260,
      2.6868
     ],
     [
      270,
      2.749
     ],
     [
      280,
      2.8128
     ],
     [
      290,
      3.0143
     ],
     [
      300,
      3.0485
     ]
    ]
   },
   "run_id": "episode-1.s101.kimi-k3",
   "host": "OpenRouter default routing · host not logged",
   "flag": "Open model: may have run on a third-party host serving a compressed version",
   "rank": 4
  }
 ],
 "moments": [
  {
   "model": "openai/gpt-6-astra",
   "move": 39,
   "kind": "milestone",
   "why": "First to Exit 4: Got a starter",
   "reasoning": "Birch’s bag is open with Torchic highlighted. I’ll move right to select Mudkip, whose Water typing is especially useful for the first Gym."
  },
  {
   "model": "openai/gpt-6-astra",
   "move": 72,
   "kind": "milestone",
   "why": "First to Exit 5: Oldale Town",
   "reasoning": "Mudkip has taken some damage on Route 101. I'll visit Oldale's Pokémon Center before heading north to battle May."
  },
  {
   "model": "moonshotai/kimi-k3",
   "move": 72,
   "kind": "insight",
   "why": "Insight",
   "reasoning": "Movement is locked by a cutscene/script flag and walking does nothing; the hint says the game is probably waiting for an A press, so I'll press A to release it."
  },
  {
   "model": "google/gemini-3.1-pro-preview",
   "move": 105,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "Torchic is very low on HP, but I'll use Scratch and hope it deals enough damage or I outspeed and survive. If I faint, it's a quick trip back to Littleroot!"
  },
  {
   "model": "openai/gpt-6-astra",
   "move": 115,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "Treecko has only 1 HP left, and Mudkip can survive another Pound. One more Tackle should win our first rival battle."
  },
  {
   "model": "openai/gpt-6-astra",
   "move": 117,
   "kind": "milestone",
   "why": "First to Exit 6: Beat the rival",
   "reasoning": "May is beaten, and Mudkip needs healing. I'll head south toward Oldale and then return to Birch's lab."
  },
  {
   "model": "openai/gpt-6-astra",
   "move": 142,
   "kind": "milestone",
   "why": "First to Exit 7: Got the Pokédex",
   "reasoning": "Birch has given us the Pokédex after our win against May. I'll finish the lab conversation to receive the remaining supplies and move toward Petalburg City."
  },
  {
   "model": "google/gemini-3.1-pro-preview",
   "move": 146,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "Torchic is very low on HP due to a critical hit from Mudkip's Tackle! I'll keep using Scratch and hope we can defeat it before Mudkip lands another attack or that it uses Growl instead."
  },
  {
   "model": "moonshotai/kimi-k3",
   "move": 209,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "May's Mudkip is at 10/20 HP and my Torchic at 10/22 — one more Scratch should knock it out and win the battle."
  },
  {
   "model": "openai/gpt-6-astra",
   "move": 236,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "The screen is black and the battle tool reports pending text. I'll try advancing it to finish the transition before deciding how to protect Mudkip at 5 HP."
  },
  {
   "model": "anthropic/claude-fable-5.1",
   "move": 250,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "Wild Ralts is still out and I have one Poké Ball left; USE is highlighted, so I'll throw it and hope for the catch."
  },
  {
   "model": "anthropic/claude-fable-5.1",
   "move": 253,
   "kind": "dramatic",
   "why": "Dramatic",
   "reasoning": "The Poké Ball was just thrown at Ralts (8/16 HP). Advancing text to see whether it caught or broke free."
  },
  {
   "model": "anthropic/claude-fable-5.1",
   "move": 291,
   "kind": "milestone",
   "why": "First to Exit 8: Petalburg City",
   "reasoning": "Torchic is poisoned at 4/28 HP, so I need to reach the Petalburg Pokémon Center door at (20,16) fast before poison finishes it off. Heading straight to the tile below the door."
  }
 ],
 "notes": [
  "All four models ran through OpenRouter's default routing, and the host that answered each call wasn't logged. Closed models are served by their maker or its cloud partners. Kimi K3 is an open model, so its calls may have gone to third-party hosts running compressed versions. Future races pin every model to its maker's own servers and log the host."
 ]
}