# NousResearch/hermes-agent · Memory provider tools failing in sequential dispatch path

## Open now

- Nothing open on GitHub.

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.

## TL;DR

- 10 member(s): 0 open issue(s), 7 closed issue(s), 0 open PR(s), 1 merged PR(s), 2 PR(s) closed without merging.
- A fix was merged to main in PR #4803. Verify it addresses your case.
- **Recommended:** read PR #4803 (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: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.18`: 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

- #1577: search_context() / peer-card retrieval can appear empty immediately after successful session writes while dialectic recall already works
- #4708: Possible bug: memory provider tools (fact_store, fact_feedback) may not route correctly in sequential dispatch path
- #4751: fix(honcho): sequential chat dispatch, session key strategy, and peer-card fallback break end-to-end Honcho UX
- #4955: \[Bug\]: Memory provider tools fail in sequential tool dispatch path
- #5398: \[Bug\] Dynamic memory provider tools (honcho_profile, honcho_search, honcho_context, honcho_conclude) fail with 'Unknown tool' in sequential dispatch path
- #15118: Memory-provider tools (honcho_*) fail with "Unknown tool" on single-tool-call turns
- #23296: Basic Memory provider active but bm_* tools fail with Unknown tool

## Prior & competing PRs

- **#4803: fix: route memory provider tools in sequential execution path**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `run_agent.py`
  - fix hunks:
  - `run_agent.py`

    ```diff
    @@ -6009,6 +6009,30 @@ def _execute_tool_calls_sequential(self, assistant_message, messages: list, effe
                             spinner.stop(cute_msg)
                         elif self.quiet_mode:
                             self._vprint(f"  {cute_msg}")
    +            elif self._memory_manager and self._memory_manager.has_tool(function_name):
    +                # Memory provider tools (hindsight_retain, honcho_search, etc.)
    +                # These are not in the tool registry — route through MemoryManager.
    +                spinner = None
    +                if self.quiet_mode and not self.tool_progress_callback:
    +                    face = random.choice(KawaiiSpinner.KAWAII_WAITING)
    +                    emoji = _get_tool_emoji(function_name)
    +                    preview = _build_tool_preview(function_name, function_args) or function_name
    +                    spinner = KawaiiSpinner(f"{face} {emoji} {preview}", spinner_type='dots', print_fn=self._print_fn)
    +                    spinner.start()
    +                _mem_result = None
    +                try:
    +                    function_result = self._memory_manager.handle_tool_call(function_name, function_args)
    +                    _mem_result = function_result
    +                except Exception as tool_error:
    +                    function_result = json.dumps({"error": f"Memory tool '{function_name}' failed: {tool_error}"})
    +                    logger.error("memory_manager.handle_tool_call raised for %s: %s", function_name, tool_error, exc_info=True)
    +                finally:
    +                    tool_duration = time.time() - tool_start_time
    +                    cute_msg = _get_cute_tool_message_impl(function_name, function_args, tool_duration, result=_mem_result)
    +                    if spinner:
    +                        spinner.stop(cute_msg)
    +                    elif self.quiet_mode:
    +                        self._vprint(f"  {cute_msg}")
                 elif self.quiet_mode:
                     spinner = None
                     if not self.tool_progress_callback:
    ```
- **#4709: fix(memory): route memory provider tools in sequential dispatch path**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#4803`
- **#4752: fix(honcho): restore end-to-end chat tool behavior**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `7e53b3ef82c`, `e492420df45`, `#4803`

## Fix status

- Merged to main in PR #4803 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-04-03`. This confirmation is old and may be out of date (a revert/reopen would not have invalidated it here); re-verify.
- Subsystem: `agent`
