Great question on conflicts - this is something we spent a lot of time on.
Remembra uses temporal edges on the knowledge graph. When you store contradictory info ("user prefers Python" then later "user prefers Rust"), we don't just overwrite - we track both with timestamps and can:
1. Return the most recent by default
2. Surface contradictions explicitly when queried
3. Let you query point-in-time ("what did user prefer in January?")
For bad data, we have a few approaches:
- Confidence scoring on memories
- GDPR-compliant forget() to purge specific memories
- Audit logging so you can trace what was stored and when
You're right that memory quality is critical. Our benchmark focus (100% on LoCoMo) is specifically about retrieval accuracy - getting the right memory when you need it, not just any memory that keyword-matches.
Would love to hear how testing goes if you try it.
Nice work on the hierarchy approach. The 5-level lazy loading is clever for keeping context small.
We took a different path with Remembra - hybrid search (vector + BM25 keyword) instead of hierarchical summaries. The tradeoff: you lose the explicit levels but gain better fuzzy matching when agents don't remember exact terms.
Entity extraction has been the bigger win for us - automatically linking "Mr. Kim" to "David Kim" without the agent needing to know they're the same person. Hit 100% on the LoCoMo benchmark with that.
Curious about the no-vector-embeddings choice. Does full-text search miss anything in practice when agents use different phrasing across sessions?
Self-host: docker run -d -p 8787:8787 remembra/remembra if anyone wants to compare: remembra.dev
Interesting take on avoiding vectors. We landed somewhere in between with Remembra - hybrid search (vectors + BM25 fusion) but the real win came from entity resolution.
The insight: most 'memory failures' in coding sessions aren't retrieval failures, they're identity failures. The agent knows you mentioned 'David' and 'Mr. Kim' and 'the client' - but doesn't know they're the same person.
We added automatic entity graphs that link these references, so when you search for anything about the project, you get the full context of WHO was involved, not just what was said.
Re: append-only vs rewriting - we do both via temporal decay. Old memories naturally lose salience over time (Ebbinghaus-style) unless they keep getting referenced. Lets you avoid explicit curation without accumulating noise.
Great work on Engram. The consolidation and contradiction detection features are smart additions - episodic to semantic is exactly how human memory works.
We've been working on a similar problem with Remembra and hit 100% on LoCoMo with a different approach: entity graphs + temporal decay. The insight was that knowing WHO you're talking about (resolving 'Mr. Kim' to 'David Kim') matters as much as what was said.
Curious about your spreading activation implementation - are you doing this at query time or pre-computing the graph connections?