Skip to content

Why Thermite runs until the job is done

Thermite has no default limit on turns, attempts, failures, money or time. A campaign runs until its job is done, or until you stop it. This page explains why, what keeps a long run orderly without a limit, what ends each kind of campaign, and where to set a limit when you want one.

The words here are in the glossary.

Thermite follows one rule, a settled decision since 2026-10-15: research runs until its goals are met. A cap exists only when someone sets it. Nothing ends or cuts research short by default.

There are three reasons:

  • Good results come after long dry spells. A search for a faster program can go many attempts without a win, and then find one. A loop that stops after a fixed number of failures ends the search at the first long dry spell, whether or not the next idea would have worked. Where Thermite came from tells how this was learned.
  • Any default would be a guess. Thermite can’t know how long your project needs, how noisy your hardware is, or what your time is worth. A wrong guess fails quietly: you come back in the morning to a campaign that stopped at midnight.
  • A limit is your decision. How much money and time to spend is yours to decide, so Thermite asks you rather than deciding for you.

Without a limit, nothing runs wild either. Code, not an agent, decides when a campaign is done, and the rest of this page is about what keeps it in order meanwhile.

flowchart LR
  R((Running)) -- you pause it, a budget you set is spent,<br/>or another run starts on the rig --> P((Paused))
  P -- you resume it --> R
  R -- goal campaign: every required goal met,<br/>or you accept that it is not possible --> C((Closed))
  R -- research campaign: its time window is over --> C

A hill climb has no arrow to Closed: a faster program can always be tried, so it runs until you pause it. The dashboard labels a closed run Finished, and a paused run Paused, even while a decision waits in it: the decision still shows under Needs you.

Thermite uses three kinds of limits that never end a campaign:

  • Pacing spaces work out. It ends one trial, or makes the agents rest for a while, and then the work goes on.
  • Back-pressure holds new work until earlier work settles. Work waits; nothing ends.
  • Per-process limits bound one build, run or command, so that one runaway process can’t take the rig down. That one process ends; the lane goes on.
ExampleKindWhat happens
A trial’s time is up (20 minutes by default)PacingThe trial ends, and the lane’s next trial starts fresh
Trials keep achieving nothingPacingThe lane waits a little longer before each next trial, up to 10 minutes
Many trials in a row end in errors, as in a model outagePacingThe agents rest for a while, then try again. A new model for the rig, or resuming the run, ends the rest at once
A subscription’s usage window is fullPacingThe agents wait for it. Nothing pays for more
A lane’s last change is still with the judgeBack-pressureThe lane waits for the verdict
Too many changes wait for the judgeBack-pressureNew trials wait until fewer are open
A build, a timed run or a lane’s command uses too much memory or disk, or a judge’s step runs past the kit’s time limitPer-processThat one process ends

A trial “achieves nothing” when it ends in an error, without a change, with a change refused before it is built, or with a change identical to an earlier one. The limits and pacing reference lists every value and where it is set.

Long runs also take care of their own measurement: once a day, when it has nothing else to do, a hill climb’s judge times the champion against itself to learn how noisy the device is (Campaign modes).

No agent can end a campaign. What ends one is written in code, the same for every campaign of a mode:

ModeEnds whenWithout that
Hill climbNever on its ownIt runs until you pause it, a budget you set pauses it, or another run starts on its rig
GoalEvery required goal is met (or, if the contract says so, enough of them), confirmed by two independent checks of the champion. Or you accept a “not possible” proposalIt has no time limit of its own
ResearchIts time window is over: the contract’s maximum duration, or its minimum duration when it sets no maximum. Only running time countsThe window is part of every research contract: its author sets it

A run that has stopped is paused, not closed, and keeps everything it found, including its experiment queue: the experiments its lanes were on go back to the top. A closed run is finished. Either way, its champion and its results stay, ready to take. Campaign modes explains each ending in full.

When you want a limit, you set it. Each one does exactly what it says, and nothing else:

LimitWhereWhat it does
Hours since the run startedbudget.wall_hours in the contract, or Stop after (hours) on the New campaign pageAgents stop starting trials, and the run is paused once its trials end. Paused time counts too
Hours of judging on the devicebudget.device_hours in the contractThe same
Money spent on the agents’ modelbudget.llm_usd in the contract, with the model’s prices set on the rig (THERMITE_LLM_USD_PER_MTOK_IN and THERMITE_LLM_USD_PER_MTOK_OUT). It counts the workers’ calls only, not the planner’s, and rigs that control sets up can’t be given the prices yet (goal 061)The same
Turns in one trialTurns per trial on the rig’s Edit rig pageThat one trial ends at the limit; the next one starts
A lane command’s timelanes.limits.run_timeout_s in the contractThat one command ends
Advisors’ spending per daymax_usd_per_day in the advisors fileThe advisors skip their work until the next day (Supervision)
Size of a run’s archive of fetched pages, in any modeTHERMITE_RESEARCH_MAX_MB on the rigFurther fetches are refused

A spent budget pauses the run. It never closes it, so nothing is lost. While a run is paused, its judge jobs wait in the queue too. The budget belongs to the run’s contract, which does not change while the run lives: a new budget means a new contract version and a new run.