jev-plays-pokemon
September 19, 2026 ยท View on GitHub
Like Claude Plays Pokemon, but with Jev
Usage
Copy .env.example to .env and fill in at least TYPESAFE_API_KEY, then:
uv run jev-plays-pokemon # same as `run`: boot the ROM and play
uv run jev-plays-pokemon run --rom-path pokemon_red.gb --stream-port 8080
uv run jev-plays-pokemon benchmark --turns 25 --warmup 5
uv run jev-plays-pokemon watchdog # run `run` as a monitored, auto-restarting subprocess
Every .env value has a matching global CLI flag (e.g. --openai-api-key,
--typesafe-api-key) that overrides it for a single invocation - see
uv run jev-plays-pokemon --help and docs/adr/0001-unified-typer-cli-and-config-settings.md.
Watching the run
run starts a small read-only HTTP server on --stream-port (default
8080) and logs its viewer URL at startup. It serves three endpoints:
/viewer- the combined video + live decision sidebar page. Open this in a browser, or use it as your OBS browser source./video.mjpg- the raw MJPEG video feed with no sidebar. Only needed for advanced/alternate OBS setups that want the video and decision data as separate sources./- the latest decision as a raw JSON snapshot (action, confidence, milestones). This is by design, not a bug: it's meant for programmatic polling, not for opening in a browser.