v8.3.0 — Stop leaving things behind
v8.1.0 decided which servers a machine pays for. v8.2.0 decided how much of each. This one deals with what the installer left behind getting there.
The installer never removed a skill it stopped shipping
It copies the canonical tree into every provider's skills directory and has never deleted a skill that left that tree. A machine installed against v7 still carried the v7 names. Measured at v8.2.0 — seven retired skills across three provider trees, twenty-one directories, each one loaded and offered to the agent next to the skill that replaced it:
| still installed | replaced by |
|---|---|
skyrim-kid-distribution |
kid-authoring |
skyrim-spid-distribution |
spid-authoring |
skyrim-esp |
skyrim-plugin-authoring |
skyrim-papyrus / skyrim-mcm |
skyrim-papyrus-modding |
skyrim-skse |
skse-plugin-authoring |
skyrim-archive |
skyrim-assets-pbr |
Two skills claiming to own KID syntax, and the retired one documents the older dialect. That is wrong answers, not clutter — the exact failure this pack exists to prevent, shipped by the pack.
Backups had no ceiling
The plugin dedupe wrote a full skill-tree snapshot on every install: 160 directories, 52 MB — against 2.1 MB for every .bak file combined (86 Grok config backups, 25 Claude settings backups, ...).
TOOLS\Clean-StaleState.ps1
Removes both. Runs at the end of every successful install; dry-run by default when run by hand. Verified live on a real machine: 52 MB → 2.6 MB, 160 directories → 10, all 21 stale skills gone, second run a no-op.
Deletion is limited to what this pack created, with a contract on each guard:
- A retired skill goes only if its name is in the new
BUNDLED-TOOLS/RETIRED-SKILLS.jsonand absent from the canonical tree and the directory has aSKILL.md. - Backups keep the newest 3 per family, install logs the newest 5, dedupe snapshots the newest 3 per provider.
- Log retention is
ValidateRange(1, 200)— it cannot be set to zero and delete the evidence of the run that deleted it.
Plugin skills, the optional mega-pack and your own files are reported, never touched. It runs after the final doctor, so a failed install keeps everything for diagnosis. -SkipCleanup opts out.
The retired set is derived from this repository's own history by TOOLS/generate_retired_skills.py, not hand-maintained.
Routing now knows what a tool costs
ai-tooling-stack routed on capability alone, so a free CLI and a ~41,768 token/turn MCP server looked equal for a job both could do.
| tool | surface | standing cost |
|---|---|---|
| Skyrim Forge | 52 subcommands, CLI | 0 tokens |
| Spooky's AutoMod | CLI with --json |
0 tokens |
| houseCARL | 45 tools, MCP only — no CLI | ~41,768 tokens/turn |
Every Forge MCP tool has a CLI twin, verified against forge --help on 6.0.0. So: Forge CLI first; houseCARL only for what wins in the LIVE load order, which nothing else can answer.
The correction that makes this work: preferring a cheaper MCP server saves nothing. Its schemas are in context every turn from the moment it is registered, whether or not anything calls it. The saving comes from not registering it, or registering fewer of its tools — never from choosing differently at call time.
The encoding gate was watching four file types
Scripts only. Everything the pack copies onto a machine was unguarded — including AIO-INSTRUCTION.txt, which had already been mojibake-corrupted once in v7.5.6, with nothing watching it afterwards. Five deployed artifacts are now pure ASCII, and the gate checks each by name plus a repo-wide U+FFFD sweep. Falsified before shipping: one em dash appended to BOOTSTRAP.txt fails it.
Deliberately not converted: 2,405 shipped files contain non-ASCII and nearly all of it is intentional — check marks in skill prose, box drawing in banners, CJK in a vendored skill. A .md an agent reads has no encoding problem. build_release.py keeps its omega, a fixture proving the builder survives a Unicode temp path.
Verified on 2b43262: 18/18 checks green, 73/73 release contracts under both runners, pack gate PASS, hermes bootstrap 5/5, MANIFEST 4423 files / 0 mismatch, installer exit 0 with doctor PASS and the cleanup running automatically.
Full detail: docs/history/V8.3.0-CHANGELOG.md