Checkpoints & Rollback
Обзор
Hermes Agent выполняет автоматический снимок проекта перед деструктивными операциями и восстанавливает его одной командой. Начиная с v2 checkpoints opt-in по умолчанию -- большинство пользователей не использует /rollback, а хранилище снимков создаёт нагрузку на диск, поэтому по умолчанию функция отключена.
Включение checkpoints для текущей сессии:
Глобальное включение в ~/.hermes/config.yaml:
Механизм работает через Checkpoint Manager, который поддерживает единую общую shadow git-репозиторий в ~/.hermes/checkpoints/store/. Настоящий .git проекта не затрагивается. Все проекты, с которыми работает агент, используют общее хранилище, поэтому git-объекты дедуплицируются через content-addressable объектный database.
Что вызывает создание checkpoint
Снимки создаются автоматически перед:
- Файловые инструменты --
write_fileиpatch - Деструктивные команды терминала --
rm,rmdir,cp,install,mv,sed -i,truncate,dd,shred, перенаправления вывода (>), а такжеgit reset,git clean,git checkout
Создаётся не более одного checkpoint на директорию за ход разговора, поэтому долгие сессии не засоряют хранилище снимками.
Быстрая команда
Slash-команды в сессии
| Команда | Описание |
|---|---|
/rollback | Показать все checkpoints со статистикой изменений |
/rollback <N> | Восстановить checkpoint N (также откатывает последний ход разговора) |
/rollback diff <N> | Предварительный просмотр diff между checkpoint N и текущим состоянием |
/rollback <N> <file> | Восстановить один файл из checkpoint N |
CLI-команды для работы с хранилищем
| Команда | Описание |
|---|---|
hermes checkpoints | Показать общий размер, количество проектов, разбивку по проектам |
hermes checkpoints status | То же, что и checkpoints |
hermes checkpoints list | Алиас для status |
hermes checkpoints prune | Принудительная очистка: удаление сирот, устаревших данных, GC, ограничение размера |
hermes checkpoints clear | Полная очистка хранилища checkpoints (с подтверждением) |
hermes checkpoints clear-legacy | Удаление только архивов legacy-* из миграции v1 |
Как работают checkpoints
Общий алгоритм:
- Hermes определяет момент, когда инструменты собираются изменить файлы в рабочей директории.
- Один раз за ход разговора (на директорию):
- Определяет корень проекта для файла.
- Инициализирует или переиспользует общую shadow-стор в
~/.hermes/checkpoints/store/. - Индексирует файлы в per-project индекс, строит дерево и делает коммит в per-project ref (
refs/hermes/<project-hash>).
- Per-project ref-ы формируют историю checkpoints, которую можно просматривать и восстанавливать через
/rollback.
Конфигурация
Настройки в ~/.hermes/config.yaml:
Полное отключение:
При enabled: false Checkpoint Manager не выполняет никаких git-операций. При auto_prune: false хранилище растёт до ручного запуска hermes checkpoints prune.
Просмотр checkpoints
В сессии:
Пример вывода:
Просмотр хранилища из терминала
Пример вывода:
Принудительная очистка (игнорирует маркер идемпотентности 24ч):
Предпросмотр изменений с /rollback diff
Перед восстановлением можно посмотреть, что изменилось с момента checkpoint:
Выводит сводку diff-статистики и сам diff.
Восстановление с /rollback
Процесс восстановления:
- Проверяет наличие целевого коммита в shadow-стор.
- Создаёт pre-rollback снимок текущего состояния для возможности "отменить откат".
- Восстанавливает отслеживаемые файлы в рабочей директории.
- Откатывает последний ход разговора, чтобы контекст агента соответствовал восстановленной файловой системе.
Восстановление одного файла
Восстановление одного файла из checkpoint без влияния на остальную директорию:
Защитные ограничения
- Наличие git -- если
gitне найден вPATH, checkpoints молча отключаются. - Область директорий -- Hermes пропускает слишком широкие директории (корень
/, домашнюю$HOME). - Размер репозитория -- директории с более чем 50 000 файлов пропускаются.
- Лимит на размер файла -- файлы крупнее
max_file_size_mb(по умолчанию 10 МБ) исключаются из снимка. Предотвращает случайное включение датасетов, весов моделей или сгенерированных медиа. - Лимит на общий размер хранилища -- при превышении
max_total_size_mb(по умолчанию 500 МБ) самый старый коммит на проект удаляется round-robin. - Реальная очистка --
max_snapshotsреализуется через перезапись per-project ref и запускgit gc --prune=now, поэтому loose-объекты не накапливаются. - Снимки без изменений -- если изменений нет, checkpoint пропускается.
- Нефатальные ошибки -- все ошибки в Checkpoint Manager логируются на уровне debug; инструменты продолжают работу.
Структура хранилища checkpoints
Каждый <hash> вычисляется из абсолютного пути рабочей директории. Ручное редактирование этих файлов не требуется -- используйте hermes checkpoints status / prune / clear.
Миграция с v1 (legacy-архивы)
До переписывания в v2 каждая рабочая директория получала собственный полный shadow git-репозиторий в ~/.hermes/checkpoints/<hash>/. Эта схема не поддерживала дедупликацию объектов между проектами, а очистка не работала -- хранилище росло бесконтрольно.
При первом запуске v2 существующие pre-v2 shadow-репозитории перемещаются в ~/.hermes/checkpoints/legacy-<timestamp>/, чтобы новая схема с общим хранилищем стартовала чисто. Старая история /rollback по-прежнему доступна через ручной просмотр legacy-архива с помощью git. Когда убедитесь, что данные больше не нужны:
Legacy-архивы также удаляются auto_prune после retention_days.
Рекомендации
- Включайте checkpoints только когда нужно --
hermes chat --checkpointsилиenabled: trueв профиле. - Используйте
/rollback diffперед восстановлением --.preview изменений позволяет выбрать правильный checkpoint. - Используйте
/rollbackвместоgit resetкогда нужно отменить только изменения агента. - Периодически проверяйте
hermes checkpoints status-- покажет активные проекты и стоимость хранилища на диске. - Комбинируйте с Git worktrees для максимальной безопасности -- держите каждую сессию Hermes в отдельном worktree/ветке, checkpoints служат дополнительным слоем защиты.