Hermes Agent реализует многоуровневую модель безопасности, которая защищает хост-систему от случайных или вредоносных действий. Семь слоёв обороны — от авторизации пользователей до контейнерной изоляции — обеспечивают безопасную работу агента как в интерактивном CLI, так и в мессенджерах.
Модель безопасности: обзор
Архитектура безопасности Hermes включает семь уровней защиты:
- Авторизация пользователей — контроль того, кто может взаимодействовать с агентом (списки допуска, привязка через DM)
- Одобрение опасных команд — человек в цикле для деструктивных операций
- Контейнерная изоляция — песочница Docker/Singularity/Modal с ужесточёнными настройками
- Фильтрация учётных данных MCP — изоляция переменных окружения для подпроцессов
- Сканирование контекстных файлов — обнаружение prompt-инъекций в файлах проекта
- Изоляция сессий — сессии не имеют доступа к данным или состоянию друг друга
- Санитизация ввода — валидация параметров рабочих каталогов для предотвращения shell-инъекций
Одобрение команд
Перед выполнением каждой команды Hermes проверяет её по списку опасных паттернов. При обнаружении совпадения требуется явное подтверждение пользователя.
Режимы одобрения
Система поддерживает три режима, настраиваемых через approvals.mode в ~/.hermes/config.yaml:
- manual (по умолчанию) — всегда запрашивает подтверждение для опасных команд
- smart — использует вспомогательную LLM для оценки риска; безопасные команды одобряются автоматически, опасные — отклоняются, спорные — передаются пользователю
- off — отключает все проверки (эквивалентно
--yolo)
# Настройка режима одобрения
hermes config set approvals.mode manual # всегда спрашивать (по умолчанию)
hermes config set approvals.mode smart # LLM решает (рекомендуется)
hermes config set approvals.mode off # пропускать всё (не рекомендуется)
YOLO-режим
YOLO-режим обходит все проверки одобрения для текущей сессии. Его можно активировать несколькими способами:
# Флаг при запуске
hermes --yolo chat -q "установи nginx"
# Переменная окружения
export HERMES_YOLO_MODE=1
# Slash-команда в сессии
/yolo
Важно: YOLO / approvals.mode: off не отключает маскирование секретов (security.redact_secrets). Это независимые механизмы.
Жёсткий блоклист
Некоторые команды настолько катастрофичны, что Hermes отказывается их выполнять при любых настройках — даже в YOLO-режиме. К ним относятся:
rm -rf /и его варианты — уничтожение файловой системы- Fork-бомбы вида
:(){ :|:& }; - Форматирование смонтированного корневого устройства
dd if=/dev/zero of=/dev/sd*— обнуление физического диска- Пайпинг непроверенных URL в
sh
Маскирование секретов и PII
Hermes может автоматически скрывать конфиденциальные данные из вывода инструментов и сообщений мессенджера. Это два независимых механизма.
Маскирование секретов в выводе (security.redact_secrets)
По умолчанию вывод инструментов (терминал, read_file, веб-контент, субагенты) проходит без изменений. При включении Hermes автоматически маскирует строки, похожие на API-ключи, токены и пароли, до того, как они попадут в контекст разговора и логи.
# Включить маскирование секретов
hermes config set security.redact_secrets true
# Отключить
hermes config set security.redact_secrets false
Требуется перезапуск. Опция security.redact_secrets считывается при импорте модуля — переключение в рамках сессии не вступит в силу. Это сделано намеренно — агент не может отключить маскирование для себя во время выполнения задачи.
Маскирование PII в gateway (privacy.redact_pii)
Отдельно от секретов, при работе через мессенджеры gateway может хешировать идентификаторы пользователей и удалять номера телефонов из контекста сессии до передачи модели:
# Включить хеширование PII
hermes config set privacy.redact_pii true
# Отключить (по умолчанию)
hermes config set privacy.redact_pii false
Сравнение механизмов
| Параметр | Что делает | Где работает | По умолчанию |
|---|---|---|---|
security.redact_secrets |
Маскирует API-ключи и токены | Все инструменты (CLI + gateway) | false |
privacy.redact_pii |
Хеширует user ID, убирает телефоны | Только gateway | false |
approvals.mode |
Контролирует одобрение команд | CLI + gateway | manual |
Сканирование безопасности Tirith
Tirith — встроенный сканер безопасности, который анализирует файлы проекта на предмет уязвимостей и потенциальных prompt-инъекций перед тем, как агент начнёт их обрабатывать.
Включение Tirith
# Включить сканер
hermes config set security.tirith_enabled true
Параметры Tirith
confusable_text— обнаружение символов, которые выглядят как ASCII, но являются Unicode (homoglyph-атаки). Например, кириллическая «а» вместо латинской «a» в именах файлов или URL.pipe_to_interpreter— обнаружение попыток направить вывод напрямую в интерпретатор (curl ... | python,wget | bash). Заблокировано в жёстком блоклисте, но Tirith предупреждает и о менее очевидных формах.
# Конфигурация Tirith
hermes config set security.tirith_enabled true
hermes config set security.confusable_text true
hermes config set security.pipe_to_interpreter true
Блокировка веб-сайтов
Hermes может блокировать доступ к определённым доменам через браузерный инструмент и web_extract. Полезно для предотвращения утечки данных на вредоносные ресурсы.
# Добавить домен в блоклист
hermes config set security.website_blocklist "evil.com,tracking.example.com"
Блокировка применяется ко всем инструментам, работающим с URL: web_extract, web_search, browser_navigate.
Shell hooks allowlist
Некоторые интеграции с shell-хуками требуют явного разрешения перед запуском. Управление через файл ~/.hermes/shell-hooks-allowlist.json.
При первом обращении к хуку Hermes интерактивно запрашивает разрешение. Решение сохраняется в allowlist-файл и повторно не спрашивается.
# Пример структуры файла
{
"pre-commit": true,
"post-merge": true,
"pre-push": false
}
Для отключения конкретного хука установите значение false или удалите запись из файла.
Авторизация в мессенджерах
При работе через шлюз мессенджеров Hermes контролирует доступ через многоуровневую систему авторизации:
- Флаг разрешения всех пользователей платформы (например,
DISCORD_ALLOW_ALL_USERS=true) - Список одобренных DM-парингов
- Списки допуска для конкретных платформ (
TELEGRAM_ALLOWED_USERS) - Глобальный список допуска
Контейнерная изоляция
При запуске в бэкендах Docker, Singularity, Modal, Daytona или Vercel Sandbox проверки опасных команд пропускаются, поскольку сам контейнер является границей безопасности. Деструктивные команды внутри контейнера не могут навредить хост-системе.
Checkpoints и Rollback: откат изменений
Hermes умеет автоматически создавать снимки проекта перед деструктивными операциями и восстанавливать одной командой. Функция включается опционально через --checkpoints или в конфиге checkpoints.enabled: true.
Что создаёт чекпоинт
Снимки создаются автоматически перед:
- Операциями с файлами —
write_fileиpatch - Деструктивными терминальными командами —
rm,mv,sed -i,dd, перенаправления вывода иgit reset
Команды отката
/rollback— список всех чекпоинтов со статистикой изменений/rollback <N>— восстановление к чекпоинту N/rollback diff <N>— предпросмотр изменений/rollback <N> <файл>— восстановление одного файла
Гарантии безопасности
- Если
gitне найден — чекпоинты отключаются прозрачно - Директории с более чем 50 000 файлов пропускаются
- Файлы larger
max_file_size_mb(по умолчанию 10 МБ) исключаются - Общий лимит хранилища —
max_total_size_mb(по умолчанию 500 МБ) - Автоматическая очистка
auto_pruneудаляет устаревшие и осиротевшие снимки
Таймаут одобрения
При появлении запроса на подтверждение у пользователя есть настраиваемое время на ответ (по умолчанию 60 секунд). Если ответ не поступил — команда отклоняется (стратегия fail-closed).
Сводка настроек безопасности
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
approvals.mode |
Режим одобрения команд | manual |
security.redact_secrets |
Маскирование API-ключей в выводе | false |
privacy.redact_pii |
Хеширование user ID и телефонов | false |
security.tirith_enabled |
Сканер безопасности Tirith | false |
security.confusable_text |
Обнаружение homoglyph-атак | false |
security.pipe_to_interpreter |
Блокировка pipe в интерпретатор | false |
security.website_blocklist |
Список заблокированных доменов | — |
checkpoints.enabled |
Система чекпоинтов для отката | false |