searches / starting-a-searchhillclimb

1. Starting a search

What happens when you start a search, and the choices you make when you do.

A search is one climber working on one problem until its budget runs out. You start one with a problem and a budget:

hillclimb run heilbronn-11 --budget 30m

hillclimb starts an engine, a background process that owns the search from then on, and gives you your terminal back. The engine scores the problem's baseline first, so there is something to beat. Then it repeats one step until the budget is spent: the climber picks a candidate to build on, a coding agent writes a new solution in a folder of its own, and the problem's verifier scores it. Every attempt is recorded, good or bad, and the best one so far is kept.

The search keeps going without you. You can close the terminal, open another one, or start more searches next to it.

Which climber

Without any choice, the search uses the folder's default climber: the one climber: in runs/config.yaml names (hillclimb climber get greedy sets it). To try another one, name it:

hillclimb run heilbronn-11 --budget 30m --climber openevolve
hillclimb run heilbronn-11 --budget 30m --climber climbers/mine.py

Create a climber is about what goes into one.

How long it runs

--budget is wall-clock time, and the search stops starting new attempts when it is nearly spent, so the ones already running can finish. You can also stop on the number of scored attempts, the tokens used or the money spent, whichever comes first:

hillclimb run heilbronn-11 --budget 2h --set budget.max_evaluations=40

How much runs at once

There are two levels, and they multiply:

  • --parallel-agents 3 lets one search keep three coding agents busy at once, each on its own attempt. The search fills its free slots with whatever the climber proposes next.
  • --parallel-searches 2 starts two independent searches on the same problem, each its own engine with its own climber state. They sit in one run, so they share what they learn.

Two searches with three agents each is six coding agents. Your machine has a cap on top of that (concurrency.machine_max_agents, by default the number of cores minus two, at most eight), and a search waits for a free slot rather than overloading it. Machine resources shows how to see what is running.

Keeping it in the terminal

--no-detach keeps the engine in your terminal instead, printing its log as it goes. Ctrl-C then stops it, and it can be resumed like any other.