Memori memory provider - #24476
Conversation
Add a bundled Memori memory provider with recall, summary, quota, signup, and feedback tools. The provider captures completed turns in the background and forwards Hermes-processed tool trace so Memori can preserve the user request, final response, tool calls, arguments, status, duration, and final tool result content together. Extend the external memory sync path with optional trace metadata while keeping existing memory providers compatible. AIAgent now records per-turn tool trace from sequential, concurrent, blocked, and cancelled tool calls, then refreshes result content from the final Hermes tool messages before syncing. Tighten Memori activation so it only reports available when both config and the SDK are present, and document the required entity ID plus the full raw after-Hermes-processing trace policy. Update the website docs, CLI provider lists, and plugin README so the public story matches the implementation. Validation: staged diff checks pass, changed Python files compile, provider compatibility smoke passes, and a real Memori Cloud smoke test captured and recalled a trace-backed turn successfully.
Update Memori memory provider to use consistent snake_case for parameters across the codebase, including `entity_id`, `project_id`, `session_id`, `date_start`, and `date_end`. This change improves clarity and aligns with Python naming conventions. Additionally, introduce a new SKILL.md file to provide guidance on using Memori tools, and update the README to reflect the new parameter names and supported recall features. Ensure that legacy camelCase parameters are still accepted for backward compatibility. Validation: All tests pass, and documentation is updated to reflect the changes.
Updated the Memori memory provider documentation to clarify usage and improve guidance. Revised the description for better clarity, added an overview section, and included a quick reference for key commands. Introduced a procedure for typical workflows and outlined common pitfalls to avoid. Added a verification section to ensure proper functionality of the skill in Hermes sessions. This update aims to enhance user understanding and effective utilization of the Memori memory features.
|
Thanks for the contribution! Per the updated CONTRIBUTING.md, new memory providers are no longer accepted as in-tree additions to
Closing this in line with that policy. The path forward is to publish it as a standalone plugin so users can install it directly without touching the Hermes source tree. Once it's published, a small docs PR adding it to the Community plugins section of the README is welcome. Sorry for the bump — appreciate the time you put into this. |
|
@kshitijk4poor Per your comment, I've created a new PR here Please let me know if any changes are required. |
What does this PR do?
Adds Memori as a bundled external memory provider for Hermes.
This gives Hermes a structured long-term memory backend with explicit recall, summary, quota, signup, and feedback tools. Completed turns are captured in the background, including the user request, final assistant response, and Hermes-processed tool trace so Memori can preserve what the agent did, not just what it said.
The core memory sync path now accepts optional trace metadata while preserving compatibility with existing memory providers. Memori only reports available when both config and the SDK are present, and the docs now call out the required entity ID plus the full raw after-Hermes-processing trace policy.
Related Issue
No linked issue.
Type of Change
Changes Made
plugins/memory/memori/.memori_recall,memori_recall_summary,memori_quota,memori_signup, andmemori_feedback.agent/memory_manager.pyandagent/memory_provider.pyso completed-turn sync can optionally include trace metadata without breaking legacy providers.run_agent.pyto record tool trace for sequential, concurrent, blocked, and cancelled tool calls, then sync final Hermes-processed tool result content.How to Test
Run the focused Python compile check:
Run diff hygiene:
With Memori credentials configured, run a smoke test that initializes the provider, captures a completed turn with trace, recalls it, and checks quota.
Validation performed locally:
memories, and quota returned the expected account shape.Note: full
pytest/ruffcould not be run in this checkout because the localuv runpath is currently blocked by apyproject.tomlexclude-newer = "7 days"parse issue and missing spawnedpytest/ruffexecutables.Checklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AFor New Skills
skills/memoriSDKhermes --toolsets skills -q "Use the memori-memory skill to explain when to use Memori recall versus Memori summaries."Screenshots / Logs
End-to-end Memori Cloud smoke: