--benchmark <path> | skills/<n>/skillopt-benchmark.jsonl | Path to benchmark JSONL |
--bootstrap-from-skill | off | Generate a starter benchmark from SKILL.md (recommended; no routing-eval needed) |
--bootstrap-tasks N | 15 | How many starter tasks --bootstrap-from-skill generates (max 50) |
--bootstrap-from-routing | off | Auto-build benchmark from routing-eval.jsonl |
--bootstrap-reviewed | off | Required after human-reviewing bootstrap output |
--epochs N | 4 | Outer-loop iterations |
--batch-size N | 8 | Tasks per inner step |
--lr N | 4 | Max edits per step |
--lr-schedule cosine|linear|constant | cosine | Edit-budget decay |
--split TRAIN:SEL:TEST | 4:1:5 | Ratio; refuses if D_sel < 5 |
--optimizer-model MODEL | tier.deep | Reflects + proposes |
--target-model MODEL | tier.subagent | Executes the skill |
--judge-model MODEL | tier.reasoning | Scores rollouts |
--patch | --rewrite | patch | Edit ops only vs. full rewrites |
--dry-run | off | Cost preview, no LLM calls |
--no-mutate | off | Write proposed.md, don’t replace SKILL.md (no held-out needed) |
--allow-mutate-bundled | off | Required to mutate modusbrain-bundled skills in place — ALSO requires --held-out (>=5 rows) or the run hard-refuses |
--held-out <path> | — | Independent test set (same JSONL shape as the benchmark, task IDs disjoint from it). A candidate that beats the benchmark but regresses on the held-out set is refused. Required for in-place bundled mutation. |
--max-cost-usd N | 5.00 | Hard cap; preflight refuses if exceeded |
--max-runtime-min N | 30 | Wall-clock cap |
--force | off | Bypass dirty-working-tree refusal |
--resume <run-id> | off | Resume a prior interrupted run |
--json | off | Machine-readable stdout |