Подробная инструкция: от нуля до работающей связки

2.1 Что мы строим

Архитектура, которую мы настраиваем:

┌──────────────────────────┐
│  Hermes Agent            │
│  (reasoning engine)      │
│  ~/.hermes/config.yaml   │
└──────────┬───────────────┘
           │ MCP (HTTP)
           ▼
┌──────────────────────────┐
│  Obsidian Hybrid Search  │
│  (MCP server :3939)      │
│  (retrieval layer)       │
└──────────┬───────────────┘
           │ файловая система
           ▼
┌──────────────────────────┐
│  LLM-WIKI                │
│  (Obsidian vault)        │
│  markdown-заметки        │
└──────────────────────────┘

Hermes не читает файлы напрямую — он только отправляет поисковые запросы через MCP и получает релевантные чанки. Это и есть правильное разделение на reasoning и retrieval, которое мы обсуждали.

2.2 Шаг 0: Исходное состояние (что у тебя уже есть)

Согласно твоим условиям, у тебя есть:

  • Obsidian vault (LLM-WIKI), который уже создан и поддерживается агентом. Например, путь: ~/Documents/LLM-WIKI (подставь свой реальный путь).
  • Hermes Agent — базовая установка. Конфигурационный файл лежит в ~/.hermes/config.yaml. Команда hermes chat запускает агента.
  • Node.js и npm — необходимы для установки CLI-инструментов. Проверь: node --version и npm --version.

2.3 Шаг 1: Установка Obsidian Hybrid Search CLI

Это отдельный CLI-инструмент, который работает как сервер. Плагин Obsidian (второй репозиторий) нам не нужен для связки с Hermes — он только для интерактивного поиска внутри самого Obsidian.

Установка:

# Глобальная установка CLI
npm install -g obsidian-hybrid-search
 
# Проверка установки
obsidian-hybrid-search --version

CLI использует Xenova/multilingual-e5-small для эмбеддингов (~117 MB), модель загружается локально при первом запуске. Никаких внешних API не требуется — вся индексация и поиск происходят на твоей машине.

2.4 Шаг 2: Первый запуск и индексация

Перед запуском сервера нужно явно указать путь к вольту через переменную окружения:

# Установка пути к вольту
export OBSIDIAN_VAULT_PATH="$HOME/Documents/LLM-WIKI"

Добавь эту строку в ~/.bashrc или ~/.zshrc, чтобы переменная сохранялась между сессиями.

Теперь первичная индексация:

# Запуск сервера (при первом запуске автоматически индексирует vault)
obsidian-hybrid-search serve

При первом запуске CLI создаст SQLite-базу .obsidian-hybrid-search.db в корне вольта и начнёт индексацию:

  • Разбивает заметки на чанки (фрагменты)
  • Считает эмбеддинги для каждого чанка
  • Строит BM25-индекс (полнотекстовый поиск)
  • Индексирует wikilinks, теги и frontmatter-поля

Индексация может занять несколько минут на большом вольте. Прогресс отображается в терминале. После завершения сервер остаётся висеть и слушает порт 3939. Ты увидишь сообщение вроде:

MCP server listening on http://127.0.0.1:3939/mcp

2.5 Шаг 3: Проверка работы сервера

В отдельном терминале проверь, что сервер отвечает:

# Проверка через curl (MCP использует JSON-RPC)
curl -X POST http://127.0.0.1:3939/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Если всё работает, ты получишь JSON-ответ со списком доступных инструментов. Среди них будет основной инструмент поиска, а также semantic, fulltext, title и related-запросы.

Чтобы сервер запускался автоматически при старте системы, можно оформить его как systemd-сервис (Linux):

# ~/.config/systemd/user/obsidian-hybrid-search.service
[Unit]
Description=Obsidian Hybrid Search MCP Server
 
[Service]
ExecStart=/usr/bin/obsidian-hybrid-search serve
Environment=OBSIDIAN_VAULT_PATH=%h/Documents/LLM-WIKI
Restart=on-failure
 
[Install]
WantedBy=default.target

Затем:

systemctl --user enable obsidian-hybrid-search.service
systemctl --user start obsidian-hybrid-search.service

2.6 Шаг 4: Настройка MCP-подключения в Hermes Agent

Вот здесь ChatGPT дал самый размытый ответ: “куда вставлять JSON?“. Отвечаю точно.

4.1 Где находится конфигурация Hermes

Конфигурационный файл Hermes Agent: ~/.hermes/config.yaml.

4.2 Что именно добавить в config.yaml

Для HTTP-MCP сервера используется секция mcp_servers. Добавь следующий блок:

# ~/.hermes/config.yaml
mcp_servers:
  obsidian-hybrid-search:
    url: "http://127.0.0.1:3939/mcp"
    connect_timeout: 30
    timeout: 60
    enabled: true
    supports_parallel_tool_calls: true

Разбор полей:

  • url — HTTP-эндпоинт MCP сервера. Именно тот, который ты указывал в своём примере: http://127.0.0.1:3939/mcp.
  • connect_timeout — таймаут на установку соединения (секунды). Для локального сервера 30 секунд более чем достаточно.
  • timeout — таймаут на выполнение инструмента (поиск может занять несколько секунд на большом вольте).
  • enabled: true — явно указывает, что сервер активен.
  • supports_parallel_tool_calls: true — разрешает параллельные вызовы, ускоряет работу при множественных запросах.

