PyTorch-style training loop teaches the LLM harness, not the model
An open-source framework trains an LLM's prompts, tools, and repair loop with a PyTorch-style loop while freezing the model itself, using git as the ledger.
A new open-source framework applies a PyTorch-like training loop to the scaffolding around an LLM instead of its weights: prompts, context management, tool calls, and the repair loop get trained while the underlying model stays frozen. Each epoch inside trainer.epochs(), an Estimator proposes one bounded diff to a single harness file, which is then measured against the current baseline across a fixed task panel.
loss.backward() records that verdict and optimizer.step() applies a promotion criterion (e.g. StrictPareto, which forbids regressions and requires strict improvement) to fast-forward HEAD or reject the diff. Every candidate, promoted or not, is preserved under refs/candidates/, and every measured run under refs/experiments/runs/ — turning git log itself into the promotion history.
The critical engineering constraint is determinism: inference must decode one request at a time (e.g. --parallel 1 in llama.cpp), since batched concurrent decoding introduces non-determinism that makes results unattributable to the candidate change. Because the Estimator actually edits code and runs as a host process, the framework recommends isolated VMs or dedicated machines for training. Terminal-Bench and SWE-bench environments ship out of the box against any OpenAI-compatible backend, and adding a new benchmark or model provider is a matter of subclassing one interface.