Neuro-inspired long-term memory for AI agents with semantic graph and consolidation.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted β your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx smriti-memcore
MCP client config
{
"mcpServers": {
"smriti-memory": {
"command": "uvx",
"args": [
"smriti-memcore"
]
}
}
}Enterprise-grade, privacy-first Long-Term Memory (LTM) engine for LLM agents, multi-agent frameworks, and MCP clients.
SMRITI is a high-performance, neuro-inspired long-term memory layer designed to give AI agents persistent, adaptive recall without blocking their real-time execution loop.
Inspired by human Dual-Process cognitive theory, SMRITI splits memory operations into:
| Feature | Naive RAG / Vector DBs | SMRITI Memory Engine |
|---|---|---|
| Latency | Scales linearly with context size; blocks agent loops | Sub-5ms ingestion (System 1); System 2 is asynchronous |
| Context Window | Stuffs raw logs, leading to prompt bloat and distraction | Miller's Law (7 Β± 2 slots) capacity-bounded Working Memory |
| Data Evolution | Static embeddings; struggles with contradictions/corrections | Automatic conflict resolution, abstraction, and temporal decay |
| Relationships | Flat vector search; no concept of entity links | Semantic Palace Graph showing structured Room/Topic associations |
| Privacy & Sync | All-or-nothing storage; complex namespace routing | Private Rooms and private=True tags natively isolating user syncs |
βββββββββββββββββββββββββββββββββββ
β Asynchronous Consolidation β
β (8 Background Processes) β
β β’ Chunking β’ Cross-Ref. β
β β’ Conflict Res. β’ Skill Ext. β
β β’ Forgetting β’ Spaced Rep. β
β β’ Reflection β’ Defragment. β
ββββββββββββββββββ¬βββββββββββββββββ
β background
ββββββββββββ ββββββββββββ βββββββββββββΌββββββββββ ββββββββββββ
β Input ββββΆβ Attention ββββΆβ Episode Buffer ββββΆβ Semantic β
β Text β β Gate β β (append-only log) β β Palace β
β βββββββββ β (salience β βββββββββββββββββββββββ β Graph β
β β filter) β β G=(V,E) β
ββββββββββββ ββββββββββββ ββββββ¬ββββββ
β
ββββββββββββ ββββββββββββ βββββββββββββββββββββ β
β Query ββββΆβ RetrievalββββΆβ Working Memory βββββββββββββ
β β β Engine β β (7 Β± 2 slots) β
ββββββββββββ β Q(v) = β βββββββββββββββββββββ
β Ξ²βcos + β
β Ξ²βdecay+ β βββββββββββββββββββββ
β Ξ²βfreq + ββββΆβ Meta-Memory β
β Ξ²βsal β β (confidence map) β
ββββββββββββ βββββββββββββββββββββ
SMRITI can be used as a global, persistent memory layer across all your MCP-enabled developer clients.
Run the setup script directly in your terminal:
bash <(curl -s https://raw.githubusercontent.com/smriti-memcore/smriti-memcore/main/install_smriti_mcp.sh)
Install the package and run the setup CLI:
pip3 install smriti-memcore
smriti_install
For application developers building custom agent loops.
pip install smriti-memcore[faiss] # FAISS is recommended for accelerated vector search
from smriti import SMRITI, SmritiConfig
# Initialize memory engine with OpenAI
config = SmritiConfig(
storage_path="./my_agent_memory",
llm_model="gpt-4o",
openai_api_key="your-api-key-here"
)
memory = SMRITI(config=config)
# Ingest observations
memory.encode("User prefers using PyTorch for neural networks.")
memory.encode("User is allergic to shellfish.", context="medical")
# Recall relevant context using multi-factor retrieval
results = memory.recall("What framework does the user prefer?")
for mem in results:
print(f"[{mem.strength:.2f}] {mem.content}")
# Manually trigger System 2 background consolidation
memory.consolidate()
memory.save()
SMRITI exposes 19 tools (13 native + 6 AMP aliases) for clients:
| Tool Name | Description |
|---|---|
smriti_encode | Ingests a new memory. Accept private=True to exclude from team syncs. |
smriti_recall | Retrieves memories using semantic and graph-based retrieval. |
smriti_get_context | Helper to inject the current active working memory slots into the context window. |
smriti_how_well_do_i_know | Performs a meta-memory confidence check on a given topic. |
smriti_knowledge_gaps | Identifies topics the agent has identified it needs more information on. |
smriti_pin | Marks a memory as permanent (protects it from strength decay). |
smriti_forget | Soft-deletes/archives a memory, leaving a cryptographic tombstone. |
smriti_consolidate | Triggers a background System 2 consolidation run. |
smriti_stats | Returns system-wide statistics (total memories, rooms, private counts). |
smriti_create_private_room | Spawns a private room. All memories inside this room are visibility-isolated. |
smriti_open_ui | Launches the interactive visual D3.js memory graph in your default browser. |
smriti_sync_obsidian | Exports the Semantic Palace graph structures to markdown files in an Obsidian Vault. |
These endpoints ensure complete conformance with the standard Agent Memory Protocol specification:
| AMP Tool | Native Mapping | Return Format |
|---|---|---|
amp.encode | smriti_encode | AMP standard JSON response |
amp.recall | smriti_recall | Array of {id, content, score, timestamp, status} |
amp.forget | smriti_forget | {status: "forgotten" | "not_found"} |
amp.stats | smriti_stats | {memory_count, ...} |
amp.pin | smriti_pin | {status: "pinned" | "not_found"} |
amp.consolidate | smriti_consolidate | {status: "ok", memories_processed: int} |
Use SmritiLangChainMemory as a drop-in replacement for default chat buffers. It limits active context using Working Memory and offloads the conversational history to the Semantic Palace graph in the background.
from langchain.chains import ConversationChain
from smriti.integrations.langchain_memory import SmritiLangChainMemory
from smriti import SMRITI
smriti_engine = SMRITI(storage_path="./langchain_smriti_db")
smriti_memory = SmritiLangChainMemory(smriti_client=smriti_engine, top_k=3)
conversation = ConversationChain(
llm=my_llm,
memory=smriti_memory,
)
conversation.predict(input="I prefer backend APIs in Python.")
Tested against four architectures on the LoCoMo long-context dialogue dataset (28 turns, 15 evaluation questions):
| System | F1 Score | Latency | Tokens/Query | Consolidation |
|---|---|---|---|---|
| FullContext | 0.345 | 1147ms | 550 | β |
| MemGPT-style | 0.334 | 1397ms | 478 | β |
| NaiveRAG | 0.312 | 1387ms | 145 | β |
| SMRITI | 0.279 | 1317ms | 146 | 41.2s (async) |
| Mem0-style | 0.235 | 1088ms | 106 | β |
SMRITI retains high recall while drastically reducing query context size. Consolidation runs in the background and does not block client interactions.
Evaluated over 50+ chat sessions using the LongMemEval harness:
| System Configuration | Exact Match Accuracy | Average Query Latency |
|---|---|---|
| Baseline (Full Context) | 100.0% | 11.98s |
| SMRITI Dual-Process | 80.0% | 0.98s (12Γ latency reduction) |
Initialize SmritiConfig with custom parameters to tune the cognitive weights:
from smriti import SmritiConfig
config = SmritiConfig(
working_memory_slots=7, # Capacity limit (Miller's Law)
# Retrieval scoring weights (sum to 1.0)
recency_weight=0.2,
relevance_weight=0.4,
strength_weight=0.2,
salience_weight=0.2,
# Forgetting & Temporal Decay
decay_rate=0.99, # Strength multiplier per day
strength_hard_threshold=0.05, # Memories dropping below this are forgotten
# Palace Graph
room_merge_threshold=0.85, # Cosine similarity for auto-merging semantic rooms
)
If you use SMRITI in your research, please cite our technical paper:
@article{tyagi2025smriti,
title={SMRITI: A Scalable, Neuro-Inspired Architecture for Long-Term Event Memory in LLM Agents},
author={Tyagi, Shivam},
year={2025},
doi={10.13140/RG.2.2.25477.82407}
}
SMRITI is licensed under the MIT License. See LICENSE for details.