# NousResearch/hermes-agent · Accurate tool counting with platform toolsets

## Open now

- 0 issues, 1 PR open on GitHub.
- PR #57167: fix(prompt-size): honor effective Hermes toolsets

These changes correct prompt-size diagnostics that over-counted tools by ignoring enabled/disabled state and platform-specific toolset resolution. A related change ensures string-typed toolset lists are coerced to proper lists rather than iterated as individual characters.

## TL;DR

- 6 member(s): 0 open issue(s), 1 closed issue(s), 1 open PR(s), 1 merged PR(s), 3 PR(s) closed without merging.
- A fix was merged to main in PR #59210. Verify it addresses your case.
- **Recommended:** read PR #59210 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-59210`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.33`: the share of member 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.

## Closed / duplicate issues

- #41445: hermes prompt-size over-counts tools by not respecting enabled/disabled toolsets

## Prior & competing PRs

- **#41461: fix(cli): pass platform toolsets to prompt-size inspection agent**. closed without merge · fix tier `suggested`
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `fe8d02cec722dbd43de39eaa46e6996e1015185a`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#59210: fix(prompt-size): pass platform-resolved toolsets into the inspection agent**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `hermes_cli/prompt_size.py`, `scripts/release.py`, `tests/hermes_cli/test_prompt_size.py`
  - fix hunks:
  - `hermes_cli/prompt_size.py`

    ```diff
    @@ -34,11 +34,17 @@ def _build_inspection_agent(platform: str) -> Any:
         """
         from run_agent import AIAgent
         from hermes_cli.config import load_config
    +    from hermes_cli.tools_config import _get_platform_tools
     
         cfg = load_config()
         model_cfg = cfg.get("model", {}) if isinstance(cfg.get("model"), dict) else {}
         model = model_cfg.get("default") or model_cfg.get("model") or ""
     
    +    # Resolve platform-specific toolsets the same way the gateway does.
    +    enabled_toolsets = sorted(_get_platform_tools(cfg, platform))
    +    agent_cfg = cfg.get("agent") or {}
    +    disabled_toolsets = agent_cfg.get("disabled_toolsets") or None
    +
         return AIAgent(
             model=model,
             api_key="[redacted:secret-assignment]",
    ```

    ```diff
    @@ -46,6 +52,8 @@ def _build_inspection_agent(platform: str) -> Any:
             quiet_mode=True,
             save_trajectories=False,
             platform=platform,
    +        enabled_toolsets=enabled_toolsets,
    +        disabled_toolsets=disabled_toolsets,
         )
     
     
    ```
  - `scripts/release.py`

    ```diff
    @@ -896,6 +896,7 @@
         "[redacted:email]": "JezzaHehn",
         "[redacted:email]": "JezzaHehn",
         "254021826+dodo-reach@users.noreply.github.com": "dodo-reach",
    +    "[redacted:email]": "EdderTalmor",  # PR #41575 salvage (prompt-size: pass platform-resolved enabled_toolsets + agent.disabled_toolsets into the inspection agent; #41445)
         "259807879+Bartok9@users.noreply.github.com": "Bartok9",
         "123342691+banditburai@users.noreply.github.com": "banditburai",
         "9063726+Kyzcreig@users.noreply.github.com": "Kyzcreig",
    ```
  - `tests/hermes_cli/test_prompt_size.py`

    ```diff
    @@ -1,11 +1,14 @@
     """Tests for the ``hermes prompt-size`` diagnostic (issue #34667)."""
     
     import json
    +import sys
    +from types import SimpleNamespace
     
     import pytest
     
     from hermes_cli.prompt_size import (
         _SKILLS_BLOCK_RE,
    +    _build_inspection_agent,
         compute_prompt_breakdown,
         render_breakdown,
     )
    ```

    ```diff
    @@ -70,6 +73,56 @@ def test_runs_offline_without_credentials(isolated_home, monkeypatch):
         assert data["system_prompt"]["bytes"] > 0
     
     
    +def test_inspection_agent_uses_resolved_platform_toolsets(monkeypatch):
    +    """Inspection must match real CLI tool resolution, including disables."""
    +    captured = {}
    +
    +    class FakeAIAgent:
    +        def __init__(self, **kwargs):
    +            captured.update(kwargs)
    +
    +    cfg = {
    +        "model": {"default": "test/model"},
    +        "agent": {"disabled_toolsets": ["memory"]},
    +    }
    +
    +    monkeypatch.setitem(
    +        sys.modules,
    +        "run_agent",
    +        SimpleNamespace(AIAgent=FakeAIAgent),
    +    )
    +    monkeypatch.setattr("hermes_cli.config.load_config", lambda: cfg)
    +    monkeypatch.setattr(
    +        "hermes_cli.tools_config._get_platform_tools",
    +        lambda passed_cfg, platform: {"terminal", "file"},
    +    )
    +
    +    _build_inspection_agent("cli")
    +
    +    assert captured["model"] == "test/model"
    +    assert captured["platform"] == "cli"
    +    assert captured["enabled_toolsets"] == ["file", "terminal"]
    +    assert captured["disabled_toolsets"] == ["memory"]
    +
    +
    +def test_blank_slate_prompt_size_counts_only_minimal_tools(isolated_home):
    +    """Blank Slate prompt-size should report file + terminal schemas only."""
    +    from hermes_cli.config import save_config
    +    from hermes_cli.setup import (
    +        _blank_slate_minimal_toolsets,
    +        _blank_slate_minimize_config,
    +    )
    +
    +    cfg = {"model": {"default": "MiniMax-M2.7"}}
    +    _blank_slate_minimal_toolsets(cfg)
    +    _blank_slate_minimize_config(cfg)
    +    save_config(cfg)
    +
    +    data = compute_prompt_breakdown("cli")
    +
    +    assert data["tools"]["count"] == 6
    +
    +
     def test_skills_index_reflects_installed_skills(isolated_home):
         """Installing a skill makes the skills-index block non-empty.
     
    ```
- **#52032: fix(cli): honor agent.disabled_toolsets in prompt-size diagnostic**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#59210`, `#41445`, `#41575`, `#51586`
- **#57167: fix(prompt-size): honor effective Hermes toolsets**. open
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#41461`, `#41445`, `#41575`, `#52032`, `#48532`
  - files: `hermes_cli/prompt_size.py`, `tests/hermes_cli/test_prompt_size.py`
- **#65452: fix(toolsets): coerce string-typed toolset lists instead of iterating characters**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `309cf2c5e2b`

## Fix status

- Merged to main in PR #59210 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-07-06`.
- Subsystem: `agent`
