Контекст и личность

Что такое контекстные файлы

Hermes Agent поддерживает систему контекстных файлов — специальных документов в корне проекта, которые автоматически загружаются в системный промпт при каждом запуске. Эти файлы задают архитектурные соглашения, стили кодирования и проектные ограничения, которые агент учитывает в каждой сессии.

Приоритет загрузки

При старте Hermes сканирует рабочую директорию и выбирает первый найденный файл:

  • .hermes.md — формат, специфичный для Hermes
  • AGENTS.md — универсальный формат для ИИ-агентов
  • CLAUDE.md — формат Claude Code, поддерживаемый для совместимости
  • .cursorrules — файл Cursor IDE, загружается если нет файлов выше

Все контекстные файлы проходят проверку на prompt-инъекции. Максимальный размер — 20 000 символов; длинные файлы обрезаются (70% начала, 20% конца).

Прогрессивное обнаружение

Помимо корневых файлов, Hermes ищет AGENTS.md в поддиректориях — до 5 родительских каталогов. Это полезно для монорепозиториев: отдельные файлы во frontend/ и backend/ загружаются автоматически.

@-синтаксис для вложения файлов

В CLI Hermes поддерживает синтаксис @ для вставки контента в сообщение. Ссылки раскрываются перед отправкой и добавляются в секцию Attached Context.

Поддерживаемые ссылки

  • @file:path/to/file.py — содержимое файла
  • @file:path/to/file.py:10-25 — диапазон строк
  • @folder:path/to/dir — дерево каталогов
  • @diff / @staged — git-изменения
  • @git:5 — последние N коммитов
  • @url:https://example.com — содержимое веб-страницы

Ссылки защищены от path traversal, блокируют доступ к SSH-ключам и бинарным файлам. Мягкий лимит — 25% контекстного окна, жёсткий — 50%.

Сборка системного промпта

Системный промпт Hermes собирается из нескольких слоёв, каждый из которых добавляет свой контекст. Порядок слоёв фиксирован:

  1. SOUL.md — идентичность и поведенческие инструкции агента (первый слот)
  2. Personality — тон и стиль общения (если задан через /personality или agent.system_prompt)
  3. System Memorymemories/MEMORY.md (факты об окружении) и memories/USER.md (информация о пользователе)
  4. Контекстные файлыAGENTS.md / .hermes.md из рабочей директории
  5. Skills — загруженные навыки добавляют процедурные знания
  6. Инструменты — схемы доступных инструментов

Все слои складываются в единый system prompt, который отправляется модели с каждым запросом. Суммарный размер управляется лимитами каждого компонента.

System Memory

Два файла автоматически инжектятся в каждое сообщение:

  • memories/MEMORY.md — стабильные факты об окружении (лимит: memory.memory_char_limit, по умолчанию 2200 символов)
  • memories/USER.md — информация о пользователе (лимит: memory.user_char_limit, по умолчанию 1375 символов)

Эти файлы обновляются агентом автоматически по мере накопления новой информации.

Личность и SOUL.md

Файл SOUL.md — основная идентификация агента. Он занимает первый слот в системном промпте и определяет поведение и инструкции. Загружается только из директории Hermes (~/.hermes/SOUL.md для глобального профиля, ~/.hermes/profiles/<name>/SOUL.md для профилей).

SOUL.md vs AGENTS.md

  • SOUL.md — поведенческие инструкции: как работать с группами, проектами, инструментами. Следует за агентом везде.
  • AGENTS.md — архитектура проекта, конвенции, пути. Привязан к репозиторию.

Если это должно следовать за вами — SOUL.md. Если относится к проекту — AGENTS.md.

Что писать в SOUL.md

  • Поведенческие инструкции: как обрабатывать сообщения в группах, когда действовать автоматически
  • Рабочие процессы: какие файлы читать при старте, какие скрипты запускать
  • Инструменты: когда использовать send_message, cronjob и другие
  • Ограничения: что делать и чего избегать

Важно: не удаляйте SOUL.md при использовании системы персоналитетов. SOUL.md содержит поведенческие инструкции, без которых агент не будет знать, как обрабатывать сообщения в проектных группах.

Система персоналитетов (Personality System)

Система персоналитетов позволяет переключать тон и стиль общения агента, не меняя поведенческие инструкции в SOUL.md.

