Skip to main content
Glama
Smriti-AA

smriti

by Smriti-AA

Smriti

Самохостируемый граф знаний и слой памяти для ИИ-агентов — один бинарный файл, один файл SQLite, ноль зависимостей от облака.

Git для вики-баз LLM. Атомарные транзакции с множественной записью, принудительное подтверждение происхождения каждого утверждения, журнал событий только для добавления с хеш-цепочкой и верификатор целостности — чтобы знания, созданные агентами, были проверяемыми по своей структуре.

2.5µs извлечение KV · 235ns обход графа · 0 облачных зависимостей

[screenshot: web-ui-dashboard.gif]

cargo install smriti

Почему Smriti (в сравнении с Obsidian / Zep / Mem0 / Letta / Neo4j)

Свойство

Obsidian

Zep

Mem0 / Letta

Neo4j / Graphiti

Smriti

Один бинарный файл, один файл, без сервера

✓*

Полностью локально / офлайн

частично

Битемпоральные ребра (valid_from / valid_until)

Атомарные транзакции с множественной записью (SAVEPOINT)

✓ (сервер)

Принудительное подтверждение происхождения каждого утверждения

Журнал событий только для добавления + хеш-цепочка

Входящие противоречия (никогда не разрешаются автоматически)

частично

MCP-native для агентов

плагин

  • Obsidian — это файловая система без гарантий транзакционности. Преимущество Smriti не в новизне, а в дисциплине записи в локально-ориентированной среде выполнения на Rust.

Исследовательская база

Каждая функция целостности ссылается на статью arXiv, чтобы вы могли проследить дизайн до научной литературы:

  • Битемпоральные ребра и журнал событий T / T′ — Zep / Graphiti, arXiv:2501.13956

  • Верификация структурного перекрытия (утверждение ↔ источник) — FACTUM, arXiv:2601.05866 и Citation-Grounded Code Comprehension, arXiv:2512.12117

  • Оценка уверенности в противоречиях — MemoTime, arXiv:2510.13614 и EvoReasoner / EvoKG, arXiv:2509.15464

  • Пересмотр убеждений и политика конфликтов в memory_store — постулаты AGM, arXiv:2603.17244

  • Гибридный поиск по графу + BM25 — Graph-Based Memory Survey, arXiv:2602.05665

  • Типизированные слои графа (семантические/временные/причинно-следственные) — MAGMA, arXiv:2601.03236

  • Память агента в стиле Zettelkasten — A-MEM, arXiv:2502.12110 (NeurIPS 2025)

  • Требования к обоснованию галлюцинаций — arXiv:2510.24476

Слой целостности (v0.2)

Четыре инструмента MCP превращают Smriti из CRUD-хранилища в вики с инвариантами:

  • wiki_transaction_submit — пакет операций создания/обновления/связывания/источника, применяемых атомарно внутри SAVEPOINT SQLite. Каждая запись контента должна содержать массив claim_spans, иначе она будет отклонена (происхождение подтверждается по умолчанию).

  • wiki_verify — выполняет проверку ссылочной целостности + повторно проверяет оценку перекрытия каждого сохраненного утверждения + проходит по хеш-цепочке журнала событий. Возвращает pass/fail. Никогда не изменяет данные.

  • contradictions_detect — попарное сканирование недавних заметок с использованием взвешенной оценки w1·семантика + w2·новизна + w3·авторитетность. Кандидаты попадают во входящие для проверки — Smriti никогда не разрешает их автоматически.

  • contradictions_list — входящие для проверки.

CLI отражает всё это:

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

Что такое Smriti?

Smriti (санскрит: स्मृति, память) — это один бинарный файл на Rust, который запускает граф знаний, полнотекстовый + семантический поисковый индекс и сервер MCP поверх одного файла SQLite. Он разработан для двух пользователей: специалиста по знаниям, которому нужен личный «второй мозг», который может читать его ИИ-ассистент, и разработчика, которому нужен постоянный структурированный слой памяти для ИИ-агентов.

Заметки соединяются друг с другом через типизированные вики-ссылки — напишите [[rel:causal|Decision X]] в заметке, и Smriti автоматически запишет направленное ребро causal в графе знаний. Агенты затем могут перемещаться по этому графу, чтобы отвечать на вопросы вроде «что привело к этому решению?», не перечитывая каждую заметку.


Быстрый старт

# 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

Ваши заметки, граф и поисковый индекс живут в ~/.local/share/smriti/smriti.db. Делайте резервные копии с помощью cp.


Варианты использования

Граф знаний клиента

Отслеживайте каждого клиента, контакт и взаимодействие как связанные заметки. Когда вы проводите брифинг для Claude перед звонком, он читает полный контекст — историю, решения, открытые вопросы — без необходимости объяснять что-либо заново.

smriti create "Acme Corp Q2 Review" \
  --content "Next steps: [[rel:temporal|Budget approval]] by June. Owner: [[Sarah Chen]]." \
  --tags client decision

Журнал решений

Записывайте решения с контекстом и последствиями. Тип ссылки rel:causal позволяет агентам проследить, почему было принято то или иное решение.

smriti create "Switched to Rust" \
  --content "Replaced Python service. Reason: [[rel:causal|Memory leak in prod]]." \
  --tags decision

Ежедневный контекст ИИ

Храните свой текущий фокус в KV-хранилище. Claude читает его в начале каждой сессии через MCP.

smriti serve   # then ask Claude: "what's my current focus?" — Smriti answers via MCP

СОПы и плейбуки

Документируйте повторяющиеся процессы как связанные заметки. Импортируйте существующие файлы markdown одной командой.

