jev-plays-pokemon-red
Pokémon Red on PyBoy where code owns route and arithmetic, Jev picks only at branches, and battle faint predictions are Brier-scored.
Overview
jev-plays-pokemon-red plays Pokémon Red with a model that only outputs probabilities. Code reads the Game Boy's memory into a typed snapshot and hands Jev a menu of the moves that are actually legal; an overlay shows Jev's probabilities as bars. The agent walks out of the bedroom, crosses Pallet Town, takes Charmander from Oak and wins the rival battle unaided.
The design is explicit that Jev cannot plan: every route, threshold and calculation is Python, and Jev is asked only where the game branches, not at all between the bedroom and Oak's lab. The README illustrates why branches need a model with two real answers: yes (0.61) to taking Charmander and no (0.58) to nicknaming it, where no fixed button works for both. Every battle turn also asks a faints_this_turn Noul, labelled from what RAM shows next, so calibration can be measured. Reported latency via a gateway shim was a 621 ms median (n=6), about 1.3 decisions per second and $0.14 per hour; calibration is deliberately not published yet because the free tier allowed only tiny samples.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which legal action should be taken at this branch? | — |
| Yes / no | Do you want the fire Pokémon, Charmander? | yes · no |
| Yes / no | faints_this_turn: will a Pokémon faint this turn? | yes · no |
How it works
- Read RAM into a typed snapshot
- Code handles routine movement and arithmetic
- At branches, Jev gets the legal options and returns probabilities
- Each battle turn logs a faint prediction scored against RAM
- measure reports Brier against base rate and constant predictor
Strengths
- Model consulted only where it adds value
- Calibration measured rather than assumed
- Honest about sample size limits
Caveats
- Cannot plan; only picks at branches
- Calibration results not yet available
- Requires your own ROM and a key
Getting started
uv run jpp play --rom /path/to/your/red.gb --overlayAt a glance
- Type
- Demo
- Status
- prototype
- Language
- Python
- Runtime
- PyBoy emulator with overlay
- Has code
- yes
- License
- MIT
- Stars
- 8
Use cases and integrations
How curated lists describe it
Gaming: Pokemon Red on PyBoy where deterministic code owns the route and arithmetic, Jev picks only at branches, and every battle turn's faint prediction is scored by Brier against RAM state.
yibie/awesome-jevPokemon Red on PyBoy where deterministic code owns the route and arithmetic and Jev picks only at branches, with every battle turn's faint prediction scored by Brier against the emulator's RAM state.
AnotiaWang/awesome-decision-modelsPokemon Red on PyBoy where Python owns the route and the arithmetic, and Jev chooses only among legal actions at actual branches.
logicrw/awesome-jev-projectsPokemon Red on PyBoy: code owns the route and the arithmetic, Jev picks at branches in about 100 ms, calibration measured instead of assumed
wh000wh000/awesome-jev-livePokemon Red on PyBoy where deterministic code owns the route and arithmetic and Jev picks only at branches, with every battle turn's faint prediction scored by Brier against the emulator's RAM state.
cobanov/awesome-jevPokemon Red on PyBoy where code owns the route and the arithmetic, Jev only picks at branches, and every battle turn's faint prediction is scored by Brier against RAM state.
hellogumbo/awesome-jevPokemon Red on PyBoy where code owns the route and the arithmetic and Jev only picks at branches, logging a Brier-scored faint prediction against RAM state on every battle turn.
MrJev/awesome-jev
Frequently asked questions
When is Jev asked?
Only at real branches in the game; code handles routine movement.
How is calibration checked?
Each battle turn's faint prediction is compared with what RAM shows happened, scored by Brier.
Why no calibration numbers yet?
The free tier allowed only about five calls per window, too few for a meaningful score.
Related projects
Instrumented 2048 web lab where every move is a Jev Choice over four directions, with probabilities, latency and cost shown live.
ProjectbetaTypeScriptBilingual turtle-soup (lateral-thinking) puzzle site where Jev acts as host, judging player questions and grading solutions.
AppbetaTypeScriptBrowser Minesweeper demo where Jev answers 'is this cell a mine?' for every frontier cell in one request, with an exact solver as fallback.
ProjectprototypeJavaScriptPandu: tiny local policy networks (2.9K-5K parameters) with calibrated uncertainty that fall back to a teacher when unsure.
ProjectresearchPythonTwenty-questions game where Jev's confidence decides when to stop: it commits, hedges or refuses to guess.
DemoprototypeTypeScriptHarness where Jev or Laya pick DOOM tactics and targets from legal options while a deterministic controller presses buttons.
ModelresearchPython