{"repo":"NousResearch/hermes-agent","public_id":"1577","display_label":"Memory provider tools failing in sequential dispatch path","summary":"Multiple bug reports and fix attempts address memory provider tools (honcho_*, bm_*, fact_store, etc.) returning 'Unknown tool' errors when called in sequential or single-tool-call execution paths. Several pull requests attempt to correct routing, session handling, and context retrieval behavior for these providers.","subsystem":"agent","counts":{"members":10,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":7,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":4803},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"stale","last_verified_at":"2026-04-03T17:31:53+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.1768888888888889},"fix_edges":[{"issue_number":4708,"pr_number":4803,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":4751,"pr_number":4803,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":4781,"pr_number":4803,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":1577,"title":"search_context() / peer-card retrieval can appear empty immediately after successful session writes while dialectic recall already works","url":null,"state":"closed"},{"kind":"issue","number":4708,"title":"Possible bug: memory provider tools (fact_store, fact_feedback) may not route correctly in sequential dispatch path","url":null,"state":"closed"},{"kind":"issue","number":4751,"title":"fix(honcho): sequential chat dispatch, session key strategy, and peer-card fallback break end-to-end Honcho UX","url":null,"state":"closed"},{"kind":"issue","number":4955,"title":"[Bug]: Memory provider tools fail in sequential tool dispatch path","url":null,"state":"closed"},{"kind":"issue","number":5398,"title":"[Bug] Dynamic memory provider tools (honcho_profile, honcho_search, honcho_context, honcho_conclude) fail with 'Unknown tool' in sequential dispatch path","url":null,"state":"closed"},{"kind":"issue","number":15118,"title":"Memory-provider tools (honcho_*) fail with \"Unknown tool\" on single-tool-call turns","url":null,"state":"closed"},{"kind":"issue","number":23296,"title":"Basic Memory provider active but bm_* tools fail with Unknown tool","url":null,"state":"closed"},{"kind":"pr","number":4709,"title":"fix(memory): route memory provider tools in sequential dispatch path","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#4803","number":4803}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":4752,"title":"fix(honcho): restore end-to-end chat tool behavior","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"7e53b3ef82c","number":0},{"kind":"commit","value":"e492420df45","number":0},{"kind":"pr","value":"#4803","number":4803}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":4803,"title":"fix: route memory provider tools in sequential execution path","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["run_agent.py"],"fix_hunks":[{"file":"run_agent.py","hunks":["@@ -6009,6 +6009,30 @@ def _execute_tool_calls_sequential(self, assistant_message, messages: list, effe\n                         spinner.stop(cute_msg)\n                     elif self.quiet_mode:\n                         self._vprint(f\"  {cute_msg}\")\n+            elif self._memory_manager and self._memory_manager.has_tool(function_name):\n+                # Memory provider tools (hindsight_retain, honcho_search, etc.)\n+                # These are not in the tool registry — route through MemoryManager.\n+                spinner = None\n+                if self.quiet_mode and not self.tool_progress_callback:\n+                    face = random.choice(KawaiiSpinner.KAWAII_WAITING)\n+                    emoji = _get_tool_emoji(function_name)\n+                    preview = _build_tool_preview(function_name, function_args) or function_name\n+                    spinner = KawaiiSpinner(f\"{face} {emoji} {preview}\", spinner_type='dots', print_fn=self._print_fn)\n+                    spinner.start()\n+                _mem_result = None\n+                try:\n+                    function_result = self._memory_manager.handle_tool_call(function_name, function_args)\n+                    _mem_result = function_result\n+                except Exception as tool_error:\n+                    function_result = json.dumps({\"error\": f\"Memory tool '{function_name}' failed: {tool_error}\"})\n+                    logger.error(\"memory_manager.handle_tool_call raised for %s: %s\", function_name, tool_error, exc_info=True)\n+                finally:\n+                    tool_duration = time.time() - tool_start_time\n+                    cute_msg = _get_cute_tool_message_impl(function_name, function_args, tool_duration, result=_mem_result)\n+                    if spinner:\n+                        spinner.stop(cute_msg)\n+                    elif self.quiet_mode:\n+                        self._vprint(f\"  {cute_msg}\")\n             elif self.quiet_mode:\n                 spinner = None\n                 if not self.tool_progress_callback:\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}