smriti import ./playbooks --recursive

Интеграция MCP

Smriti работает как сервер MCP через stdio. Добавьте его в Claude Desktop в claude_desktop_config.json:

{
  "mcpServers": {
    "smriti": {
      "command": "smriti",
      "args": ["mcp", "--db", "/path/to/smriti.db"]
    }
  }
}

Для удаленного MCP через claude.ai запустите smriti serve и укажите клиенту MCP адрес http://localhost:3000/mcp.

Инструменты MCP

Инструмент

Что он делает

notes_create

Создать заметку; [[wiki-links]] и #tags извлекаются автоматически

notes_read

Прочитать заметку по ID или заголовку

notes_search

Полнотекстовый поиск BM25 по всем заметкам

notes_list

Список недавних заметок, фильтрация по тегу

notes_graph

Вернуть подграф (BFS, фильтр по типу ребра) вокруг заметки

notes_search_semantic

Гибридный поиск вектор + FTS5 с объединением взаимного ранжирования

memory_store

Сохранить пару ключ-значение; поддерживает TTL и политику конфликтов

memory_retrieve

Извлечь сохраненное значение по ID агента + ключу

memory_list

Список всех записей памяти для агента

memory_history

Извлечь вытесненные значения для ключа (версионная память)

Полная справка по MCP: docs/mcp.md


Производительность

Измерено на Apple Silicon, SQLite в памяти, с использованием Criterion. Запустите: cargo bench

Операция

p50

Вставка 1 заметки

32.5 µs

Вставка 100 заметок

2.0 ms

Вставка 1,000 заметок

23.1 ms

Поиск FTS5 — 1k заметок

331 µs

Поиск FTS5 — 10k заметок

2.86 ms

Построение графа — 1k узлов

216 µs

BFS глубина-2 (кэшировано)

235 ns

BFS глубина-3 (кэшировано)

410 ns

Память KV-хранилище — 100 ключей

513 µs

Извлечение из памяти KV (попадание)

2.48 µs

Извлечение из памяти KV (промах)

2.25 µs

Smriti против альтернатив

Smriti

Mem0

Letta

Zep

Самохостинг

Да

Нет

Да

Частично

Граф знаний

Да (petgraph)

Нет

Нет

Да (Neo4j)

Типизированные ребра

Да

Нет

Нет

Да

Битемпоральные ребра

Да

Нет

Нет

Да

Пересмотр убеждений

Да (AGM)

Нет

Нет

Нет

MCP native

Да

Нет

Нет

Нет

Полнотекстовый поиск

FTS5 (BM25)

Только вектор

Только вектор

Вектор + ключевые слова

Гибридный поиск

Да (RRF)

Нет

Нет

Нет

Память KV + TTL

Да

Нет

Да

Да

Язык

Rust

Python

Python

Python/Go

Развертывание

Один бинарный файл

SaaS

Docker + Postgres

Docker + Neo4j + Redis

Задержка извлечения KV

~2.5 µs

~50–200 ms

~10–50 ms

~5–20 ms


Архитектура

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

Проектные решения

Почему SQLite, а не Postgres. База знаний для одного человека или небольшой команды не должна требовать работающего сервера базы данных. SQLite в режиме WAL обрабатывает сотни параллельных чтений в секунду — более чем достаточно для любого личного графа знаний. Вся база данных — это один файл: резервное копирование — это cp, миграция — это mv.

Почему Rust, а не Python. Память агента находится на критическом пути каждого вызова инструмента. Серверы MCP на Python обычно добавляют 50–200 мс на каждый запрос из-за накладных расходов на сериализацию и конкуренции GIL. Реализация Smriti на Rust извлекает запись KV за 2.5 мкс, делая операции с памятью незаметными для задержки ответа агента.

Почему FTS5 + вектор, а не что-то одно. Поиск по ключевым словам (BM25) точен для известных терминов; векторный поиск находит семантически связанный контент, который пользователь не догадался искать. Ни то, ни другое по отдельности недостаточно. Smriti объединяет оба метода с помощью взаимного ранжирования, взвешенного во время запроса — что соответствует выводу в arXiv:2602.05665 о том, что гибридный поиск превосходит чистый векторный в задачах многошагового рассуждения.

Пересмотр убеждений в memory_store. Когда агент сохраняет ключ, который уже существует, наивная перезапись отбрасывает историю. Smriti реализует четыре политики разрешения конфликтов AGM (arXiv:2603.17244): overwrite (по умолчанию), reject (ошибка, если существует), version_and_keep (архивировать старое значение) и invalidate (пометить старое как вытесненное). Вытесненные значения доступны для запроса через memory_history.

Научная основа

Статья

arXiv

На чем основывается в Smriti

Zep / Graphiti

2501.13956

Битемпоральные ребра в таблице links; улучшение LongMemEval на 18.5%

MAGMA

2601.03236

Типизированные слои графа; BFS с фильтрацией по link_type; сокращение токенов на 95%

Graph-Native Belief Revision

2603.17244

Перечисление ConflictPolicy в memory_store

Graph-Based Memory Survey

2602.05665

Гибрид FTS5 + sqlite-vec с взаимным ранжированием


Участие в разработке

git clone https://github.com/smriti-AA/smriti.git
cd smriti
cargo test --all-features   # should be green
cargo bench                 # performance baseline

См. CONTRIBUTING.md для рабочего процесса разработки. Проблемы с меткой good first issue — это изолированные изменения хранилища или CLI, которые не требуют понимания всей кодовой базы.

Перед открытием PR: cargo clippy --all-features -- -D warnings и cargo fmt --check.


Лицензия

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