- 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
6 KiB
Миграция Гермес → 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
OUT/identity.md— персона+память; в стор целевого инстанса пишетсяPolicyChangedсpolicy_hermes_marker(sha-хеш текста) — идемпотентно: повторный прогон со тем же текстом —skip-duplicate.OUT/history/*.md— последние ≤40 сессий с реальным диалогом (≥2 сообщений, active=1; крон-сессии только в остаток после живых чатов), кап 40 сообщений/сессия, 150 всего; секреты (sk-…,agt_…,<digits>:<токен>,ghp_…) замаскированы.- RAG-индексация:
.md-файлы пакета → целевая база (вендор дедупит по sha). 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.