hermes - 💡(How to fix) Fix [Bug]: kanban tools silently hidden when profile uses toolsets: ["all"] — check_fn ignores the all/* alias

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Error Message

A profile configured with toolsets: ["all"] (or ["*"]) loses all kanban tools, even though "all" is documented to expand to every registered toolset (kanban included). The tools are silently absent — no error, no warning.

Root Cause

tools/kanban_tools.py:_profile_has_kanban_toolset() reads the raw config and does a literal membership test:

toolsets = cfg.get("toolsets", [])
return "kanban" in toolsets

This never calls toolsets.resolve_toolset(), which is the only place the {"all", "*"} aliases are expanded:

# toolsets.py:623 (resolve_toolset)
# Special aliases that represent all tools across every toolset
if name in {"all", "*"}:
    ...

The kanban tools register with check_fn=_check_kanban_mode / _check_kanban_orchestrator_mode (kanban_tools.py:1307, :1316), both of which funnel through _profile_has_kanban_toolset(). So under toolsets: ["all"] the tools pass the registry-expansion path but are then hidden by the check_fn gate — unless HERMES_KANBAN_TASK is set (dispatcher-spawned workers), which masks the bug in the most common code path.

Fix Action

Fix / Workaround

The kanban tools register with check_fn=_check_kanban_mode / _check_kanban_orchestrator_mode (kanban_tools.py:1307, :1316), both of which funnel through _profile_has_kanban_toolset(). So under toolsets: ["all"] the tools pass the registry-expansion path but are then hidden by the check_fn gate — unless HERMES_KANBAN_TASK is set (dispatcher-spawned workers), which masks the bug in the most common code path.

  1. Set toolsets: ["all"] in a non-dispatcher profile's config.yaml (no HERMES_KANBAN_TASK in env).
  2. Run hermes chat and inspect the available tools.
  3. Expected: kanban tools present ("all" includes every registered toolset).
  4. Actual: no kanban tools are exposed.

Code Example

toolsets = cfg.get("toolsets", [])
return "kanban" in toolsets

---

# toolsets.py:623 (resolve_toolset)
# Special aliases that represent all tools across every toolset
if name in {"all", "*"}:
    ...

---

return any(t in ("all", "*", "kanban") for t in toolsets)
RAW_BUFFERClick to expand / collapse

Bug Description

A profile configured with toolsets: ["all"] (or ["*"]) loses all kanban tools, even though "all" is documented to expand to every registered toolset (kanban included). The tools are silently absent — no error, no warning.

Root Cause

tools/kanban_tools.py:_profile_has_kanban_toolset() reads the raw config and does a literal membership test:

toolsets = cfg.get("toolsets", [])
return "kanban" in toolsets

This never calls toolsets.resolve_toolset(), which is the only place the {"all", "*"} aliases are expanded:

# toolsets.py:623 (resolve_toolset)
# Special aliases that represent all tools across every toolset
if name in {"all", "*"}:
    ...

The kanban tools register with check_fn=_check_kanban_mode / _check_kanban_orchestrator_mode (kanban_tools.py:1307, :1316), both of which funnel through _profile_has_kanban_toolset(). So under toolsets: ["all"] the tools pass the registry-expansion path but are then hidden by the check_fn gate — unless HERMES_KANBAN_TASK is set (dispatcher-spawned workers), which masks the bug in the most common code path.

Steps to Reproduce

  1. Set toolsets: ["all"] in a non-dispatcher profile's config.yaml (no HERMES_KANBAN_TASK in env).
  2. Run hermes chat and inspect the available tools.
  3. Expected: kanban tools present ("all" includes every registered toolset).
  4. Actual: no kanban tools are exposed.

Suggested Fix

Honor the same aliases resolve_toolset recognizes:

return any(t in ("all", "*", "kanban") for t in toolsets)

Related

Distinct from #35527, which covers platform_toolsets composites being stripped by the _DEFAULT_OFF_TOOLSETS filter in tools_config.py. This issue is in the kanban check_fn gate and concerns the top-level toolsets config and the all/* aliases specifically — same class of "membership check bypasses resolve_toolset" inconsistency, different code path.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix [Bug]: kanban tools silently hidden when profile uses toolsets: ["all"] — check_fn ignores the all/* alias