simbiot-harness/docs/migration-hermes.md
simbiot b780c9ba9e feat(migration): полный ингест истории Гермеса в стандартную миграцию (--apply, шаг 6.5)
- tools/hermes_history_ingest.py: параметры --hermes-db/--rag-db/--prefix/--cutoff/--sessions-cards; rag.DB перекрывается атрибутом (вендор фиксирует при импорте); cutoff='' = вся история
- scripts/migrate_hermes.py: --history-full по умолчанию ON в --apply (rag_index → ingest), --no-history-full / --history-agent <имя> для префикса
- docs/migration-hermes.md: раздел 6.5
- e2e: полный apply на смоук-базе — +350 чанков / 75 файлов за 24с, history_full.ok=true
2026-10-04 13:12:54 +00:00

6 KiB
Raw Permalink Blame History

Миграция Гермес → Simbiot

Скрипт: scripts/migrate_hermes.py (t-261001124130). Переносит память, историю диалогов и настройки агента с харнеса Гермес (Nous Research) на Simbiot, чтобы после установки Simbiot агент отвечал с учётом прежних знаний.

Что читает из каталога Гермеса (~/.hermes или ~hermes_user/.hermes)

Источник Данные Куда в Simbiot
memories/MEMORY.md §-факты памяти OUT/memory/MEMORY.md, RAG, policy.identity
memories/USER.md профиль пользователя OUT/memory/USER.md, RAG, policy.identity
SOUL.md персона агента OUT/identity.md, policy.identity
state.db (sessions/messages, active) история диалогов OUT/history/*.md + индекс, RAG
config.yaml настройки OUT/config-hermes.yaml (секреты → <REDACTED>), маппинг model → SIMBIOT_MODEL в отчёте
cron/jobs.json фоновые джобы OUT/cron-map.json (эквиваленты: задачи на доске / systemd timer)

Запуск

# dry-run (по умолчанию): только карта источников и превью, ничего не пишет
python3 scripts/migrate_hermes.py --hermes /home/hermes/.hermes

# apply + запись персона/памяти в стор ЭТОГО инстанса Simbiot + RAG-индексация:
python3 scripts/migrate_hermes.py --hermes /home/hermes/.hermes --apply \
    --harness-dir /root/simbiot-harness --rag-db /root/rag/rag.db

Опции: --out DIR (пакет, дефолт hermes-migration/ в репо), --rag-py/--rag-script (вендор RAG: /root/rag-venv/bin/python + /root/rag/rag.py), --rag-db PATH (если не задан — RAG-шаг пропускается).

Что происходит при --apply

  1. OUT/identity.md — персона+память; в стор целевого инстанса пишется PolicyChanged с policy_hermes_marker (sha-хеш текста) — идемпотентно: повторный прогон со тем же текстом — skip-duplicate.
  2. OUT/history/*.md — последние ≤40 сессий с реальным диалогом (≥2 сообщений, active=1; крон-сессии только в остаток после живых чатов), кап 40 сообщений/сессия, 150 всего; секреты (sk-…, agt_…, <digits>:<токен>, ghp_…) замаскированы.
  3. RAG-индексация: .md-файлы пакета → целевая база (вендор дедупит по sha).
  4. OUT/report.json — полный отчёт: counts, mapping, events, rag, errors.

6.5) Полный ингест истории (с 04.10.2026, голосовое Alex m-261004)

--apply по умолчанию запускает tools/hermes_history_ingest.py поверх всех сессий state.db Гермеса: помесячные роллапы + карточки человеческих диалогов → та же RAG-база (префикс hermes-history/…). Флаги: --no-history-full (отключить), --history-agent <имя> (префикс hermes-history/<имя> — для нескольких агентов в одной базе). Ингест идемпотентен (DELETE+INSERT по префиксу), запуск — --rag-py вендора (fastembed). Проверено e2e: +350 чанков / 75 файлов за 24с на 70 сессиях.

.env целевого инстанса не трогается скриптом: ROUTER_KEY/SIMBIOT_AGENT_NAME и портал-канал (/etc/coop-reporter.env: PORTAL_URL + AGENT_TOKEN agt_…) настраиваются при установке (scripts/install.sh, визард).

Реальный кейс: агент Рита (22.10.2026, 22:19 UTC)

Хост hermes-rita (2.28.125.152), источник /home/hermes/.hermes (135МБ state.db, 936 сессий, 11276 сообщений), портальная БД: agents.id=42 переведён harness_type='simbiot', portal_channel=1, agt-токен репортера выпущен, router-ключ Риты из router_keys записан в её .env.

Результат: 31 файл проиндексирован в RAG (/root/rag/rag.db, 0 ошибок), PolicyChanged applied (marker policy-hermes-6c9beed932, identity 5910 символов). E2E-проверка: сообщение в канал портала → мин-тик Риты забрал, ответ содержит факты ИЗ ПЕРЕНЕСЁННОЙ памяти (видеостек OpenMontage, Edge-TTS ru-RU-DmitryNeural) — агент отвечает с учётом истории.

Ограничения / follow-up

  • 10 cron-джобов Гермеса перенесены как карта (cron-map.json), не как живые таймеры: включать селективно (watchdog-пинги и протухшие пуллы не переносить) — задача на доске (follow-up t-… по кронам Риты).
  • Полная история (все 936 сессий остаётся в state.db Гермеса) не копируется — только активное диалоговое ядро; исходник сохраняется нетронутым.
  • TG-бот нового агента подключается кнопкой на портале (/set-tg-bot) — флоу тот же, что для остальных агентов Simbiot. 03.10.2026 — дополнение: SIMBIOT_TG_TOKEN Риты перенесён из её Hermes-.env (bot @rita_a_bot), её simbiot-harness active.