Doctor falsely flags valid config keys as unknown

NousResearch/hermes-agent · cluster 67397 · hermes cli

Data as of

Nothing open on GitHub. Fix merged in #67891. Check it covers your case.

The short answer

0open issues
0open PRs
11items grouped
Known?
Yes. 11 related items grouped here, 4 issues already closed.
Fix event
A fix was merged to main in PR #67891. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this partially resolved, deciding PR #67891. That is separate from the fix event.
Still open
Nothing open on GitHub.

A bug where hermes doctor incorrectly warns that supported top-level config keys like group_sessions_per_user and known_plugin_toolsets are unknown or ignored. Multiple fix attempts address adding these keys to an allowlist (_EXTRA_KNOWN_ROOT_KEYS) to suppress the false warnings.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #67891 fix(config): stop doctor flagging all Hermes-written top-level config keys

    merged to main

    files: hermes_cli/config.py, tests/hermes_cli/test_config_validation.py

    Show the diff
    • hermes_cli/config.py
      @@ -5512,7 +5512,14 @@ def check_config_version() -> Tuple[int, int]:
           "plugins",           # plugin enable/disable lists (hermes_cli/plugins_cmd.py)
           "smart_model_routing",   # written by the setup wizard (hermes_cli/setup.py)
           "platform_toolsets",     # written by the setup wizard (hermes_cli/setup.py)
      +    "known_plugin_toolsets", # written/read by hermes_cli/tools_config.py toolset-save flow
           "session_reset",         # top-level form read by gateway/config.py + setup
      +    "group_sessions_per_user",   # top-level form bridged by gateway/config.py
      +    "thread_sessions_per_user",  # top-level form bridged by gateway/config.py
      +    "stt_echo_transcripts",      # top-level form bridged by gateway/config.py
      +    "reset_triggers",            # top-level form bridged by gateway/config.py
      +    "always_log_local",          # top-level form bridged by gateway/config.py
      +    "filter_silence_narration",  # top-level form bridged by gateway/config.py
           "multiplex_profiles",    # top-level form accepted alongside gateway.multiplex_profiles
           "profile_routes",        # top-level form accepted alongside gateway.profile_routes
           "platforms",             # top-level per-platform map merged by gateway/config.py
    • tests/hermes_cli/test_config_validation.py
      @@ -253,6 +253,28 @@ def test_known_root_keys_derived_from_default_config(self):
               assert _EXTRA_KNOWN_ROOT_KEYS.issubset(_KNOWN_ROOT_KEYS)
               assert _KNOWN_ROOT_KEYS == frozenset(DEFAULT_CONFIG.keys()) | _EXTRA_KNOWN_ROOT_KEYS
       
      +    def test_hermes_written_roots_not_flagged_as_unknown(self):
      +        """Roots Hermes itself writes/reads must not warn as unknown (#67397)."""
      +        issues = validate_config_structure({
      +            "model": {"provider": "openrouter"},
      +            "known_plugin_toolsets": {"cli": ["spotify"]},
      +            "group_sessions_per_user": True,
      +            "thread_sessions_per_user": False,
      +            "stt_echo_transcripts": True,
      +            "reset_triggers": ["/new"],
      +            "always_log_local": True,
      +            "filter_silence_narration": True,
      +        })
      +        unknown = [i for i in issues if "Unknown top-level config key" in i.message]
      +        messages = " ".join(i.message for i in unknown)
      +        assert "known_plugin_toolsets" not in messages
      +        assert "group_sessions_per_user" not in messages
      +        assert "thread_sessions_per_user" not in messages
      +        assert "stt_echo_transcripts" not in messages
      +        assert "reset_triggers" not in messages
      +        assert "always_log_local" not in messages
      +        assert "filter_silence_narration" not in messages
      +
           def test_provider_like_unknown_root_keeps_misplaced_message(self):
               """Preserve existing base_url/api_key root-level guidance (not generic unknown)."""
               issues = validate_config_structure({

6 PRs closed without merging

From the close comments: done elsewhere 2 · duplicate 2 · won't fix / by design 1 · other 1

  • #67497 fix(config): add group_sessions_per_user + known_plugin_toolsets to _EXTRA_KNOWN_ROOT_KEYS (#67478) · other → #67924
  • #67513 fix(config): add group_sessions_per_user and known_plugin_toolsets to _EXTRA_KNOWN_ROOT_KEYS · done elsewhere
  • #67517 fix(config): 添加 group_sessions_per_user 和 known_plugin_toolsets 到白名单 · duplicate → #67497, #67447
  • #67583 fix(cli): recognize group_sessions_per_user and known_plugin_toolsets as known config roots (#67478) · duplicate → #67497, #67447
  • #67654 fix(config,doctor): accept known roots and synthetic slugs · won't fix / by design → #67924
Show 1 more
  • #68023 fix(config): add runtime-supported keys to _EXTRA_KNOWN_ROOT_KEYS (#68000) · done elsewhere → 9bda643, #67924, #68000
Closed issues · 4
  • Closed#67397[Bug]: `hermes doctor` flags supported top-level config keys `group_sessions_per_user` and `known_plugin_toolsets` as unknown
  • Closed#67478[Bug] follow-up #67397: _EXTRA_KNOWN_ROOT_KEYS still missing group_sessions_per_user + known_plugin_toolsets on main
  • Closed#67860[Bug]: ⚠ Config issues detected in config.yaml:
  • Closed#68000Doctor reports runtime-supported root config keys as ignored
How this cluster was grouped
  • Link evidence (partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
  • Members outside that structural core may belong to a different underlying problem.
  • Pairwise link density 0.17: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. 1.00 means every pair is linked.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Subsystem
hermes cli
Merged PRs
#67891
Closed issues
4
Attempts
6 PRs closed without merging
Fix link checked
20 Jul 2026

For your agent

The same facts, typed.