Команда /personality

В интерактивной сессии:

  • /personality — показать текущий персоналитет
  • /personality <name> — установить персоналитет (например, /personality philosopher)
  • /personality off — сбросить, вернуться к SOUL.md

Настройка персоналитетов в config.yaml

Персоналитеты определяются в секции agent.personalities:

agent:
  personalities:
    philosopher: "Greetings, seeker of wisdom. I shall respond with measured reflection..."
    concise: "Be brief. No fluff. Direct answers only."
    technical: "Provide precise technical details. Use correct terminology. Include code examples."
    creative: "Think outside the box. Offer creative solutions. Use vivid language."
  system_prompt: ''  # ← сюда записывается активный персоналитет

Когда вы выполняете /personality philosopher, Hermes записывает текст из agent.personalities.philosopher в agent.system_prompt. Этот промпт добавляется в системный промпт поверх SOUL.md.

SOUL.md + Personality: двухслойный подход

SOUL.md и персоналитет решают разные задачи:

  • SOUL.md = поведенческие инструкции (что делать): обработка групп, работа с проектами, использование инструментов
  • Personality = тон и стиль (как говорить): философский, лаконичный, технический

Рекомендуется использовать оба слоя одновременно. Персоналитет — это статичный текст, который не может ссылаться на инструменты или динамическое поведение.

Управление контекстным окном

Hermes автоматически отслеживает использование токенов и управляет размером контекста, чтобы не превысить лимит модели.

Как это работает

При каждом вызове модели Hermes проверяет:

  • Размер контекстного окна модели (model.context_length)
  • Количество использованных токенов
  • Приближение к порогу сжатия

Когда использование достигает порога, автоматически запускается сжатие контекста.

Мониторинг использования

В сессии используйте:

  • /usage — текущее использование токенов в сессии
  • /status — информация о сессии, включая модель и контекстное окно

Сжатие контекста (Context Compression)

Когда контекст приближается к лимиту, Hermes автоматически сжимает историю диалога, сохраняя ключевую информацию и удаляя устаревшие детали.

Конфигурация

compression:
  enabled: true          # включить автоматическое сжатие (по умолчанию)
  threshold: 0.50        # порог срабатывания — 50% контекстного окна
  target_ratio: 0.20     # целевой размер после сжатия — 20% окна
  • threshold (0.50) — когда использовано 50% контекстного окна, запускается сжатие
  • target_ratio (0.20) — после сжатия контекст сжимается до 20% от размера окна
  • enabled — можно отключить, если нужно сохранять полную историю

Что происходит при сжатии

  1. Hermes определяет, какие сообщения можно безопасно удалить
  2. Сохраняются: системный промпт, последние сообщения, ключевые решения
  3. Удаляются: промежуточные итерации инструментов, устаревший контекст
  4. Вставляется сводка сжатого контента

Команда /compress

Для ручного сжатия контекста в любой момент сессии:

/compress

Это полезно когда:

  • Сессия стала слишком длинной и медленной
  • Вы хотите очистить контекст от устаревших данных
  • Переходите к новой задаче в той же сессии

Ручное сжатие использует те же настройки target_ratio, что и автоматическое.

Полное сброс: /new

Если сжатие недостаточно, /new (или /reset) начинает completely новую сессию с чистым контекстом. Системный промпт (SOUL.md, memory, personality) сохраняется.

ephemeral_system_prompt (Python API)

При использовании Hermes как библиотеки через Python API можно задать временный системный промпт, который действует только в рамках одного вызова:

from hermes_agent import HermesAgent

agent = HermesAgent()

# Временный системный промпт — перезаписывает SOUL.md только для этого вызова
response = agent.chat(
    "Explain quantum computing",
    ephemeral_system_prompt="You are a physics professor. Explain concepts using analogies from everyday life."
)

ephemeral_system_prompt полностью заменяет стандартный системный промпт (SOUL.md + personality + memory) для данного запроса. Это полезно для:

  • Специализированных задач, где нужен другой тон
  • Интеграции с внешними системами, формирующими свой контекст
  • Одноразовых запросов без изменения конфигурации

Внимание: при использовании ephemeral_system_prompt агент теряет доступ к своим поведенческим инструкциям из SOUL.md и персоналитету. Инструменты и навыки продолжают работать.