smriti
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— пакет операций создания/обновления/связывания/источника, применяемых атомарно внутриSAVEPOINTSQLite. Каждая запись контента должна содержать массив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
Инструмент | Что он делает |
| Создать заметку; |
| Прочитать заметку по ID или заголовку |
| Полнотекстовый поиск BM25 по всем заметкам |
| Список недавних заметок, фильтрация по тегу |
| Вернуть подграф (BFS, фильтр по типу ребра) вокруг заметки |
| Гибридный поиск вектор + FTS5 с объединением взаимного ранжирования |
| Сохранить пару ключ-значение; поддерживает TTL и политику конфликтов |
| Извлечь сохраненное значение по ID агента + ключу |
| Список всех записей памяти для агента |
| Извлечь вытесненные значения для ключа (версионная память) |
Полная справка по 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 | Битемпоральные ребра в таблице | |
MAGMA | Типизированные слои графа; BFS с фильтрацией по | |
Graph-Native Belief Revision | Перечисление | |
Graph-Based Memory Survey | Гибрид 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.
Лицензия
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