Сессии

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

Как работают сессии

Все сессии отслеживаются двумя взаимодополняющими системами:

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

В SQLite хранятся: идентификатор сессии, платформа, ID пользователя, название сессии, модель и конфигурация, системный промпт, полная история сообщений, количество токенов и метки времени.

Типы сессий

Interactive

Интерактивные сессии создаются при общении через CLI (hermes или hermes chat) или мессенджеры. Каждое сообщение пользователя и ответ агента фиксируются в реальном времени. Поддерживаются команды --continue и --resume для возобновления предыдущих диалогов.

Cron

Сессии типа cron запускаются по расписанию. Используются для автоматических задач — мониторинга, генерации отчётов, периодических проверок. Запускаются без участия пользователя и работают автономно.

Background

Фоновые сессии (batch) предназначены для пакетной обработки. Агент выполняет задачи в фоновом режиме, не блокируя интерфейс. Подходит для длительных операций — обработки файлов, массовых запросов, генерации контента.

Платформенные сессии

Каждая сессия помечается источником платформы. Поддерживаемые источники:

  • cli — интерактивный CLI
  • telegram, discord, slack, whatsapp, signal, matrix — мессенджеры
  • email, sms — электронная почта и SMS
  • webhook, api-server — программные интерфейсы
  • cron, batch — автоматические запуски

Сессии можно передавать между платформами с помощью команды /handoff. Например, начав разговор в CLI, можно перенести его в Telegram — история, контекст и вызовы инструментов сохраняются полностью.

Названия сессий

Hermes автоматически генерирует краткие названия (3–7 слов) после первого обмена сообщениями. Генерация происходит в фоновом потоке и не добавляет задержки. Установить название вручную можно командой /title в любом чате или через CLI: hermes sessions rename <id> "Название".

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

Управление сессиями (CLI)

Hermes предоставляет полный набор команд для управления хранилищем сессий:

Просмотр

hermes sessions list        # список всех сессий с названиями и превью
hermes sessions browse      # интерактивный просмотр с выбором

Экспорт

hermes sessions export output.jsonl   # экспорт всех сессий в JSONL-файл
hermes sessions export backup.jsonl   # можно использовать для бэкапов и миграции

Экспорт создаёт JSONL-файл, где каждая строка — одна сессия с полной историей сообщений. Формат удобен для анализа, бэкапа и переноса между инстансами.

Статистика

hermes sessions stats       # статистика хранилища сессий

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

Очистка

hermes sessions prune --older-than 30   # удалить сессии старше 30 дней
hermes sessions prune --older-than 7    # удалить сессии старше 7 дней

Команда prune удаляет устаревшие сессии из обоих хранилищ — SQLite-базы и JSONL-транскриптов. Помогает контролировать размер дискового пространства. Без флага --older-than будет запрошено подтверждение.

Переименование и удаление

hermes sessions rename <id> "Новое название"   # переименовать сессию
hermes sessions delete <id>                     # удалить конкретную сессию

Поиск по сессиям

Поиск выполняется через FTS5-индекс в SQLite-базе. В интерактивной сессии используется инструмент session_search с четырьмя режимами:

  • Discovery — поиск по ключевым словам с возвратом релевантных сессий
  • Scroll — навигация внутри конкретной сессии по окну сообщений
  • Read — чтение полного содержимого сессии по ID
  • Browse — хронологический просмотр последних сессий

Синтаксис FTS5 поддерживает: AND (по умолчанию), OR, точные фразы в кавычках, NOT и wildcard-суффиксы.

Сжатие контекста (Compression)

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

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

Когда объём токенов приближается к лимиту, Hermes автоматически сжимает раннюю часть диалога, сохраняя ключевую информацию. Настройки в config.yaml:

compression:
  enabled: true           # включить автоматическое сжатие
  threshold: 0.50         # сжатие при 50% заполнения контекста
  target_ratio: 0.20      # целевой размер после сжатия (20% от контекста)

При сжатии создаётся продолжение сессии с нумерованным названием (например, «Мой чат (2)»), чтобы можно было найти полную историю.

Ручное сжатие

/compress              # сжать контекст текущей сессии вручную

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

Команды управления сессией (Slash-команды)

Во время интерактивного чата доступны следующие команды:

/new (/reset)           # начать новую сессию
/title [name]           # переименовать текущую сессию
/compress               # сжать контекст вручную
/undo                   # удалить последний обмен (user + assistant)
/retry                  # повторно отправить последнее сообщение
/clear                  # очистить экран + новая сессия (CLI)
/stop                   # остановить фоновые процессы

/undo — отмена последнего обмена

Команда /undo удаляет последнюю пару «сообщение пользователя → ответ агента» из контекста. Полезно, если агент пошёл по неверному пути и нужно вернуться на шаг назад без потери остальной истории.

/retry — повторная отправка

Команда /retry повторно отправляет последнее сообщение пользователя, давая агенту шанс сгенерировать другой ответ. Параметры и контекст остаются теми же.

/title — переименование

Команда /title без аргументов показывает текущее название. С аргументом — устанавливает новое:

/title                  # показать текущее название
/title Мой проект       # переименовать сессию

Возобновление сессий (Resume)

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

Через CLI-флаги

hermes --continue                    # возобновить последнюю сессию
hermes --continue "название"         # возобновить по имени сессии
hermes --resume SESSION_ID           # возобновить по ID сессии
hermes -c                            # краткая форма --continue
hermes -r SESSION_ID                 # краткая форма --resume

Через slash-команду

/resume                 # показать список недавних сессий для выбора
/resume Название        # возобновить сессию по имени

Формат ID сессий: YYYYMMDD_HHMMSS_<hex> — для CLI используется 6-символьный суффикс, для gateway — 8-символьный.

Worktree-режим

Флаг -w (--worktree) запускает Hermes в изолированном git worktree. Это позволяет запускать несколько параллельных агентов, работающих с одним репозиторием, без конфликтов в файлах.

hermes -w                            # запуск в worktree-режиме
hermes --worktree                    # то же самое, полная форма

Зачем нужен worktree

  • Параллельная работа — несколько агентов одновременно редактируют код в одном репозитории
  • Изоляция — каждый агент работает в своей ветке и рабочей директории
  • Без конфликтов — изменения одного агента не мешают другому

Мультиагентная координация

# Агент A: backend
hermes -w   → "Build REST API for user management"

# Агент B: frontend
hermes -w   → "Build React dashboard for user management"

Каждый агент получает свой git worktree с отдельной веткой. После завершения задач ветки можно смержить через стандартный git merge.

Хранение и пути

  • База данных: ~/.hermes/state.db (глобальная) или ~/.hermes/profiles/<name>/state.db (профиль)
  • Транскрипты: ~/.hermes/sessions/ — JSONL-файлы с полной историей
  • Логи: ~/.hermes/logs/gateway.log — логи gateway и ошибок

При использовании профилей (hermes -p name) каждая профильная сессия хранится изолированно в директории профиля.