{"repo":"NousResearch/hermes-agent","public_id":"18968","display_label":"Kanban tool visibility for orchestrator profiles and toolsets","summary":"These issues and fixes center on kanban tools not appearing correctly for orchestrator profiles depending on toolset configuration, including how wildcard aliases like 'all' and 'all/*' are handled. Related changes address which profiles can see kanban tools, worker identity claims in guidance, and documentation clarifying wildcard behavior.","subsystem":null,"counts":{"members":9,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":2,"merged_prs":3,"attempt_prs":4},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":19427},"resolution":{"state":"resolved","by":"pr-19606,pr-35729"},"freshness":{"state":"verified","last_verified_at":"2026-05-31T07:10:51+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.20444444444444446},"fix_edges":[{"issue_number":18968,"pr_number":19427,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":18968,"pr_number":19606,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":19351,"pr_number":19427,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":35581,"pr_number":35729,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":18968,"title":"Kanban tools not visible to orchestrator profiles with kanban toolset enabled","url":null,"state":"closed"},{"kind":"issue","number":35581,"title":"[Bug]: kanban tools silently hidden when profile uses toolsets: [\"all\"] — check_fn ignores the all/* alias","url":null,"state":"closed"},{"kind":"pr","number":18970,"title":"fix: allow kanban tools for orchestrator profiles with kanban toolset","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#19606","number":19606},{"kind":"pr","value":"#19427","number":19427},{"kind":"pr","value":"#18971","number":18971},{"kind":"pr","value":"#18991","number":18991},{"kind":"pr","value":"#18968","number":18968}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":18971,"title":"fix(tools): allow orchestrator profiles to see kanban tools via toolsets config","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#18970","number":18970},{"kind":"pr","value":"#19606","number":19606}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":18991,"title":"fix(kanban): enable kanban tools for profiles with kanban in toolsets config","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#18970","number":18970},{"kind":"pr","value":"#18971","number":18971},{"kind":"pr","value":"#19606","number":19606}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":19427,"title":"fix(kanban): drop worker identity claim from KANBAN_GUIDANCE","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/prompt_builder.py"],"fix_hunks":[{"file":"agent/prompt_builder.py","hunks":["@@ -183,8 +183,8 @@ def _strip_yaml_frontmatter(content: str) -> str:\n )\n \n KANBAN_GUIDANCE = (\n-    \"# You are a Kanban worker\\n\"\n-    \"You were spawned by the Hermes Kanban dispatcher to execute ONE task from \"\n+    \"# Kanban task execution protocol\\n\"\n+    \"You have been assigned ONE task from \"\n     \"the shared board at `~/.hermes/kanban.db`. Your task id is in \"\n     \"`$HERMES_KANBAN_TASK`; your workspace is `$HERMES_KANBAN_WORKSPACE`. \"\n     \"The `kanban_*` tools in your schema are your primary coordination surface — \"\n"]}]},{"kind":"pr","number":19606,"title":"fix(kanban): allow orchestrator profiles to see kanban tools via toolsets config","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_kanban_tools.py","tools/kanban_tools.py"],"fix_hunks":[{"file":"tests/tools/test_kanban_tools.py","hunks":["@@ -467,8 +467,8 @@ def test_kanban_guidance_in_worker_prompt(monkeypatch, tmp_path):\n         skip_memory=True,\n     )\n     prompt = a._build_system_prompt()\n-    # Header phrase\n-    assert \"You are a Kanban worker\" in prompt\n+    # Header phrase (identity-free — SOUL.md owns identity, layer 3 is protocol)\n+    assert \"Kanban task execution protocol\" in prompt\n     # Lifecycle signals\n     assert \"kanban_show()\" in prompt\n     assert \"kanban_complete\" in prompt"]},{"file":"tools/kanban_tools.py","hunks":["@@ -40,13 +40,31 @@\n # ---------------------------------------------------------------------------\n \n def _check_kanban_mode() -> bool:\n-    \"\"\"Tools are available iff the current process has ``HERMES_KANBAN_TASK``\n-    set in its env, which the dispatcher sets when spawning a worker.\n+    \"\"\"Tools are available when:\n \n-    Humans running ``hermes chat`` see zero kanban tools. Workers spawned\n-    by the kanban dispatcher (gateway-embedded by default) see all seven.\n+    1. ``HERMES_KANBAN_TASK`` is set (dispatcher-spawned worker), OR\n+    2. The current profile has ``kanban`` in its toolsets config\n+       (orchestrator profiles like techlead that route work via Kanban).\n+\n+    Humans running ``hermes chat`` without the kanban toolset see zero\n+    kanban tools. Workers spawned by the kanban dispatcher (gateway-\n+    embedded by default) and orchestrator profiles with the kanban\n+    toolset enabled see all seven.\n     \"\"\"\n-    return bool(os.environ.get(\"HERMES_KANBAN_TASK\"))\n+    if os.environ.get(\"HERMES_KANBAN_TASK\"):\n+        return True\n+\n+    # Check if the current profile has the kanban toolset enabled.\n+    # Uses load_config() which has mtime-based caching, so this adds\n+    # negligible overhead. The check_fn results are further TTL-cached\n+    # (~30s) by the tool registry.\n+    try:\n+        from hermes_cli.config import load_config\n+        cfg = load_config()\n+        toolsets = cfg.get(\"toolsets\", [])\n+        return \"kanban\" in toolsets\n+    except Exception:\n+        return False\n \n \n # ---------------------------------------------------------------------------\n"]}]},{"kind":"pr","number":35588,"title":"fix(kanban): honor all toolset aliases","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#35729","number":35729},{"kind":"pr","value":"#35581","number":35581}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":35729,"title":"docs(toolsets): clarify all/* wildcard does not enable kanban","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["website/docs/reference/toolsets-reference.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}