{"repo":"NousResearch/hermes-agent","public_id":"4781","display_label":"Memory provider tools missing from agent execution path","summary":"These issues and fixes concern a bug where a holographic/memory plugin registers successfully but its tools are not routed into the sequential agent execution loop. The work focuses on correcting that routing path.","subsystem":"agent","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":4803,"merged_at":"2026-04-03T17:31:53+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"stale","last_verified_at":"2026-04-03T17:31:53+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":4708,"pr_number":4803,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-04-03T17:31:53+00:00"},{"issue_number":4751,"pr_number":4803,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-04-03T17:31:53+00:00"},{"issue_number":4781,"pr_number":4803,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-04-03T17:31:53+00:00"}],"members":[{"kind":"issue","number":4781,"title":"Holographic memory plugin registers but tools not injected into agent loop","url":null,"state":"closed"},{"kind":"pr","number":4785,"title":"fix(agent): route memory provider tools in sequential execution path","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#4803","number":4803}],"category":"merged_via","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"},"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}}