sidebar_position: 7 title: "Sessions" description: "Session persistence, resume, search, management, and per-platform session tracking" lang: ru


сеансов

Агент Hermes автоматически сохраняет каждый разговор как сеанс. Сеансы позволяют возобновлять разговоры, осуществлять поиск между сеансами и полностью управлять историей разговоров.

Как работают сеансы

Каждый разговор — будь то через CLI, Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Teams или любую другую платформу обмена сообщениями — сохраняется как сеанс с полной историей сообщений. Сеансы отслеживаются в двух взаимодополняющих системах:

  1. База данных SQLite (~/.hermes/state.db) — структурированные метаданные сеанса с полнотекстовым поиском FTS5.
  2. Расшифровки JSONL (~/.hermes/sessions/) — необработанные расшифровки разговоров, включая вызовы инструментов (шлюз).

В базе данных SQLite хранятся: - Идентификатор сеанса, исходная платформа, идентификатор пользователя. - Название сеанса (уникальное, удобочитаемое имя) - Название модели и конфигурация - Снимок системного приглашения - Полная история сообщений (роль, контент, вызовы инструментов, результаты инструментов) - Подсчет токенов (ввод/вывод) - Временные метки (начало_в, окончание_в) - Идентификатор родительского сеанса (для разделения сеанса по принципу сжатия)

Источники сеансов

Каждый сеанс помечен своей исходной платформой:

Источник Описание
cli Интерактивный интерфейс командной строки (hermes или hermes chat)
telegram Мессенджер Телеграм
discord Сервер Discord/DM
slack Слабое рабочее пространство
whatsapp Мессенджер WhatsApp
signal Сигнальный мессенджер
matrix Матричные комнаты и личные сообщения
mattermost Самые важные каналы
email Электронная почта (IMAP/SMTP)
sms СМС через Twilio
dingtalk Мессенджер DingTalk
feishu Фейшу/Жаворонок-мессенджер
wecom WeCom (работа в WeChat)
weixin Weixin (личный WeChat)
bluebubbles Apple iMessage через сервер BlueBubbles macOS
qqbot QQ Bot (Tencent QQ) через официальный API v2
homeassistant Разговор с домашним помощником
webhook Входящие вебхуки
api-server API-запросы к серверу
acp Интеграция редактора ACP
cron Запланированные задания cron
batch Пакетная обработка выполняется

Возобновление сеанса CLI

Возобновите предыдущие разговоры из CLI, используя --continue или --resume:

Продолжить последний сеанс

# Resume the most recent CLI session
hermes --continue
hermes -c

# Or with the chat subcommand
hermes chat --continue
hermes chat -c

При этом выполняется поиск самого последнего сеанса cli в базе данных SQLite и загружается его полная история разговоров.

Резюме по имени

Если вы дали сеансу название (см. Именование сеанса ниже), вы можете возобновить его по имени:

# Resume a named session
hermes -c "my project"

# If there are lineage variants (my project, my project #2, my project #3),
# this automatically resumes the most recent one
hermes -c "my project"   # → resumes "my project #3"

Возобновить конкретный сеанс

# Resume a specific session by ID
hermes --resume 20250305_091523_a1b2c3d4
hermes -r 20250305_091523_a1b2c3d4

# Resume by title
hermes --resume "refactoring auth"

# Or with the chat subcommand
hermes chat --resume 20250305_091523_a1b2c3d4

Идентификаторы сеансов отображаются при выходе из сеанса CLI, их можно найти с помощью hermes sessions list.

Резюме разговора при возобновлении

Когда вы возобновляете сеанс, Hermes отображает компактное изложение предыдущего разговора на стилизованной панели перед приглашением ввода:

Стилизованный предварительный просмотр панели резюме предыдущего разговора, отображаемой при возобновлении сеанса Hermes.

В режиме возобновления перед возвратом к интерактивной подсказке отображается компактная панель с краткими сведениями о последних обращениях пользователя и помощника.

Резюме: - Показывает сообщения пользователя (золотой ) и ответы помощника (зеленый ) - Обрезает длинные сообщения (300 символов для пользователя, 200 символов/3 строки для помощника). - Сворачивает вызовы инструментов до количества с именами инструментов (например, [3 tool calls: terminal, web_search]) - Скрывает системные сообщения, результаты работы инструментов и внутренние рассуждения. - Капс при последних 10 обменах с индикатором "...N предыдущих сообщений..." – Использует тусклый стиль, чтобы отличить его от активного разговора.

Чтобы отключить резюме и сохранить минимальное однострочное поведение, установите в ~/.hermes/config.yaml:

display:
  resume_display: minimal   # default: full

:::совет Идентификаторы сеансов имеют формат YYYYMMDD_HHMMSS_<hex> — сеансы CLI/TUI используют 6-значный шестнадцатеричный суффикс (например, 20250305_091523_a1b2c3), сеансы шлюза используют 8-значный суффикс (например, 20250305_091523_a1b2c3d4). Вы можете возобновить работу по идентификатору (полный или уникальный префикс) или по должности — оба работают с -c и -r.

