Hermes — открытый AI-агент, который взорвал GitHub: 90 тысяч звёзд за два месяца
Топовый разбор того, как устроен Hermes Agent — открытый AI-агент от Nous Research, на котором разработчики тихо строят личных агентов, работающих 24/7. Сам пишет себе скиллы. Помнит контекст между сессиями. Оптимизирует свои процессы офлайн через эволюционный движок GEPA. То, чего нет ни у одного другого открытого агента.
Ниже — перевод подробного мастер-класса.
Подписывайтесь на мой канал Ночной Писаревский, где пишу про предпринимательство, AI и делюсь своим опытом.
У всех AI-агентов, которыми ты пользовался, одна и та же проблема: они забывают всё в ту же секунду, как ты закрываешь сессию.
Твои предпочтения по коду. Конвенции проекта, на которые ты три раза поправлял агента. Воркэраунд, который он 10 минут открывал для глючащего API. Всё это сразу испаряется. Следующая сессия — ты начинаешь с нуля.
Hermes Agent от Nous Research подходит к этому принципиально иначе. Он идёт с встроенной петлёй обучения, которая:
- помнит между сессиями
- пишет себе многоразовые скиллы
- подчищает их в фоне
- и валидирует их офлайн через эволюционный движок под названием GEPA
Ни один другой открытый агент не комбинирует все четыре пункта. Даже OpenClaw.
В этом гайде — как работает эта петля, что делает каждый слой памяти и как сконфигурировать всё с нуля. К концу у тебя на машине будет крутиться три полностью изолированных агента: программист (который под капотом пользуется твоим Claude Code), глубокий ресёрчер и дизайнер. У каждого своя личность, своя память, свои скиллы и свой Telegram-бот.
Вся установка — несколько минут, всё воспроизводимо на твоём железе.
Заметка: все иллюстрации в этом гайде нарисованы Pixel — одним из агентов Hermes, которого ты научишься собирать к концу гайда. Они тебе ещё попадутся по ходу чтения.
Как читать гайд
Две половины: сначала теория, потом руки.
Если времени мало — сразу прыгай в раздел «Установка». Команды работают сами по себе.
Но теория окупается. Понимать, как скиллы сами эволюционируют, как складывается память и когда GEPA действительно отрабатывает — это разница между Hermes-как-чатбот-с-заметками и Hermes-как-нечто, что компаундится.
Что впереди:
- Что такое Hermes Agent — питч и сравнение с OpenClaw.
- Как он устроен — архитектура одной диаграммой.
- До памяти: кто такой агент? SOUL.md, слой идентичности.
- Система памяти. Три слоя, три скорости.
- Самоэволюционирующие скиллы. Авторские плейбуки агента + Curator.
- GEPA. Офлайн-оптимизация скиллов.
- Установка. Telegram, первый агент.
- Запуск нескольких агентов. Профайлы, три персоны.
Что такое Hermes Agent и чем он архитектурно отличается
Питч одной строкой: это агент, который становится лучше, чем дольше ты им пользуешься.
Делает это реальным то, что три обычно раздельные возможности сидят в одном фреймворке: обучение скиллов во время работы, постоянная многослойная память и опциональный пайплайн дообучения весов. Ни один другой открытый агент не отдаёт все три сразу.
Ближайшее сравнение в открытой экосистеме — OpenClaw. Оба постоянные, оба дружат с мессенджерами. Но они делают противоположные архитектурные выборы.
Хорошая формулировка из блога Kilo: «Hermes упаковывает gateway вокруг обучающегося агента. OpenClaw упаковывает агента вокруг messaging-gateway'я».
Как он устроен
Прежде чем петля обучения имеет смысл, нужна базовая картинка устройства.
Всё проходит через единственный класс AIAgent в скрипте run_agent.py. CLI, messaging-gateway, batch-runner, IDE-интеграция — это всё точки входа в один и тот же ядерный агент.
Именно поэтому история про «работает с любой платформой» реально работает.
Ядро петли — в стиле ReAct и синхронное. Собрать system prompt, проверить нужна ли компрессия, сделать прерываемый API-вызов, выполнить tool calls, зациклить.
Несколько деталей, которые важны дальше:
- Агент умеет запускать команды в шести разных местах: локальный терминал, Docker, SSH, Modal, Daytona или Singularity. Один и тот же код, меняется только конфиг. Можно перенести выполнение с ноутбука на cloud GPU-сервер, ничего больше не трогая.
- Работает почти с любой моделью. Слой трансляции маршрутизирует любого провайдера через один из трёх форматов API. Поэтому можно переключаться с Claude на GPT, Gemini или локальный Ollama одной командой — и ничего не ломается.
- У агента жёсткий потолок в 90 ходов на одну задачу. Без него агент, застрявший в цикле (ретраит падающий API, перечитывает один и тот же файл) тихо сжёг бы все твои кредиты. Суб-агенты делят тот же бюджет, так что цепочка делегаций, ушедшая в разгон, тоже не проскочит.
До памяти: кто такой агент?
Прежде чем дойдём до памяти и самоэволюционирующих скиллов — есть слой, который сидит выше них обоих: идентичность.
Память — это что агент знает. Скиллы — это как агент делает. Но ни первое, ни второе не говорит тебе, кто он такой в момент, когда появляется. Без слоя идентичности каждый агент ощущается как один и тот же агент в разных шляпах.
Hermes решает это одним файлом: SOUL.md.
Он лежит в ~/.hermes/SOUL.md и занимает слот №1 в system prompt'е, до всего остального. В нём прописана личность агента, тон, стиль коммуникации и жёсткие лимиты.
SOUL.md пишется вручную и остаётся статичным. Ты пишешь его один раз, со временем подкручиваешь — и он остаётся консистентным во всех проектах и сессиях. Если файла нет, Hermes откатывается на встроенную дефолтную идентичность.
Почему это важно для истории самоулучшения? Потому что всё, что дальше — память, которую агент пишет, скиллы, которые он создаёт, способ консолидировать знание — происходит сквозь линзу этой идентичности.
SOUL.md — это фиксированная рамка. Память и скиллы — подвижные части внутри неё.
Система памяти: три слоя, три скорости
У Hermes нет одной «памяти». Есть три слоя, каждый под свою задачу.
Слой 1: два крошечных markdown-файла
В сердцевине — два файла на диске:
- MEMORY.md (максимум 2200 символов) держит заметки агента про твоё окружение, конвенции проекта, особенности инструментов и выученные уроки.
- USER.md (максимум 1375 символов) держит твой профиль: имя, коммуникационные предпочтения, уровень навыков и чего избегать.
Оба инжектятся в system prompt как замороженный снимок в начале сессии. Если агент пишет новую запись в память в середине сессии, она сразу попадает на диск — но в system prompt'е появится только в следующей сессии.
Агент управляет собственной памятью тремя действиями: add, replace и remove. Действия read нет — память и так в промпте.
Интересная часть: когда память заполняется (примерно на 80%, видно как процент в шапке system prompt), агент обязан её консолидировать. Сливает связанные записи в более плотные и более информативные версии. Это создаёт естественное давление отбора — выживает только самое полезное.
Слой 2: полнотекстовый поиск по сессиям
Каждый разговор (CLI и messaging) пишется в SQLite с full-text поиском. Агент умеет искать в неделях прошлых разговоров инструментом session_search, который возвращает релевантные фрагменты с саммари.
Trade-off очевидный: слой 1 всегда в контексте, но крошечный. Слой 2 — неограниченный объём, но требует активного поиска плюс LLM-саммари. Вместе — двухскоростная система. Критичные факты живут в памяти. Всё остальное — ищется по запросу.
Слой 3: внешние memory-провайдеры (8 плагинов)
Для более глубокой постоянной памяти Hermes идёт с 8-ю подключаемыми провайдерами, которые работают параллельно встроенной памяти (не заменяют её). Активным может быть только один за раз.
Когда внешний провайдер активен, Hermes автоматически префетчит релевантные воспоминания перед каждым ходом, синкает разговор после каждого ответа и вытягивает память на конце сессии.
Самоэволюционирующие скиллы: агент пишет себе плейбуки
Память — это про факты. Скиллы — это про процедуры.
Скиллы — это markdown-файлы с YAML-frontmatter, и работают они как процедурная память агента: не что он знает, а как он что-то делает.
Чтобы держать стоимость в токенах низкой, скиллы используют постепенное раскрытие:
- Уровень 0: агент видит только имена + описания (~3к токенов на полный каталог)
- Уровень 1: загружает полный контент скилла, когда он реально нужен
- Уровень 2: может зайти в конкретные референсные файлы внутри скилла
Петля самоулучшения — главная разница
Это и есть core differentiator. Агент создаёт свои скиллы автономно через инструмент skill_manage. Триггер на создание срабатывает, когда:
- агент завершает сложную задачу (5+ tool calls)
- упирается в ошибки и в итоге находит рабочий путь
- пользователь правит его подход
- он находит нетривиальный воркфлоу
Цикл выглядит так: агент натыкается на проблему → решает её методом проб и ошибок → сохраняет успешный подход как SKILL.md файл → в следующий раз, когда встретит похожую задачу, загружает скилл и идёт по проверенной процедуре, а не открывает подход заново.
Инструмент поддерживает шесть действий: create, patch (точечный фикс — предпочтителен, потому что экономит токены), edit (полный rewrite), delete, write_file и remove_file.
Curator: сборка мусора для скиллов
Без обслуживания авторские скиллы агента накапливаются. Получаются десятки узких, перекрывающих друг друга плейбуков, которые жгут токены и засоряют каталог.
Curator — это фоновая система обслуживания, которая с этим работает. Запускается она по проверке простоя (не по cron): если с последнего запуска прошло 7 дней И агент не активен 2+ часа — поднимается фоновый форк агента со своим кэшем промптов, не трогая активный разговор.
Работает в две фазы:
- Автоматические переходы (детерминированные, без LLM): скиллы, не использованные 30 дней, становятся stale. 90 дней — архивируются.
- LLM-ревью (до 8 итераций): форкнутый агент проходится по всем авторским скиллам агента и решает для каждого: оставить, патчить, консолидировать или архивировать.
Два важных ограничения:
- Curator никогда не трогает встроенные или установленные из hub скиллы. Только те, что написал сам агент.
- Никогда не удаляет автоматически. Худший исход — архивация в ~/.hermes/skills/.archive/, откат одной командой.
Перед каждым проходом Curator'а Hermes делает tar.gz снимок всего каталога скиллов. Откат — одна команда, сами откаты тоже обратимы.
Критичные скиллы можно запинить командой hermes curator pin <skill> — это защитит их от архивации и удаления. Патчи и правки всё равно проходят, так что агент может улучшать запиненный скилл без необходимости его открепить.
GEPA: эволюция скиллов офлайн на трейсах исполнения
У петли самоулучшения внутри агента (создание скиллов + Curator) есть известная слабость:
- агент склонен к само-поздравлению — почти всегда думает, что отработал хорошо, даже когда нет (это подтверждено фидбэком сообщества)
- та же система, что генерит скиллы автоматически, может перезаписывать ручные кастомизации худшими версиями
Тут вступает GEPA.
GEPA (Genetic-Pareto Prompt Evolution) — это не встроенная часть Hermes. Живёт в отдельном репо NousResearch/hermes-agent-self-evolution и работает как офлайн-пайплайн оптимизации. Опубликована как ICLR 2026 Oral paper, MIT-лицензия.
Главная идея: вместо того чтобы спрашивать у агента «ну как, нормально отработал?», GEPA читает трейсы исполнения, чтобы понять, почему что-то падало, и потом предлагает точечные улучшения через эволюционный поиск.
Пайплайн:
- читает текущий скилл из репо Hermes
- генерит оценочный датасет (синтетические тест-кейсы через Claude Opus, реальную историю сессий из SQLite, либо вручную собранные эталонные наборы)
- запускает оптимизатор: читает трейсы исполнения → понимает, где сломалось → генерит кандидатов
- оценивает кандидатов через LLM-как-судью с рубриками (не двоичное прошло/не прошло)
- прогоняет через проверки-фильтры: полный набор тестов должен пройти 100%, скиллы остаются под 15KB, совместимость с кэшем сохраняется, семантическая цель не дрейфует
- лучший кандидат уходит как PR против репо Hermes — никогда не прямой коммит
GEPA построен на DSPy (фреймворк Stanford NLP для программирования языковых моделей). Скиллы оборачиваются как DSPy-модули, оцениваются через batch_runner и эволюционируют через рефлексивную мутацию от GEPA.
GPU не нужен. Всё гоняется через API-вызовы. Стоимость: примерно $2-10 за один оптимизационный прогон.
Сейчас реализована только Phase 1 (оптимизация файлов скиллов). Описания инструментов, секции system prompt, имплементационный код тулов и полностью автоматическая петля непрерывного улучшения — всё запланировано, но пока не сделано.
Полная картина: три петли работают вместе
Эти три системы — не независимые фичи. Они формируют единую архитектуру:
Онлайн (во время использования):
- агент решает задачу → сохраняет подход как скилл
- агент учит твои предпочтения → пишет в USER.md
- агент обнаруживает факты про окружение → пишет в MEMORY.md
- все сессии хранятся в SQLite с FTS5 — поиск работает по всей истории
- внешний memory-провайдер синкает ходы, вытаскивает факты, строит модель пользователя
Фоном (между сессиями):
- Curator работает в idle-период → переводит stale-скиллы → консолидирует пересекающиеся → архивирует неиспользуемые
Офлайн (батчем, в отдельном репо):
- GEPA читает текущие скиллы + историю трейсов исполнения
- генерит и оценивает кандидатов-улучшения
- лучшие варианты идут PR'ами с человеческим ревью перед мерджем
Итог — агент, который становится более способным, чем дольше он работает.
SOUL.md задаёт идентичность. Петля во время работы захватывает опыт. Curator держит библиотеку чистой. GEPA убеждается, что в библиотеке лежит то, что реально работает.
Это вся теория. Теперь поднимем это на твоей машине.
Установка
Linux, macOS или WSL2. Python 3.11+ ставится вместе с инсталлером. 8GB RAM хватит для использования через API.
Установка одной строкой. Запускаешь setup-wizard — он проводит через выбор провайдера, API-ключа, модели и инструментов. Начинаешь чатиться в терминале.
Подключение к Telegram
Если хочешь общаться с агентом с телефона, а не из терминала, направь его на Telegram-бота.
Получи токен бота у @BotFather (команда /newbot), потом свой Telegram ID у @userinfobot.
Это всё. У тебя работающий агент.
Что лежит в ~/.hermes/
Сразу после установки в твоём home-каталоге появляется новая папка. Стоит понимать раскладку, потому что всё, что ты делаешь с Hermes, трогает один из этих путей.
Несколько файлов заслуживают отдельного взгляда:
- config.yaml — источник истины для всего несекретного. Выбор модели, terminal backend, включение тулов, MCP-серверы — всё здесь. Редактируется через hermes config edit или по одному ключу через hermes config set .
- .env — секреты. API-ключи, токены ботов, пароли. Hermes автоматически роутит «секрето-выглядящие» значения сюда.
- SOUL.md — слот №1 в system prompt'е, до всего остального. Слой идентичности, описан выше.
- skills/ — здесь живёт вся петля обучения. Каждый скилл, который агент создал, плюс всё, что ты установил, попадает сюда.
- state.db — SQLite-база, на которой работает поиск по сессиям. WAL-mode safe, FTS5-indexed. Это и есть то, что делает «а что мы обсуждали три недели назад?» реально рабочим.
Большую часть этого ты руками не правишь. Но понимая раскладку, всё остальное встаёт на место.
Добавление новых скиллов
Hermes идёт с примерно 120-ю встроенными скиллами. Скорее всего ты захочешь больше.
Самый активный community-реестр — skills.sh, его держит Vercel Labs. Бровзить можно из CLI, либо открыть skills.sh в браузере.
Всегда инспектируй перед установкой. Скиллы запускаются с теми же правами, что и сам агент.
Hermes гоняет security-скан во время install. Чистые скиллы заходят молча. Подозрительные блокируют установку с предупреждением. Опасные блокируют наглухо, без override.
После установки каждый скилл становится slash-командой автоматически. Можно также добавить любой GitHub-репо как кастомный tap — это паттерн, как шарить скиллы между командой или вести свою приватную коллекцию.
От одного агента к десяти
Один агент — ок. Несколько специализированных — там, где Hermes становится интересен.
Для этого у Hermes есть first-class фича — profiles. Каждый профайл — это полностью изолированный инстанс Hermes со своим конфигом, памятью, скиллами, сессиями и SOUL.md. По дефолту они не делят ничего.
Соберём троих: дизайнера, программиста и ресёрчера.
Создаём команду
Флаг --clone копирует конфиг и .env дефолтного профайла как стартовую точку.
Дать каждому свой Telegram-бот
Каждому профайлу нужен свой бот от @BotFather. Telegram пускает только одно соединение на токен — расшарить один бот между профайлами не получится.
Запусти /newbot у @BotFather три раза, сохрани три токена. Потом запусти gateway-wizard по одному разу на каждый профайл. Дальше — то же, что для обычного агента.
Дать каждому личность через SOUL.md
Вот тут агенты становятся реально разными. Редактируешь SOUL.md в каждом профайле:
- дизайнер: ~/.hermes/profiles/designer/SOUL.md
- программист: ~/.hermes/profiles/programmer/SOUL.md
- ресёрчер: ~/.hermes/profiles/researcher/SOUL.md
Кастомизируем программиста: пускаем исполнение через Claude Code
Программист становится сильно интереснее, если он не сам пишет код, а делегирует исполнение в Claude Code CLI. Hermes оркестрирует. Claude Code делает правки в файлах, гоняет команды, рулит git. Hermes читает результат и решает, что дальше.
Это, кстати, способ, которым автор гайда запускает своего — поверх Claude Max подписки. Без отдельного API-ключа. Claude Code сам подхватывает Max-credentials.
Открой сессию и отправь такой одноразовый активационный промпт:
У меня уже есть подписка Claude Max. Ты — мой staff engineer, который помогает мне с ежедневными coding-задачами, и под капотом ты используешь Claude Code для всего исполнения. Настройся соответствующим образом.
Программист сам поставит скилл autonomous-ai-agents/claude-code, проверит, что claude в PATH, и начнёт использовать его для исполнения кода. Со следующего сообщения всё кодовое (читать файлы, писать код, гонять тесты, коммитить, пушить) идёт через Claude Code под капотом.
Две вещи стоит держать в голове:
- Убедись, что claude в PATH до активации — which claude должен показывать реальный путь к бинарю.
- У Claude Code есть и режим однострочника (быстрый, без TUI), и интерактивный (полная tmux-сессия). Программист сам выбирает по задаче. Тебе про это думать не нужно.
Кастомизируем дизайнера: учим его твоему визуальному стилю
Дизайнер становится реально полезным, когда он умеет генерировать картинки в твоём стиле, а не в обобщённом-AI-стиле. Паттерн: скармливаешь ему референсные дизайны, даёшь изучить, просишь создать скилл, который генерит новые изображения в том же стиле.
Это и есть петля самоулучшения, используемая как механизм первичной настройки. Вместо того чтобы писать скилл руками, ты показываешь агенту хорошие примеры и просишь его закодировать паттерн.
Открой сессию с дизайнером, перетащи (drag-and-drop в CLI, либо вложение в Telegram) свои референсные картинки. И отправь такой промпт:
Внимательно изучи эти референсные иллюстрации. Заметь палитру цветов, толщину линий, уровень детализации, композицию и общую эстетику. Я хочу, чтобы ты создал новый скилл под названием "my-design-style", который захватит этот визуальный стиль. Скилл должен: 1. Документировать "отпечаток" стиля простыми словами (палитра, толщины линий, правила композиции, повторяющиеся мотивы) 2. Включать Python-скрипт, который принимает текстовое описание новой иллюстрации и генерит изображение через Nano Banana (google/gemini-2.5-flash-image) через OpenRouter API в этом стиле 3. Читать OPENROUTER_API_KEY из окружения Используй skill_manage для создания. Перед тем как сказать "готово", протестируй сгенерированный скрипт на пробном промпте.
Дизайнер изучит референсы, напишет SKILL.md, сгенерит Python-скрипт, сохранит его под ~/.hermes/profiles/designer/skills/my-design-style/ и проверит, что скрипт запускается.
Если ты уже прогнал hermes setup и выбрал OpenRouter как провайдера, ключ уже лежит в .env профайла дизайнера благодаря --clone. Если нет — добавь один раз:
hermes -p designer config set OPENROUTER_API_KEY <your-key>
С этого момента просьба к дизайнеру нарисовать новую иллюстрацию триггерит скилл. Он напишет промпт с учётом отпечатка стиля, вызовет Nano Banana через OpenRouter и сохранит результат.
Тот же паттерн работает для любого вывода, где важна консистентность стиля. Скормил референсный контент, попросил агента собрать скилл, который воспроизводит паттерн. Интро для рассылок, треды в X, комменты к ревью кода — что угодно, где важна консистентность.
Подводный камень
Главная ловушка при запуске нескольких профайлов — коллизии токенов ботов.
Если ты создавал профайлы с --clone, каждый из них унаследовал оригинальный .env, включая Telegram-токен. Несколько профайлов теперь думают, что владеют одним и тем же ботом. Первый gateway, который стартует, хватает токен. Остальные падают с PID file race lost to another gateway instance.
Фикс: каждому профайлу нужен свой собственный токен бота от BotFather. Перед тем как назначать новые — вытри унаследованные:
sed -i '' '/TELEGRAM_BOT_TOKEN/d' ~/.hermes/profiles/designer/.env sed -i '' '/TELEGRAM_BOT_TOKEN/d' ~/.hermes/profiles/programmer/.env sed -i '' '/TELEGRAM_BOT_TOKEN/d' ~/.hermes/profiles/researcher/.env
('' после -i — особенность macOS. На Linux его убрать.)
Потом запусти hermes -p <profile> gateway setup под каждый профайл со своим уникальным токеном.
Если gateway чудит — запусти его в foreground'е, чтобы увидеть реальную ошибку:
hermes -p designer gateway run
Это бьёт чтение log-файлов каждый раз.
Подписывайтесь на мой канал Ночной Писаревский, где пишу про предпринимательство, AI и делюсь своим опытом.