The ARC-AGI-3 Kaggle Starter is a local dev kit for the ARC Prize 2026 - ARC-AGI-3 Kaggle competition. You edit one Python file on your laptop, see it play the real game environments locally, and push it to Kaggle as a submission with a single command.
Repository: github.com/arcprize/ARC-AGI-3-Kaggle-Starter
Prerequisites
- Python 3.12 (the competition’s
arc-agi package requires it)
- macOS:
brew install python@3.12
- Ubuntu:
sudo apt install python3.12 python3.12-venv
- Windows: install from python.org
- A Kaggle account with the competition rules accepted (accept here).
- A Kaggle API token created at Kaggle Settings → Create New Token. You’ll drop it into the project (no
~/.kaggle/kaggle.json required).
No GPU is required for the starter agent.
Quick start
# 1. Clone the starter
git clone https://github.com/arcprize/ARC-AGI-3-Kaggle-Starter.git
cd ARC-AGI-3-Kaggle-Starter
# 2. Drop your Kaggle API token into the project-local .kaggle/ folder
# (NOT your home directory)
mkdir -p .kaggle && echo "KGAT_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" > .kaggle/access_token
chmod 600 .kaggle/access_token
# 3. One-time setup: venv, dependencies, framework
make setup
# 4. Edit agent/my_agent.py. This is the only file you change.
# 5. Run it locally against every game (seconds)
make play-local
# 6. Push it to Kaggle as a submission notebook
make submit
# 7. Watch the run
make status
When make status shows complete, open the notebook on kaggle.com, find your kernel, click Submit to Competition in the top right, and pick submission.parquet from the Output File dropdown.
Steps 4-7 are the iteration loop; clicking Submit to Competition is the deliberate moment you spend a daily submission.
The one file you edit: agent/my_agent.py
This is the only file you normally touch. It defines a MyAgent class with two methods:
class MyAgent(Agent):
def is_done(self, frames, latest_frame) -> bool:
"""Return True when your agent wants to stop playing."""
...
def choose_action(self, frames, latest_frame) -> GameAction:
"""Look at the game state and return the next action."""
...
The starter picks random actions, a baseline that proves your pipeline works end-to-end. Replace the body of choose_action with your strategy. Kaggle plumbing, submission file format, and game orchestration are all handled for you.
What happens when you run make submit
The competition is a code competition: you submit a notebook, Kaggle runs it twice.
- Phase A: Save & Run All. Kaggle runs your notebook in their real environment and validates that the code executes without errors.
make status will report complete.
- Phase B: Competition Rerun. Triggered when you click Submit to Competition on the kernel page. Your agent plays the hidden game set and your leaderboard score appears.
Before your first make submit, open notebooks/kernel-metadata.json and replace REPLACE_WITH_YOUR_USERNAME with your Kaggle handle. The Makefile will refuse to push until you do.
Choosing an accelerator
The notebook is generated with a T4 GPU by default (matches Kaggle’s sample submission). To change it, open scripts/build_notebook.py and edit one line near the top:
ACCELERATOR = "t4" # one of: cpu, t4, p100, rtx6000
Re-run make submit. Both the notebook metadata and notebooks/kernel-metadata.json get updated automatically.
| Value | Hardware | When to use |
|---|
"cpu" | No GPU | The random starter, or any non-ML agent |
"t4" | Nvidia T4 ×2 | Default. Small models, fast iteration |
"p100" | Nvidia P100 | Single big-memory GPU |
"rtx6000" | Nvidia RTX 6000 (g4-standard-48) | Heavy ML; ARC-AGI-3 exclusive, burns GPU quota faster |
RTX 6000 is reserved for ARC-AGI-3 notebooks. Don’t use it for early iteration. All accelerated Kaggle sessions have internet disabled, which is already the default in this kit.
All the commands
| Command | What it does |
|---|
make setup | One-time install: Python venv, arc-agi, kaggle CLI, clones the framework |
make play-local | Runs your agent against every game in the dataset, locally |
make play-local GAME=ls20 | Same, but only one game (faster while debugging) |
make verify-local | 30-second smoke test on two games |
make list-games | Print every game id available |
make pull-sample | Download the official sample agent for reference |
make notebook | Build the Kaggle notebook from your agent (no push) |
make submit | Build the notebook and push it to Kaggle |
make status | Check the status of your most recent Kaggle run |
make clean | Remove the venv, downloads, and generated notebook |
Why this setup instead of editing in the Kaggle notebook?
- Iteration speed. Editing in your IDE then running
make play-local gives you a real-game-engine feedback loop in seconds. Kaggle’s editor loop is minutes per change.
- No environment surprises. The local
arc-agi PyPI package hosts the same game engine the Kaggle gateway runs. If it works locally, it works on Kaggle.
- Your code stays in git. Notebooks are awful for diffs and code review. Your real work lives in
agent/my_agent.py; the notebook is an auto-generated deployment artifact.
Project layout
.
├── agent/
│ └── my_agent.py ★ The file you edit
├── scripts/
│ ├── play_local.py Runs your agent against real games
│ ├── build_notebook.py Packages your agent into a Kaggle notebook
│ └── slim_framework.py Trims framework deps so install is light
├── notebooks/
│ ├── kernel-metadata.json Edit once: your Kaggle username
│ └── submission.ipynb Auto-generated, never edit by hand
├── vendor/ Cloned framework (gitignored)
├── .venv/ Python 3.12 venv (gitignored)
├── .kaggle/ Your project-local Kaggle token (gitignored)
└── Makefile
Troubleshooting
make setup fails: python3.12: command not found. Install Python 3.12; the arc-agi package requires it. macOS: brew install python@3.12.
make submit says “edit kernel-metadata.json”. You haven’t replaced REPLACE_WITH_YOUR_USERNAME in notebooks/kernel-metadata.json yet.
make submit says 401 Unauthorized. Your Kaggle token is missing or invalid. Generate a fresh one from your Kaggle Settings page and overwrite .kaggle/access_token.
make play-local says “Could not create environment”. Your machine couldn’t reach the ARC-AGI API to download the game source on first run. Check your internet, then try again. Once downloaded, games are cached in environment_files/ and you’re fully offline.
My local score is 0.0. That’s expected for the random starter agent. Your job is to make it non-zero.
Where to go next
- Read the rest of the ARC-AGI-3 docs to understand the benchmark.
- Run
make pull-sample to study Kaggle’s reference agent.
- Join the competition’s discussion forum for community Q&A.