sidebar_position: 8 sidebar_label: "Checkpoints & Rollback" title: "Checkpoints and /rollback" description: "Filesystem safety nets for destructive operations using shadow git repos and automatic snapshots" lang: ru
Контрольные точки и /rollback
Агент Hermes автоматически создает снимки вашего проекта перед деструктивными операциями и позволяет восстановить его с помощью одной команды. Контрольные точки включены по умолчанию — затраты равны нулю, если не срабатывают никакие инструменты изменения файлов.
Эта система безопасности поддерживается внутренним Checkpoint Manager, который хранит отдельный теневой репозиторий git под ~/.hermes/checkpoints/ — ваш реальный проект .git никогда не будет затронут.
Что вызывает контрольную точку
Контрольные точки выполняются автоматически перед:
- Файловые инструменты —
write_fileиpatch - Деструктивные команды терминала —
rm,rmdir,cp,install,mv,sed -i,truncate,dd,shred, перенаправление вывода (>), иgit reset/clean/checkout
Агент создает не более одной контрольной точки для каждого каталога за ход, поэтому длительные сеансы не рассылают спам-снимки.
Краткий справочник
| Команда | Описание | | lang: ru
------|-------------|
| /rollback | Список всех контрольных точек со статистикой изменений |
| /rollback <N> | Восстановить до контрольной точки N (также отменяет последний ход чата) |
| /rollback diff <N> | Предварительный просмотр разницы между контрольной точкой N и текущим состоянием |
| /rollback <N> <file> | Восстановить один файл с контрольной точки N |
Как работают контрольно-пропускные пункты
На высоком уровне:
- Hermes определяет, когда инструменты собираются изменить файлы в вашем рабочем дереве.
- Один раз за ход разговора (для каждого каталога):
- Устраняет разумный корень проекта для файла.
- Инициализирует или повторно использует теневой репозиторий git, привязанный к этому каталогу.
- Стадия и фиксация текущего состояния с помощью краткой, понятной человеку причины.
- Эти коммиты формируют историю контрольных точек, которую вы можете проверить и восстановить через
/rollback.
flowchart LR
user["User command\n(hermes, gateway)"]
agent["AIAgent\n(run_agent.py)"]
tools["File & terminal tools"]
cpMgr["CheckpointManager"]
shadowRepo["Shadow git repo\n~/.hermes/checkpoints/<hash>"]
user --> agent
agent -->|"tool call"| tools
tools -->|"before mutate\nensure_checkpoint()"| cpMgr
cpMgr -->|"git add/commit"| shadowRepo
cpMgr -->|"OK / skipped"| tools
tools -->|"apply changes"| agent
Конфигурация
Контрольные точки включены по умолчанию. Настройте в ~/.hermes/config.yaml:
checkpoints:
enabled: true # master switch (default: true)
max_snapshots: 50 # max checkpoints per directory
# Auto-maintenance (opt-in): sweep ~/.hermes/checkpoints/ at startup
# and delete shadow repos whose working directory no longer exists
# (orphans) or whose newest commit is older than retention_days.
# Runs at most once per min_interval_hours, tracked via a
# .last_prune marker inside ~/.hermes/checkpoints/.
auto_prune: false # default off — enable to reclaim disk
retention_days: 7
delete_orphans: true # delete repos whose workdir is gone
min_interval_hours: 24
Чтобы отключить:
checkpoints:
enabled: false
Если этот параметр отключен, диспетчер контрольных точек не работает и никогда не пытается выполнить операции git.
Перечисление контрольных точек
Из сеанса CLI:
/rollback
Hermes отвечает форматированным списком, показывающим статистику изменений:
📸 Checkpoints for /path/to/project:
1. 4270a8c 2026-03-16 04:36 before patch (1 file, +1/-0)
2. eaf4c1f 2026-03-16 04:35 before write_file
3. b3f9d2e 2026-03-16 04:34 before terminal: sed -i s/old/new/ config.py (1 file, +1/-1)
/rollback <N> restore to checkpoint N
/rollback diff <N> preview changes since checkpoint N
/rollback <N> <file> restore a single file from checkpoint N
Каждая запись показывает:
- Короткий хеш
- Временная метка
- Причина (что вызвало создание снимка)
- Сводка изменений (измененные файлы, вставки/удаления)
Предварительный просмотр изменений с помощью /rollback diff
Прежде чем приступить к восстановлению, просмотрите, что изменилось после контрольной точки:
/rollback diff 1
Это показывает сводку статистики git diff, за которой следует фактическая разница:
test.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test.py b/test.py
--- a/test.py
+++ b/test.py
@@ -1 +1 @@
-print('original content')
+print('modified content')
Длинные различия ограничены 80 строками, чтобы избежать переполнения терминала.
Восстановление с помощью /rollback
Восстановление на КПП по номеру:
/rollback 1
За кулисами Гермес:
- Проверяет, что целевой коммит существует в теневом репозитории.
- Делает снимок перед откатом текущего состояния, чтобы вы могли позже «отменить отмену».
- Восстанавливает отслеживаемые файлы в вашем рабочем каталоге.
- Отменяет последний ход диалога, чтобы контекст агента соответствовал восстановленному состоянию файловой системы.
Об успехе:
✅ Restored to checkpoint 4270a8c5: before patch
A pre-rollback snapshot was saved automatically.
(^_^)b Undid 4 message(s). Removed: "Now update test.py to ..."
4 message(s) remaining in history.
Chat turn undone to match restored file state.
Отмена диалога гарантирует, что агент не «запомнит» изменения, которые были отменены, что позволяет избежать путаницы на следующем этапе.
Восстановление одного файла
Восстановите только один файл с контрольной точки, не затрагивая остальную часть каталога:
/rollback 1 src/broken_file.py
Это полезно, когда агент внес изменения в несколько файлов, но нужно отменить только один.
Защитники безопасности и производительности
Чтобы обеспечить безопасность и скорость прохождения контрольно-пропускных пунктов, Hermes применяет несколько ограждений:
- Доступность Git — если
gitне найден вPATH, контрольные точки прозрачно отключаются. - Область каталога — Hermes пропускает слишком широкие каталоги (корневой
/, домашний$HOME). - Размер репозитория — каталоги, содержащие более 50 000 файлов, пропускаются, чтобы избежать медленных операций git.
- Снимки без изменений — если с момента последнего снимка изменений нет, контрольная точка пропускается.
- Нефатальные ошибки — все ошибки внутри Checkpoint Manager протоколируются на уровне отладки; ваши инструменты продолжают работать.
Где живут контрольно-пропускные пункты
Все теневые репозитории находятся под:
~/.hermes/checkpoints/
├── <hash1>/ # shadow git repo for one working directory
├── <hash2>/
└── ...
Каждый <hash> получается из абсолютного пути к рабочему каталогу. Внутри каждого теневого репозитория вы найдете:
- Стандартные внутренние компоненты git (
HEAD,refs/,objects/) - Файл
info/exclude, содержащий курируемый список игнорирования. - Файл
HERMES_WORKDIR, указывающий на исходный корень проекта.
Обычно вам никогда не придется прикасаться к ним вручную.
Лучшие практики
- Оставить контрольные точки включенными — они включены по умолчанию и не требуют никаких затрат, если файлы не изменяются.
- Используйте
/rollback diffперед восстановлением — просмотрите, что изменится, чтобы выбрать правильную контрольную точку. - Используйте
/rollbackвместоgit reset, если вы хотите отменить только изменения, внесенные агентом. - Объединитесь с рабочими деревьями Git для максимальной безопасности — храните каждый сеанс Hermes в отдельном рабочем дереве/ветви с контрольными точками в качестве дополнительного уровня.
Для параллельного запуска нескольких агентов в одной репозитории см. руководство по Git Worktrees.