Devlog
Training an AI to play Pokemon: what actually happened, measured — including the failures.
#13 Why the AI is off the air
2026-10-16 · project
For two months my AI played Pokemon Red live every night with nobody at the controls. On October 15 I switched it off: it didn't fit Nintendo's rules, and almost nobody was watching. Here is what ran, why it stopped, and where help would actually move the research.
Read more →#12 The ladder was not a shortcut
2026-09-24 · training
I switched off the mechanism I had been calling a speedup, expecting a slower run. Instead the agent stopped being reliable: it either matched the policy on air or collapsed to a third of it, with almost nothing in between.
Read more →#11 Twenty-five minutes with a keyboard
2026-09-14 · training
My agent hit the same wall 434 times while carrying the item that opens it. It could not use that item, and no metric in the system was capable of saying so.
Read more →#10 The breakthrough we kept throwing away
2026-09-13 · training
My agent had taught Cut three times and I never knew, because the machinery built to capture exactly that moment was watching a list of milestones that did not contain it.
Read more →#9 What a Nintendo DS costs
2026-09-07 · method
The Game Boy emulator runs at 38x real time on my server. The DS runs at 1.06x. That one measurement, taken before I wrote any of the environment, killed a fortnight of planned work — plus two bugs that would both have looked like a model that cannot learn.
Read more →#8 We are not running a BOINC server
2026-09-06 · architecture
My training machine makes thirty checkpoints a night and my server can score five. Volunteer computing is the obvious answer, so I read how Berkeley built BOINC — and then borrowed its architecture instead of running it.
Read more →#7 Off the S.S. Anne with HM01, and no way to use it
2026-09-02 · results
Two of sixteen runs obtained the item the published work says no agent obtains. None of the sixteen taught the move it is for, so the wall it unblocks is still standing — and the A/B that sent me looking returned nothing at all.
Read more →#6 A perfect correlation and the wrong answer
2026-08-31 · debugging
I found a memory address that matched what I needed 1.00 to 0.00 across 1,500 frames, and nearly built on it. It agrees with reality two-thirds of the time once you are a few hours into the game.
Read more →#5 The reward that cannot see the thing it needs
2026-08-30 · reward design
Every step of the critical path my agent is stuck behind is dialogue — standing still and pressing a button. Its only exploration reward counts tiles walked on. It has a blind spot exactly where the hard gate is.
Read more →#4 Three runs is not enough
2026-08-30 · method
I rejected a checkpoint because it failed one run in three, while the checkpoint I compared it against looked flawless. Then I measured that one properly and found it fails one run in six.
Read more →#3 The inference recipe that quietly broke my training
2026-08-29 · debugging
Fine-tuning a working policy made it worse every single time, with and without the feature I suspected. The cause was one number copied from the Stable-Baselines3 docs, where it is correct, into a place where it is not.
Read more →#2 Always measure against random
2026-08-28 · method
We scored checkpoints against each other for weeks and never established a floor. That one missing row hid a policy that had actively gotten worse.
Read more →#1 The AI learned to walk into walls, then unlearned it
2026-08-28 · training
A checkpoint with 1.47 million steps of training performed worse than pressing buttons at random. Here is how we found out, what caused it, and how it climbed back out.
Read more →