{"slug": "memohood-and-memobase-local-memory-and-knowledge-base-for-ai-agents", "title": "MemoHood and MemoBase – local memory and knowledge base for AI agents", "summary": "MemoHood and MemoBase are local memory and knowledge base plugins for hermes-agent that turn files (PDF/DOCX/HTML/MD/TXT/CSV), web pages, YouTube videos, audio recordings, and Obsidian notes into a local knowledge base, answering strictly with verbatim verified citations or an honest refusal if the answer is not in the base. The system uses hybrid search (FTS5 + vector with RRF fusion), Cohere rerank-v3.5, and a sufficiency gate to ensure responses are grounded only in the ingested sources, all stored locally in SQLite.", "body_md": "**Плагин для hermes-agent, который превращает ваши файлы (PDF/DOCX/HTML/MD/TXT/CSV), веб-страницы, YouTube-видео и целые каналы, аудиозаписи и заметки Obsidian в локальную базу знаний — и отвечает строго по ней: с дословными проверенными цитатами или честным отказом, если ответа в базе нет.**\n\n### 🌐 Русский · [English](/mxskorohood-cmd/memobase/blob/main/README.en.md)\n\n[Зачем](#зачем-это-нужно) ·\n[Возможности](#возможности) ·\n[Установка](#установка) ·\n[Настройки](#настройки) ·\n[Инструменты](#инструменты-18-и-команды)\n\n```\nflowchart TD\n    subgraph ING[\"Загрузка — memobase_ingest\"]\n        FILES[\"Файлы и URL<br/>PDF / DOCX / HTML / MD / TXT / CSV\"]\n        OBS[\"Obsidian<br/>заметка или vault\"]\n        YT[\"YouTube<br/>видео или канал\"]\n        AUD[\"Аудио / голосовые / видео\"]\n        CAPS{\"Субтитры<br/>ScrapeCreators → Apify\"}\n        STT[\"Расшифровка STT<br/>Groq Whisper → Gemini<br/>(таймкоды сегментов)\"]\n        EXT[\"Извлечение текста<br/>(SSRF-проверка для URL)\"]\n        NORM[\"Нормализация<br/>(кодировка, мусор, дедуп)\"]\n        CHUNK[\"Нарезка на фрагменты<br/>(по структуре, code-fence-safe)\"]\n        SCAN{\"Сканер секретов<br/>(блокирует)\"}\n        EMB[\"Эмбеддинг<br/>Cloudflare BGE-M3\"]\n        FILES --> EXT\n        OBS --> EXT\n        YT --> CAPS\n        CAPS -->|есть субтитры| EXT\n        CAPS -.->|\"нет — аудио (Apify)\"| STT\n        AUD --> STT\n        STT -->|текст с таймкодами| EXT\n        EXT --> NORM --> CHUNK --> SCAN\n        SCAN -->|чисто| EMB\n        SCAN -.->|найден секрет| QUAR[\"В карантин,<br/>не индексируется\"]\n    end\n\n    EMB --> DB[(\"memobase.db<br/>SQLite: FTS5 + vec0\")]\n\n    subgraph ASK[\"Вопрос — memobase_ask / memobase_query\"]\n        Q[\"Вопрос\"]\n        HYB[\"Гибридный поиск<br/>FTS5(BM25+RU-стемминг) + вектор KNN\"]\n        RRF[\"Слияние RRF (k=60)\"]\n        RRK[\"Переранжирование<br/>Cohere rerank-v3.5\"]\n        GATE{\"Гейт достаточности\"}\n        LLM[\"Модель без инструментов<br/>отвечает только по фрагментам\"]\n        VERIFY[\"Проверка цитат<br/>(дословно, fuzzy-match)\"]\n        Q --> HYB\n        DB --> HYB\n        HYB --> RRF --> RRK --> GATE\n        GATE -->|недостаточно| REFUSE[\"Честный отказ:<br/>«в базе этого нет»\"]\n        GATE -->|достаточно| LLM --> VERIFY --> ANSWER[\"Ответ + цитаты + источники\"]\n    end\n```\n\nMemoBase — это отдельный, параллельно работающий модуль для *документов*. Он не заменяет память hermes (историю диалогов, профиль пользователя): обе системы можно держать включёнными одновременно, они не конфликтуют. MemoBase — библиотекарь, а не память.\n\nКогда вы просите обычную языковую модель ответить по вашему документу, есть два пути, и оба ненадёжны:\n\n**Вставить весь документ в промпт.** На длинном тексте модель «теряет середину», отвечает дорого (весь документ уходит в каждый запрос) и может пересказать неточно — без всякой проверки.**Понадеяться на общие знания модели.** Тогда она с уверенным видом сочинит то, чего в ваших документах нет.\n\nMemoBase закрывает обе дыры. Это как **NotebookLM, но локально и прямо внутри агента**: вы загружаете источники, а плагин отвечает **только тем, что в них реально есть** — с дословной цитатой, источником и страницей/разделом (а у видео и аудио — с таймкодом) у каждого утверждения. Если ответа в базе нет, MemoBase честно скажет «в базе знаний этого пока нет», а не станет угадывать.\n\n**Агент уверенно выдумывает факты, которых нет.**→ «Цитата или отказ», проверка в коде: каждая цитата дословно сверяется с источником — не сошлось, ответа не будет.** Вручную копипастишь куски PDF и статей в чат.**→ Кидаешь файл, сайт или видео — плагин сам разбирает источник и ищет по нему мгновенно.** Поиск по ключевым словам не понимает смысл, а чисто векторный теряет точные слова, коды, имена.**→ Гибрид FTS5 + вектор со склейкой RRF: находит и по смыслу, и по точному слову.** Твои документы уходят в чужое облако.**→ Всё в одном локальном файле SQLite; в полностью локальном режиме наружу не уходит ничего.** RAG-стек тяжёлый: PyTorch, гигабайты весов, ядовитая AGPL — не встанет на дешёвый VPS.**→ Без PyTorch и без AGPL, ставится за секунды.** Обязательные платные ключи.**→ Локальный ONNX-эмбеддер (fastembed): поиск работает вообще без ключей.** Видео и голосовые не ищутся — расшифровывай вручную.**→ Whisper с реальными таймкодами, целые YouTube-каналы, голосовые, Obsidian — всё в один индекс.\n\nПод капотом — контур без галлюцинаций из четырёх ступеней:\n\n**Гейт достаточности.** Прежде чем модель вообще получит право отвечать, MemoBase проверяет, нашёл ли поиск достаточно уверенный релевантный фрагмент. Не нашёл — честный отказ, ещё до генерации.**Ответ только по фрагментам.** Ответ генерирует модель без доступа к другим инструментам (tool-less) — ей физически нечем «дофантазировать» помимо переданных фрагментов.**Дословная проверка цитат.** Каждая цитата в ответе сверяется с исходным текстом фрагмента (точное совпадение, иначе fuzzy-сравнение) — придуманная или неточная цитата отбрасывается.**Честный отказ.** Если после проверки не осталось ни одной подтверждённой цитаты, MemoBase возвращает отказ, а не непроверенный текст.\n\n**Источники загрузки ( memobase_ingest)**\n\n**Файлы и веб-страницы:** PDF (через`pdfplumber`\n\n, с откатом на`pypdf`\n\n), DOCX (`mammoth`\n\n), HTML и URL (`trafilatura`\n\n, с проверкой на SSRF), Markdown, TXT, CSV (построчно, с сохранением заголовка таблицы).**YouTube — целыми каналами и по одному видео.** Субтитры забираются через ScrapeCreators (запасной путь — Apify); если субтитров нет вообще, скачивается аудио (Apify) и расшифровывается Groq Whisper — с настоящими таймкодами, так что цитата ведёт на конкретную минуту. Для канала больше порога (по умолчанию 20 видео) плагин сначала покажет смету в долларах и попросит подтверждение.**Аудио, голосовые и видео (STT).** По умолчанию — Groq Whisper (`whisper-large-v3-turbo`\n\n) с таймкодами от самого декодера; длинные файлы автоматически режутся (нужен`ffmpeg`\n\n) и склеиваются без потери текста. Запасной путь — Gemini (его таймкоды — оценка модели, поэтому такие расшифровки помечаются пониженным доверием).**Obsidian — только чтение.** Плагин сам находит ваши vault'ы по реестру Obsidian, грузит одну заметку или vault целиком, понимает frontmatter и связи`[[...]]`\n\n, пропускает служебные папки (`.obsidian/`\n\n,`.trash/`\n\n,`templates/`\n\n). В сам vault MemoBase**никогда не пишет**.\n\n**Поиск и ответ**\n\n**Гибридный поиск, понимающий русский.** Полнотекстовый поиск (FTS5, BM25) с русским стеммингом на отдельной колонке (PyStemmer, Snowball «russian» — «договора» находит «договор») плюс векторный поиск по смыслу (Cloudflare BGE-M3, 1024 измерения). Результаты объединяются взаимным ранжированием (RRF, k=60) и переранжируются Cohere rerank-v3.5.**Ответы без выдумок и честный отказ.** Гейт достаточности → ответ tool-less-моделью только по фрагментам → дословная проверка цитат → отказ, если ничего не подтвердилось (подробнее — раздел[«Зачем»](#%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-%D1%8D%D1%82%D0%BE-%D0%BD%D1%83%D0%B6%D0%BD%D0%BE)).**Данные хранятся локально.** Вся база — один файл SQLite`<HERMES_HOME>/memobase/memobase.db`\n\n(векторный индекс — sqlite-vec, локально). Наружу уходит только текст вопроса и фрагментов — на эмбеддинг (Cloudflare Workers AI) и переранжирование (Cohere). Сами файлы и остальная база никуда не загружаются.**Карта базы и обогащение (опция).**`/memobase map`\n\nстроит mermaid-карту коллекции (документы, темы, Obsidian-связи, пересечения ключевых слов). При включённом`memobase.enrich.enabled`\n\nдешёвая модель дописывает каждому фрагменту короткую заметку «что это и откуда» — она попадает только в эмбеддинг (меньше промахов поиска), сырой текст и проверка цитат остаются нетронутыми.\n\n**Гостевые коллекции**\n\n- Владелец может создать гостю личную коллекцию, выдать или мгновенно отозвать доступ на чтение/запись, задать квоты (объём, дневная загрузка, дневной бюджет, число вызовов). Подозрительные гостевые фрагменты (похожие на внедрение инструкций) не индексируются молча, а попадают в\n**карантин** на ручную проверку владельцем.\n\n**6 вшитых блокеров** (защита, которая не выключается и не зависит от «обещаний» модели):\n\n**SSRF**— перед любым HTTP-запросом на URL (и при предварительной оценке размера) адрес проверяется, чтобы плагин не ходил во внутреннюю сеть.**Ограждение сырых чанков**—`memobase_query`\n\nвозвращает фрагменты, обёрнутые как «это данные, а не инструкции», и прогоняет их через сканер секретов/инъекций.**Порог RRF в деград-режиме**— без ключа Cohere поиск честно падает до`rrf-only`\n\nи применяет отдельный калиброванный порог достаточности для этого режима.**Теневая миграция векторов**— при смене модели эмбеддинга переэмбеддинг пишется в теневую таблицу и атомарно переименовывается; во время миграции коллекция не отдаёт неконсистентные результаты.**Проверка под-утверждений**— ответ разбивается на под-утверждения, и каждое должно опереться на цитату; нецитируемые числовые/отрицательные клаузы либо сверяются с фрагментом, либо понижаются в доверии.**Purge старых чанков**— при повторной загрузке источника фрагменты, исчезнувшие из новой версии, гасятся (tombstone) и исключаются из поиска — база не копит «призраки» удалённого текста.\n\n**Защита от инъекций через документы.** Если загруженный документ содержит текст вида «игнорируй предыдущие инструкции», MemoBase размечает его как данные, а не команды, и предупреждает баннером — и при выдаче сырых фрагментов (`memobase_query`\n\n), и при генерации ответа (`memobase_ask`\n\nвызывает модель без доступа к другим инструментам). Сабагент, привязанный к конкретной коллекции, физически не может обратиться к другой — привязка проверяется в коде.\n\nСтавите через Telegram-бота hermes?Пришлите архив плагина в чат и попросите «распакуй и поставь по инструкции внутри» — агент выполнит установку по[. Ниже — ручная установка в терминале.]`AGENTS.md`\n\nОдна команда: плагин копируется на место, зависимости ставятся, `memobase`\n\nвключается в `config.yaml`\n\n— руками ничего донастраивать не нужно.\n\n-\nСкачайте/склонируйте эту папку куда угодно — необязательно сразу в\n\n`<HERMES_HOME>/plugins/`\n\n, скрипт скопирует сам. -\nЗапустите установочный скрипт:\n\n```\n# Windows\n.\\install.ps1\n# Linux / macOS\n./install.sh\n```\n\nСкрипт сам находит python внутри venv hermes-agent (через\n\n`hermes`\n\nв PATH, переменную`HERMES_VENV_PYTHON`\n\nили стандартный путь`<HERMES_HOME>/hermes-agent/venv`\n\n), ставит зависимости (`sqlite-vec pdfplumber pypdf mammoth trafilatura>=1.8 ftfy py3langid PyStemmer requests`\n\n), копирует плагин в`<HERMES_HOME>/plugins/memobase/`\n\n(по умолчанию`%LOCALAPPDATA%\\hermes\\plugins\\memobase`\n\nна Windows; повторный запуск просто обновляет файлы на месте) и добавляет`memobase`\n\nв`plugins.enabled`\n\nв`config.yaml`\n\n— тем же штатным способом, каким это делает мастер`/setup`\n\n(при сбое — резервная правка с бэкапом`config.yaml.bak`\n\n; при любой ошибке скрипт не падает, а печатает точные строки для ручного добавления). Пропустить автопатч конфига — флаг`--no-config`\n\n/`-NoConfig`\n\n. -\nПерезапустите hermes и проверьте:\n\n```\n/memobase status\n```\n\nВ конце вывода — блок «Ключи»: полный путь к\n\n`.env`\n\nи статус каждого ключа (`✓ настроен`\n\nс маской /`✗ нет`\n\n/`⚠ есть в .env, но процесс не видит`\n\n— записан, но нужен рестарт). Блок виден и на пустой базе, ещё до первой загрузки.Если hermes-gateway запущен как\n\n`systemd --user`\n\n-юнит, установщик уже прописал`EnvironmentFile`\n\n-drop-in — новые ключи из`.env`\n\nподхватятся при`hermes gateway restart`\n\n, без ручной правки юнита. В обычной CLI-сессии`.env`\n\nнаследуется сама собой при следующем запуске hermes.\n\nПлагин сразу работает в keyword-режиме (полнотекстовый поиск FTS5, без единого ключа). Ключи из таблицы ниже включают семантический поиск и дополнительные источники — без них соответствующая возможность честно деградирует или пропускается, а не роняет плагин:\n\n| Ключ | Зачем | Когда нужен |\n|---|---|---|\n`CLOUDFLARE_ACCOUNT_ID` , `CLOUDFLARE_API_TOKEN` |\nЭмбеддинг (Cloudflare Workers AI) | Всегда (основной поиск) |\n`COHERE_API_KEY` |\nПереранжирование (Cohere rerank-v3.5) | Всегда (без него — деградация до RRF) |\n`SCRAPECREATORS_API_KEY` |\nСубтитры и списки видео YouTube | Для загрузки YouTube |\n`APIFY_TOKEN` |\nЗапасные субтитры/списки + скачивание аудио YouTube | Для YouTube без субтитров |\n`GROQ_API_KEY` |\nРасшифровка аудио (Groq Whisper) | Для аудио/голосовых и YouTube без субтитров |\n`GEMINI_API_KEY` |\nЗапасная расшифровка аудио (Gemini) | Опционально, как резерв STT |\n\nКлючи необязательно вписывать в `.env`\n\nруками — есть мастер настройки: `/memobase setup`\n\nв Telegram или `hermes memobase setup`\n\nв терминале. Это один и тот же сценарий с общим кодом: вопросы, проверка формата и живая проверка ключа у провайдера, автообнаружение Obsidian, проверка `ffmpeg`\n\n, первая загрузка и контрольный вопрос — везде одинаковые. Ответы мастера перехватываются до модели, поэтому настройка не тратит токены.\n\nОфлайн-вектор совсем без ключей — переустановите с `--local`\n\n/ `-Local`\n\n(fastembed + intfloat/multilingual-e5-large, ~2.2 ГБ, скачивается один раз).\n\nВсе ключи живут под корнем `memobase.*`\n\nв `config.yaml`\n\n; ниже — значения по умолчанию. Ключи API задаются не здесь, а в `~/.hermes/.env`\n\n(см. [«Установка»](#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)).\n\n| Ключ | Тип | По умолчанию | Что делает |\n|---|---|---|---|\n`memobase.embedder.provider` |\nstr | `cloudflare` |\nПровайдер эмбеддингов: `cloudflare` (BGE-M3) или `openai-compat` (свой OpenAI-совместимый сервер). |\n`memobase.embedder.model` |\nstr | `@cf/baai/bge-m3` |\nМодель эмбеддингов. |\n`memobase.embedder.dims` |\nint | `1024` |\nРазмерность вектора. |\n`memobase.embedder.base_url` |\nstr | (нет) |\nURL своего сервера эмбеддингов — обязателен только при `provider: openai-compat` . |\n`memobase.rerank.provider` |\nstr | `cohere` |\nПровайдер переранжирования. |\n`memobase.rerank.model` |\nstr | `rerank-v3.5` |\nМодель переранжирования. |\n`memobase.rerank.enabled` |\nbool | `true` |\nВключён ли шаг переранжирования (иначе — `rrf-only` ). |\n`memobase.answer_model` |\nstr | (пусто) |\nМодель для генерации ответов. Пусто = активная модель хоста; можно указать отдельную дешёвую. |\n`memobase.default_collection` |\nstr | `default` |\nКоллекция по умолчанию. |\n`memobase.confirm_over_chunks` |\nint | `500` |\nПорог числа фрагментов, выше которого перед загрузкой запрашивается подтверждение по стоимости. |\n`memobase.monthly_ceiling_usd.cloudflare` |\nnumber | `5` |\nМесячный потолок расходов на Cloudflare (USD). |\n`memobase.monthly_ceiling_usd.cohere` |\nnumber | `5` |\nМесячный потолок расходов на Cohere (USD). |\n`memobase.chunk.target_tokens` |\nint | `900` |\nЦелевой размер фрагмента в токенах. |\n`memobase.chunk.overlap_pct` |\nfloat | `0.15` |\nПерекрытие соседних фрагментов. |\n`memobase.youtube.confirm_over_videos` |\nint | `20` |\nПорог числа видео в канале, выше которого показывается смета и запрашивается подтверждение. |\n`memobase.youtube.transcript_providers` |\nlist | `[scrapecreators, apify]` |\nПорядок провайдеров субтитров с авто-failover. |\n`memobase.stt.preset` |\nstr | `groq` |\nПресет STT: `groq` (whisper-large-v3-turbo) или `gemini` (Gemini всё равно подхватывается как фолбэк при сбое Groq). |\n`memobase.enrich.enabled` |\nbool | `false` |\nОбогащать ли фрагменты контекстной заметкой при загрузке (доп. LLM-вызов на фрагмент). |\n`memobase.enrich.model` |\nstr | (пусто) |\nМодель для обогащения. Пусто = активная модель хоста. |\n`memobase.owner_user_id` |\nstr | (пусто) |\nПлатформенный ID владельца (напр. Telegram user_id). Пусто = «ещё не заявлен»; `/memobase setup` заявляет его за первого, кто запустит мастер. |\n`memobase.guest_defaults.max_mb` |\nint | `200` |\nКвота гостя: хранилище, МБ. |\n`memobase.guest_defaults.max_chunks` |\nint | `4000` |\nКвота гостя: число фрагментов. |\n`memobase.guest_defaults.daily_upload_mb` |\nint | `50` |\nКвота гостя: дневная загрузка, МБ. |\n`memobase.guest_defaults.daily_budget_usd` |\nfloat | `0.50` |\nКвота гостя: дневной бюджет, USD. |\n`memobase.guest_defaults.daily_calls` |\nint | `200` |\nКвота гостя: вызовов в день. |\n`memobase.guest_rate_limit.calls_per_minute` |\nint | `6` |\nРейт-лимит гостевых `query` /`ask` , вызовов в минуту. |\n`memobase.backup.keep` |\nint | `7` |\nСколько ночных снимков хранить при ротации. |\n`memobase.backup.disk_alert_pct` |\nint | `80` |\nПорог заполнения диска для алерта, %. |\n`memobase.canonical_host` |\nbool | `true` |\nРазрешена ли этому инстансу запись в базу (актуально при нескольких hermes на общих коллекциях). |\n\nПороги достаточности (\n\n`rerank`\n\n≈ 0.15,`rrf-only`\n\n≈ 0.02) — это не ключи`config.yaml`\n\n, а дефолтные константы, пока коллекция не откалибрована командой`memobase_selfcheck`\n\n(после калибровки значения хранятся в БД на уровне коллекции). Константа RRF`k=60`\n\nзашита в коде и не настраивается.\n\nМодель видит 18 инструментов `memobase_*`\n\n; человек — те же операции через слэш-команды `/memobase …`\n\nи терминальные `hermes memobase …`\n\n.\n\n| Инструмент | Команда | Что делает |\n|---|---|---|\n`memobase_ingest` |\n`/memobase ingest <источник> <тип> [коллекция]` |\nЗагрузить источник. Слэш-команда принимает файлы и URL (`pdf` , `docx` , `html` , `url` , `md` , `txt` , `csv` ); `youtube` , `audio` , `video` , `obsidian` — просьбой в чате обычным текстом. |\n`memobase_ask` |\n`/memobase <вопрос>` |\nОтвет по коллекции с проверенными цитатами или честный отказ. |\n`memobase_query` |\n— | Сырые фрагменты для привилегированного вызывающего, обязательно обёрнутые как «это данные, не инструкции». |\n`memobase_list` |\n`/memobase list` |\nСписок коллекций: документы, фрагменты, видимость, состояние. |\n`memobase_list_documents` |\n`/memobase list-documents [коллекция]` |\nДокументы внутри коллекции: заголовок, источник, число живых фрагментов. |\n`memobase_status` |\n`/memobase status [коллекция]` |\nСтатус миграции, незавершённые задачи, расход за 30 дней по каждому провайдеру. |\n`memobase_delete` |\n`/memobase delete <коллекция>` |\nУдалить коллекцию целиком. |\n`memobase_selfcheck` |\n`/memobase selfcheck <коллекция>` |\nSmoke-тест качества: контрольные вопросы по случайным фрагментам + калибровка порогов. |\n`memobase_map` |\n`/memobase map [коллекция]` |\nMermaid-карта коллекции: документы, темы, Obsidian-связи, пересечения ключевых слов. |\n`memobase_create_for` |\n`/memobase create-for <user_id> <коллекция>` |\nСоздать гостю личную коллекцию (только владелец). |\n`memobase_share` |\n`/memobase share <коллекция> <user_id> [read|write]` |\nВыдать гостю доступ (только владелец). |\n`memobase_share_revoke` |\n`/memobase share-revoke <коллекция> <user_id>` |\nМгновенно отозвать доступ (только владелец). |\n`memobase_set_guest_quota` |\n`hermes memobase set-guest-quota …` |\nЗадать индивидуальные квоты гостю (только владелец). |\n`memobase_quarantine_list` |\n`/memobase quarantine [коллекция]` |\nОчередь гостевых фрагментов, задержанных сканером инъекций (только владелец). |\n`memobase_quarantine_review` |\n`hermes memobase quarantine-review …` |\nОдобрить/отклонить фрагмент из карантина (только владелец). |\n`memobase_youtube_list_channel` |\n`/memobase youtube-list <канал> [лимит]` |\nСвежие видео канала: id, дата, длительность, заголовок (только владелец). |\n`memobase_youtube_get_transcript` |\n`/memobase youtube-transcript <видео>` |\nТаймкод-транскрипт по субтитрам; диапазон `from_sec` /`to_sec` /`max_segments` ; opt-in платный STT-фолбэк `allow_audio_fallback` (только владелец). |\n`memobase_youtube_dl_audio` |\n`/memobase youtube-audio <видео>` |\nСкачать аудио и распознать через STT — для видео без субтитров (платно, только владелец). |\n\nДевять «только-владелец» инструментов (`create_for`\n\n, `share`\n\n, `share_revoke`\n\n, `set_guest_quota`\n\n, `quarantine_list`\n\n, `quarantine_review`\n\n, `youtube_list_channel`\n\n, `youtube_get_transcript`\n\n, `youtube_dl_audio`\n\n) проверяют личность **в коде** (`_require_privileged`\n\n, по серверной идентичности сессии), а не полагаются на послушание модели.\n\nТолько в терминале доступны ещё три операции: `hermes memobase reindex`\n\n(пере-эмбеддинг после смены модели), `hermes memobase backup-run`\n\n(консистентный снимок базы `VACUUM INTO`\n\nс ротацией — вешается на cron), `hermes memobase setup`\n\n(мастер настройки). Плюс `/memobase setup`\n\nи `/memobase help`\n\n.\n\n```\n/memobase ingest ./contract.pdf pdf\n/memobase Какой срок действия договора?\n```\n\nОтвет придёт с дословной цитатой, источником и страницей — например:\n\n```\nСрок действия договора — 12 месяцев с даты подписания.\n\nЦитата [1]: «Настоящий Договор вступает в силу с момента подписания\nи действует в течение 12 (двенадцати) месяцев.»\nИсточник: contract.pdf, с. 3\n```\n\nЕсли такого пункта в документе нет, MemoBase вернёт честный отказ вроде «в базе знаний этого пока нет», а не выдумает срок.\n\n```\n457 passed (2 из них — live-проверки Cloudflare/Cohere: идут, если ключи есть\nв ~/.hermes/.env, и сами честно пропускаются, если ключей нет, а не падают)\n```\n\nПрогон из нейтрального каталога (не изнутри папки плагина — иначе локальный `tools.py`\n\nзатеняет пакет ядра):\n\n```\n<venv>/python.exe -m pytest tests -q --basetemp=<tmp>/memobase\n```\n\nПолностью офлайн, без единого живого вызова — добавьте `-m \"not integration\"`\n\n.\n\n- Полностью локального (без внешних API) движка эмбеддинга пока нет: вопрос и фрагменты уходят на эмбеддинг/переранжирование в облако. Заготовка есть — можно указать свой OpenAI-совместимый сервер (\n`memobase.embedder.provider: openai-compat`\n\n+`base_url`\n\n). Мастер настройки уже умеет записывать выбор «локально», но движка под него ещё нет. - Нет истинного возобновления посреди пакета эмбеддинга — задача либо доходит до конца, либо перезапускается с последней завершённой стадии (сами загруженные фрагменты не теряются благодаря дедупу по SHA-256).\n- Документы\n`.txt`\n\nне несут структуры разделов — их фрагменты идут с`section=None`\n\n(страница/раздел у цитаты не показывается). - Оценка стоимости внешних вызовов — best-effort по публичному прайсингу провайдеров, не гарантированная цена биллинга.\n- Таймкоды у запасного пути расшифровки (Gemini) — оценка самой модели, на длинном аудио дрейфуют; такие расшифровки помечаются пониженным доверием. Настоящие декодерные таймкоды даёт основной путь (Groq Whisper).\n- Пакетные загрузки (YouTube-канал, Obsidian vault) пока не привязывают каждый документ внутри пакета к конкретному гостю — гейт квот срабатывает один раз, перед стартом всего пакета.\n- Восстановление из бэкапа — вручную (снимок — готовый файл базы, см. GUIDE), команды «восстановить одним действием» пока нет.\n\nПошаговая инструкция по установке, первой загрузке, вопросам, коллекциям, YouTube, расшифровке аудио, Obsidian, гостевым коллекциям, мастеру настройки, бэкапам, карте базы и диагностике — в [ GUIDE.md](/mxskorohood-cmd/memobase/blob/main/GUIDE.md). Полный дизайн-документ и обоснование архитектурных решений — в\n\n[.](/mxskorohood-cmd/memobase/blob/main/DESIGN_v1.md)\n\n`DESIGN_v1.md`\n\nСделано **Maxim Vasko** — [skorehood.com](https://skorehood.com) · [YouTube @MaximSkorohood](https://www.youtube.com/@MaximSkorohood) · [Telegram](https://t.me/+XrhmiKgCQdY5MjFi)\n\nMIT — copyright © 2026 Maxim Vasko. Полный текст — в [ LICENSE](/mxskorohood-cmd/memobase/blob/main/LICENSE).", "url": "https://wpnews.pro/news/memohood-and-memobase-local-memory-and-knowledge-base-for-ai-agents", "canonical_source": "https://github.com/mxskorohood-cmd/memobase", "published_at": "2026-07-23 06:31:03+00:00", "updated_at": "2026-07-23 06:52:31.416350+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "natural-language-processing", "developer-tools"], "entities": ["MemoHood", "MemoBase", "hermes-agent", "Obsidian", "YouTube", "Cohere", "Cloudflare", "SQLite"], "alternates": {"html": "https://wpnews.pro/news/memohood-and-memobase-local-memory-and-knowledge-base-for-ai-agents", "markdown": "https://wpnews.pro/news/memohood-and-memobase-local-memory-and-knowledge-base-for-ai-agents.md", "text": "https://wpnews.pro/news/memohood-and-memobase-local-memory-and-knowledge-base-for-ai-agents.txt", "jsonld": "https://wpnews.pro/news/memohood-and-memobase-local-memory-and-knowledge-base-for-ai-agents.jsonld"}}