Shadow mode
Keep your assistant. Let the runner prove what a local model could have done.
Connect Claude Code or Codex to Runner, capture local evidence, and measure bounded attempts against your repository's tests. Replay requires an eligible task and a reconstructable workspace. Verified patches are offered for review; learning experiments run separately in Shade.
Sixty seconds
Install, keep working, ask.
runner --shadow-mode -m ~/models/your-model.gguf
It asks first
The command says exactly what it will write: two capture hooks and a /shadow skill for Claude Code, a /shadow prompt for Codex, whichever is on the machine, and the model it will serve. Without -m it looks for a model on disk that fits and proposes it. Prompt-time work has a time budget; model attempts run in the background.
Captured content stays local
Capture v2 retains raw hook payloads and bounded workspace snapshots. Payloads can contain agent text and tool data. Records and content blobs stay on the machine; partial snapshots and uncertain task associations are reported. The installer describes this before writing hooks.
Counts before rates
/shadow shows how many tasks were captured, how many could be replayed, how many the local model attempted and how many were verified by the frozen tests. No percentage appears before thirty eligible episodes, and no claim of success without a passing verifier.
How offloading opens
The harness routes. The runner proves.
1. The ledger fills
Each /shadow imports what the hooks captured and admits the tasks whose tests can be frozen. When you say so, the local model replays them on scratch copies, function-sized tasks first, and the verdicts land in the ledger with the model's hash, the quantization, the runner build and the verifier version.
2. A class qualifies
A printed rule, never a hidden one: a task class qualifies when the local model has at least three attempts, at least one verified, and half or better verified. From then on the runner works in tandem: a background attempt on a scratch copy while your assistant works, and a verified patch offered to you once, never applied.
3. Runner first
Where the record is strong, at least five attempts and four in five verified, the assistant is told to wait for the local result and to do the work itself only if that result is not verified. The more the local model proves, the more is funneled to it; nothing routes without a record.
Optional learning
Evidence first. Learning is a separate experiment.
Shadow records attempts, provenance and verification outcomes. Capture v2 stores raw hook payloads and bounded workspace content locally, and reports partial snapshots and uncertain attribution. Training recipes and scaffold optimization live in the optional Shade tools. They produce candidate artifacts and evaluation evidence without changing Shadow's serving configuration. Runner continues to provide inference, low-level training and adapter serving.
A complete record establishes what was captured. A passing verifier establishes its own checks on that task. Neither establishes that training improves later tasks or reduces frontier usage; those require separate evaluations.
With a signing key (shadow keygen), every delegation writes a receipt: an in-toto statement naming the patch and the commit by digest, the request only by hash, the verdict, the model and the runner build, signed and chained by the runner and checked by the same code path that checks a notarized run.
What to know before you install
Two limits, stated up front.
Codex integration is prompt driven
This installer wires Claude Code through prompt and stop hooks. Its Codex integration installs a /shadow prompt asking the assistant to run the same commands. That path depends on the assistant following the prompt; Runner does not enforce it.
Python repositories today
The frozen verifier is pytest-shaped: a task is admitted when its tests can be frozen and keyed per test. Capturing another repository does not make it eligible for this repair recipe. Verification events must be supplied explicitly; the default installer does not discover a verifier or install a verification hook.
Optional native preference training
Runner also exposes --train-dpo for chosen/rejected JSONL pairs. It trains an adapter on the CPU path against the frozen base, without a second model copy. A gradient gate checks the objective; task-quality gains require a separate evaluation. Shadow does not start this operation automatically.