graph
⚙️ Graph reasoning requires MemMesh hosted mode. Building the graph works locally:
memory_extract_pending→memory_commit_extractionpopulate typed entities/edges. Multi-hop reasoning/traversal (memory_graph_reason,memory_query_graph,memory_prefetch_related) runs on the hosted engine — set yourmm-API key. If those return "unknown tool" on a local install, say so and usesearchover the extracted entities instead.
MemMesh links memories into a knowledge graph whose edges are bi-temporal
(each has valid_from / valid_to). That enables answers a flat store can't
give.
Multi-hop reasoning
Answer questions that require chaining edges — "who acquired the company Sarah founded":
{ "name": "memory_graph_reason",
"arguments": { "anchorEntityId": "<entity id>", "maxHops": 3, "maxPaths": 20 } }
Returns ranked paths (scored by edge weight × recency). The anchor is an entity id — resolve names to ids via a graph query first.
Point-in-time — what did we believe then?
{ "name": "memory_query_graph",
"arguments": { "subjectId": "<entity id>", "asOf": "2026-01-01T00:00:00Z" } }
Omit asOf for the current view. This reconstructs the graph as it stood on any
date — the bi-temporal record, not just the latest state.
Anticipatory retrieval (spreading activation)
Given the memories a session is working with, surface what's most likely needed next:
{ "name": "memory_prefetch_related", "arguments": { "seedMemoryIds": ["<id>","<id>"], "limit": 10 } }
Building the graph
Edges come from client-LLM extraction — the engine hands you a prompt, your own model extracts entities/edges, you commit them (zero engine-side LLM cost):
{ "name": "memory_extract_pending", "arguments": { "projectId": "<repo>", "limit": 10 } }
// run each prompt through your model, then:
{ "name": "memory_commit_extraction", "arguments": { "memoryId": "…", "contentHash": "…", "entities": [...], "edges": [...] } }
Run this loop until extract_pending returns empty to fully populate the graph
for reasoning.