A minimal implementation of Claude playing Pokemon Red using the PyBoy emulator. This starter version includes:
- Simple agent that uses Claude to play Pokemon Red
- Memory reading functionality to extract game state information
- Basic emulator control through Claude's function calling
- Comprehensive logging system for game frames and Claude's messages
-
Clone this repository
-
Install the required packages:
pip install -r requirements.txt -
Set up your Anthropic API key as an environment variable:
export ANTHROPIC_API_KEY=your_api_key_here -
Place your Pokemon Red ROM file in the root directory (you need to provide your own ROM)
Run the main script:
python main.py
Optional arguments:
--rom: Path to the Pokemon ROM file (default:pokemon.gbin the root directory)--steps: Number of agent steps to run (default: 10)--display: Run with display (not headless)--sound: Enable sound (only applicable with display)
Example:
python main.py --rom pokemon.gb --steps 20 --display --sound
The game automatically creates logs for each run in the /logs directory. Each run gets its own timestamped directory (e.g., logs/run_20240321_123456/) containing:
frames/: Directory containing numbered PNG files of each game frameclaude_messages.log: Log file of all Claude's messages with timestampsgame.log: General game logs including errors and important events
This logging system helps track Claude's decision-making process and the game's progression over time.
agent/simple_agent.py: Main agent class that uses Claude to play Pokemonagent/emulator.py: Wrapper around PyBoy with helper functionsagent/memory_reader.py: Extracts game state information from emulator memory
- The agent captures a screenshot from the emulator
- It reads the game state information from memory
- It sends the screenshot and game state to Claude
- Claude responds with explanations and emulator commands
- The agent executes the commands and repeats the process
- All frames and messages are logged for later analysis