Skip to main content
Glama
Smriti-AA

smriti

by Smriti-AA

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 smriti

Warum 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 SQLite SAVEPOINT angewendet werden. Jeder Inhaltsschreibvorgang muss ein claim_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 inbox

Was 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:3000

Ihre 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 decision

Entscheidungslogbuch

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 decision

Tä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 MCP

SOPs und Playbooks

Dokumentieren Sie wiederholbare Prozesse als verknüpfte Notizen. Importieren Sie vorhandene Markdown-Dateien mit einem Befehl.

smriti import ./playbooks --recursive

MCP-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

notes_create

Erstellt eine Notiz; [[wiki-links]] und #tags werden automatisch extrahiert

notes_read

Liest eine Notiz nach ID oder Titel

notes_search

Volltext-BM25-Suche über alle Notizen

notes_list

Listet aktuelle Notizen auf, filterbar nach Tag

notes_graph

Gibt einen Teilgraphen (BFS, typisierter Kantenfilter) um eine Notiz zurück

notes_search_semantic

Vektor + FTS5 Hybrid-Suche mit Reciprocal Rank Fusion

memory_store

Speichert ein Schlüssel-Wert-Paar; unterstützt TTL und Konfliktrichtlinie

memory_retrieve

Ruft einen gespeicherten Wert nach Agenten-ID + Schlüssel ab

memory_list

Listet alle Speichereinträge für einen Agenten auf

memory_history

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 digest

Designentscheidungen

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

2501.13956

Bi-temporale Kanten in der links-Tabelle; 18.5% LongMemEval-Verbesserung

MAGMA

2601.03236

Typisierte Graph-Layer; BFS gefiltert nach link_type; 95% Token-Reduktion

Graph-Native Belief Revision

2603.17244

ConflictPolicy Enum in memory_store

Graph-Based Memory Survey

2602.05665

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 baseline

Siehe 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

MIT

-
security - not tested
A
license - permissive license
-
quality - not tested

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