Install any skill in seconds. Free to start, no credit card required.
Get Started Free →SkillOpt-flavored offline training loop for any SKILL.md. Treats accumulated learn-rule corrections as training trajectories, proposes bounded patches via an optimizer LLM, gates each candidate against a held-out validation set built from the user's own past corrections, and ships only candidates that demonstrably improve the score. Inspired by Microsoft SkillOpt's ReflACT pipeline (rollout → reflect → aggregate → select → update → evaluate) adapted to pro-workflow's SQLite store. Use when a ski
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -10% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 64% | 0% |
Train an existing SKILL.md the way a deep-learning optimizer trains weights: via rollouts, gradient-like reflections, validation-gated acceptance. No model retraining; only the skill markdown changes.
Use this skill when:
Do not use when:
ANTHROPIC_API_KEY (or equivalent provider key) is availabletextrollout pull recent learnings from SQLite (existing learn-rule rows) reflect optimizer LLM analyzes a minibatch, proposes add/delete/replace patches aggregate vote-merge patches across minibatches select clip by LR budget (default: 3 adds, 2 deletes, 3 replaces per step) update apply selected patches to a candidate skill content evaluate evaluator LLM scores candidate against held-out validation items gate accept candidate only if weighted score >= current + acceptThreshold slow update at epoch boundary, consolidate accepted edits into a coherent rewrite
Failed candidates are stored in a rejection buffer and fed back to the next reflect step so the optimizer doesn't propose the same patch twice.
bash/skill-optimize <slug> [options]
Options (all optional; sensible defaults shown):
| Flag | Default | Notes | |---|---|---| | --epochs N | 3 | Outer loop count | | --batch-size N | 8 | Trajectories per minibatch | | --minibatches N | 2 | Minibatches per epoch | | --holdout N | 6 | Validation items reserved (max ~25% of trajectories) | | --budget-usd X | 0.50 | Hard cap; loop aborts when spent | | --optimizer-model M | claude-sonnet-4-6 | Reflect + slow-update model | | --evaluator-model M | claude-haiku-4-5-20251001 | Gate model (cheaper) | | --max-adds N | 3 | LR budget per step | | --max-deletes N | 2 | | | --max-replaces N | 3 | | | --accept-threshold X | 0.0 | Minimum score delta to accept candidate | | --max-skill-tokens N | 2000 | Hard cap on candidate length | | --slow-every N | 2 | Epochs between consolidation passes | | --json | off | Machine-readable output |
Kill switch: touch ~/.pro-workflow/STOP aborts the loop between steps.
optimization_runs, optimization_candidates, optimization_patches, optimization_rejectionsoptimization_validation (reusable across runs)Inspect after:
bashsqlite3 ~/.pro-workflow/data.db "SELECT id, skill_slug, initial_score, best_score, accepted_steps, rejected_steps, spent_usd FROM optimization_runs ORDER BY id DESC LIMIT 5"
spent_usd >= budget_usd at any step boundary, the loop ends with stopped_reason="budget exhausted".anchor_missing.Inspired by Microsoft SkillOpt (arXiv:2605.23904). The six-stage rollout/reflect/aggregate/select/update/evaluate pipeline, LR budget, rejection buffer, and slow / meta update mechanics are adapted to pro-workflow's existing SQLite + learn-rule data plane. No SkillOpt code is reused. "ReflACT" is not a SkillOpt term and is not used here; the loop is referred to by stage names only.
Other measured skills in the registry, with their headline benchmark lift.