Official code for SpeedRunner, an online method for learning programmatic agent skills from experience.
The repository uses the same method names as the paper:
| Config/CLI name | Paper name | Description |
|---|---|---|
react |
ReAct | No sleep-phase update. |
opo |
OPO | Update a prose strategy guide. |
speedrunner |
SpeedRunner | Update a callable codebook with sleep-phase code execution over accumulated experience. |
speedrunner_no_cl |
SpeedRunner w/o CL | Use the same codebook update without sleep-phase code execution. |
asi |
ASI | Append-only agent skill induction with optional replay verification. |
voyager |
Voyager | Crafter curriculum, critic, and skill retrieval. |
Method names determine their runtime behavior. In particular, sleep-phase code
execution is always enabled for speedrunner and disabled for
speedrunner_no_cl; it is not a separate configuration flag.
src/
speedrunner/
core/ # Shared runtime, codebook, reporting, and checkpoints
methods/
wake_sleep/ # ReAct, OPO, SpeedRunner, and ASI
voyager/ # Voyager agents and skill manager
benchmarks/
babyai/ # BabyAI wrapper and training entrypoint
crafter/ # Crafter wrapper, training entrypoint, and Voyager
scienceworld/ # ScienceWorld wrapper and training entrypoint
configs/ # Configurations grouped by benchmark
scripts/run_server.sh # Configurable local vLLM server
BALROG/ # Minimal local BabyAI environment server
conda create -n speedrunner python=3.12
conda activate speedrunner
git submodule update --init vendor/crafter
pip install -r requirements.txtFor local vLLM runs, install vLLM separately and start the configured model:
pip install vllm
./scripts/run_server.shThe script starts Qwen/Qwen3.5-35B-A3B on port 5012. The configured model
and server.base_url endpoint must match the server used for an experiment.
BabyAI also needs the local BALROG server:
python BALROG/deploy_env.py deploy.port=8080| Benchmark | Entrypoint | Configs | Additional setup |
|---|---|---|---|
| BabyAI | speedrunner.benchmarks.babyai.train |
configs/babyai/ |
Start the local BALROG server |
| Crafter | speedrunner.benchmarks.crafter.train |
configs/crafter/ |
Install Crafter and start any configured local model server |
| ScienceWorld | speedrunner.benchmarks.scienceworld.train |
configs/scienceworld/ |
Install ScienceWorld and start any configured local model server |
| Crafter Voyager | speedrunner.benchmarks.crafter.train_voyager |
voyager_crafter.yaml |
Same setup as Crafter |
For example, run the paper's ScienceWorld SpeedRunner experiment with GPT-5.4 mini on task 4:
python -m speedrunner.benchmarks.scienceworld.train \
--config_file configs/scienceworld/speedrunner-gpt-t4.yamlAPI-backed configs read credentials from the environment:
export OPENAI_API_KEY=...
export GEMINI_API_KEY=...Qwen configs expect a compatible OpenAI-style local server at the endpoint
specified by the config. Start it with scripts/run_server.sh
or use an equivalent server deployment.
Config filenames use the form <method>-<model>-<task-set>.yaml. For
ScienceWorld, t3, t4, and t3t4 identify task 3 & 4 distribution shift experiments.
