Skip to content

v8.2.0 — Register a tool budget, not a server

Choose a tag to compare

@ShugokiFable ShugokiFable released this 25 Aug 17:54
· 5 commits to main since this release

v8.1.0 decided which servers a machine pays for. This one decides how much of each.

Hermes filters at the tool level, and nothing was using it

The assumption going in was that Hermes is the hardest provider to control, because its MCP servers are not togglable the way Codex's are. That is backwards — tools/mcp_tool.py:

tools.include — whitelist: only matching tool names are registered
tools.exclude — blacklist: all tools EXCEPT matching ones are registered
entries may be exact names or fnmatch globs

Enforced at tool registration, on both the live-discovery and schema-cache paths, so a filtered tool's schema never reaches the model. Claude, Codex, Grok and Kimi can only toggle whole servers. Hermes is the most controllable provider in the pack — and the one where it matters most, because BYOK bills every turn.

houseCARL, by the tool

45 tools, 167,072 bytes, ~41,768 tokens on every turn — about 21% of a 200k window gone before the first user message. Schema size is wildly uneven, which is the whole opportunity:

housecarl_bulk_create     14,655 bytes
housecarl_create_record   14,548
housecarl_bulk_apply      12,393    → 41,596 between them: 25% of the server,
...                                   and more than the whole of Skyrim Forge
housecarl_bsa_list           856

Three named sets now ship in CATALOG.json with their measurements:

set tools tokens/turn saving
Full 45 ~41,768
Lean (default) 42 ~31,369 25%
ReadOnly 27 ~17,604 58%
TOOLS\Migrate-HermesProfiles.ps1 -SkyrimToolset ReadOnly -Apply
hermes -p skyrim mcp configure housecarl    # or pick by hand

Lean excludes and ReadOnly includes, deliberately: an upstream update should add new tools to Lean, and must never be able to add a write tool to a set whose promise is that nothing writes.

The filter is yours, not the installer's

hermes mcp configure writes tools.include by hand. The migrator fills that field when absent and never overwrites it — the same rule connect_timeout already had. -SkyrimToolset passed explicitly overrides.

The doctor prints the bill, and refuses to invent one

A tool filter was invisible in every existing view: hermes mcp test reports what the server advertises, not what Hermes registers.

==> Hermes profile tool budgets
  OK  skyrim   housecarl    42/45 tools  ~31369 tok/turn  [Lean] full is ~41768, saving ~10399

The first cut of that line averaged schema bytes across tools and reported ~38,983 for a set that measures 31,369 — a 3.7× error in the saving, in the format of a real measurement. It reports the recorded per-set figure now, and prints cost unmeasured for a hand-picked selection.

Also fixed

  • -SkyrimToolset Full reported "already matches" while the previous filter was still installed. Found by running the round trip Lean → Full → ReadOnly → Lean on a live config, not by reading the code.
  • 167,118 vs 167,072 were both in flight for one measurement (46 bytes of JSON array framing), in the release built to stop restated numbers drifting. Reconciled to one basis with a cross-source contract.

What this does not fix

The dollar saving is smaller than list price implies — tool schemas sit in the cached prompt prefix. The context-window saving is unconditional: ~10,399 tokens back on Lean, ~24,164 on ReadOnly, every turn, cached or not.


Verified on 18b74a1: 18/18 checks green, 70/70 release contracts under both runners, pack gate PASS, provider-detection gate PASS, hermes bootstrap 5/5, MANIFEST 4419 files / 0 mismatch, installer exit 0 with doctor PASS reporting the Lean budget.

Full detail: docs/history/V8.2.0-CHANGELOG.md