memo

Локальная библиотека заметок с семантическим поиском.

Markdown на диске — истина, .db рядом — пересобираемый кэш. Агент (или человек) пишет и читает обычные .md-файлы своими штатными средствами: memo не требует ни специального API записи, ни изменения привычек. Он следит за файловой системой, держит рядом с каждой папкой-темой индекс (SQLite + sqlite-vec + FTS5) и отвечает на смысловые вопросы гибридным поиском (BM25 + вектор + RRF).

Статус

Проектирование завершено. Код не написан.

Документ Что внутри
docs/SPEC.md полная спека: модель данных, индекс, маршрутизация, watcher, интерфейс, приёмка
TASK.md ТЗ для исполнителя (opencode): стек, схема БД, контракты, чего не делать
TESTING.md тест-план: 6 приёмочных проверок, команды, признаки провала

Идея

  • Коллекций (папок-тем) — сколько угодно; они не мешают друг другу.
  • Индекс каждой коллекции живёт в её .memo/index.db и удаляется без потерь — пересобирается.
  • Поиск — обычный read-only инструмент; записи в markdown он не делает никогда.
  • Только локально: эмбеддинг на CPU, сеть не нужна ни при индексации, ни при поиске.

Состав (JVM-first, один Gradle-проект)

memo-cli     # memo index|search|status — ручные проверки и приёмка без агента
memo-core    # чанкер по заголовкам, sqlite-схема, инкрементальная переиндексация, гибридный поиск
memo-watch   # демон: WatchService + debounce + реконсиляция по mtime
memo-mcp     # MCP-сервер (stdio): memo_search / memo_status / memo_reindex

memo-core не знает ни про watcher, ни про MCP — это драйверы поверх ядра.

Зависимости (проверено 02.10.2026)

Что Координата Откуда
SQLite + sqlite-vec + FTS5 pw.binom.db:ksqlite:0.1.4 Maven Central
Текстовый эмбеддинг (SigLIP2 int8, 768 dims) pw.binom.ai.embeddingtext:api:5 + :siglip:5 http://nexus.xx/repository/caffeine/

Модель (в артефакты не входит, скачивается отдельно):

mkdir -p models/siglip2
curl -fSL -o models/siglip2/text_model_int8.onnx http://static.binom.pw/models/siglip2/text_model_int8.onnx  # 283M
curl -fSL -o models/siglip2/tokenizer.model     http://static.binom.pw/models/siglip2/tokenizer.model           # 4.2M

Требования

JDK 21. Индекс и поиск работают офлайн после скачивания модели.

Лицензия

Apache-2.0.

S
Description
Локальная библиотека заметок: markdown — истина, пересобираемый sqlite-vec индекс, watcher, MCP-поиск (Kotlin/JVM)
Readme Apache-2.0 269 KiB
Languages
Kotlin 82.1%
Shell 9.7%
Python 8.2%