Skip to main content

Persistent hybrid-search memory for AI CLI sessions (Claude Code, Codex, any turn-based jsonl)

Project description

anamnestic

Персистентная память с гибридным поиском для сессий AI-CLI.

Собирает исторические транскрипты из Claude Code (main + sub-агенты), Codex CLI и VS Code Copilot в единый корпус. Даёт гибридный поиск (BM25 + семантика + темпоральный + граф сущностей → RRF-слияние) и отдаёт результаты обратно клиентам как MCP-инструменты.

Построено как слой-расширение поверх claude-mem: переиспользует его SQLite-файл как базовую схему и добавляет собственные таблицы, индексы и сервисы. Оба сосуществуют, не конфликтуя.

pip install anamnestic

Зачем

  • Транскрипты рабочих сессий с AI-агентами накапливаются между проектами и клиентами. Grep по jsonl — медленно и семантически слепо; сами клиенты всё забывают между запусками.
  • MCP-сервер, который на mem_search("запрос") возвращает ранжированные реплики из любой прошлой сессии, превращает архив в адресуемую поверхность знаний.
  • Только BM25 пропускает парафразы. Только семантика не видит точных токенов (IP, CVE, пути). Четырёхканальный RRF даёт каждому каналу шанс вытащить релевантное.

Архитектура

flowchart TD
    subgraph sources ["Источники"]
        CC[Claude Code<br/>main + sub-агенты]
        CX[Codex CLI]
        VS[VS Code Copilot]
    end

    sources -->|mtime-сканер<br/>парсер под формат| SQLite

    subgraph SQLite ["SQLite"]
        HT[historical_turns + FTS5]
        SS[session_summaries + FTS5]
        EN[anamnestic_entities]
        EE[anamnestic_entity_edges]
    end

    subgraph Chroma ["Chroma (persistent)"]
        EMB[ONNX-эмбеддинги<br/>MiniLM-L12-v2]
    end

    SQLite -->|инкрементальный<br/>эмбеддер| Chroma

    HT --> BM25[BM25]
    SS --> BM25
    EN --> GRAPH[Граф сущностей]
    EE --> GRAPH
    EMB --> SEM[Семантика]
    SQLite --> TEMP[Темпоральный]

    subgraph RRF ["Reciprocal Rank Fusion (K=60)"]
        BM25
        SEM
        TEMP
        GRAPH
    end

    RRF -->|importance weighting<br/>temporal decay<br/>cross-encoder reranking| MCP

    MCP[stdio MCP-сервер] --> clients

    subgraph clients ["MCP-клиенты"]
        C1[Claude Code]
        C2[Codex]
        C3[Любой MCP-клиент]
    end

Поисковый пайплайн

Четыре канала извлечения, объединённые через RRF:

Канал Источник Что находит
BM25 FTS5 по turns + саммари Точные токены, пути к файлам, ошибки
Семантика Chroma cosine similarity Парафразы, концептуально похожий контент
Темпоральный SQL по диапазону дат (EN/RU) «вчера», «на прошлой неделе», «in March»
Граф BFS по co-occurrence сущностей Связанные turns через общие пути/URL

Пост-фьюжн этапы:

  • Importance weighting — повышает turns с кодом, ошибками, решениями
  • Temporal decay — экспоненциальный полураспад (по умолчанию 90 дней), свежие результаты выше
  • Cross-encoder reranking — ONNX MiniLM перескорирует top-20 для финальной точности

Каждый ответ поиска включает диагностику по каналам.

Контроль качества графа сущностей

  • Минимальный вес ребра — одноразовые co-occurrence (weight < 2) отсекаются как шум
  • IDF-нормализацияscore = weight / log₂(degree + 1) подавляет сущности-хабы, поднимает редкие дискриминативные

MCP-инструменты

Инструмент Назначение
mem_search Гибридный поиск с выбором режима (hybrid/bm25/semantic)
mem_probe Оракул покрытия — «встречается ли этот токен?»
mem_entity Поиск по сущности — «что мы делали с этим файлом?»
mem_get_turn Получить turn с окружающим контекстом
mem_get_session Обзор сессии с метаданными
mem_get_thread Цепочка продолжений — все связанные сессии
mem_stats Статистика корпуса
mem_audit_tail Последние записи телеметрии

CLI

anamnestic sync       # ingest + embed + обогащение (сущности, потоки, importance, саммари, граф)
anamnestic search "запрос"
anamnestic status     # снимок здоровья корпуса
anamnestic verify     # проверки целостности (FTS, drift, сироты)
anamnestic backup     # WAL-safe tar (хранит последние 10)
anamnestic restore    # восстановление из бэкапа
anamnestic audit      # лог последних операций
anamnestic eval       # регрессионный тест по golden-запросам
anamnestic archive    # архивация старых low-importance turns

Установка

Полная инструкция — установка, бэкфилл, регистрация MCP, systemd-таймеры, переезд — в SETUP.md.

Принципы дизайна

  • Файл — единица идемпотентности. anamnestic_ingest_state хранит (source, path, mtime_ns); повторный запуск пропускает неизменённые файлы.
  • Turn — единица хранения. historical_turns с UNIQUE-ключом (content_session_id, turn_number); UPSERT не плодит дубликаты.
  • Формат — ответственность парсера. Добавить новый CLI-агент = написать парсер в anamnestic/ingest/ и зарегистрировать glob.
  • Каждая операция аудируется. anamnestic_audit логирует sync/verify/backup/restore с длительностью и JSON-payload.
  • Auto-sync при старте MCP. Лёгкий ingest + embed при запуске сервера — данные всегда актуальны.

Тесты

93 теста, покрывающие все модули:

  • Интеграционные тесты полного RRF-пайплайна (формула скора, multi-channel merge, importance, decay, граф, диагностика)
  • Unit-тесты importance scoring, temporal parsing, decay, entity extraction, graph traversal, reranking, threading, summarization, parsers, MCP server
pytest tests/ -v   # <1с

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anamnestic-0.2.1.tar.gz (64.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

anamnestic-0.2.1-py3-none-any.whl (58.2 kB view details)

Uploaded Python 3

File details

Details for the file anamnestic-0.2.1.tar.gz.

File metadata

  • Download URL: anamnestic-0.2.1.tar.gz
  • Upload date:
  • Size: 64.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.8

File hashes

Hashes for anamnestic-0.2.1.tar.gz
Algorithm Hash digest
SHA256 cd9180ffad6feed11438cc783bd86d0fa7d3658ed2fb5d20718929ef65d085d3
MD5 f1a9aa701cb578e3170fffc21b548453
BLAKE2b-256 7404b8f5729cd68dee1f993d7a5162e6b2b09c283345c3c0db2855227ce9aa44

See more details on using hashes here.

File details

Details for the file anamnestic-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: anamnestic-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 58.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.8

File hashes

Hashes for anamnestic-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 db893d42272a72a7ed9b6c376f4d8b1b1a2519ae82cb8bd9866209aa2a4a97bf
MD5 5e05c1bbd415df003d40f82a2bef66ab
BLAKE2b-256 62a1abd3a7beb858de36468c6b31ffbe6ec14d4340c1e8cec82ce41b35bfc7b6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page