Контрольные точки и /rollback
Агент Гермес может автоматически создавать копии вашего проекта перед разрушающими операциями и поддерживать работоспособность одной команды. Контрольные точки — опционально, начиная с версии 2: большинство пользователей никогда не используют /rollback, хранилище десятичных репозиториев со временем занимает нетривиальный объем, поэтому по умолчанию функция отключена.
Включите контрольные точки для сессии с помощью --checkpoints:
hermes chat --checkpoints
Или глобально в ~/.hermes/config.yaml:
checkpoints:
enabled: true
Этот механизм безопасности основан на внешнем Менеджере контрольных точек, который хранит единый общий теневой git-репозиторий в ~/.hermes/checkpoints/store/ — ваш реальный проект .git никогда не затрагивается. Все проекты, с имеющимся агентом, используют одну и ту же платформу, поэтому контентно-адресуемая база объектов git дедуплицирует данные между проектами и между действиями.
Что происходит создание контрольной точки
Контрольные точки автоматически передают:
- Файловыми инструментами —
write_fileиpatch - Разрушительные команды терминала —
rm,rmdir,cp,install,mv,sed -i,truncate,dd,shred, перенаправление вывода (>), а такжеgit reset/clean/checkout
Агент создает не более одной контрольной точки в каталоге действий, чтобы длительные сессии не засоряли хранилище снимков.
Краткая справка
Команды слэша внутри сессии:
| Команда | Описание |
|---|---|
/откат |
Список всех контрольных точек со статистикой изменений |
/rollback <N> |
Восстановить контрольную точку N (также отменяет последний шаг чата) |
/rollback diff <N> |
Предварительный просмотр изменений между контрольной точкой N и текущим состоянием |
/rollback <N> <файл> |
Восстановить один файл из контрольной точки N |
CLI для просмотра и управления хранилищами вне сессии:
| Команда | Описание |
|---|---|
контрольно-пропускные пункты Гермеса |
Показать общий размер, количество проектов, разбивку по проектам |
статус контрольно-пропускных пунктов Гермеса |
То же, что и чекпоинты |
список контрольно-пропускных пунктов Гермеса |
Псевдоним для статуса |
контрольно-пропускные пункты Гермеса обрезать |
Принудительная очистка: удаление острых/устаревших записей, сбор мусора, применение предельного размера |
контрольно-пропускные пункты Гермеса очищены |
Полностью удалить ресурсы контрольных точек (с запросом подтверждения) |
контрольно-пропускные пункты Гермеса ясное наследие |
Удалить только архивы legacy-* после встреч с v1 |
Как работают контрольные точки
На высоком уровне:
- Гермес определил, когда инструменты будут изменять файлы в вашей рабочей среде.
- Один раз за виток разговора (на каталоге) он:
- Определяет разумный корень проекта для файла.
- Инициализирует или использует единое общее Теневое хранилище в
~/.hermes/checkpoints/store/. - Индексирует индекс проекта, строит дерево и отправляет коммит по ссылке проекта (
refs/hermes/<project-hash>). - Эти ссылки проекта учитывают историю контрольных точек, которые можно просматривать и контролировать через
/rollback.
flowchart LR
user["Команда пользователя\n(hermes, gateway)"]
agent["AIAgent\n(run_agent.py)"]
tools["Файловые и терминальные инструменты"]
cpMgr["CheckpointManager"]
store["Общее теневое хранилище\n~/.hermes/checkpoints/store/"]
user --> agent
agent -->|"вызов инструмента"| tools
tools -->|"перед изменением\nensure_checkpoint()"| cpMgr
cpMgr -->|"git add/commit-tree/update-ref"| store
cpMgr -->|"OK / пропущено"| tools
tools -->|"применить изменения"| agent
Конфигурация
Настраиваем в ~/.hermes/config.yaml:
checkpoints:
enabled: false # основной переключатель (по умолчанию: false — опционально)
max_snapshots: 20 # максимальное количество контрольных точек на проект (применяется через перезапись ссылки и сборку мусора)
max_total_size_mb: 500 # жесткий лимит общего размера хранилища; удаляются самые старые коммиты
max_file_size_mb: 10 # пропускать любые файлы размером больше этого значения
# Автоматическое обслуживание (включено по умолчанию): очистка ~/.hermes/checkpoints/ при запуске
# и удаление записей проектов, рабочая директория которых больше не существует
# (осиротевшие) или чья last_touch старше retention_days. Запускается не чаще
# одного раза в min_interval_hours, отслеживается через маркер.last_prune.
auto_prune: true
retention_days: 7
delete_orphans: true
min_interval_hours: 24
Чтобы полностью отключить:
checkpoints:
enabled: false
auto_prune: false
Когда включено: false, Менеджер контрольных точек не выполняет никаких операций и никогда не пытается выполнять git-команды. Когда auto_prune: false, хранилище растёт, пока вы не запустите hermes checkpoints prune вручную.
Просмотр контрольных точек
Из сессии CLI:
/rollback
Гермес отвечает за сформированный списком со статистикой изменений:
📸 Контрольные точки для /path/to/project:
1. 4270a8c 2026-03-16 04:36 перед patch (1 файл, +1/-0)
2. eaf4c1f 2026-03-16 04:35 перед write_file
3. b3f9d2e 2026-03-16 04:34 перед терминалом: sed -i s/old/new/ config.py (1 файл, +1/-1)
/rollback <N> восстановить контрольную точку N
/rollback diff <N> предпросмотр изменений с момента контрольной точки N
/rollback <N> <файл> восстановить один файл из контрольной точки N
Просмотр хранилища из надзора
hermes checkpoints
Пример результата:
База контрольных точек: /home/you/.hermes/checkpoints
Общий размер: 142.3 MB
store/ 138.1 MB
legacy-* 4.2 MB
Проекты: 12
РАБОЧАЯ ДИРЕКТОРИЯ КОММИТЫ ПОСЛЕДНЕЕ КАСАНИЕ СОСТОЯНИЕ
/home/you/code/hermes-agent 20 2ч назад активен
/home/you/code/experiments/rl-runner 8 1д назад активен
/home/you/code/old-prototype 3 9д назад осиротел...
Архивы legacy (1):
legacy-20260506-050616 4.2 MB
Очистить с помощью: hermes checkpoints clear-legacy
Принудительная полная очистка (игнорирует 24-часовую идемпотентность маркера):
hermes checkpoints prune --retention-days 3 --max-size-mb 200
Предпросмотр изменений с /rollback diff
Перед тем как выполнить восстановление, можно просмотреть, что изменилось с момента контрольной точки:
/rollback diff 1
Показывает сводку статистики git diff, а затем сам diff.
Восстановление с помощью /rollback
/rollback 1
Под капотом Гермес:
- Проверяет, существует ли встроенный коммит в теневом хранилище.
- Создает предварительный откатный снимок текущего состояния, чтобы вы могли позже «отменить отмену».
- Восстанавливает отслеживаемые файлы в вашем рабочем каталоге.
- Отменяет последний виток разговора, чтобы имя контекстного агента восстановило состояние файловой системы.
Восстановление одного файла
Восстановите только один файл из контрольной точки, не затрагивая остальную часть директории:
/rollback 1 src/broken_file.py
Защита безопасности и производительности
- Наличие git — если
gitне найден вPATH, контрольные точки отключаются. - Область директории — Hermes пропускает слишком широкие директории (корень
/, домашняя$HOME). - Размер репозитория — каталоги с более чем 50 000 файлами по результатам.
- Ограничение размера файла — файлы больше
max_file_size_mb(по умолчанию 10 МБ) обрабатываются из снимков. Предотвращает случайное сохранение набора данных, всех моделей или сгенерированного мультимедиа. - Жесткий общий лимит размера хранилища — когда хранилище увеличивает
max_total_size_mb(по умолчанию 500 МБ), самый старый коммит каждого проекта удаляется по кругу, пока размер не станет меньше лимита. - Реальная очистка —
max_snapshotsприменяется посредством перезаписи ссылок проекта и последующего запускаgit gc --prune=now, чтобы рыхлые объекты не накапливались. - Снимки без изменений — если с момента последней снимки изменений нет, контрольная точка срабатывает.
- Нефатальные ошибки — все ошибки внутри Менеджера контрольных точек регистрируются на уровне отладки; ваши инструменты продолжают работать.
Где хранятся контрольные точки
~/.hermes/checkpoints/
├── store/ # единый общий голый git-репозиторий
│ ├── HEAD, objects/ # внутренности git (общие для всех проектов)
│ ├── refs/hermes/<hash> # кончик ветки для каждого проекта
│ ├── indexes/<hash> # git-индекс для каждого проекта
│ ├── projects/<hash>.json # рабочая директория + created_at + last_touch
│ └── info/exclude
├──.last_prune # маркер идемпотентности автоочистки
└── legacy-<ts>/ # заархивированные до v2 теневые репозитории проектов
Каждый <hash> формируется из абсолютного пути рабочей директории. Обычно вам никогда не нужно трогать их вручную — воспользуйтесь статусом контрольно-пропускных пунктов Гермеса/обрезать/очистить.
Миграция с v1
Для переписывания на v2 рабочая рабочая директория получила полный полный теневой git-репозиторий, расположенный в ~/.hermes/checkpoints/<hash>/. Такая структура не могла дедулицировать объекты между проектами и имела документированный неработающий очиститель — хранилище выросло без блокировки.
При первом запуске v2 все теневые репозитории версии v1 переносятся в ~/.hermes/checkpoints/legacy-<timestamp>/, чтобы новая структура библиотеки хранилища читалась чисто. Старая история /rollback все еще доступна для ручного просмотра с помощью git; когда вы уверены, что она не нужна, выполните:
hermes checkpoints clear-legacy
чтобы освободить место. Архивы наследства также удаляются при auto_prune после retention_days.
Рекомендации
- Включайте контрольные точки только тогда, когда они нужны —
hermeschat --checkpointsилиenabled: trueв профиле. - Используйте
/rollback diffперед восстановлением — просмотрите, что меняется, чтобы выбрать правильную контрольную точку. - Используйте
/rollbackвместоgit reset, когда хотите отменить только изменения, сделанные агентом. - Проверяйте состояние контрольно-пропускных пунктов Гермеса время, если регулярно используете контрольные точки — показывает, какие проекты активны и сколько места занимает хранилище.
- Сочетайте с рабочими деревьями Git для большей безопасности — держите каждую сессию Hermes в отдельном рабочем дереве/ветке, используя контрольные точки в качестве дополнительного уровня.
О параллельном запуске нескольких агентов в одном репозитории читайте в руководстве по Git Worktrees.