Интерфейс CLI
CLI у Hermes Agent — это полноценный терминальный интерфейс (TUI), а не веб-морда. Здесь есть многострочное редактирование, автодополнение слэш-команд, история переписки, прерывание с перенаправлением и потоковый вывод инструментов. Сделано для тех, кто живёт в терминале.
Одна команда — hermes setup --portal — и можно сразу набирать hermes chat. Подробнее в разделе Nous Portal.
У Hermes есть и современный TUI с модальными оверлеями, выделением мышью и неблокирующим вводом. Запускается через hermes --tui — см. руководство по TUI.
Запуск CLI
# Запуск интерактивной сессии (по умолчанию)
hermes
# Режим одного запроса (неинтерактивный)
hermes chat -q "Hello"
# Одиночный запрос из файла или stdin — ничего не интерпретируется оболочкой,
# так что произвольный текст (кавычки, $(...), обратные кавычки) приходит как есть
hermes chat --query-file prompt.txt
hermes chat --query-file - < prompt.txt
# С конкретной моделью
hermes chat --model "anthropic/claude-sonnet-4"
# С конкретным провайдером
hermes chat --provider nous # Использовать Nous Portal
hermes chat --provider openrouter # Принудительно OpenRouter
# С конкретными наборами инструментов
hermes chat --toolsets "web,terminal,skills"
# Старт с одним или несколькими предзагруженными навыками
hermes -s hermes-agent-dev,github-auth
hermes chat -s github-pr-workflow -q "open a draft PR"
# Возобновление прошлых сессий
hermes --continue # Возобновить последнюю CLI-сессию (-c)
hermes --resume <session_id> # Возобновить конкретную сессию по ID (-r)
hermes --resume latest # Возобновить самую свежую сессию (то же, что -c)
hermes --resume latest --in ./dir # Возобновить последнюю сессию ./dir, оставшись в ./dir
# Подробный режим (отладочный вывод)
hermes chat --verbose
# Изолированный git worktree (чтобы гонять несколько агентов параллельно)
hermes -w # Интерактивный режим в worktree
hermes -w -z "Fix issue #123" # Одиночный запрос в worktree
Уборка worktree
Сессии hermes -w создают одноразовые worktree в каталоге <repo>/.worktrees/.
На старте автоматически отрабатывает осторожный сборщик мусора: он трогает
только чистые, полностью слитые временные деревья старше определённого
возраста. Но сохранённые деревья и слитые локальные ветки на загруженной
машине всё равно копятся. Разгрести их можно вручную:
hermes worktree list # аудит: возраст, размер, вердикт и причина по каждому дереву
hermes worktree list --json # машиночитаемый аудит (деревья, внешние деревья, ветки)
hermes worktree prune # удалить безопасные деревья + слитые ветки
hermes worktree prune --dry-run # показать план, ничего не меняя
hermes worktree prune --older-than 7 # убирать только деревья, простаивающие 7+ дней
hermes worktree prune --trees-only # локальные ветки не трогать
hermes worktree prune --branches-only # worktree не трогать
Worktree, зарегистрированные вне .worktrees/ (созданные вручную или другим
инструментом), в выводе list показываются только для чтения и никогда не удаляются.
Единственное исключение — метаданные: регистрации, чей каталог больше не существует,
снимаются через git worktree prune (файлы не трогаются). --older-than DAYS
только сужает то, что будет убрано: дерево с настоящей работой сохраняется в любом
возрасте, что бы ни говорил флаг.
Внутри сессии то же самое делает /worktree prune [--dry-run] — и никогда не
затрагивает дерево, в котором сессия запущена.
Что гарантированно уцелеет — в любом режиме и при любом возрасте:
- Незакоммиченные изменения в отслеживаемых файлах не удаляются.
- Уникальные неотправленные коммиты не удаляются. Коммиты, попавшие в
upstream через rebase или squash, распознаются по эквивалентности патчей
через
git cherryи считаются слитыми — именно это позволяет наконец вычистить главную утечку места, «PR слит, а дерево живёт вечно». - Репозитории без remote оцениваются относительно локального ствола
(
main/master, иначе — ветка, выбранная в основном worktree): убираются только те деревья и ветки, чьи коммиты достижимы из этого ствола или эквивалентны ему по патчам. Если ствола для сравнения нет, сохраняются все деревья и ветки. - Ветки открытых PR, уже отправленные в origin, освобождают диск без потерь:
если голова ветки у чистого дерева совпадает с тем, что лежит в
origin(проверяется однимgit ls-remoteза проход), чекаут избыточен — дерево удаляется, но ветка-ссылка сохраняется, так что восстановить эту линию можно одной командойgit worktree add .worktrees/<name> <branch>. Если удалённый репозиторий недоступен, дерево остаётся на месте. - Деревья, занятые работающей сессией hermes, не трогаются.
- Черновики без отслеживания (заготовки описаний PR, заметки) перед
удалением дерева уезжают в архив
~/.hermes/archive/worktree-prune/, а не в небытие. - Ветки удаляются по содержимому, а не по имени: любая локальная ветка, все
коммиты которой уже есть в upstream, безопасна для удаления; ветки с
уникальной работой, ветки, на которые кто-то переключён, и
main/master/developсохраняются всегда.
Тот же осторожный сборщик мусора запускается и из планировщика cron (не чаще
раза в 6 часов, в фоне) — так что на машинах, где работает только шлюз и
никто днями не запускает hermes -w, слитые временные деревья не копятся
между CLI-сессиями.
Когда в .worktrees/ набирается больше 10 деревьев или 5 ГБ, при запуске
появляется однострочное напоминание с этими командами.
Управление плагинами
Команды hermes plugins управляют и нативными плагинами Hermes, и переносимыми
пакетами Agent Plugins v1 — через один и тот же opt-in-процесс:
hermes plugins install owner/repository --no-enable
hermes plugins list
hermes plugins enable <plugin-name>
hermes plugins disable <plugin-name>
hermes plugins update <plugin-name>
hermes plugins remove <plugin-name>
Переносимые пакеты остаются отключёнными, пока их явно не включат. Сейчас Hermes загружает из них переносимые Agent Skills и stdio MCP-записи. Точный поддерживаемый набор возможностей и границы доверия — в руководстве разработчика плагинов.
Раскладка интерфейса
Баннер Hermes CLI, поток переписки и закреплённое поле ввода — отрисованы как стабильная иллюстрация в документации, а не как хрупкий текстовый арт.
Приветственный баннер сразу показывает вашу модель, бэкенд терминала, рабочую директорию, доступные инструменты и установленные навыки.
Строка состояния
Над полем ввода держится постоянная строка состояния, которая обновляется в реальном времени:
☤ claude-sonnet-4-20250514 │ 12.4K/200K │ [██████░░░░] 6% │ $0.06 │ 15m
| Элемент | Описание |
|---|---|
| Название модели | Текущая модель (обрезается, если длиннее 26 символов) |
| Счётчик токенов | Использованные токены контекста / максимальное окно контекста; ~ означает оценку |
| Шкала контекста | Визуальный индикатор заполнения с цветовыми порогами |
| Стоимость | Оценочная цена сессии (или n/a для неизвестных и бесплатных моделей). Тарифы берутся из встроенной в Hermes официальной таблицы цен, затем из списка /models провайдера; при работе напрямую через API самого вендора (OpenAI, xAI, Anthropic, Google, DeepSeek, Xiaomi) модель, которой нет ни там, ни там, считается по прайсу вендора из models.dev. Прокси, релеи и кастомные эндпоинты с тем же id модели остаются на n/a и эту цену не наследуют. |
| 🗜️ N | Счётчик сжатий контекста — сколько раз текущая сессия автоматически сжималась. Появляется после первого срабатывания сжатия. |
| ▶ N | Активные фоновые задачи — сколько промптов /bg ещё выполняется в текущей сессии. Показывается, пока в работе хотя бы одна задача. |
| Длительность | Прошедшее время сессии |
| Заголовок сессии | Как только у сессии появляется заголовок, он показывается золотым значком, прижатым к правому краю. Длинные заголовки обрезаются раньше, чем начинают вытеснять основные поля модели и контекста. |
| ⚠ YOLO | Предупреждение о режиме YOLO — горит, когда включён HERMES_YOLO_MODE (через hermes --yolo при запуске или /yolo посреди сессии). Дублирует предупреждение в строке баннера, чтобы вы точно не забыли про режим авто-одобрения. |
Знак ~ перед счётчиком контекста или процентом означает, что в значение вошла локальная оценка. Это же касается /status и /context в шлюзе, TUI и индикатора контекста в десктопе. Нетронутые данные об использовании от провайдера идут без ~, а якорь провайдера плюс новые неоценённые сообщения — уже с ним. Команда /context сообщает, какой источник выбран. Разбивки по категориям, свободному месту, навыкам и наборам инструментов — всегда локальная оценка, даже когда общая занятость взята из данных провайдера. На решения о сжатии эти подписи не влияют и дополнительных запросов к провайдеру не делают.
Строка подстраивается под ширину терминала: полная раскладка при ≥ 76 колонок, компактная при 52–75, минимальная (модель + длительность, плюс значок YOLO, когда он активен) ниже 52.
Цветовая кодировка контекста:
| Цвет | Порог | Что означает |
|---|---|---|
| Зелёный | < 50% | Места ещё полно |
| Жёлтый | 50–80% | Постепенно заполняется |
| Оранжевый | 80–95% | Подбираемся к лимиту |
| Красный | ≥ 95% | Почти переполнение — подумайте про /compress |
Команда /usage даёт детальную разбивку, включая стоимость по категориям (входные токены против выходных).
На провайдере openai-codex /usage также показывает накопленные сбросы лимита использования на вашем аккаунте ChatGPT («You have N resets banked - use /usage reset to activate»). /usage reset активирует один накопленный сброс и полностью восстанавливает и 5-часовой, и недельный лимит. Hermes отказывается активировать сброс, пока лимиты не исчерпаны (накопленный сброс восстанавливает лимит целиком, так что тратить его раньше времени — впустую) — чтобы всё же активировать, передайте /usage reset --force.
Отображение возобновления сессии
При возобновлении прошлой сессии (hermes -c или hermes --resume <id>) между баннером и полем ввода появляется панель «Previous Conversation» с компактным пересказом истории. Детали и настройка описаны в разделе Сессии — пересказ переписки при возобновлении.
Горячие клавиши
В macOS F6/F7 — это физические функциональные клавиши, а не медиа- и системные кнопки верхнего ряда. Зажмите Fn (на новых клавиатурах — клавиша с глобусом) и нажмите функциональную клавишу или включите Use F1, F2, etc. keys as standard function keys в System Settings → Keyboard → Keyboard Shortcuts → Function Keys. Надёжная замена в терминале — Ctrl+T вместо F6 и Ctrl+R вместо F7.
| Клавиша | Действие |
|---|---|
Enter | Отправить сообщение |
Alt+Enter, Ctrl+J или Shift+Enter | Новая строка (многострочный ввод). Shift+Enter требует терминала, который отличает её от Enter — см. ниже. В Windows Terminal Alt+Enter перехватывается самим терминалом (переключение полноэкранного режима); используйте Ctrl+Enter или Ctrl+J. |
Alt+V | Вставить изображение из буфера обмена, если терминал это поддерживает |
Ctrl+V | Вставить текст и при возможности прихватить изображения из буфера |
Ctrl+B | Старт/стоп записи голоса, когда включён голосовой режим (voice.record_key, по умолчанию: ctrl+b) |
Ctrl+G | Открыть текущий буфер ввода в $EDITOR (vim/nvim/nano/VS Code и т. д.). Сохраните и выйдите — отредактированный текст уйдёт как следующий промпт. Удобно для длинных промптов в несколько абзацев. |
Ctrl+X Ctrl+E | Альтернативная привязка во вкусе Emacs для внешнего редактора (поведение то же, что у Ctrl+G). |
Ctrl+S | Отложить промпт. Убирает текущий черновик в сторону и очищает поле ввода, чтобы отправить что-то другое первым. Нажмите Ctrl+S ещё раз на пустом поле ввода, чтобы вернуть черновик (курсор в конце, прикреплённые изображения на месте). Повторные нажатия складывают черновики в стек, а не перезаписывают друг друга, так что ранний черновик никогда не теряется молча — если отложено два и больше, Ctrl+S открывает панель просмотра (↑/↓ для навигации, Enter — вернуть, D — удалить, Esc или Ctrl+S — закрыть). Значок 📌 N в строке состояния показывает, сколько черновиков отложено. Многострочные черновики восстанавливаются точно, включая пустые строки. Стек черновиков живёт только в памяти на время сессии — на диск ничего не пишется, потому что в черновиках часто бывают секреты. |
Ctrl+T / F6 | Открыть полноэкранный монитор текущей работы (субагенты и фоновые процессы), не потеряв черновик в композере. Живой док появляется над строкой статуса сам; стрелки выбирают работника или процесс, Enter показывает его свежий лог, s корректирует работника, x запрашивает остановку с подтверждением. См. Наблюдение за субагентами. |
Ctrl+R / F7 | Переключить живой док работы между многострочным превью и одной строкой сводки, не уводя фокус из композера. Ctrl+R — надёжная замена, когда macOS занимает ряд функциональных клавиш. Помимо субагентов и фоновых процессов, док показывает в верхней строке текущую цель /goal (активную, запаркованную или на паузе, с числом использованных ходов), а в нижних строках — промпты, ждущие в /queue. |
Ctrl+C | Прервать агента (двойное нажатие в течение 2 с принудительно завершает работу) |
Ctrl+D | Выход |
Ctrl+Z | Свернуть Hermes в фон (только Unix). Чтобы вернуть — наберите fg в оболочке. |
Tab | Принять автоподсказку (призрачный текст) или автодополнить слэш-команду |
!<command> | Режим shell — выполнить shell-команду самостоятельно, не тратя ход модели (например, !git status, !pytest -x). См. ниже. |
Превью многострочной вставки. Когда вы вставляете многострочный блок, CLI выводит компактное однострочное превью ([pasted: 47 lines, 1,842 chars — press Enter to send]), а не вываливает весь текст в скроллбэк. Отправляется при этом полное содержимое — превью нужно только для аккуратного вида.
Режим shell через !
Начните строку с !, чтобы выполнить её как shell-команду вместо отправки агенту:
> !git status
> !ls -la
> !pytest -x tests/hermes_cli
- Бесплатно. Модель вообще не вызывается — ни обращения к API, ни токенов, ни задержки.
- Ничего не попадает в переписку. Команда и её вывод не добавляются в историю, так что контекст остаётся чистым, а кеш промпта не трогается.
- Выполняется на вашей машине, в рабочей директории сессии. С локальным бэкендом терминала по умолчанию
!pwdпокажет то же, что увидел бы агент. Удалённый или изолированныйterminal.backend(ssh,docker, …) для!-команд не используется — они всегда выполняются на хосте, где работает сам Hermes, поэтому!hostnameназовёт вашу машину, а инструментterminalу агента — бэкенд. Чтобы выполнить что-то внутри бэкенда, попросите агента (или откройте шелл на целевой машине). А вот автодополнение путей в композере настроенному бэкенду следует и показывает файловую систему цели. - Подтверждения по-прежнему действуют. Опасная команда (
rm -rf, запись в~/.hermes/config.yamlи т. п.) проходит через то же окно подтверждения, что и инструментterminalу агента.!— это способ сэкономить время и токены, а не обойти безопасность. - Ненулевой код завершения показывается. После вывода упавшей команды печатается
! exited <code>. - Одинокий
!печатает однострочную подсказку по использованию.
Режим shell работает только в CLI. Платформы-шлюзы (Discord, Telegram, Slack) и запуски по cron его игнорируют — у тех пользователей уже есть свои оболочки.
Удаление markdown в финальных ответах. В финальных репликах агента CLI вырезает самые шумные блоки markdown и обёртки **bold** / *italic*, чтобы текст читался как нормальная терминальная проза, а не как сырой исходник. Блоки кода и списки сохраняются. На платформы-шлюзы и результаты инструментов это не распространяется — там markdown остаётся для родного рендеринга.
Слэш-команды
Наберите /, чтобы открыть выпадающий список автодополнения. Hermes поддерживает большой набор CLI-команд через слэш, динамические команды навыков и пользовательские быстрые команды.
Частые примеры:
| Команда | Описание |
|---|---|
/help | Показать справку по командам |
/model | Показать или сменить текущую модель |
/tools | Перечислить доступные сейчас инструменты |
/skills browse | Просмотреть хаб навыков и официальные опциональные навыки |
/bg <prompt> | Запустить промпт в отдельной фоновой сессии |
/btw <question> | Задать побочный вопрос о текущем разговоре, не прерывая его |
/skin | Показать или переключить активную тему CLI |
/voice on | Включить голосовой режим CLI (нажмите Ctrl+B для записи) |
/voice tts | Переключить озвучку ответов Hermes |
/reasoning high | Повысить усилие рассуждения |
/title My Session | Дать имя текущей сессии |
/status | Показать сведения о сессии — модель/профиль/токены/длительность — а следом локальный блок Session recap (счётчики последних ходов, самые частые инструменты, затронутые файлы, последний промпт пользователя и ответ ассистента). Считается локально, без обращения к LLM. |
/context [all] | Визуальная разбивка использования контекста — сетка из глифов-блоков плюс таблица токенов по категориям (системный промпт / инструменты / навыки / память / переписка / свободное место). /context all добавляет расход по каждому навыку и набору инструментов. |
/sessions | Открыть интерактивный выбор сессий прямо в классическом CLI (тот же экран, что и в TUI). Набирайте для фильтрации, стрелки для навигации, Enter для возобновления. |
Полные списки встроенных CLI- и messaging-команд смотрите в Справочнике по слэш-командам.
Про настройку, провайдеров, тонкую подстройку тишины и голос в messaging/Discord читайте в разделе Голосовой режим.
Регистр в командах не важен — /HELP работает так же, как /help. Установленные навыки тоже автоматически становятся слэш-командами.
Быстрые команды
Можно завести собственные команды, которые мгновенно выполняют shell-команды без обращения к LLM. Работают и в CLI, и на платформах messaging (Telegram, Discord и т. д.).
# ~/.hermes/config.yaml
quick_commands:
status:
type: exec
command: systemctl status hermes-agent
gpu:
type: exec
command: nvidia-smi --query-gpu=utilization.gpu,memory.used --format=csv,noheader
restart:
type: alias
target: /gateway restart
После этого в любом чате доступны /status, /gpu или /restart. Больше примеров — в руководстве по конфигурации.
Предзагрузка навыков при старте
Если вы заранее знаете, какие навыки нужны для сессии, передайте их прямо при запуске:
hermes -s hermes-agent-dev,github-auth
hermes chat -s github-pr-workflow -s github-auth
Hermes подгружает каждый указанный навык в промпт сессии ещё до первого хода. Флаг работает одинаково и в интерактивном режиме, и в режиме одного запроса.
Постоянная автозагрузка через конфиг
Чтобы одни и те же навыки были активны с самого начала каждой новой сессии — в CLI, TUI, шлюзе, cron и API-сессиях одинаково, — задайте skills.auto_load в config.yaml:
skills:
auto_load:
- hermes-agent-dev
- github-pr-workflow
Каждая запись — имя навыка. Список разрешается один раз, когда впервые собирается системный промпт сессии, и отрендеренные байты переиспользуются на протяжении всего разговора (смена модели, сжатие), так что кэширование промпта не ломается; правки конфига вступают в силу в следующей сессии. Отсутствующие или отключённые навыки пишут предупреждение в лог и пропускаются. Имена из -s, пересекающиеся со списком, загружаются один раз.
--ignore-rules (то же, что HERMES_IGNORE_RULES=1) пропускает автозагрузку вместе с AGENTS.md, SOUL.md, .cursorrules и подстановкой памяти; явные навыки из -s всё равно загружаются. Настройка действует в пределах профиля: config.yaml каждого профиля управляет собственным списком.
Слэш-команды навыков
Каждый навык, установленный в ~/.hermes/skills/, автоматически регистрируется как слэш-команда. Командой становится имя навыка:
/gif-search funny cats
/axolotl help me fine-tune Llama 3 on my dataset
/github-pr-workflow create a PR for the auth refactor
# Просто имя навыка загружает его, и агент сам спросит, что вам нужно:
/excalidraw
Личности
Задайте готовую личность, чтобы поменять тон агента:
/personality pirate
/personality kawaii
/personality concise
Встроенные личности: helpful, concise, technical, creative, teacher, kawaii, catgirl, pirate, shakespeare, surfer, noir, uwu, philosopher, hype.
Чтобы вернуться к настройкам по умолчанию (без наложенной личности), используйте /personality none — default и neutral тоже работают.
Свои личности тоже можно описать в ~/.hermes/config.yaml:
personalities:
helpful: "You are a helpful, friendly AI assistant."
kawaii: "You are a kawaii assistant! Use cute expressions..."
pirate: "Arrr! Ye be talkin' to Captain Hermes..."
# Add your own!
Многострочный ввод
Ввести многострочное сообщение можно двумя способами:
Alt+Enter,Ctrl+JилиShift+Enter— вставляют новую строку- Продолжение через обратный слэш — завершите строку символом
\, чтобы продолжить:
❯ Write a function that:\
1. Takes a list of numbers\
2. Returns the sum
По умолчанию включены Ctrl+J и продолжение через обратный слэш — как в многострочных сочетаниях Claude Code / Codex / OpenCode. В поддерживаемых терминалах вроде iTerm2 Hermes также запрашивает расширенную отчётность о клавишах, чтобы Shift+Enter приходил как отдельная клавиша переноса строки. Если ваш терминал шлёт LF на обычный Enter и вам нужен старый резервный вариант с отправкой по Ctrl+J, отключите новое поведение:
# ~/.hermes/config.yaml
display:
cli_multiline_shortcuts: false
Вставка многострочного текста поддерживается — нажмите любую из клавиш для переноса строки выше или просто вставьте содержимое напрямую.
В терминалах с клавиатурным протоколом Kitty перенос строки вставляет и Alt+Enter на цифровой клавиатуре — в том числе рядом со свёрнутой вставкой. Модифицированные клавиши навигации на цифровом блоке ведут себя так же, как их обычные аналоги.
Совместимость с Shift+Enter
Большинство терминалов по умолчанию шлют одинаковую байтовую последовательность для Enter и Shift+Enter, поэтому приложения их не различают. Hermes распознаёт Shift+Enter только тогда, когда терминал отправляет отдельную последовательность через клавиатурный протокол Kitty или режим modifyOtherKeys от xterm.
| Терминал | Статус |
|---|---|
| Kitty, foot, WezTerm, Ghostty | Отдельный Shift+Enter включён по умолчанию |
| iTerm2 (свежий), Alacritty, терминал VS Code, Warp | Поддерживается после включения протокола Kitty в настройках |
| Windows Terminal Preview 1.25+ | Поддерживается после включения протокола Kitty в настройках |
| macOS Terminal.app, штатный Windows Terminal (stable) | Не поддерживается — Shift+Enter неотличим от Enter |
Там, где терминал их не различает, Alt+Enter и Ctrl+J по умолчанию продолжают работать. Отдельно про Windows Terminal: Alt+Enter перехватывается терминалом (переключает полноэкранный режим) и до Hermes не доходит — для переноса строки используйте Ctrl+Enter (он приходит как Ctrl+J) или сразу Ctrl+J.
Перенаправление агента посреди хода
Пока агент работает, можно отправить поправку, не начиная новый ход:
- Наберите новое сообщение и нажмите Enter — оно перенаправит активный ход вашей поправкой
Ctrl+C— прервать текущую операцию (нажмите дважды за 2 с, чтобы принудительно выйти)- Уже выполненная работа инструментов и показанные рассуждения остаются в контексте
- Запущенный инструмент сначала доходит до безопасной точки, и только потом применяется поправка
Режим ввода при занятом агенте
Ключ конфигурации display.busy_input_mode задаёт, что произойдёт, если нажать Enter, пока агент работает:
| Режим | Поведение |
|---|---|
"interrupt" (по умолчанию) | Ваше сообщение перенаправляет активный ход. Генерация модели перезапускается с сохранением показанных рассуждений и уже выполненной работы. Запущенная команда терминала в переднем плане уходит в фон (её не убивают — вы получите уведомление о завершении), чтобы ваше сообщение прочитали сразу; остальные запущенные инструменты сначала доработают |
"queue" | Сообщение молча уходит в очередь и отправляется следующим ходом, когда агент закончит |
"steer" | Сообщение вливается в текущий запуск через /steer и доходит до агента после следующего вызова инструмента — без прерывания и без нового хода |
# ~/.hermes/config.yaml
display:
busy_input_mode: "steer" # или "queue", или "interrupt" (по умолчанию)
Режим "queue" готовит отдельный последующий ход. Режим "steer" всегда ждёт ближайшей границы после результата инструмента. Режим "interrupt" по умолчанию отвечает быстрее во время генерации модели и при этом не отменяет уже запущенный инструмент; долгая команда terminal в переднем плане (сборка, опросник) уходит в фон, поэтому агент видит ваше сообщение сразу, а не после её завершения. Чтобы отменить ход целиком вместе с его текущей работой, используйте /stop. Неизвестные значения откатываются к "interrupt".
У "steer" есть два автоматических запасных хода: если агент ещё не начал работу или если прикреплены изображения, сообщение откатывается к поведению "queue", чтобы ничего не потерялось.
В любом режиме /queue <prompt> явно ставит в очередь следующий ход, а /queue list, /queue rm N, /queue edit N … и /queue move A B сразу работают с очередью ожидания, даже посреди выполнения. Что ждёт своей очереди, видно в живом доке работы.
Переключить режим можно и прямо в CLI:
/busy queue
/busy steer
/busy interrupt
/busy status
Первый раз, когда вы нажмёте Enter во время работы Hermes, он выведет однострочное напоминание про ручку /busy. Срабатывает один раз на установку; onboarding.seen.busy_input_prompt в config.yaml фиксирует, что подсказка уже была показана. Удалите ключ, чтобы увидеть подсказку снова.
Сворачивание в фон
На Unix-системах нажмите Ctrl+Z, чтобы свернуть Hermes в фон — как любой другой терминальный процесс. Оболочка напечатает подтверждение:
Hermes Agent has been suspended. Run `fg` to bring Hermes Agent back.
Наберите fg в оболочке — и сессия возобновится ровно с того места, где вы остановились. На Windows это не работает.
Отображение прогресса инструментов
CLI показывает анимированную обратную связь, пока агент работает:
Анимация размышления (во время вызовов API):
◜ (。•́︿•̀。) pondering... (1.2s)
◠ (⊙_⊙) contemplating... (2.4s)
✧٩(ˊᗜˋ*)و✧ got it! (3.1s)
Лента выполнения инструментов:
┊ 💻 terminal `ls -la` (0.3s)
┊ 🔍 web_search (1.2s)
┊ 📄 web_extract (2.1s)
Режимы отображения перебираются командой /verbose: off → new → all → verbose. Эту команду можно включить и для платформ messaging — см. конфигурацию.
Длина превью инструмента
Ключ display.tool_preview_length задаёт максимальное число символов в строках превью вызова инструмента (например, пути к файлам, терминальные команды). Значение по умолчанию — 0, то есть без ограничения: пути и команды показываются целиком.
# ~/.hermes/config.yaml
display:
tool_preview_length: 80 # Обрезать превью инструментов до 80 символов (0 = без лимита)
Удобно на узких терминалах или когда в аргументах инструмента попадаются очень длинные пути к файлам.
Управление сессиями
Возобновление сессий
Когда вы выходите из CLI-сессии, выводится команда для её возобновления:
Resume this session with:
hermes --resume 20260225_143052_a1b2c3
Session: 20260225_143052_a1b2c3
Duration: 12m 34s
Messages: 28 (5 user, 18 tool calls)
Варианты возобновления:
hermes --continue # Возобновить последнюю CLI-сессию
hermes -c # Короткая форма
hermes -c "my project" # Возобновить именованную сессию (последнюю в линии)
hermes --resume 20260225_143052_a1b2c3 # Возобновить конкретную сессию по ID
hermes --resume "refactoring auth" # Возобновить по заголовку
hermes --resume latest # Возобновить самую свежую сессию (то же, что -c)
hermes --resume latest --in ./my-project # Последняя сессия рабочего пространства ./my-project
hermes -r 20260225_143052_a1b2c3 # Короткая форма
Возобновление восстанавливает всю историю переписки из SQLite. Агент видит все прошлые сообщения, вызовы инструментов и ответы — будто вы и не уходили.
Чтобы дать имя текущей сессии, наберите внутри чата /title My Session Name либо из командной строки выполните hermes sessions rename <id> <title>. Список прошлых сессий открывается через hermes sessions list.
Хранение сессий
CLI-сессии лежат в SQLite-базе состояния Hermes по пути ~/.hermes/state.db. База хранит:
- метаданные сессии (ID, заголовок, временные метки, счётчики токенов)
- историю сообщений
- родословную между сжатыми и возобновлёнными сессиями
- индексы полнотекстового поиска, которые использует
session_search
Некоторые адаптеры messaging вдобавок держат рядом с базой пофайловые транскрипты для каждой платформы, но сам CLI возобновляется из SQLite-хранилища сессий.
Сжатие контекста
Длинные диалоги автоматически сворачиваются в сводку, когда приближаются к пределу контекста:
# В ~/.hermes/config.yaml
compression:
enabled: true
threshold: 0.50 # Сжимать при 50% лимита контекста (по умолчанию)
# Модель для суммаризации настраивается под auxiliary:
auxiliary:
compression:
model: "" # Оставьте пустым, чтобы взять основную чат-модель (по умолчанию). Или закрепите дешёвую быструю модель, например "google/gemini-3-flash-preview".
Когда сжатие срабатывает, средние ходы сворачиваются в сводку, а первые 3 и последние 20 ходов сохраняются всегда.
Фоновые сессии
Запустите промпт в отдельной фоновой сессии и продолжайте пользоваться CLI для другой работы:
/bg Analyze the logs in /var/log and summarize any errors from today
Hermes тут же подтверждает задачу и возвращает вам управление:
🔄 Background task #1 started: "Analyze the logs in /var/log and summarize..."
Task ID: bg_143022_a1b2c3
Как это устроено
Каждый промпт /bg порождает полностью отдельную сессию агента в демон-потоке:
- Изолированный диалог — фоновый агент ничего не знает об истории вашей текущей сессии. Он получает только тот промпт, что вы дали.
- Та же конфигурация — фоновый агент наследует от текущей сессии вашу модель, провайдера, наборы инструментов, настройки рассуждения и запасную модель.
- Без блокировки — основная сессия остаётся полностью интерактивной. Можно общаться, выполнять команды и даже запускать новые фоновые задачи.
- Несколько задач — фоновых задач можно держать сразу несколько. У каждой свой нумерованный ID.
Результаты
Когда фоновая задача завершается, результат приходит панелью в ваш терминал:
╭─ ☤ Hermes (background #1) ──────────────────────────────────╮
│ Found 3 errors in syslog from today: │
│ 1. OOM killer invoked at 03:22 — killed process nginx │
│ 2. Disk I/O error on /dev/sda1 at 07:15 │
│ 3. Failed SSH login attempts from 192.168.1.50 at 14:30 │
╰──────────────────────────────────────────────────────────────╯
Если задача провалится, вы увидите уведомление об ошибке. А когда в конфиге включён display.bell_on_complete, по завершении задачи звенит терминальный звонок.
Сценарии использования
- Долгие исследования — «/bg research the latest developments in quantum error correction», пока вы работаете над кодом
- Обработка файлов — «/bg analyze all Python files in this repo and list any security issues», пока вы продолжаете диалог
- Параллельные расследования — запустите несколько фоновых задач, чтобы одновременно копать в разных направлениях
Фоновые сессии не попадают в вашу основную историю переписки. Это самостоятельные сессии со своим ID задачи (например, bg_143022_a1b2c3).
Тихий режим
По умолчанию CLI работает в тихом режиме, который:
- глушит подробное логирование инструментов
- включает kawaii-анимацию обратной связи
- держит вывод чистым и дружелюбным
Для отладочного вывода:
hermes chat --verbose