SkillOpt: Giving Agent Skills a Deep-Learning Optimizer — Sweeping All 52 Evaluation Units
> Paper: SkillOpt: Executive Strategy for Self-Evolving Agent Skills > arXiv: 2605.23904 | Project: https://github.com/microsoft/SkillOpt > Team: Microsoft Research | Date: 2026-05
The Core Problem: Why Can't Agent Skills Evolve?
Existing skill-acquisition methods for AI agents are fundamentally primitive:
- Hand-written: human experts write natural-language instructions — brittle, breaking as soon as the scenario changes
- One-shot generation: an LLM produces a skill in a single pass, no feedback loop, quality capped by the initial prompt
- Loose self-revision: reflection loops sound sophisticated, but they do not behave like deep-learning optimizers — they cannot reliably and reproducibly beat their starting point
- Target (student) model fully frozen, no parameter updates
- Current skill document injected into the prompt
- A batch of tasks runs; trajectories and scores collected
- The optimizer is decoupled from the target model — a "teacher" (default GPT-5.5) runs only offline, so deployment inference costs nothing extra
- Converts scored trajectories into bounded edit operations: ADD / DEL / REP
- Two modes: Patch (default, local edits) and Rewrite (full rewrite for major refactors)
- A protected slow-update field holds per-epoch meta-updates that step-level edits cannot overwrite
- A text learning-rate budget \(L_t\) caps edits per step (default \(L_t = 4\), cosine decay to \(L_t = 2\))
- Schedules: constant, linear decay, cosine decay (default), adaptive
- Removing the budget (unbounded rewriting) clearly hurts: SearchQA 84.6 vs 86.5–87.0; SpreadsheetBench 75.7 vs 77.5–78.2
- Accepted only if
SelectionScore(candidate) > CurrentSelectionScore(strict; ties rejected) - Split train : selection : test = 2 : 1 : 7; reported scores on disjoint test data
- The gate prevents harmful proposals from accumulating and turns rejected edits into negative feedback
- 6 benchmarks: SearchQA, SpreadsheetBench, OfficeQA, DocVQA, LiveMath, ALFWorld
- 7 target models: GPT-5.5, GPT-5.4, GPT-5.4-mini, GPT-5.4-nano, GPT-5.2, Qwen3.5-4B, Qwen3.6-35B-A3B
- 3 harnesses: Direct Chat, Codex harness, Claude Code harness
- 52 evaluation units; SkillOpt is best or tied-best in all of them
- Weaker models gain relatively more (GPT-5.4-nano +55%), suggesting knowledge-distillation behavior: a strong optimizer trains weak models
- Human expert skills lose to SkillOpt on structured tasks (spreadsheet: 72.9 vs 80.7) but stay close on visual understanding (DocVQA)
- TextGrad sometimes hurts: below the no-skill baseline on SpreadsheetBench (41.1) and ALFWorld (82.8), because unbounded rewriting can destroy existing capability
- GEPA is strong but insufficient: tied in only 2 of 52 units; average gap +2.5 to +5.8 points
- Cross-model: skills remain effective but slightly degrade; re-optimization recommended
- Cross-harness: base skills transfer across Direct Chat / Codex / Claude Code with harness-specific tuning
- Cross-task: math-optimized skills apply to related math tasks out of the box, faster and more stable than training from scratch
- Hand-written skills = hand-tuned weights; one-shot skills = random initialization; SkillOpt = a trained optimizer
- If integrated into tools like Claude Code, Cursor, or GitHub Copilot, developers may no longer need to hand-tune system prompts — skills evolve from execution feedback
- Architecturally: skills are trainable external state; the optimizer is decoupled from the executor; the future of agent capability may lie not in bigger models but in better skill optimizers
- 52/52 wins across 6 benchmarks × 7 models × 3 environments
- Zero deployment cost: the optimizer runs only offline
- Reproducibility via strict gating + edit budget + negative-feedback buffer
- Surpasses human experts on structured tasks
- Distillation effect: GPT-5.5-optimized skills lift GPT-5.4-nano by ~55%
- Paper: https://arxiv.org/abs/2605.23904
- Project: https://github.com/microsoft/SkillOpt
- Team: Microsoft Research | May 2026
The paper's thesis:
> Skills should be trained as external state of a parameter-frozen agent, with the same discipline that makes optimization in weight space reproducible.
SkillOpt treats the "skill document" like the weights of a neural network and equips text-space optimization with an optimizer.
Core Insight: Text Space Needs a "Learning Rate" and "Gradient Gating"
| Deep Learning (weight space) | SkillOpt (text space) | |:---|:---| | Gradient direction | Trajectory reflection → edit direction | | Learning rate | Text edit budget | | Validation checks | Held-out selection gate | | Batching / scheduling | Mini-batch / scheduler |
This is a fully implemented engineering system, not rhetoric. Skills can be systematically optimized like weights — at zero additional deployment cost.
Architecture: A Five-Stage Closed Loop
Stage 1: Frozen Agent + Current Skill → Execute Batch
Stage 2: Optimizer Model → Structured Edits
Stage 3: Merge, Rank, Trim Edits → Candidate Skill
Stage 4: Held-Out Validation Gate → Accept/Reject
Stage 5: Slow Updates and Meta-Integration
| Layer | Frequency | Content | Stored | |:---|:---|:---|:---| | Fast update | Every step | Current batch experience | Skill body | | Slow update | Every epoch | Cross-epoch long-term lessons | Protected slow-update field | | Meta-skill | Every epoch | Edit-pattern summary | Optimizer side only, not deployed |
Removing slow updates crashes SpreadsheetBench by -22.5 points (77.5 → 55.0) — local edits alone overwrite persistent procedural curricula.
A rejected-edit buffer records failed patterns and score drops, feeding them back into later reflection calls. Removing it costs -1.6 on SearchQA, -4.6 on SpreadsheetBench, -2.4 on LiveMath.
Results: A Clean Sweep Across All 52 Cells
Headline numbers (GPT-5.5, Direct Chat)
| Benchmark | No skill | Human | LLM Skill | Trace2Skill | TextGrad | GEPA | SkillOpt | Gain | |:---|:---|:---|:---|:---|:---|:---|:---|:---| | SearchQA | 77.7 | 81.8 | 80.9 | 82.4 | 81.4 | 84.8 | 87.3 | +9.6 | | SpreadsheetBench | 41.8 | 72.9 | 43.2 | 49.6 | 41.1 | 73.6 | 80.7 | +38.9 | | OfficeQA | 33.1 | 66.9 | 51.7 | 65.7 | 42.0 | 63.9 | 72.1 | +39.0 | | DocVQA | 78.8 | 90.1 | 89.6 | 90.6 | 87.2 | 89.1 | 91.2 | +12.4 | | LiveMath | 37.6 | 38.4 | 40.0 | 52.0 | 49.2 | 43.2 | 66.9 | +29.3 | | ALFWorld | 83.6 | 91.8 | 93.3 | 87.3 | 82.8 | 85.8 | 95.5 | +11.9 |
Consistency across models (Direct Chat)
| Model | No skill | SkillOpt | Avg gain | |:---|:---|:---|:---| | GPT-5.5 | 58.8 | 82.3 | +23.5 | | GPT-5.4 | 55.5 | 72.8 | +17.3 | | GPT-5.4-mini | 48.4 | 64.4 | +16.0 | | GPT-5.4-nano | 31.6 | 49.0 | +17.4 | | GPT-5.2 | 47.9 | 68.2 | +20.3 | | Qwen3.5-4B | 34.1 | 52.8 | +18.7 | | Qwen3.6-35B-A3B | 49.8 | 72.1 | +22.3 |
Key findings:
Ablations: What Is Each Component Worth?
| Configuration | SearchQA | SpreadsheetBench | LiveMath | |:---|:---|:---|:---| | Full SkillOpt | 87.1 | 77.5 | 61.3 | | No edit budget | 84.6 | 75.7 | - | | No rejected buffer | 85.5 (-1.6) | 72.9 (-4.6) | 58.9 (-2.4) | | No meta-skill | 85.1 (-2.0) | 75.7 (-1.8) | 58.1 (-3.2) | | No slow update | - | 55.0 (-22.5) | - |
Slow updates matter most; the rejected-edit buffer and meta-skill follow; the edit budget is foundational.
Transferability
Limitations and Open Questions
1. Optimizer dependency: relies on a strong optimizer (GPT-5.5), which is itself hard to obtain 2. Training time: offline text optimization can be lengthy 3. Hyperparameter sensitivity: edit budget, decay schedule, buffer size all need tuning 4. Text-space constraints: ADD/DEL/REP limits expressiveness; some changes need Rewrite mode 5. Domain coverage: all 6 benchmarks are agent/tool tasks; creative writing and open-ended dialogue untested
Implications
Conclusion
SkillOpt is a milestone in agent skill learning: it migrates the full discipline of deep-learning optimization into text space —