RISE-X-Lab / SPROUT
git clone https://github.com/RISE-X-Lab/SPROUT.git
—
+5
stars, 24h · #2,633
+~35
stars, 7 days · #3,277
+100
stars, 30 days · #4,893
104
★ total · +35% this week
19
forks · 0 open issues
Star history (as recorded here)
LanguagePython
LicenseMIT
Created2026-09-26 (26d ago)
Last push2d ago
Watchers10
OwnerOrganization
Links
README excerpt
Efficient exploration for coding agents. Save progress at every turn. Branch from any checkpoint instead of starting over. Sprout lets a coding agent go back to any turn of a rollout and continue from there, instead of starting over. At each turn, Sprout saves a checkpoint: a disk snapshot of the agent's sandbox, paired with the agent's history up to that turn. When a rollout fails, SPROUT, the method of the paper, reviews it, picks the checkpoints before the mistake and branches from them. Benchmark evaluation and RL training run as the same jobs, which workers claim from the Run Store. ## Quick start You need a Linux host with Python 3.12 and Go 1.25. ### 1. Set up the host [code] `ops/setup_podman.sh` installs these items, and skips each one that is already there: - rootless podman 6, under `~/.local/opt/podman` - a btrfs store for the sandboxes, at `~/sprout-btrfs` - `.venv`, with the `mini`, `harbor` and `dev` extras - the runtime binary, `runtime/sprout-runtime` The script uses sudo only for the packages, the btrfs store and the cgroup and user id settings. `doctor` prints one line for each check of the host. If a check fails, it exits 1. ### 2. Run one agent [code] The endpoint can be any OpenAI-compatible Chat Completions API. The run prints its outcome, and the journal `runs/first.jsonl` records each turn. `snapshots` lists the snapshot of each turn, and `export` writes the trajectory as Markdown. If your provider does not serve plain Chat Completions, put it behind the bundled LiteLLM proxy. ### 3. Start the Run Store and a worker Evaluation and RL submit their rollouts, grades and reviews as jobs to the Run Store. A worker on the same host claims and runs them. [code] `setup` checks the host, and writes the configs and the secrets under `~/.config/sprout/`. It asks for the model endpoint and the variable of its key, and it asks before each change of a file that exists (Guided setup). `python -m sprout.services init` writes the same configs without questions. The worker passes the key variable to its jobs. The last command exports the Run Store token into the shell. ### 4. Evaluate a task with SPROUT The tasks are the Harbor task directories of these benchmarks. Clone them as the experiments guide says. - DeepSWE - TerminalBench 2.1 - SWE-bench Pro v2 HARD-51 [code] The commands do these steps: 1. The gate checks that the oracle of each task scores 1 and that doing nothing scores 0. 2. The evaluation runs the agent on the task. If the attempt fails, the review picks checkpoints, and the agent branches from them. `--rounds 2 --branches 4 3` gives two rounds, with up to 4 branches and then up to 3. 3. `ops.report task` prints the tree of the attempts and their rewards. `--dataset-digest` and `--preparation-manifest` pin the task set. `python -m examples.qwen.run` writes both, and runs a whole benchmark. The evaluation refuses a checkout with uncommitted changes, because its summary records the commit. Evaluation gives every op