Именование сеанса

Дайте сеансам удобочитаемые названия, чтобы вы могли легко их найти и возобновить.

Автоматически созданные заголовки

Hermes автоматически генерирует краткий описательный заголовок (3–7 слов) для каждого сеанса после первого обмена сообщениями. Это выполняется в фоновом потоке с использованием быстрой вспомогательной модели, поэтому задержка не увеличивается. Вы увидите автоматически сгенерированные заголовки при просмотре сеансов с hermes sessions list или hermes sessions browse.

Автоматическое присвоение титров срабатывает только один раз за сеанс и пропускается, если вы уже установили заголовок вручную.

Установка заголовка вручную

Используйте косую черту /title внутри любого сеанса чата (CLI или шлюза):

/title my research project

Название применяется немедленно. Если сеанс еще не создан в базе данных (например, вы запустили /title перед отправкой первого сообщения), он ставится в очередь и применяется после запуска сеанса.

Вы также можете переименовать существующие сеансы из командной строки:

hermes sessions rename 20250305_091523_a1b2c3d4 "refactoring auth module"

Правила титулов

Автоматическое определение происхождения при сжатии

Когда контекст сеанса сжимается (вручную через /compress или автоматически), Hermes создает новый сеанс продолжения. Если у оригинала был заголовок, новый сеанс автоматически получает пронумерованный заголовок:

"my project" → "my project #2" → "my project #3"

Когда вы возобновляете сеанс по имени (hermes -c "my project"), он автоматически выбирает самый последний сеанс в линии.

/title на платформах обмена сообщениями

Команда /title работает на всех шлюзовых платформах (Telegram, Discord, Slack, WhatsApp):

Команды управления сеансом

Hermes предоставляет полный набор команд управления сеансом через hermes sessions:

Получение списка сеансов

# List recent sessions (default: last 20)
hermes sessions list

# Filter by platform
hermes sessions list --source telegram

# Show more sessions
hermes sessions list --limit 50

Если сеансы имеют заголовки, в выходных данных отображаются заголовки, предварительный просмотр и относительные метки времени:

Title                  Preview                                  Last Active   ID
────────────────────────────────────────────────────────────────────────────────────────────────
refactoring auth       Help me refactor the auth module please   2h ago        20250305_091523_a
my project #3          Can you check the test failures?          yesterday     20250304_143022_e
—                      What's the weather in Las Vegas?          3d ago        20250303_101500_f

Если ни у одного сеанса нет заголовков, используется более простой формат:

Preview                                            Last Active   Src    ID
──────────────────────────────────────────────────────────────────────────────────────
Help me refactor the auth module please             2h ago        cli    20250305_091523_a
What's the weather in Las Vegas?                    3d ago        tele   20250303_101500_f

Экспорт сеансов

# Export all sessions to a JSONL file
hermes sessions export backup.jsonl

# Export sessions from a specific platform
hermes sessions export telegram-history.jsonl --source telegram

# Export a single session
hermes sessions export session.jsonl --session-id 20250305_091523_a1b2c3d4

Экспортированные файлы содержат по одному объекту JSON в строке с полными метаданными сеанса и всеми сообщениями.

Удалить сеанс

# Delete a specific session (with confirmation)
hermes sessions delete 20250305_091523_a1b2c3d4

# Delete without confirmation
hermes sessions delete 20250305_091523_a1b2c3d4 --yes

Переименование сеанса

# Set or change a session's title
hermes sessions rename 20250305_091523_a1b2c3d4 "debugging auth flow"

# Multi-word titles don't need quotes in the CLI
hermes sessions rename 20250305_091523_a1b2c3d4 debugging auth flow

Если заголовок уже используется другим сеансом, отображается ошибка.

Удаление старых сессий

# Delete ended sessions older than 90 days (default)
hermes sessions prune

# Custom age threshold
hermes sessions prune --older-than 30

# Only prune sessions from a specific platform
hermes sessions prune --source telegram --older-than 60

# Skip confirmation
hermes sessions prune --older-than 30 --yes

:::информация При сокращении удаляются только завершенные сеансы (сеансы, которые были явно завершены или были автоматически сброшены). Активные сеансы никогда не удаляются.

Статистика сеансов

hermes sessions stats

Выход:

Total sessions: 142
Total messages: 3847
  cli: 89 sessions
  telegram: 38 sessions
  discord: 15 sessions
Database size: 12.4 MB

Для более глубокого анализа — использования токенов, оценок затрат, разбивки инструментов и моделей активности — используйте hermes insights.

Инструмент поиска сеансов

Агент имеет встроенный инструмент session_search, который выполняет полнотекстовый поиск по всем прошлым диалогам с использованием механизма SQLite FTS5.

