Советы и лучшие практики

Промпты: как получить лучший результат

Будьте конкретны

Чем точнее запрос, тем лучше ответ. Вместо «исправь баг» напишите: «В функции calculate_total в файле cart.py не учитывается скидка — исправь и добавь тест». Указывайте файлы, имена функций и ожидаемый результат.

Предоставляйте контекст заранее

Если задача зависит от специфики проекта, укажите это в первом сообщении: стек технологий, ограничения, формат вывода. Агент сразу получит всё необходимое для качественной работы.

Используйте контекстные файлы

Создайте AGENTS.md в корне проекта — агент загружает его автоматически. Запишите туда: структуру проекта, команды сборки, код-стайл. Для кастомизации личности агента используйте SOUL.md. Также поддерживаются .cursorrules.

Доверяйте инструментам

Не копируйте содержимое файлов вручную — агент может читать файлы, работать с терминалом, git и другими инструментами напрямую.

CLI-шорткаты

  • Многострочный ввод — вставляйте длинные промпты; агент автоматически определяет вставку.
  • Прерывание — нажмите Escape, чтобы остановить ответ и уточнить задачу.
  • Возобновление сессийhermes -c продолжает последнюю сессию, hermes -r "название" возобновленную.
  • Автодополнение — введите / и Tab для списка слеш-команд.
  • Вставка изображений — скриншоты из буфера обмена анализируются автоматически.

Память и навыки

Память — для фактов, навыки — для процедур

Память (MEMORY.md, USER.md) хранит предпочтения и окружение. Навыки (Skills) — многошаговые рецепты, вызываемые командой /имя-навыка. Задача из 5+ повторяющихся шагов? Сохраните как навык.

Управление памятью

Память ограничена (~2200 символов). Помогите агенту: «обнови — мы теперь на Python 3.12». После продуктивной сессии: «запомни это». Изменения вступают в силу со следующей сессии.

Оптимизация стоимости

  • Не ломайте кэш промпта — стабильный системный промпт даёт кэш-попадания у провайдеров, что значительно снижает цену. Не меняйте контекст, инструменты или системный промпт в середине разговора.
  • Чередование ролей сообщений — никогда не допускайте два сообщения assistant или два сообщения user подряд. Провайдеры требуют строгое чередование ролей для корректной работы.
  • Команда /compress — суммирует историю сессии, сохраняя контекст и снижая токены.
  • Параллельное делегированиеdelegate_task запускает субагентов независимо; в сессию возвращаются только итоги.
  • Пакетные скрипты — один скрипт вместо поочерёдных команд быстрее и дешевле.
  • Выбор модели/model для переключения. Сложные задачи — фронтьер-модели, простые — быстрые и дешёвые.
  • Контроль расхода/usage показывает потребление, /insights — статистику за 30 дней.

Ключевые правила для разработчиков

Не ломайте prompt caching

Стабильный системный промпт обеспечивает кэш-попадания у провайдеров (Anthropic, OpenAI). Не меняйте контекст, инструменты или системный промпт в середине разговора. Изменения toolset применяются только при /reset (новая сессия).

Чередование ролей сообщений

Провайдеры требуют строгое чередование: user → assistant → user → assistant. Никогда не допускайте два сообщения одного типа подряд — это вызывает ошибки API.

Используйте get_hermes_home() для путей

Никогда не хардкодьте ~/.hermes. Импортируйте get_hermes_home() из hermes_constants — он корректно работает с профилями и разными окружениями.

Config vs .env — разделяйте настройки

config.yaml — настройки (модель, провайдер, лимиты, feature flags). .env — секреты (API-ключи, токены). Никогда не храните ключи в config.yaml и не пишите настройки в .env без необходимости.

Новым инструментам нужен check_fn

При добавлении нового инструмента через registry.register() обязательно указывайте check_fn — функцию проверки доступности. Инструмент без check_fn будет показываться всем пользователям, даже если у них нет нужных зависимостей или API-ключей.

Публикация в Telegram

Только send_message, никаких fallback-цепочек

Распространённый антипаттерн: навыки содержат цепочки вроде send_message → tg-post.sh → curl с bot token. Агент cron читает навык, попадает на fallback-путь, обращается к отозванному токену и получает 401. Правило: все публикации только через send_message. Инструмент маршрутизирует через аккаунт платформы агента — работает всегда, если запущен gateway.

Бот должен быть админом канала

send_message работает только с каналами, где бот — администратор. Если нет доступа к каналу, используйте скрипты с API оригинального бота.

Флаг --yolo и режим HERMES_YOLO_MODE

Для пропуска одобрения опасных команд:

  • hermes --yolo — при запуске CLI, разовая сессия без подтверждений
  • export HERMES_YOLO_MODE=1 — переменная окружения, действует на все сессии
  • /yolo — слеш-команда в сессии, переключает режим
  • hermes config set approvals.mode off — глобально в config.yaml

Режимы одобрения: manual (по умолчанию), smart (LLM решает), off (всё пропускает). YOLO не отключает редактирование секретов — это независимые настройки.

Диагностика: hermes doctor

Команда hermes doctor проверяет зависимости, конфигурацию и доступность компонентов. С флагом --fix автоматически исправляет обнаруженные проблемы:

hermes doctor          # проверка состояния
hermes doctor --fix    # проверка + автоисправление

Что проверяет doctor:

  • Наличие и корректность API-ключей
  • Доступность Python-зависимостей
  • Состояние gateway-сервиса
  • Корректность config.yaml
  • Доступность MCP-серверов

Безопасность

Docker для ненадёжного кода

При работе с незнакомыми репозиториями используйте Docker-бэкенд: TERMINAL_BACKEND=docker в .env. Деструктивные команды внутри контейнера не повредят хосту.

Одобрение команд

Hermes проверяет каждую команду по списку опасных паттернов: рекурсивные удаления, DROP TABLE, pipe curl в shell. Выбирайте «один раз» или «на сессию» — не спешите с «всегда».

Списки доступа

Никогда не используйте GATEWAY_ALLOW_ALL_USERS=true для ботов с терминалом. Используйте TELEGRAM_ALLOWED_USERS или DISCORD_ALLOWED_USERS. Для командного доступа — DM-паринг.

Сессии и каналы

Назначьте домашний канал /sethome для результатов запланированных задач. Именуйте сессии /title. На мессенджер-платформах сессии сбрасываются после простоя (по умолчанию 24 часа).