Урок 4: Обновление и удаление Hermes
Tutorial 4: Updating & Uninstalling Hermes — easy-to-understand guide based on official docs
Урок 4: Обновление и удаление Hermes
С возвращением в нашу серию уроков по Hermes Agent! В этой части мы поговорим о том, что рано или поздно нужно знать каждому пользователю: как поддерживать Hermes в актуальном состоянии и как попрощаться, когда придёт время. Не переживайте — всё гораздо проще, чем кажется.
Обновление Hermes: одна команда — и готово
Самый простой способ обновить Hermes — выполнить одну команду:
hermes update
Вот и всё. Эта команда берёт на себя всю тяжёлую работу. Она подтягивает последний код из ветки main, обновляет зависимости и даже спрашивает вас о новых параметрах конфигурации, которые появились с момента последнего обновления. Удобно, правда?
Что на самом деле происходит во время обновления?
Вам наверняка интересно, что творится за кулисами. Вот разбор по шагам:
-
Снимок состояния до обновления — Прежде чем что-либо менять, Hermes сохраняет облегчённый снимок ваших важных файлов состояния (данные сопряжения, cron-задачи,
config.yaml,.envи другое). Файлы размером более 1 ГиБ пропускаются, чтобы огромная база данных не замедляла процесс. Снимок создаётся для каждого профиля в вашей установке, каждый хранится в своей директорииstate-snapshots/. -
Git pull — Hermes подтягивает последний код из ветки
mainи обновляет подмодули. -
Проверка синтаксиса после pull + автоматический откат — После подтягивания кода Hermes проверяет девять критически важных файлов, которые нужны каждой команде при запуске. Если какой-то из них не удаётся распарсить (например, случайно оставленный маркер конфликта слияния), Hermes автоматически откатывается к предыдущей версии, чтобы ваша оболочка оставалась работоспособной. Как только исправление появится в апстриме, вы сможете просто запустить
hermes updateзаново. -
Установка зависимостей — Выполняется
uv pip install -e ".[all]", чтобы подтянуть новые или изменившиеся зависимости. -
Миграция конфигурации — Обнаруживаются новые параметры конфигурации, и вам предлагается их задать.
-
Автоматический перезапуск шлюзов — Работающие шлюзы обновляются, чтобы новый код вступил в силу немедленно. Шлюзы под управлением сервисных менеджеров (systemd в Linux, launchd в macOS) перезапускаются через менеджер служб, а ручные шлюзы перезапускаются автоматически.
Пропустили запрос конфигурации? Не проблема!
Если вы пропустили запрос конфигурации во время обновления, можно наверстать упущенное позже:
hermes config check # посмотреть, чего не хватает
hermes config migrate # интерактивно добавить недостающее
Обновление из другой ветки
По умолчанию hermes update отслеживает origin/main. Но что, если вы хотите протестировать кандидата на релиз или функциональную ветку? Используйте флаг --branch:
hermes update --branch release-candidate
hermes update --check --branch experimental # просто посмотреть, насколько вы отстали
Если ваш локальный checkout находится в другой ветке, Hermes автоматически прячет незакоммиченные изменения, переключается на целевую ветку и подтягивает код. Ветки, которых нет локально, автоматически отслеживаются из origin/<имя>. Если ветки не существует нигде, команда аккуратно завершается с ошибкой и восстанавливает ваши спрятанные изменения.
А что насчёт «припаркованных» веток?
Если ваш checkout находится в функциональной ветке, hermes update справляется с этим умно:
- Полностью слитая ветка — Hermes сообщает, что ветка полностью слита, и переключается обратно на
main. - Неслитые коммиты, чистое дерево — Hermes всё равно переключается на
main, чтобы обновление продолжилось (это важно для неинтерактивных вызовов, например из десктопного приложения или cron-задач). Ваши коммиты остаются нетронутыми, а Hermes выводит громкое уведомление с именем ветки и инструкцией, как к ней вернуться.
Если вы намеренно поддерживаете собственные патчи в ветке, укажите это в config.yaml:
updates:
parked_branch_strategy: update_in_place
В этом случае origin/main сливается в вашу ветку, а не переключается на другую. Если возможно — используется fast-forward; при расхождении создаётся защитный тег, и процесс останавливается на конфликте.
Локальные изменения при неинтерактивных обновлениях
Когда вы запускаете hermes update в терминале, Hermes прячет незакоммиченные изменения, подтягивает код, а затем спрашивает, нужно ли их восстановить. Но когда обновление запускается без терминала (например, из десктопного приложения), Hermes пропускает обновление, если дерево грязное — с громким предупреждением, в котором указаны имя ветки и степень отставания. Никакого притворства, что обновление прошло успешно!
Удаление Hermes
Когда приходит время расстаться, удаление не составит труда. Обязательно загляните в документацию для вашей конкретной платформы, чтобы узнать точные шаги, но в целом вам нужно удалить бинарный файл Hermes и почистить директории конфигурации, которые он создал.
Подводим итоги
Поддерживать Hermes в актуальном состоянии — проще простого с hermes update. Встроенные механизмы безопасности — снимки, автоматический откат и обработка веток — позволяют обновляться с уверенностью. А если вам когда-нибудь понадобится отойти в сторону, удаление так же просто.
Оставайтесь с нами — впереди следующий урок из нашей серии!
📖 Официальная документация
Эта статья основана на официальной документации Hermes Agent :Официальные документы › getting-started/updating