smriti
Smriti
Ein selbst gehosteter Wissensgraph und Memory-Layer für KI-Agenten — eine Binärdatei, eine SQLite-Datei, null Cloud-Abhängigkeiten.
Git für LLM-Wikis. Atomare Multi-Write-Transaktionen, erzwungene Herkunftsnachweise für jede Behauptung, ein reines Append-only-Ereignisprotokoll mit Hash-Kette und ein Integritätsprüfer — damit von Agenten erstelltes Wissen von Grund auf prüfbar ist.
2.5µs KV-Abruf · 235ns Graph-Durchquerung · 0 Cloud-Abhängigkeiten
[screenshot: web-ui-dashboard.gif]
cargo install smritiWarum Smriti (vs. Obsidian / Zep / Mem0 / Letta / Neo4j)
Eigenschaft | Obsidian | Zep | Mem0 / Letta | Neo4j / Graphiti | Smriti |
Einzelne Binärdatei, einzelne Datei, kein Server | ✓* | ✗ | ✗ | ✗ | ✓ |
Vollständig lokal / offline | ✓ | ✗ | ✗ | teilweise | ✓ |
Bi-temporale Kanten (valid_from / valid_until) | ✗ | ✓ | ✗ | ✓ | ✓ |
Atomare Multi-Write-Transaktionen (SAVEPOINT) | ✗ | ✗ | ✗ | ✓ (Server) | ✓ |
Erzwungene Herkunftsnachweise für jede Behauptung | ✗ | ✗ | ✗ | ✗ | ✓ |
Append-only-Ereignisprotokoll + Hash-Kette | ✗ | ✓ | ✗ | ✗ | ✓ |
✗ | ✗ | ✗ | ✗ | ✓ | |
Widerspruchs-Posteingang (keine automatische Auflösung) | ✗ | teilweise | ✗ | ✗ | ✓ |
MCP-nativ für Agenten | Plugin | ✗ | ✗ | ✗ | ✓ |
* Obsidian ist ein Dateisystem ohne Transaktionsgarantien. Smritis Stärke ist nicht Neuheit — es ist Disziplin beim Schreiben in einer Local-First Rust-Laufzeitumgebung.
Forschungsgrundlage
Jede Integritätsfunktion zitiert ein arXiv-Paper, damit Sie das Design bis zur Literatur zurückverfolgen können:
Bi-temporale Kanten & Ereignisprotokoll T / T′ — Zep / Graphiti, arXiv:2501.13956
Strukturelle Überlappungsprüfung (Behauptung ↔ Quelle) — FACTUM, arXiv:2601.05866 und Citation-Grounded Code Comprehension, arXiv:2512.12117
Konfidenzbewertung bei Widersprüchen — MemoTime, arXiv:2510.13614 und EvoReasoner / EvoKG, arXiv:2509.15464
Glaubensrevision & Konfliktrichtlinie für memory_store — AGM-Postulate, arXiv:2603.17244
Graph + BM25 Hybrid-Abruf — Graph-Based Memory Survey, arXiv:2602.05665
Typisierte Graph-Layer (semantisch/temporal/kausal) — MAGMA, arXiv:2601.03236
Zettelkasten-artiger Agentenspeicher — A-MEM, arXiv:2502.12110 (NeurIPS 2025)
Anforderungen an die Halluzinations-Erdung — arXiv:2510.24476
Integritäts-Layer (v0.2)
Vier MCP-Tools machen aus Smriti von einem CRUD-Speicher ein Wiki mit Invarianten:
wiki_transaction_submit— Stapel von Erstellungs-/Aktualisierungs-/Verknüpfungs-/Quellen-Operationen, die atomar innerhalb eines SQLiteSAVEPOINTangewendet werden. Jeder Inhaltsschreibvorgang muss einclaim_spans-Array enthalten, sonst wird er abgelehnt (Herkunftsnachweis standardmäßig erzwungen).wiki_verify— führt referenzielle Integrität aus + überprüft erneut den Überlappungswert jeder gespeicherten Behauptung + durchläuft die Hash-Kette des Ereignisprotokolls. Gibt Erfolg/Fehlschlag zurück. Ändert niemals Daten.contradictions_detect— paarweiser Scan über aktuelle Notizen unter Verwendung von w1·semantisch + w2·Aktualität + w3·Autorität gewichteter Bewertung. Kandidaten landen in einem Posteingang zur Überprüfung — Smriti löst niemals automatisch auf.contradictions_list— der Posteingang zur Überprüfung.
CLI spiegelt all dies wider:
smriti verify # integrity sweep
smriti pending-tx # list transactions awaiting review
smriti commit-tx <id> # commit a pending transaction
smriti reject-tx <id> -r "..." # reject with reason
smriti detect-contradictions # scan for candidates
smriti contradictions # show review inboxWas ist Smriti?
Smriti (Sanskrit: स्मृति, Gedächtnis) ist eine einzelne Rust-Binärdatei, die einen Wissensgraphen, einen Volltext- + semantischen Suchindex und einen MCP-Server auf Basis einer einzigen SQLite-Datei ausführt. Es ist für zwei Benutzer konzipiert: einen Wissensarbeiter, der ein privates zweites Gehirn möchte, das sein KI-Assistent lesen kann, und einen Entwickler, der einen persistenten, strukturierten Memory-Layer für KI-Agenten benötigt.
Notizen verbinden sich untereinander durch typisierte Wiki-Links — schreiben Sie [[rel:causal|Entscheidung X]] in eine Notiz und Smriti zeichnet automatisch eine gerichtete causal-Kante im Wissensgraphen auf. Agenten können dann diesen Graphen durchqueren, um Fragen wie "Was führte zu dieser Entscheidung?" zu beantworten, ohne jede Notiz erneut lesen zu müssen.
Schnellstart
# Install
cargo install smriti
# Create your first notes — links and tags are extracted automatically
smriti new # interactive guided prompt
smriti create "Acme Corp" --content "Key client. Met via [[Sarah Chen]]." --tags client
# Search
smriti search "Acme"
# Open the web dashboard
smriti serve
# → http://localhost:3000Ihre Notizen, der Graph und der Suchindex befinden sich in ~/.local/share/smriti/smriti.db. Erstellen Sie Backups mit cp.
Anwendungsfälle
Kunden-Wissensgraph
Verfolgen Sie jeden Kunden, Kontakt und jedes Engagement als verknüpfte Notizen. Wenn Sie Claude vor einem Anruf briefen, liest es den vollständigen Kontext — Historie, Entscheidungen, offene Punkte —, ohne dass Sie etwas neu erklären müssen.
smriti create "Acme Corp Q2 Review" \
--content "Next steps: [[rel:temporal|Budget approval]] by June. Owner: [[Sarah Chen]]." \
--tags client decisionEntscheidungslogbuch
Zeichnen Sie Entscheidungen mit Kontext und Konsequenzen auf. Der Link-Typ rel:causal ermöglicht es Agenten, nachzuvollziehen, warum etwas entschieden wurde.
smriti create "Switched to Rust" \
--content "Replaced Python service. Reason: [[rel:causal|Memory leak in prod]]." \
--tags decisionTäglicher KI-Kontext
Speichern Sie Ihren aktuellen Fokus im KV-Speicher. Claude liest ihn zu Beginn jeder Sitzung über MCP.
smriti serve # then ask Claude: "what's my current focus?" — Smriti answers via MCPSOPs und Playbooks
Dokumentieren Sie wiederholbare Prozesse als verknüpfte Notizen. Importieren Sie vorhandene Markdown-Dateien mit einem Befehl.
smriti import ./playbooks --recursiveMCP-Integration
Smriti läuft als MCP-Server über stdio. Fügen Sie es in claude_desktop_config.json zu Claude Desktop hinzu:
{
"mcpServers": {
"smriti": {
"command": "smriti",
"args": ["mcp", "--db", "/path/to/smriti.db"]
}
}
}Für claude.ai Remote-MCP starten Sie smriti serve und verweisen den MCP-Client auf http://localhost:3000/mcp.
MCP-Tools
Tool | Was es tut |
| Erstellt eine Notiz; |
| Liest eine Notiz nach ID oder Titel |
| Volltext-BM25-Suche über alle Notizen |
| Listet aktuelle Notizen auf, filterbar nach Tag |
| Gibt einen Teilgraphen (BFS, typisierter Kantenfilter) um eine Notiz zurück |
| Vektor + FTS5 Hybrid-Suche mit Reciprocal Rank Fusion |
| Speichert ein Schlüssel-Wert-Paar; unterstützt TTL und Konfliktrichtlinie |
| Ruft einen gespeicherten Wert nach Agenten-ID + Schlüssel ab |
| Listet alle Speichereinträge für einen Agenten auf |
| Ruft ersetzte Werte für einen Schlüssel ab (versionierter Speicher) |
Vollständige MCP-Referenz: docs/mcp.md
Leistung
Gemessen auf Apple Silicon, In-Memory SQLite, unter Verwendung von Criterion. Ausführen: cargo bench
Operation | p50 |
1 Notiz einfügen | 32.5 µs |
100 Notizen einfügen | 2.0 ms |
1.000 Notizen einfügen | 23.1 ms |
FTS5-Suche — 1k Notizen | 331 µs |
FTS5-Suche — 10k Notizen | 2.86 ms |
Graph-Aufbau — 1k Knoten | 216 µs |
BFS Tiefe-2 (gecached) | 235 ns |
BFS Tiefe-3 (gecached) | 410 ns |
Speicher KV-Store — 100 Schlüssel | 513 µs |
Speicher KV-Abruf (Treffer) | 2.48 µs |
Speicher KV-Abruf (Fehlschlag) | 2.25 µs |
Smriti vs. Alternativen
Smriti | Mem0 | Letta | Zep | |
Selbst gehostet | Ja | Nein | Ja | Teilweise |
Wissensgraph | Ja (petgraph) | Nein | Nein | Ja (Neo4j) |
Typisierte Kanten | Ja | Nein | Nein | Ja |
Bi-temporale Kanten | Ja | Nein | Nein | Ja |
Glaubensrevision | Ja (AGM) | Nein | Nein | Nein |
MCP-nativ | Ja | Nein | Nein | Nein |
Volltextsuche | FTS5 (BM25) | Nur Vektor | Nur Vektor | Vektor + Keyword |
Hybrid-Suche | Ja (RRF) | Nein | Nein | Nein |
KV-Speicher + TTL | Ja | Nein | Ja | Ja |
Sprache | Rust | Python | Python | Python/Go |
Bereitstellung | Einzelne Binärdatei | SaaS | Docker + Postgres | Docker + Neo4j + Redis |
KV-Abruflatenz | ~2.5 µs | ~50–200 ms | ~10–50 ms | ~5–20 ms |
Architektur
src/
├── models/ Note, Link, AgentMemory, ToolLog — Serde on every type
├── storage/ SQLite + FTS5 + sqlite-vec; WAL mode; single connection pool
├── parser/ [[wiki-link]] and #tag extraction via regex; no runtime deps
├── graph/ petgraph DiGraph; lazy GraphCache (Arc<RwLock>); typed BFS
├── mcp/ JSON-RPC 2.0 over stdio; dispatches to same handlers as REST
├── web/ Axum router; localhost-only CORS; embedded React SPA
├── cli/ clap v4 derive; 11 commands; shell completions; interactive new
├── sync/ WebDAV + filesystem sync with per-device conflict tracking
└── features/ Smart link suggestions; daily digestDesignentscheidungen
Warum SQLite, nicht Postgres. Eine Wissensdatenbank für eine Person oder ein kleines Team sollte keinen laufenden Datenbankserver erfordern. SQLite im WAL-Modus bewältigt Hunderte von gleichzeitigen Lesezugriffen pro Sekunde — mehr als genug für jeden persönlichen Wissensgraphen. Die gesamte Datenbank ist eine Datei: Backup ist cp, Migration ist mv.
Warum Rust, nicht Python. Der Agentenspeicher liegt im kritischen Pfad jedes Tool-Aufrufs. Python-MCP-Server fügen typischerweise 50–200 ms pro Round-Trip durch Serialisierungs-Overhead und GIL-Konflikte hinzu. Smritis Rust-Implementierung ruft einen KV-Eintrag in 2.5 µs ab und hält Speicheroperationen für die Antwortlatenz des Agenten unsichtbar.
Warum FTS5 + Vektor, nicht das eine oder das andere. Die Stichwortsuche (BM25) ist präzise für bekannte Begriffe; die Vektorsuche ruft semantisch verwandte Inhalte ab, an die der Benutzer beim Suchen nicht gedacht hat. Keines ist allein ausreichend. Smriti kombiniert beides mit Reciprocal Rank Fusion, gewichtet zum Zeitpunkt der Abfrage — passend zum Ergebnis in arXiv:2602.05665, dass hybrider Abruf bei Multi-Hop-Argumentationsaufgaben besser abschneidet als reine Vektorsuche.
Glaubensrevision bei memory_store. Wenn ein Agent einen Schlüssel speichert, der bereits existiert, verwirft ein naives Überschreiben die Historie. Smriti implementiert vier AGM-Konfliktlösungsrichtlinien (arXiv:2603.17244): overwrite (Standard), reject (Fehlschlag, falls vorhanden), version_and_keep (archiviert alten Wert) und invalidate (markiert alten als ersetzt). Ersetzte Werte sind über memory_history abfragbar.
Forschungsgrundlage
Paper | arXiv | Was es in Smriti begründet |
Zep / Graphiti | Bi-temporale Kanten in der | |
MAGMA | Typisierte Graph-Layer; BFS gefiltert nach | |
Graph-Native Belief Revision |
| |
Graph-Based Memory Survey | FTS5 + sqlite-vec Hybrid mit Reciprocal Rank Fusion |
Mitwirken
git clone https://github.com/smriti-AA/smriti.git
cd smriti
cargo test --all-features # should be green
cargo bench # performance baselineSiehe CONTRIBUTING.md für den Entwicklungs-Workflow. Issues mit dem Label good first issue sind in sich geschlossene Speicher- oder CLI-Änderungen, die kein Verständnis der gesamten Codebasis erfordern.
Vor dem Öffnen eines PR: cargo clippy --all-features -- -D warnings und cargo fmt --check.
Lizenz
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Smriti-AA/smriti'
If you have feedback or need assistance with the MCP directory API, please join our Discord server