SkillOpt treats a plain-text skill file as the trainable parameter of a frozen agent. A separate optimizer model proposes bounded edits; only improvements survive. 52/52 evaluation cells: best or tied. GPT-5.5: +23.5 points. Deployed artifact: one readable markdown file. pip install skillopt.
# Train Skills Like Weights
Run model on batch
Compute gradients
Bounds weight update
Early stopping on held-out set
model.bin (opaque)
Frozen agent runs tasks with current skill
Optimizer reads trajectories, distills patterns
Bounds text edits (add/delete/replace)
Accept ONLY if held-out score strictly improves
best_skill.md (~920 tokens, readable)
# The Loop
Executes tasks. Never changes. GPT-5.5 down to Qwen3.5-4B.
Reads trajectories. Proposes bounded edits. Maintains rejected-edit buffer + meta skill.
After each epoch, a slow update consolidates longer-horizon lessons that single batches can't reveal. A meta skill summarizes accepted/rejected patterns into optimizer-only guidance.
Removing the rejected-edit buffer lowers scores on all 3 ablation benchmarks. Removing both the meta skill and slow update drops SpreadsheetBench from 77.5 to 55.0.
# The Numbers
6 benchmarks · 7 models · 3 harnesses (direct chat, Codex, Claude Code)
| Benchmark | No Skill | SkillOpt | Gain | Note |
|---|---|---|---|---|
| SpreadsheetBench | 41.8 | 80.7 | +38.9 | |
| OfficeQA | 33.1 | 72.1 | +39.0 | 1 edit |
| LiveMathBench | 37.6 | 66.9 | +29.3 | |
| SearchQA | 73.3 | 88.1 | +14.8 | |
| DocVQA | 70.1 | 82.1 | +12.0 | |
| ALFWorld | 96.3 | 98.1 | +1.8 | near ceiling |
TIER JUMP Small models + skill > larger models without
Spreadsheet skill trained in Codex, dropped into Claude Code with zero further optimization:
Different tool surfaces. The skill captures general workflow logic, not harness-specific recipes.
# Try It
pip install skillopt # Default hyperparameters # epochs: 4, batch: 40, reflection minibatch: 8 # 16 analyst workers, textual_lr: 4 (cosine decay) skillopt train \ --model "gpt-5.4-mini" \ --benchmark "your-eval-set" \ --epochs 4 \ --textual-lr 4 \ --lr-schedule cosine # Output cat runs/best_skill.md # ~920 tokens, human-readable
Training does not have to mean model weights. The skill layer -- a plain markdown file -- is a stable, transferable, auditable adapter between frontier capability and real workloads. If you build agents on Codex or Claude Code, this is the closest thing to fine-tuning without fine-tuning.
Antidoom: One LoRA to Kill Your Model's Doom Loops
Liquid AI found the exact token that starts a repetition loop. One LoRA adapter, trained in hours, drops Qwen3.5-4B looping from 22.9% to 1%.
Enjoyed this?
New episodes Mon, Wed, Sat.