A persistent, human-memory-inspired memory system for LLM agents. Durable, secure, observable, and explainable.
Built for production agents that need persistent, secure, explainable memory.
Working, episodic, semantic, procedural, and shared memory with automatic lifecycle management.
Trust tiers, quarantine, lineage tracking, and blast-radius limiting protect against memory attacks.
Combines vector similarity, keyword search, recency, and importance for optimal recall.
Full score breakdown for every retrieval. Know why each memory was returned.
AES-256-GCM encryption at rest with keys from secrets manager.
Prometheus metrics, structured logging, and audit trails for compliance.
Horizontal scaling with tenant-aware sharding and eventual consistency for shared memory.
+--------------------------+
| API Gateway / Ingress |
| authn, rate limiting |
+------------+-------------+
|
+------------v-------------+
| Memory Service |
| stateless, scalable |
+------------+-------------+
+------+-------+
+----v----+ +----v----+ +----v----+
| Shard 0 | | Shard 1 | ... | Shard N |
| (WAL + | | (WAL + | | (WAL + |
| HNSW + | | HNSW + | | HNSW + |
| tantivy)| | tantivy)| | tantivy)|
+---------+ +---------+ +---------+
Get running in minutes.
cargo add muninn-lib
use muninn_lib::MuninnMemory;
#[tokio::main]
async fn main() {
let memory = MuninnMemory::new("./data").await.unwrap();
// Write a memory
memory.write("agent-1", "Deadline is March 15", 0.8).await.unwrap();
// Retrieve memories
let results = memory.retrieve("agent-1", "What is the deadline?", 5).await.unwrap();
for result in &results {
println!("{} (score: {:.2})", result.content, result.score);
}
}
REST API for server mode, or use the library directly.
Write a memory record
Retrieve matching memories
Get a specific record
Trace record lineage
Purge all tenant data
Health check
Measured against published baselines.