shodh-memory
Persistent cognitive memory for AI agents. Local-first. Runs offline.
Give your AI agents memory that persists across sessions, learns from experience, and runs entirely on your hardware.
Installation
[]
= "0.1"
On first use, models (~37MB) download automatically to ~/.cache/shodh-memory/.
Quick Start
use ;
use Result;
Features
- Semantic search - MiniLM-L6 embeddings (384-dim) for meaning-based retrieval
- Hebbian learning - Connections strengthen when memories co-activate
- Activation decay - Unused memories fade naturally (exponential decay)
- Entity extraction - TinyBERT NER extracts people, orgs, locations
- Knowledge graph - Entity relationships with spreading activation
- 3-tier architecture - Working → Session → Long-term memory (Cowan's model)
- 100% offline - Works on air-gapped systems after initial model download
Experience Types
API Overview
Store Memories (remember)
// Basic storage
let experience = Experience ;
let id = memory.remember?;
// With metadata and tags
let experience = Experience ;
memory.remember?;
// With custom timestamp
use Utc;
memory.remember?;
Retrieve Memories (recall)
// Semantic search
let query = builder
.query_text
.max_results
.build;
let results = memory.recall?;
// Filter by type
let query = builder
.query_text
.experience_types
.build;
let results = memory.recall?;
// Filter by importance
let query = builder
.importance_threshold
.max_results
.build;
let results = memory.recall?;
// Convenience methods for common queries
// Recall by tags (returns all memories with ANY matching tag)
let results = memory.recall_by_tags?;
// Recall by date range
use ;
let now = now;
let start = now - days;
let results = memory.recall_by_date?;
// Pagination
let query = builder
.query_text
.max_results
.offset // Skip first 20
.build;
let paginated = memory.paginated_recall?;
println!;
Forget Memories
use MemoryId;
// Delete by ID
memory.forget?;
// Delete old memories (older than N days)
memory.forget?;
// Delete low-importance memories
memory.forget?;
// Delete by regex pattern
memory.forget?;
// Delete by tags
memory.forget?;
// Delete by date range
use ;
let end = now;
let start = end - days;
memory.forget?;
// GDPR: Delete everything
memory.forget?;
Statistics & Maintenance
// Get stats
let stats = memory.stats;
println!;
println!;
println!;
// Storage stats
let storage_stats = memory.get_storage_stats?;
// Flush to disk
memory.flush_storage?;
// Run maintenance (decay old memories)
let processed = memory.run_maintenance?;
// Index health
let health = memory.index_health;
println!;
Configuration
let config = MemoryConfig ;
Environment variables:
SHODH_MEMORY_PATH=./data
SHODH_OFFLINE=true # Disable auto-download
RUST_LOG=info
Architecture
Working Memory ──overflow──> Session Memory ──importance──> Long-Term Memory
(100 items) (500 MB) (RocksDB)
Cognitive processing:
- Spreading activation retrieval
- Exponential activation decay: A(t) = A₀ · e^(-λt)
- Hebbian strengthening on co-retrieval
- Long-term potentiation (permanent connections)
- Memory replay during maintenance
- Retroactive interference detection
Performance
Measured on Intel i7-1355U (10 cores, 1.7GHz):
| Operation | Latency |
|---|---|
remember() |
55-60ms |
recall() semantic |
34-58ms |
recall_by_tags() |
~1ms |
recall_by_date() |
~2ms |
| Entity lookup | 763ns |
| Hebbian strengthen | 5.7µs |
| Graph traversal (3-hop) | 30µs |
Content-hash dedup (SHA-256) ensures identical content is never stored twice.
Platform Support
| Platform | Status |
|---|---|
| Linux x86_64 | Supported |
| macOS ARM64 | Supported |
| macOS x86_64 | Supported |
| Windows x86_64 | Supported |
| Linux ARM64 | Coming soon |
Links
License
Apache 2.0