Как это работает

  1. FTS5 ищет совпадающие сообщения, ранжированные по релевантности.
  2. Группирует результаты по сеансам, берет N лучших уникальных сеансов (по умолчанию 3).
  3. Загружает разговор каждого сеанса, усекает до ~ 100 тыс. символов, центрированных по совпадениям.
  4. Отправляет в модель быстрого обобщения для целенаправленных сводок.
  5. Возвращает сводные данные по сеансам с метаданными и окружающим контекстом.

Синтаксис запроса FTS5

Поиск поддерживает стандартный синтаксис запросов FTS5:

Когда он используется

Агенту будет предложено автоматически использовать поиск сеансов:

"Когда пользователь ссылается на что-то из прошлого разговора или вы подозреваете, что соответствующий предшествующий контекст существует, используйте session_search, чтобы вспомнить это, прежде чем просить его повториться."

Отслеживание сеансов на каждой платформе

Сеансы шлюза

На платформах обмена сообщениями сеансы фиксируются детерминированным ключом сеанса, созданным на основе источника сообщения:

Тип чата Формат ключа по умолчанию Поведение
Телеграмма в Директ agent:main:telegram:dm:<chat_id> Одна сессия на чат в DM
Дискорд ДМ agent:main:discord:dm:<chat_id> Одна сессия на чат в DM
WhatsApp в Директ agent:main:whatsapp:dm:<canonical_identifier> Один сеанс на каждого пользователя DM (при наличии сопоставления псевдонимы LID/телефона сворачиваются до одного идентификатора)
Групповой чат agent:main:<platform>:group:<chat_id>:<user_id> Для каждого пользователя внутри группы, когда платформа предоставляет идентификатор пользователя
Групповая тема/тема agent:main:<platform>:group:<chat_id>:<thread_id> Общий сеанс для всех участников потока (по умолчанию). Для каждого пользователя с thread_sessions_per_user: true.
Канал agent:main:<platform>:channel:<chat_id>:<user_id> Для каждого пользователя внутри канала, когда платформа предоставляет идентификатор пользователя

Если Hermes не может получить идентификатор участника общего чата, он возвращается к одному общему сеансу для этой комнаты.

Общие и изолированные групповые сеансы

По умолчанию Hermes использует group_sessions_per_user: true в config.yaml. Это означает:

Если вместо этого вам нужен один общий «комнатный мозг», установите:

group_sessions_per_user: false

Это возвращает группы/каналы к одному общему сеансу в каждой комнате, что сохраняет общий контекст разговора, но также распределяет затраты токенов, состояние прерывания и рост контекста.

Политики сброса сеанса

Сеансы шлюза автоматически сбрасываются на основе настраиваемых политик:

Прежде чем сеанс будет автоматически сброшен, агенту предоставляется возможность сохранить любые важные воспоминания или навыки из разговора.

Сеансы с активными фоновыми процессами никогда не сбрасываются автоматически, независимо от политики.

Места хранения

Что Путь Описание
База данных SQLite ~/.hermes/state.db Все метаданные сеанса + сообщения с FTS5
Транскрипты шлюза ~/.hermes/sessions/ Транскрипты JSONL для каждого сеанса + индекс session.json
Индекс шлюза ~/.hermes/sessions/sessions.json Сопоставляет ключи сеанса с идентификаторами активных сеансов

База данных SQLite использует режим WAL для одновременного чтения и одну запись, что хорошо соответствует многоплатформенной архитектуре шлюза.

Схема базы данных

Ключевые таблицы в state.db:

Срок действия сеанса и очистка

Автоматическая очистка

По умолчанию установлено выкл. — история сеансов полезна для отзыва session_search, и ее незаметное удаление может удивить пользователей. Включите в ~/.hermes/config.yaml:

sessions:
  auto_prune: true          # opt in — default is false
  retention_days: 90        # keep ended sessions this many days
  vacuum_after_prune: true  # reclaim disk space after a pruning sweep
  min_interval_hours: 24    # don't re-run the sweep more often than this

Активные сеансы никогда не удаляются автоматически, независимо от возраста.

Ручная очистка

# Prune sessions older than 90 days
hermes sessions prune

# Delete a specific session
hermes sessions delete <session_id>

# Export before pruning (backup)
hermes sessions export backup.jsonl
hermes sessions prune --older-than 30 --yes

:::совет База данных растет медленно (обычно: 10–15 МБ для сотен сеансов), а история сеансов позволяет session_search вспоминать прошлые разговоры, поэтому автоматическое сокращение поставок отключено. Включите его, если вы выполняете тяжелую рабочую нагрузку шлюза/cron, где state.db существенно влияет на производительность (наблюдаемый режим сбоя: 384 МБ state.db с ~ 1000 сеансами, замедляющими вставки FTS5 и листинг /resume). Используйте hermes sessions prune для однократной очистки без включения автоматической очистки.