4.3 Полный пример конфигурации

Вот как может выглядеть твой ~/.hermes/config.yaml целиком (с базовыми настройками):

# ~/.hermes/config.yaml
 
# MCP-серверы
mcp_servers:
  obsidian-hybrid-search:
    url: "http://127.0.0.1:3939/mcp"
    connect_timeout: 30
    timeout: 60
    enabled: true
    supports_parallel_tool_calls: true

4.4 Как убедиться, что MCP загружен

После редактирования конфигурации перезапусти Hermes и начни новую сессию:

hermes chat

Сразу после старта спроси агента:

Какие MCP-инструменты тебе доступны прямо сейчас?

Hermes должен ответить, что видит инструменты от obsidian-hybrid-search. Если сервер не запущен — Hermes напишет, что MCP-сервер недоступен, но продолжит работать без него.

2.7 Шаг 5: Использование в реальной работе

Теперь Hermes может искать по вольту через MCP. Пример рабочего цикла:

Ты спрашиваешь:

Что я думал про agency и долгосрочное планирование?

Hermes делает (автоматически):

  1. Определяет, что нужен retrieval (контекст по теме “agency”)
  2. Вызывает MCP-инструмент поиска с запросом: "agency long-term planning autonomy"
  3. Получает топ-10 релевантных чанков из LLM-WIKI
  4. Включает эти чанки в свой контекст
  5. Формирует ответ на основе найденных заметок

Ты увидишь в интерфейсе Hermes вызов инструмента и источник (имя заметки, фрагмент текста).

5.1 Что ещё умеет поисковый сервер

Вот полный список поисковых возможностей, которые Hermes может использовать:

РежимЧто ищетПример использования
hybridBM25 + семантический поиск (по умолчанию)“концепция leverage в инвестициях”
semanticТолько по смыслу (эмбеддинги)“идеи похожие на вот эту заметку”
fulltextТолько по ключевым словам (BM25)“точное упоминание термина X”
titleНечёткий поиск по заголовкам”заметка с названием про agency”
--relatedПохожие заметки (wikilink-граф)“с чем связано это понятие”

Hermes сам выбирает подходящий режим в зависимости от запроса. Сервер использует Reciprocal Rank Fusion (RRF) для объединения результатов из разных методов поиска.

5.2 Фильтрация и уточнение

При необходимости Hermes может уточнять запросы:

  • По тегу: "#project" — только заметки с этим тегом
  • По папке: "folder:memory" — только в этой директории
  • По frontmatter-полям: "key:value" — заметки с определённым свойством

2.8 Шаг 6: Cron-job для поддержания индекса

Чтобы петля обратной связи работала непрерывно, нужен регулярный перезапуск индексации. Ты упомянул, что Hermes уже запускает hybrid search maintenance через cron. Вот как это оформить:

# Добавить в crontab (crontab -e)
# Ежедневная реиндексация в 3 часа ночи
0 3 * * * /usr/bin/obsidian-hybrid-search index --vault $HOME/Documents/LLM-WIKI

Или если индекс должен обновляться чаще:

# Каждые 6 часов
0 */6 * * * /usr/bin/obsidian-hybrid-search index --vault $HOME/Documents/LLM-WIKI

2.9 Шаг 7: Плагин Obsidian (опционально)

Хотя для связки с Hermes плагин не нужен, он даёт удобный поиск прямо в Obsidian. Установка:

  1. Установи BRAT (плагин для бета-версий)
  2. В настройках BRAT: Add Beta Plugin → вставь URL: https://github.com/flowing-abyss/obsidian-hybrid-search-plugin
  3. Включи плагин Hybrid Search в списке плагинов Obsidian

Плагин использует тот же CLI, но в режиме stdio — он запускает процесс локально и общается с ним через stdin/stdout.

3. Итоговая проверка: чек-лист

Пройди по каждому пункту, чтобы убедиться, что всё работает:

  • obsidian-hybrid-search установлен глобально (which obsidian-hybrid-search)
  • OBSIDIAN_VAULT_PATH установлен и указывает на LLM-WIKI
  • Сервер запущен и отвечает на curl http://127.0.0.1:3939/mcp
  • В ~/.hermes/config.yaml добавлена секция mcp_servers с obsidian-hybrid-search
  • Hermes перезапущен и видит MCP-инструменты (hermes chat → спросить про инструменты)
  • Cron-job для реиндексации настроен (опционально, для автоматического обновления)

4. Что дальше: углубление архитектуры

Когда базовая связка заработает, можно развивать систему:

  • Query rewriting в Hermes: написать для Hermes системный промпт, который заставляет его переформулировать пользовательские вопросы в оптимальные поисковые запросы с синонимами и контекстом.
  • Cross-encoder reranking: CLI поддерживает флаг @rerank, который включает двухэтапное ранжирование — значительно улучшает точность на сложных запросах.
  • Memory schemas: структурировать заметки LLM-WIKI по типам (facts, preferences, reasoning chains, plans) для улучшения retrieval.

Система, которую ты строишь — это полноценная personal cognitive infrastructure с разделением на retrieval, reasoning и feedback loop. Связка Obsidian → Hybrid Search → Hermes даёт именно то, что мы обсуждали: единый семантический слой памяти для всех агентов и workflows.


Reference:

  • DeepSeek-v4-Pro