Skip to main content
hillclimb

Hillclimbing on verifiable rewards.
Use Claude Code and Codex to autonomously search for python programs that optimize a score you define.

An ASCII mountain: one climber on the summit under a gold star, another stuck on a lower peak

Website · Docs · Quickstart · CLI reference · Blog · Discord

PyPI Python 3.12+ Quickstart License: MIT Discord


Give hillclimb a problem — a folder whose verifier scores a solution.py — and a budget. It runs Claude Code, Codex or pi as operators that draft, debug and improve solutions, scores every candidate through your verifier, and keeps the best.

The harness is fixed. The climber — what to try next and how each attempt is prompted — is a block you can swap, edit and share, so two methods can be compared on the same problem under the same budget.

Quickstart

pip install hillclimb
hillclimb connect claude               # or codex, pi; add --agent dummy to any run for no LLM at all

hillclimb init                         # hillclimb.yaml, problems/, runs/ in this folder
hillclimb problem get heilbronn-11     # the verifier is the problem; description.md is the brief
hillclimb verify heilbronn-11          # score the floor solution

hillclimb run heilbronn-11 --budget 10m
hillclimb watch                        # live coding agents and scores (also: chart, tree)
hillclimb stop --all

The best solution lands in runs/<run-id>/searches/heilbronn-11/best/. The walkthrough goes through each step.

Climbers

A climber is one block of config, in a run spec or as the folder's default in hillclimb.yaml:

climber:
  selector_policy: map-elites     # which candidate to build on next
  operator_policy: greedy         # which operator to use on it
  operators: [draft, debug, improve, crossover.py:Crossover]
  tuner: optuna
  params: {num_drafts: 5}

Every slot takes a prebuilt module, a .py file of your own, or package.module:Class. Presets: greedy, openevolve, gepa. Or compose in Python:

from hillclimb import Budget, Climber, Problem
from hillclimb.policies import Greedy
from hillclimb.selectors import MapElites

problem = Problem("heilbronn-11")
budget = Budget(wall_clock="10m", evaluations=40)
climber = Climber(selector_policy=MapElites(num_drafts=5), operator_policy=Greedy())

climber.search(problem, budget=budget)
climber.best, climber.history, climber.to_frame()

climber.start(...) opens the same search to drive by hand, one climber.step() at a time, and Problem(name, score=my_function, ...) defines a problem from a scoring function. Runnable scripts are in examples/.

Compare two head to head:

hillclimb run heilbronn-11 --climber greedy --climber openevolve --parallel-searches 2
hillclimb experiment report <run-id>

Example problems

Exact, noise-free construction problems, each with its best known value as the target line. hillclimb problem list shows the full catalog.

Family Instances Score
Circle packing circle-packing, circle-packing-32 sum of radii ↑
Heilbronn triangles heilbronn-11, -14, -17, heilbronn-convex-13 smallest triangle ↑
Low-autocorrelation sequences labs-40, labs-60 sidelobe energy ↓
Tammes / Thomson tammes-30, -50, thomson-50, -100 min angle ↑ / energy ↓
Autocorrelation inequalities autocorr-1, autocorr-3, erdos-overlap the constant ↓
Kissing configuration kissing-11 points ↑
Golomb rulers golomb-20, golomb-27 length ↓
TSP / knapsack tsp-200, mknap-100-5, mknap-250-10 tour ↓ / value ↑

Define your own: hillclimb problem new my-problem writes a small problem that already runs, for you to edit into yours. Kaggle (MLE-bench) and Einstein Arena come in as benchmark problems.

Learn more

Website →

What hillclimb is for, the terminal views you watch a climb in, and the modules a climber is built from.

Problems →

Every example problem with its verifier, its best known value and who found it, plus the verifier contract.

CLI reference →

Every hillclimb command and its flags, from run and watch to experiment and climber check.

Blogposts →

Starting with Hillclimbing on verifiable rewards: from Cauchy's gradient descent to LLMs searching over programs.

Questions, results, ideas: join the Discord.

License

MIT

Metadata

Release files for hillclimb 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hillclimb 0.7.0
File Size Uploaded
hillclimb-0.7.0.tar.gz 637.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hillclimb 0.7.0
File Interpreter ABI Platform
hillclimb-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / hillclimb-0.7.0.tar.gz

Download URL hillclimb-0.7.0.tar.gz
Size 637.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c38e431cae745a7a9acccd6adb878e217f78b34cf25d6e9c0d020343acca3658
BLAKE2b-256 checksum
How to use checksums
5b1277d4c190909fe0c58d263587669b84e3b4aa150f4ff8b3379471e066fc31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.2

Release files / hillclimb-0.7.0-py3-none-any.whl

Download URL hillclimb-0.7.0-py3-none-any.whl
Size 833.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
34a445b9b577f1b8c86c4c2e558cb02edb8baa56a2179640c0cac72d6ee8f6d8
BLAKE2b-256 checksum
How to use checksums
35159a0374f3df32227517fe1f459b62233a7ed6cf3eea5b0fc60a99043658d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.2

Release history Release notifications | RSS feed

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

This release

0.7.0 This release

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page