climbers / check-and-comparehillclimb

6. Check and compare

Check a climber before it costs anything, and race climbers on one problem.

Check it first

hillclimb climber check                    # this folder's climber
hillclimb climber check run.yaml           # every entry of a run spec
hillclimb climber check --climber mine.py --problem circle-packing --smoke

climber check loads every module the climber names, then replays every recorded search in the folder through it, with no coding agent and no verifier. It reports each rule broken: a climber that never starts on an empty history, two fresh copies that disagree, a choice that would change after a resume, a candidate or operator that does not exist, or a write it should not make. --smoke then runs a short search with the scripted dummy agent. It exits 1 on any problem.

Start from a preset

hillclimb climber list                     # presets, your own climbers, the building blocks
hillclimb climber show greedy              # a preset as a block to paste
hillclimb climber new mine --from greedy   # copy greedy's source into climbers/mine.py
hillclimb run circle-packing --climber climbers/mine.py

Race climbers on one problem

Repeat --climber and one run holds one search per climber on the same problem, each tagged so they can be compared afterwards:

hillclimb run circle-packing --budget 30m --climber greedy --climber openevolve
hillclimb watch                            # the searches side by side
hillclimb experiment report <run-id>       # the climbers compared

Searches in one run share live memory, so pass --no-learning for a fair race. For repeats across problems with a noise floor and a control, run an experiment: see Run an experiment.

What makes two runs comparable

A climber's identity is its block plus the bytes of every file it uses. Each search keeps a copy of its climber, and hillclimb resume runs that copy, so editing your files never changes a search that has started. Two searches are comparable when their identities match.