firehose> #llmops

microsoft/SkillOpt — training skills like weights, without touching weights

TL;DR

SkillOpt is Microsoft Research's argument, shipped as code, that a skill document is the trainable state of a frozen agent — and that you can optimize it with the full apparatus of weight-space training (epochs, mini-batches, a "textual learning rate," a rejected-edit buffer, held-out validation) to produce a compact best_skill.md that adds zero inference-time model calls. The load-bearing part is not the optimizer; it is the gate: a candidate edit is accepted only if it strictly improves a held-out score, which is what lets the loop run unattended without regressing. That is precisely where it collides with this vault. Self-Improving System holds as a principle that "self-improving" must not mean "fully autonomous," because an unsupervised loop drifts and quietly removes the operator's judgment. SkillOpt's entire design is the counter-bid: a held-out validation gate is a mechanized substitute for that judgment. You should care because the tension is real, unresolved, and directly load-bearing for firehose's own compounding design — and because if the transfer claim holds (artifacts move across model scales and between Codex and Claude Code harnesses without re-optimization), then the optimized skill is not a fitted parameter but a portable, distributable asset, and the offline cost amortizes forever.

What it is and how it is organized

A Python package + paper artifact (MIT, ~11.7k★, arXiv 2605.23904, pip install skillopt), organized into two loops that share one gate:

The organizing tell is that gate.py and staging.py are top-level modules in the sleep engine, not helpers inside the optimizer. Promotion is a first-class stage, separate from generation. Read the two initial.md/best_skill.md pairs under ckpt/ and skillopt_sleep/gate.py and you have the thesis; the rest is benchmark plumbing and backend adapters. Everything else here — skillopt_webui/ (Gradio dashboard), the mkdocs site, data/*_split/ — is scaffolding.

Concepts introduced

Held, not dropped (present in the repo, no concept page yet — spin out on demand):

Key claims

Check-worthy source claims (the repo's assertions, tagged for a later grounding pass — not verified here; this call has no external access):

Why this contradicts Self-Improving System

This is the highest-value thing in the capture, and it is a real disagreement, not a difference of emphasis.

Self-Improving System holds, as its central principle: "self-improving" does not mean "fully autonomous" — full autonomy removes your judgment and drifts. Its illustration is the workout system that only ever trains chest: it believed it was improving you, and it was breaking you. The prescribed remedy is that the human stays the driver and signs off on direction.

SkillOpt asserts the opposite is achievable, and names the missing piece. Its diagnosis of "loosely controlled self-revision" is the same diagnosis — such loops don't reliably improve over their starting point. Its cure is not a human; it is a held-out validation gate. A candidate edit that does not strictly improve the score is rejected. Under that construction the loop is monotone by design, and SkillOpt-Sleep runs it nightly, unattended, over the operator's own sessions.

Stated plainly, the tension to resolve: Self-Improving System holds that judgment cannot be removed from a compounding loop without drift; SkillOpt asserts that a strict held-out gate is a sufficient substitute for that judgment. Neither side is adjudicated here. What can be said is where the disagreement actually lives — not in whether gates work, but in what the score measures. The chest-only workout system had a gate; it improved its metric every week. A gate protects only what it measures, and a benchmark suite is a narrower proxy for "did this make the agent better at my work" than an operator's judgment is. SkillOpt's own strongest evidence cuts both ways here: its gate is scored against six academic benchmarks, and its answer to "does that generalize" is the transfer result (Skill Artifact Transfer) — which is an empirical answer to a question Self-Improving System poses as structural. That is the shape of the resolution, if there is one: the gate substitutes for judgment exactly to the extent its score is the operator's proxy, and SkillOpt-Sleep's harvest-from-your-own-sessions design is a bid to make it one.

Secondarily, this builds on Minimal Skill Surface and Skill Pruning from an unexpected direction. Both hold that the deployed skill surface should be small, and both arrive there by authorial taste — the deletion test, branch analysis, hunting no-ops. SkillOpt arrives at a 300–2,000-token artifact by optimization: a delete edit that improves held-out score is a deletion test executed mechanically, with a benchmark rather than a human as the falsifier. Two independent routes converging on "small" is corroboration for the smallness thesis, and it sharpens Skill Pruning's deletion test by showing it is a special case of a gated update with n=1.

And it corroborates Eval-Driven Development's "don't trust vibes; measure" — here promoted from a discipline into a hard precondition. Text-space optimization is impossible where no score exists. The two are not merely compatible: a gate is an eval, made blocking and automatic. What Eval-Driven Development proposes as a practice, SkillOpt makes load-bearing infrastructure.


Linked from