Repository navigation
hermes config check reports stale toolset names and disabled platforms the way the runtime sees them (salvage #127392) - #127782
Merged
kshitijk4poor merged 3 commits intoSep 29, 2026
Conversation
(cherry picked from commit 98ab863)
…heck Follow-up to the config check diagnostics from NousResearch#127392. - Saved platform_toolsets are validated by one resolver, toolset_validation.saved_toolset_resolver, shared with `hermes config migrate`. The two commands previously disagreed: migrate flagged MCP server names and plugin-platform bundles (even suggesting 'hermes-teams' for 'hermes-teams'), while config check accepted them. - A configured MCP server is known even when disabled (enabled: false); it is inactive, not a typo. - known_plugin_toolsets is no longer treated as proof that a toolset exists. It records what a platform was offered at save time, so it hid toolsets of uninstalled plugins, the stale case this check is for. - Plugin-provided names are consulted only for names nothing else explains, so a clean config no longer runs plugin discovery. - A malformed mcp_servers (a list) no longer crashes the command. - The top-level `toolsets` check is dropped: the CLI resolves its toolsets from --toolsets or platform_toolsets, and reads the top-level key only for the legacy kanban opt-in. - Disabled platforms are read with the runtime's plugins.disabled reader, so a non-list value (which the runtime ignores) is no longer reported as disabling a platform. Required credentials come from _platform_manifest_env_entries, which now takes optional=False. - Tests use a synthetic platform manifest instead of the real Telegram one, and assert config check and migrate report the same names.
…nnot place saved_toolset_resolver built the hermes-<platform> bundle set eagerly, so every migrate_config run (hermes update, config migrate, doctor) and every config check paid a full bundled+user manifest scan even with no saved platform_toolsets. The scan is now cached and lazy, like the plugin lookup. The stale-toolset test stubs the plugin lookups so host-installed plugins cannot change its verdict.
|
Independent verification on the PR head (f64add8): config-check-diagnostics suite 2/2 green on Linux. No findings. |
This was referenced Sep 29, 2026
|
@kshitijk4poor does this supersede #86233 or was that left open for other reasons? |
kshitijk4poor
pushed a commit
to kshitijk4poor/hermes-agent
that referenced
this pull request
Oct 3, 2026
MCP tools register under the toolset name mcp-<server>, an alias that only exists after MCP discovery. `hermes config migrate`, `hermes update` and `hermes config check` run without discovery, so a platform_toolsets entry such as mcp-codegraph for a configured server was reported as an unknown toolset with a 'hermes-cli' hint (NousResearch#78102). saved_toolset_resolver now accepts the prefixed form of every configured and plugin-provided (portable) MCP server. An mcp-<name> with no such server is still reported. Rule from NousResearch#106715 by @a692570, adapted onto the shared resolver that landed in NousResearch#127782.
kshitijk4poor
pushed a commit
that referenced
this pull request
Oct 3, 2026
MCP tools register under the toolset name mcp-<server>, an alias that only exists after MCP discovery. `hermes config migrate`, `hermes update` and `hermes config check` run without discovery, so a platform_toolsets entry such as mcp-codegraph for a configured server was reported as an unknown toolset with a 'hermes-cli' hint (#78102). saved_toolset_resolver now accepts the prefixed form of every configured and plugin-provided (portable) MCP server. An mcp-<name> with no such server is still reported. Rule from #106715 by @a692570, adapted onto the shared resolver that landed in #127782.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
hermes config checknow reports savedplatform_toolsetsnames that no longer resolve, and bundled platform plugins that are disabled while their required credentials are configured. It judges both the way the runtime does.Salvage of #127392 by @helix4u. Their commit is cherry-picked, so authorship is preserved. Two follow-up commits fix what review found before landing.
Changes
config checkandhermes config migratenow share one resolver,toolset_validation.saved_toolset_resolver. Before this, migrate warned about MCP server names and plugin-platform bundles (it even suggested'hermes-teams'for'hermes-teams'). The new check accepts them.enabled: false. It is inactive, not a typo.known_plugin_toolsetsno longer counts as proof that a toolset exists. It records what a platform was offered at save time, so it hid toolsets from uninstalled plugins, which is exactly the stale case this check exists for.plugins.disabledis read through the runtime's own reader. A non-list value, which the runtime ignores, is no longer reported as disabling a platform. Required credentials come from_platform_manifest_env_entries(optional=False), so optional vars never count.mcp_servers(for example a list) no longer crashes the command.toolsetskey. The CLI resolves toolsets from--toolsetsorplatform_toolsetsand reads the top-level key only for the legacy kanban opt-in, so that check is gone.Validation
hermes config check, tempHERMES_HOME)platform_toolsets.clilists a removed nameknown_plugin_toolsetsenabled: falselisted inplatform_toolsetsmcp_servers: [a]AttributeErrortracebackplugins.disabled: platforms/telegram(string) with tokenplugins.disabled: [platforms/telegram]with tokentests/hermes_cli/test_config_check_diagnostics.py, red on the original commit and green here.config checkand migrate report the same names across A→B→A homes. Mutating migrate back to barevalidate_toolsetturns it red.platform_toolsets,_platform_manifest_env_entriesormigrate_configgive identical results on this branch and onorigin/main: 852 passed, 17 failed and 8 errors on both, and the failures are the same set.ruff checkon the touched files, and the Windows footgun checker, are clean.Known limits
platform_toolsets.cli: [no_mcp]on its own is still not reported.validate_platform_toolsetscountsno_mcpas a valid toolset.try/exceptand under the profile's own plugin scope.Credit (post-merge sweep)
Earlier PRs fixed parts of the migrate-side false positives that this resolver now covers. They were closed as resolved, with credit:
hermes-<platform>bundles. This was the first submitted fix.mcp-<server>half lands as a follow-up.