Hermes Agent
Настройка, расширение и участие в разработке Hermes Agent.
Метаданные навыка
| Источник | Встроенный (установлен по умолчанию) |
| Путь | skills/autonomous-ai-agents/hermes-agent |
| Версия | 2.1.0 |
| Автор | Hermes Agent + Teknium |
| Лицензия | MIT |
| Платформы | linux, macos, windows |
| Теги | hermes, setup, configuration, multi-agent, spawning, cli, gateway, development |
| Связанные навыки | claude-code, codex, opencode |
Справочник: полный SKILL.md
Ниже приведено полное определение навыка, которое Hermes загружает при его активации. Именно это агент видит как инструкции во время работы навыка.
Hermes Agent
Hermes Agent — open-source фреймворк для ИИ-агентов от Nous Research, работающий в терминале, мессенджерах и IDE. По категории он стоит рядом с Claude Code (Anthropic), Codex (OpenAI) и OpenClaw — автономные агенты для написания кода и выполнения задач, взаимодействующие с системой через вызов инструментов. Hermes работает с любым LLM-провайдером (OpenRouter, Anthropic, OpenAI, DeepSeek, локальные модели и ещё 15+), поддерживает Linux, macOS и WSL.
Чем Hermes отличается от остальных:
- Самообучение через навыки — Hermes накапливает опыт, сохраняя многоразовые процедуры в виде навыков. Когда агент решает сложную задачу, находит удачный рабочий процесс или получает поправку, он может зафиксировать это знание как документ навыка, который будет загружаться в следующих сессиях. Со временем навыки накапливаются, и агент становится всё лучше в задачах, характерных для вашей среды.
- Постоянная память между сессиями — запоминает, кто вы, ваши предпочтения, детали окружения и усвоенные уроки. Подключаемые провайдеры памяти (встроенный, Honcho, Mem0 и другие) позволяют выбрать удобный вариант.
- Мультиплатформенный шлюз — один и тот же агент работает в Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email и ещё 10+ платформах с полным доступом к инструментам, а не просто в режиме чата.
- Независимость от провайдера — меняйте модели и провайдеры прямо в процессе работы, не меняя больше ничего. Пулы учётных данных автоматически ротируют несколько API-ключей.
- Профили — запускайте несколько независимых экземпляров Hermes с изолированными конфигурациями, сессиями, навыками и памятью.
- Расширяемость — плагины, MCP-серверы, пользовательские инструменты, вебхук-триггеры, cron-расписание и вся экосистема Python.
Hermes применяют для разработки ПО, исследований, системного администрирования, анализа данных, создания контента, домашней автоматизации и любых других задач, где нужен ИИ-агент с постоянным контекстом и полным доступом к системе.
Этот навык помогает эффективно работать с Hermes Agent — настраивать его, конфигурировать функции, запускать дополнительные экземпляры агента, решать проблемы, находить нужные команды и параметры, а также разбираться в устройстве системы, когда требуется её расширить или внести вклад в разработку.
Документация: https://hermes-agent.nousresearch.com/docs/
Быстрый старт
# Установка
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# Интерактивный чат (по умолчанию)
hermes
# Одиночный запрос
hermes chat -q "What is the capital of France?"
# Мастер настройки
hermes setup
# Смена модели/провайдера
hermes model
# Проверка работоспособности
hermes doctor
Справочник CLI
Глобальные флаги
hermes [flags] [command]
--version, -V Show version
--resume, -r SESSION Resume session by ID or title
--continue, -c [NAME] Resume by name, or most recent session
--worktree, -w Isolated git worktree mode (parallel agents)
--skills, -s SKILL Preload skills (comma-separate or repeat)
--profile, -p NAME Use a named profile
--yolo Skip dangerous command approval
--pass-session-id Include session ID in system prompt
Если не указана подкоманда, по умолчанию запускается chat.
Chat
hermes chat [flags]
-q, --query TEXT Single query, non-interactive
-m, --model MODEL Model (e.g. anthropic/claude-sonnet-4)
-t, --toolsets LIST Comma-separated toolsets
--provider PROVIDER Force provider (openrouter, anthropic, nous, etc.)
-v, --verbose Verbose output
-Q, --quiet Suppress banner, spinner, tool previews
--checkpoints Enable filesystem checkpoints (/rollback)
--source TAG Session source tag (default: cli)
Конфигурация
hermes setup [section] Interactive wizard (model|terminal|gateway|tools|agent)
hermes model Interactive model/provider picker
hermes config View current config
hermes config edit Open config.yaml in $EDITOR
hermes config set KEY VAL Set a config value
hermes config path Print config.yaml path
hermes config env-path Print .env path
hermes config check Check for missing/outdated config
hermes config migrate Update config with new options
hermes auth Interactive credential manager
hermes auth add PROVIDER Add OAuth or API-key credential (e.g. nous, openai-codex, qwen-oauth)
hermes auth list List stored credentials
hermes auth remove PROVIDER Remove a stored credential
hermes doctor [--fix] Check dependencies and config
hermes status [--all] Show component status
Инструменты и навыки
hermes tools Interactive tool enable/disable (curses UI)
hermes tools list Show all tools and status
hermes tools enable NAME Enable a toolset
hermes tools disable NAME Disable a toolset
hermes skills list List installed skills
hermes skills search QUERY Search the skills hub
hermes skills install ID Install a skill (ID can be a hub identifier OR a direct https://…/SKILL.md URL; pass --name to override when frontmatter has no name)
hermes skills inspect ID Preview without installing
hermes skills config Enable/disable skills per platform
hermes skills check Check for updates
hermes skills update Update outdated skills
hermes skills uninstall N Remove a hub skill
hermes skills publish PATH Publish to registry
hermes skills browse Browse all available skills
hermes skills tap add REPO Add a GitHub repo as skill source
MCP-серверы
hermes mcp serve Run Hermes as an MCP server
hermes mcp add NAME Add an MCP server (--url or --command)
hermes mcp remove NAME Remove an MCP server
hermes mcp list List configured servers
hermes mcp test NAME Test connection
hermes mcp configure NAME Toggle tool selection
Как встроенный MCP-клиент подключает серверы (stdio/HTTP), автоматически обнаруживает их инструменты и предоставляет их как полноценные инструменты, а также каталожная установка (hermes mcp install <name>): skill_view(name="hermes-agent", file_path="references/native-mcp.md").
Шлюз (платформы обмена сообщениями)
hermes gateway run Start gateway foreground
hermes gateway install Install as background service
hermes gateway start/stop Control the service
hermes gateway restart Restart the service
hermes gateway status Check status
hermes gateway setup Configure platforms
Поддерживаемые платформы: Telegram, Discord, Slack, WhatsApp, Signal, Email, SMS, Matrix, Mattermost, Home Assistant, DingTalk, Feishu, WeCom, BlueBubbles (iMessage), Weixin (WeChat), API Server, Webhooks. Open WebUI подключается через адаптер API Server.
Документация по платформам: https://hermes-agent.nousresearch.com/docs/user-guide/messaging/
Сессии
hermes sessions list List recent sessions
hermes sessions browse Interactive picker
hermes sessions export OUT Export to JSONL
hermes sessions rename ID T Rename a session
hermes sessions delete ID Delete a session
hermes sessions prune Clean up old sessions (--older-than N days)
hermes sessions stats Session store statistics
Cron-задания
hermes cron list List jobs (--all for disabled)
hermes cron create SCHED Create: '30m', 'every 2h', '0 9 * * *'
hermes cron edit ID Edit schedule, prompt, delivery
hermes cron pause/resume ID Control job state
hermes cron run ID Trigger on next tick
hermes cron remove ID Delete a job
hermes cron status Scheduler status
Вебхуки
hermes webhook subscribe N Create route at /webhooks/<name>
hermes webhook list List subscriptions
hermes webhook remove NAME Remove a subscription
hermes webhook test NAME Send a test POST
Полная настройка, конфигурация маршрутов, шаблонизация полезной нагрузки и событийные паттерны запуска агента: skill_view(name="hermes-agent", file_path="references/webhooks.md").
Профили
hermes profile list List all profiles
hermes profile create NAME Create (--clone, --clone-all, --clone-from)
hermes profile use NAME Set sticky default
hermes profile delete NAME Delete a profile
hermes profile show NAME Show details
hermes profile alias NAME Manage wrapper scripts
hermes profile rename A B Rename a profile
hermes profile export NAME Export to tar.gz
hermes profile import FILE Import from archive
Пулы учётных данных
hermes auth add Interactive credential wizard
hermes auth list [PROVIDER] List pooled credentials
hermes auth remove P INDEX Remove by provider + index
hermes auth reset PROVIDER Clear exhaustion status
Прочее
hermes insights [--days N] Usage analytics
hermes update Update to latest version
hermes pairing list/approve/revoke DM authorization
hermes plugins list/install/remove Plugin management
hermes honcho setup/status Honcho memory integration (requires honcho plugin)
hermes memory setup/status/off Memory provider config
hermes completion bash|zsh Shell completions
hermes acp ACP server (IDE integration)
hermes claw migrate Migrate from OpenClaw
hermes uninstall Uninstall Hermes
Слэш-команды (в сессии)
Вводите их во время интерактивной чат-сессии. Новые команды появляются довольно часто; если что-то из перечисленного выглядит устаревшим, запустите /help в сессии для актуального списка или смотрите справочник слэш-команд. Единственный источник истины — hermes_cli/commands.py: автодополнение, меню Telegram, маппинг Slack и /help берут данные оттуда.
Управление сессией
/new (/reset) Fresh session
/clear Clear screen + new session (CLI)
/retry Resend last message
/undo Remove last exchange
/title [name] Name the session
/compress Manually compress context
/stop Kill background processes
/rollback [N] Restore filesystem checkpoint
/snapshot [sub] Create or restore state snapshots of Hermes config/state (CLI)
/background <prompt> Run prompt in background
/queue <prompt> Queue for next turn
/steer <prompt> Inject a message after the next tool call without interrupting
/agents (/tasks) Show active agents and running tasks
/resume [name] Resume a named session
/goal [text|sub] Set a standing goal Hermes works on across turns until achieved
(subcommands: status, pause, resume, clear)
/redraw Force a full UI repaint (CLI)
Конфигурация
/config Show config (CLI)
/model [name] Show or change model
/personality [name] Set personality
/reasoning [level] Set reasoning (none|minimal|low|medium|high|xhigh|show|hide)
/verbose Cycle: off → new → all → verbose
/voice [on|off|tts] Voice mode
/yolo Toggle approval bypass
/busy [sub] Control what Enter does while Hermes is working (CLI)
(subcommands: queue, steer, interrupt, status)
/indicator [style] Pick the TUI busy-indicator style (CLI)
(styles: kaomoji, emoji, unicode, ascii)
/footer [on|off] Toggle gateway runtime-metadata footer on final replies
/skin [name] Change theme (CLI)
/statusbar Toggle status bar (CLI)
Инструменты и навыки
/tools Manage tools (CLI)
/toolsets List toolsets (CLI)
/skills Search/install skills (CLI)
/skill <name> Load a skill into session
/reload-skills Re-scan ~/.hermes/skills/ for added/removed skills
/reload Reload .env variables into the running session (CLI)
/reload-mcp Reload MCP servers
/cron Manage cron jobs (CLI)
/curator [sub] Background skill maintenance (status, run, pin, archive, …)
/kanban [sub] Multi-profile collaboration board (tasks, links, comments)
/plugins List plugins (CLI)
Шлюз
/approve Approve a pending command (gateway)
/deny Deny a pending command (gateway)
/restart Restart gateway (gateway)
/sethome Set current chat as home channel (gateway)
/update Update Hermes to latest (gateway)
/topic [sub] Enable or inspect Telegram DM topic sessions (gateway)
/platforms (/gateway) Show platform connection status (gateway)
Утилиты
/branch (/fork) Branch the current session
/fast Toggle priority/fast processing
/browser Open CDP browser connection
/history Show conversation history (CLI)
/save Save conversation to file (CLI)
/copy [N] Copy the last assistant response to clipboard (CLI)
/paste Attach clipboard image (CLI)
/image Attach local image file (CLI)
Информация
/help Show commands
/commands [page] Browse all commands (gateway)
/usage Token usage
/insights [days] Usage analytics
/gquota Show Google Gemini Code Assist quota usage (CLI)
/status Session info (gateway)
/profile Active profile info
/debug Upload debug report (system info + logs) and get shareable links
Выход
/quit (/exit, /q) Exit CLI
Ключевые пути и конфигурация
~/.hermes/config.yaml Main configuration
~/.hermes/.env API keys and secrets
$HERMES_HOME/skills/ Installed skills
~/.hermes/sessions/ Gateway routing index, request dumps, *.jsonl transcripts (and optional per-session JSON snapshots when sessions.write_json_snapshots: true)
~/.hermes/state.db Canonical session store (SQLite + FTS5)
~/.hermes/logs/ Gateway and error logs
~/.hermes/auth.json OAuth tokens and credential pools
~/.hermes/hermes-agent/ Source code (if git-installed)
Профили используют ~/.hermes/profiles/<name>/ с той же структурой.
Секции конфигурации
Редактируйте через hermes config edit или hermes config set section.key value.
| Секция | Параметры |
|---|---|
model | default, provider, base_url, api_key, context_length |
agent | max_turns (90), tool_use_enforcement |
terminal | backend (local/docker/ssh/modal), cwd, timeout (180) |
compression | enabled, threshold (0.50), target_ratio (0.20) |
display | skin, tool_progress, show_reasoning, show_cost |
stt | enabled, provider (local/groq/openai/mistral) |
tts | provider (edge/elevenlabs/openai/minimax/mistral/neutts) |
memory | memory_enabled, user_profile_enabled, provider |
security | tirith_enabled, website_blocklist |
delegation | model, provider, base_url, api_key, max_iterations (50), reasoning_effort |
checkpoints | enabled, max_snapshots (50) |
Полный справочник конфигурации: https://hermes-agent.nousresearch.com/docs/user-guide/configuration
Провайдеры
Поддерживается 20+ провайдеров. Настройте через hermes model или hermes setup.
| Провайдер | Аутентификация | Переменная окружения |
|---|---|---|
| OpenRouter | API key | OPENROUTER_API_KEY |
| Anthropic | API key | ANTHROPIC_API_KEY |
| Nous Portal | OAuth | hermes auth |
| OpenAI Codex | OAuth | hermes auth |
| GitHub Copilot | Token | COPILOT_GITHUB_TOKEN |
| Google Gemini | API key | GOOGLE_API_KEY or GEMINI_API_KEY |
| DeepSeek | API key | DEEPSEEK_API_KEY |
| xAI / Grok | API key | XAI_API_KEY |
| Hugging Face | Token | HF_TOKEN |
| Z.AI / GLM | API key | GLM_API_KEY |
| MiniMax | API key | MINIMAX_API_KEY |
| MiniMax CN | API key | MINIMAX_CN_API_KEY |
| Kimi / Moonshot | API key | KIMI_API_KEY |
| Alibaba / DashScope | API key | DASHSCOPE_API_KEY |
| Xiaomi MiMo | API key | XIAOMI_API_KEY |
| Kilo Code | API key | KILOCODE_API_KEY |
| OpenCode Zen | API key | OPENCODE_ZEN_API_KEY |
| OpenCode Go | API key | OPENCODE_GO_API_KEY |
| Qwen OAuth | OAuth | hermes auth add qwen-oauth |
| Custom endpoint | Config | model.base_url + model.api_key in config.yaml |
| GitHub Copilot ACP | External | COPILOT_CLI_PATH or Copilot CLI |
Полная документация по провайдерам: https://hermes-agent.nousresearch.com/docs/integrations/providers
Наборы инструментов
Включайте и отключайте через hermes tools (интерактивно) или hermes tools enable/disable NAME.
| Набор | Что предоставляет |
|---|---|
web | Веб-поиск и извлечение контента |
search | Только веб-поиск (подмножество web) |
browser | Браузерная автоматизация (Browserbase, Camofox или локальный Chromium) |
terminal | Команды оболочки и управление процессами |
file | Чтение/запись/поиск/патч файлов |
code_execution | Изолированное выполнение Python |
vision | Анализ изображений |
image_gen | Генерация изображений с помощью ИИ |
video | Анализ и генерация видео |
tts | Синтез речи |
skills | Просмотр навыков и управление ими |
memory | Постоянная память между сессиями |
session_search | Поиск по прошлым разговорам |
delegation | Делегирование задач субагентам |
cronjob | Управление запланированными задачами |
clarify | Уточняющие вопросы к пользователю |
messaging | Отправка сообщений на разные платформы |
todo | Планирование и отслеживание задач в сессии |
kanban | Инструменты рабочей очереди для нескольких агентов (доступны только воркерам) |
debugging | Дополнительные инструменты диагностики (отключены по умолчанию) |
safe | Минимальный низкорисковый набор для изолированных сессий |
spotify | Управление воспроизведением и плейлистами Spotify |
homeassistant | Управление умным домом (отключено по умолчанию) |
discord | Инструменты интеграции с Discord |
discord_admin | Инструменты администрирования/модерации Discord |
feishu_doc | Инструменты для документов Feishu (Lark) |
feishu_drive | Инструменты для диска Feishu (Lark) |
yuanbao | Инструменты интеграции с Yuanbao |
rl | Инструменты обучения с подкреплением (отключены по умолчанию) |
moa | Mixture of Agents (отключено по умолчанию) |
Полный список находится в toolsets.py в словаре TOOLSETS; _HERMES_CORE_TOOLS — это стандартный набор, который наследует большинство платформ.
Изменения инструментов вступают в силу после /reset (новая сессия). Они не применяются в середине разговора — это сделано для сохранения кэширования промптов.
Настройки безопасности и приватности
Типичные вопросы «почему Hermes делает X с моим выводом / вызовами инструментов / командами» — и конкретные команды для изменения поведения. Большинство этих настроек требуют новой сессии (/reset в чате или запуск нового hermes), так как они читаются однократно при старте.
Сокрытие секретов в выводе инструментов
Сокрытие секретов включено по умолчанию — вывод инструментов (stdout терминала, read_file, веб-контент, сводки субагентов и т.д.) сканируется на строки, похожие на API-ключи, токены и секреты, прежде чем они попадут в контекст разговора и логи. Для обычного использования оставьте включённым:
hermes config set security.redact_secrets true # keep enabled globally
Требуется перезапуск. security.redact_secrets фиксируется в момент импорта — переключение в середине сессии (например, через export HERMES_REDACT_SECRETS=false из вызова инструмента) не даст эффекта для запущенного процесса. Скажите пользователю изменить настройку в конфиге из терминала, затем начать новую сессию. Это сделано намеренно — чтобы LLM не мог переключить этот параметр самостоятельно в процессе работы.
Отключайте только когда намеренно нужны сырые строки, похожие на учётные данные, — для отладки или разработки редактора:
hermes config set security.redact_secrets false
Сокрытие PII в сообщениях шлюза
Отдельно от сокрытия секретов. При включении шлюз хэширует ID пользователей и убирает номера телефонов из контекста сессии до того, как он дойдёт до модели:
hermes config set privacy.redact_pii true # enable
hermes config set privacy.redact_pii false # disable (default)
Запросы подтверждения команд
По умолчанию (approvals.mode: manual) Hermes запрашивает подтверждение перед выполнением команд оболочки, помеченных как деструктивные (rm -rf, git reset --hard и т.д.). Доступные режимы:
manual— всегда спрашивать (по умолчанию)smart— вспомогательная LLM автоматически одобряет низкорисковые команды, для высокорисковых запрашивает подтверждениеoff— пропускать все запросы подтверждения (эквивалент--yolo)
hermes config set approvals.mode smart # recommended middle ground
hermes config set approvals.mode off # bypass everything (not recommended)
Обход для отдельного запуска без изменения конфига:
hermes --yolo …export HERMES_YOLO_MODE=1
Замечание: YOLO / approvals.mode: off не отключает сокрытие секретов. Это независимые настройки.
Список разрешений для хуков оболочки
Некоторые интеграции с хуками оболочки требуют явного добавления в список разрешений до первого срабатывания. Управляется через ~/.hermes/shell-hooks-allowlist.json — при первой попытке запуска хука выводится интерактивный запрос.
Отключение инструментов web/browser/image-gen
Чтобы полностью закрыть модели доступ к сети или медиаинструментам, откройте hermes tools и переключите нужные инструменты для каждой платформы. Вступит в силу в следующей сессии (/reset). Подробнее — в разделе «Инструменты и навыки» выше.
Голосовой режим и транскрипция
STT (голос → текст)
Голосовые сообщения из мессенджеров транскрибируются автоматически.
Приоритет провайдеров (определяется автоматически):
- Local faster-whisper — бесплатно, API-ключ не нужен:
pip install faster-whisper - Groq Whisper — бесплатный тариф: установите
GROQ_API_KEY - OpenAI Whisper — платно: установите
VOICE_TOOLS_OPENAI_KEY - Mistral Voxtral — установите
MISTRAL_API_KEY
Конфигурация:
stt:
enabled: true
provider: local # local, groq, openai, mistral
local:
model: base # tiny, base, small, medium, large-v3
TTS (текст → голос)
| Провайдер | Переменная окружения | Бесплатно? |
|---|---|---|
| Edge TTS | — | Да (по умолчанию) |
| ElevenLabs | ELEVENLABS_API_KEY | Бесплатный тариф |
| OpenAI | VOICE_TOOLS_OPENAI_KEY | Платно |
| MiniMax | MINIMAX_API_KEY | Платно |
| Mistral (Voxtral) | MISTRAL_API_KEY | Платно |
| NeuTTS (local) | — (pip install neutts[all] + espeak-ng) | Бесплатно |
Команды управления голосом: /voice on (голос-в-голос), /voice tts (всегда голос), /voice off.
Запуск дополнительных экземпляров Hermes
Дополнительные процессы Hermes запускаются как полностью независимые подпроцессы — с отдельными сессиями, инструментами и окружением.
Когда использовать это вместо delegate_task
delegate_task | Запуск процесса hermes | |
|---|---|---|
| Изоляция | Отдельный разговор, общий процесс | Полностью независимый процесс |
| Продолжительность | Минуты (ограничено циклом родителя) | Часы/дни |
| Доступ к инструментам | Подмножество инструментов родителя | Полный доступ к инструментам |
| Интерактивность | Нет | Да (PTY-режим) |
| Сценарий | Быстрые параллельные подзадачи | Длительные автономные задания |
Режим одиночного запроса
terminal(command="hermes chat -q 'Research GRPO papers and write summary to ~/research/grpo.md'", timeout=300)
# Background for long tasks:
terminal(command="hermes chat -q 'Set up CI/CD for ~/myapp'", background=true)
Интерактивный PTY-режим (через tmux)
Hermes использует prompt_toolkit, которому нужен настоящий терминал. Для интерактивного запуска используйте tmux:
# Start
terminal(command="tmux new-session -d -s agent1 -x 120 -y 40 'hermes'", timeout=10)
# Wait for startup, then send a message
terminal(command="sleep 8 && tmux send-keys -t agent1 'Build a FastAPI auth service' Enter", timeout=15)
# Read output
terminal(command="sleep 20 && tmux capture-pane -t agent1 -p", timeout=5)
# Send follow-up
terminal(command="tmux send-keys -t agent1 'Add rate limiting middleware' Enter", timeout=5)
# Exit
terminal(command="tmux send-keys -t agent1 '/exit' Enter && sleep 2 && tmux kill-session -t agent1", timeout=10)
Координация нескольких агентов
# Agent A: backend
terminal(command="tmux new-session -d -s backend -x 120 -y 40 'hermes -w'", timeout=10)
terminal(command="sleep 8 && tmux send-keys -t backend 'Build REST API for user management' Enter", timeout=15)
# Agent B: frontend
terminal(command="tmux new-session -d -s frontend -x 120 -y 40 'hermes -w'", timeout=10)
terminal(command="sleep 8 && tmux send-keys -t frontend 'Build React dashboard for user management' Enter", timeout=15)
# Check progress, relay context between them
terminal(command="tmux capture-pane -t backend -p | tail -30", timeout=5)
terminal(command="tmux send-keys -t frontend 'Here is the API schema from the backend agent: ...' Enter", timeout=5)
Возобновление сессии
# Resume most recent session
terminal(command="tmux new-session -d -s resumed 'hermes --continue'", timeout=10)
# Resume specific session
terminal(command="tmux new-session -d -s resumed 'hermes --resume 20260225_143052_a1b2c3'", timeout=10)
Советы
- Для быстрых подзадач предпочитайте
delegate_task— меньше накладных расходов, чем при запуске полноценного процесса - Используйте
-w(режим worktree) при запуске агентов, которые редактируют код — предотвращает конфликты git - Устанавливайте таймауты в режиме одиночного запроса — сложные задачи могут занимать 5–10 минут
hermes chat -qподходит для запуска без ожидания — PTY не нужен- Для интерактивных сессий используйте tmux — сырой PTY-режим имеет проблемы с
\rи\nв prompt_toolkit - Для запланированных задач используйте инструмент
cronjobвместо запуска процессов — он обрабатывает доставку и повторные попытки
Постоянные и фоновые системы
Четыре системы работают параллельно с основным циклом разговора. Краткий справочник здесь; полные заметки для разработчиков — в AGENTS.md, пользовательская документация — в website/docs/user-guide/features/.
Делегирование (delegate_task)
Синхронный запуск субагента — родитель ждёт сводки от дочернего агента, прежде чем продолжить свой цикл. Изолированный контекст и сессия терминала.
- Одиночный:
delegate_task(goal, context, toolsets). - Пакетный:
delegate_task(tasks=[{goal, ...}, ...])запускает дочерних агентов параллельно, ограничиваясь значениемdelegation.max_concurrent_children(по умолчанию 3). - Роли:
leaf(по умолчанию; не может повторно делегировать) vsorchestrator(может порождать своих воркеров, ограниченоdelegation.max_spawn_depth). - Не отказоустойчиво. При прерывании родителя дочерний агент отменяется. Для работы, которая должна пережить текущий ход, используйте
cronjobилиterminal(background=True, notify_on_complete=True).
Конфигурация: delegation.* в config.yaml.
Cron (запланированные задания)
Надёжный планировщик — cron/jobs.py + cron/scheduler.py. Управляется через инструмент cronjob, CLI hermes cron (list, add, edit, pause, resume, run, remove) или слэш-команду /cron.
- Расписания: продолжительность (
"30m","2h"), фраза “every” ("every monday 9am"), пятипольный cron ("0 9 * * *") или метка времени ISO. - Параметры задания:
skills, переопределениеmodel/provider,script(сбор данных перед запуском;no_agent=Trueделает скрипт всем заданием),context_from(передача вывода задания A в задание B),workdir(запуск в конкретной директории с загрузкой еёAGENTS.md/CLAUDE.md), доставка на несколько платформ. - Инварианты: жёсткое прерывание через 3 минуты на запуск, файл
.tick.lockпредотвращает дублирование тиков между процессами, cron-сессии передаютskip_memory=Trueпо умолчанию, а cron-доставки оформляются заголовком/подвалом вместо зеркалирования в целевую сессию шлюза (сохраняет чередование ролей).
Документация: https://hermes-agent.nousresearch.com/docs/user-guide/features/cron
Curator (жизненный цикл навыков)
Фоновое обслуживание навыков, созданных агентом. Отслеживает использование, помечает простаивающие навыки как устаревшие, архивирует их, сохраняет tar.gz-резервную копию перед каждым запуском — ничего не теряется.
- CLI:
hermes curator <verb>—status,run,pause,resume,pin,unpin,archive,restore,prune,backup,rollback. - Слэш-команды:
/curator <subcommand>повторяет CLI. - Область действия: работает только с навыками, у которых
created_by: "agent". Встроенные и установленные из хаба навыки — вне досягаемости. Никогда не удаляет — максимум — архивирование. Закреплённые навыки исключены из всех автопереходов и проверок LLM. - Телеметрия: файл
~/.hermes/skills/.usage.jsonхранит для каждого навыкаuse_count,view_count,patch_count,last_activity_at,state,pinned.
Конфигурация: curator.* (enabled, interval_hours, min_idle_hours, stale_after_days, archive_after_days, backup.*).
Документация: https://hermes-agent.nousresearch.com/docs/user-guide/features/curator
Kanban (рабочая очередь для нескольких агентов)
Надёжная SQLite-доска для совместной работы нескольких профилей и воркеров. Пользователи управляют ею через hermes kanban <verb>; воркеры, запущенные диспетчером, видят сфокусированный набор инструментов kanban_*, ограниченный переменной HERMES_KANBAN_TASK, а профили-оркестраторы могут подключить расширенный набор kanban. Обычные сессии не имеют никакого kanban_*-следа, пока это не настроено.
- CLI-команды (основные):
init,create,list(псевдонимls),show,assign,link,unlink,comment,complete,block,unblock,archive,tail. Менее частые:watch,stats,runs,log,dispatch,daemon,gc. - Набор инструментов для воркеров/оркестраторов:
kanban_show,kanban_complete,kanban_block,kanban_heartbeat,kanban_comment,kanban_create,kanban_link; профили, которые явно включают наборkanbanвне задачи, запущенной диспетчером, также получаютkanban_listиkanban_unblockдля маршрутизации по доске. - Диспетчер по умолчанию работает внутри шлюза (
kanban.dispatch_in_gateway: true) — возвращает зависшие задачи, продвигает готовые, атомарно захватывает и запускает назначенные профили. Автоматически блокирует задачу послеfailure_limitпоследовательных сбоев запуска (по умолчанию 2; настраивается черезkanban.failure_limitилиmax_retriesдля конкретной задачи). - Изоляция: доска — жёсткая граница (воркеры получают
HERMES_KANBAN_BOARDзафиксированным в окружении); тенант — мягкое пространство имён внутри доски для изоляции по пути рабочей директории и ключу памяти.
Документация: https://hermes-agent.nousresearch.com/docs/user-guide/features/kanban
Особенности Windows
Hermes работает нативно на Windows (PowerShell, cmd, Windows Terminal, git-bash mintty, встроенный терминал VS Code). Большинство функций работает из коробки, но есть несколько отличий между Win32 и POSIX, которые регулярно вызывают проблемы — документируйте новые здесь, чтобы следующий человек (или следующая сессия) не открывал их заново.
Ввод и горячие клавиши
Alt+Enter не вставляет перевод строки. Windows Terminal перехватывает Alt+Enter на уровне терминала для переключения полноэкранного режима — нажатие не доходит до prompt_toolkit. Используйте Ctrl+Enter. Windows Terminal передаёт Ctrl+Enter как LF (c-j), отличный от обычного Enter (c-m / CR), и CLI привязывает c-j к вставке строки только на win32 (см. _bind_prompt_submit_keys + Windows-only привязка c-j в cli.py). Побочный эффект: сырое нажатие Ctrl+J тоже вставляет строку на Windows — это неизбежно, потому что Windows Terminal сворачивает Ctrl+Enter и Ctrl+J в один код клавиши на уровне Win32 console API. Конфликтующей привязки для Ctrl+J на Windows не было, так что это безвредный побочный эффект.
mintty / git-bash ведут себя так же (полноэкранный режим на Alt+Enter), если не отключить Alt+Fn-клавиши в Options → Keys. Проще просто использовать Ctrl+Enter.
Диагностика горячих клавиш. Запустите python scripts/keystroke_diagnostic.py (корень репозитория), чтобы увидеть, как именно prompt_toolkit идентифицирует каждое нажатие в текущем терминале. Это поможет разобраться, например, «приходит ли Shift+Enter как отдельная клавиша?» (почти никогда — большинство терминалов сворачивает его в обычный Enter) или «какую последовательность байт мой терминал посылает для Ctrl+Enter?». Именно так был установлен факт Ctrl+Enter = c-j.
Конфигурация и файлы
HTTP 400 “No models provided” при первом запуске. config.yaml сохранён с UTF-8 BOM (часто случается, когда Windows-приложения записывают файлы). Пересохраните как UTF-8 без BOM. hermes config edit пишет без BOM; виновник ручных правок — обычно Блокнот.
execute_code / Sandbox
WinError 10106 (“The requested service provider could not be loaded or initialized”) из дочернего процесса sandbox — не удаётся создать сокет AF_INET, поэтому резервный RPC через loopback-TCP падает до connect(). Причина, как правило, не сломанный Winsock LSP, а собственный скруббер окружения Hermes, который убирает SYSTEMROOT / WINDIR / COMSPEC из дочернего env. Python-модулю socket нужен SYSTEMROOT для поиска mswsock.dll. Исправлено через список разрешений _WINDOWS_ESSENTIAL_ENV_VARS в tools/code_execution_tool.py. Если проблема сохраняется, выведите os.environ внутри блока execute_code, чтобы убедиться, что SYSTEMROOT задан. Полная инструкция по диагностике — в references/execute-code-sandbox-env-windows.md.
Тестирование и участие в разработке
scripts/run_tests.sh не работает как есть на Windows — скрипт ищет POSIX-структуру venv (.venv/bin/activate). Hermes-установленный venv по пути venv/Scripts/ тоже не содержит pip или pytest (убраны для уменьшения размера установки). Обходной путь: установите pytest + pytest-xdist + pyyaml в пользовательский site-packages системного Python 3.11, затем запускайте pytest напрямую с установленным PYTHONPATH:
"/c/Program Files/Python311/python" -m pip install --user pytest pytest-xdist pyyaml
export PYTHONPATH="$(pwd)"
"/c/Program Files/Python311/python" -m pytest tests/foo/test_bar.py -v --tb=short -n 0
Используйте -n 0, а не -n 4 — pyproject.toml уже включает -n в addopts по умолчанию, а гарантии CI-совместимости обёртки не распространяются на не-POSIX системы.
Тесты, специфичные для POSIX, нуждаются в skip-гвардах. Часто встречающиеся маркеры в кодовой базе:
- Символические ссылки — требуют повышенных привилегий на Windows
- Права доступа
0o600— POSIX-биты прав не применяются на NTFS по умолчанию signal.SIGALRM— только Unix (см.tests/conftest.py::_enforce_test_timeout)- Winsock / Windows-специфические регрессии —
@pytest.mark.skipif(sys.platform != "win32", ...)
Используйте существующий стиль (sys.platform == "win32" или sys.platform.startswith("win")), чтобы оставаться в согласии с остальной частью набора.
Пути и файловая система
Окончания строк. Git может предупреждать LF will be replaced by CRLF the next time Git touches it. Это косметически — .gitattributes репозитория нормализует их. Не позволяйте редакторам автоматически конвертировать закоммиченные POSIX-файлы в CRLF.
Прямые слэши работают почти везде. C:/Users/... принимается всеми инструментами Hermes и большинством Windows API. Предпочитайте прямые слэши в коде и логах — это избавляет от необходимости экранировать обратные в bash.
Устранение неполадок
Голосовой режим не работает
- Проверьте
stt.enabled: trueв config.yaml - Убедитесь в наличии провайдера:
pip install faster-whisperили задайте API-ключ - В шлюзе:
/restart. В CLI: выйдите и перезапустите.
Инструмент недоступен
hermes tools— проверьте, включён ли набор инструментов для вашей платформы- Некоторые инструменты требуют переменных окружения (проверьте
.env) - После включения инструментов выполните
/reset
Проблемы с моделью/провайдером
hermes doctor— проверьте конфигурацию и зависимостиhermes auth— повторно авторизуйтесь у OAuth-провайдеров (илиhermes auth add <provider>)- Убедитесь, что в
.envправильный API-ключ - Copilot 403: токены
gh auth loginне работают для Copilot API. Нужно использовать специальный OAuth device code flow:hermes model→ GitHub Copilot.
Изменения не применяются
- Инструменты/навыки:
/resetначинает новую сессию с обновлённым набором инструментов - Изменения конфига: в шлюзе:
/restart. В CLI: выйдите и перезапустите. - Изменения кода: перезапустите CLI или процесс шлюза
Навыки не отображаются
hermes skills list— убедитесь, что навык установленhermes skills config— проверьте, включён ли он для платформы- Загрузите явно:
/skill nameилиhermes -s name
Проблемы со шлюзом
Сначала проверьте логи:
grep -i "failed to send\|error" ~/.hermes/logs/gateway.log | tail -20
Частые проблемы со шлюзом:
- Шлюз падает при logout по SSH: включите linger:
sudo loginctl enable-linger $USER - Шлюз падает при закрытии WSL2: WSL2 требует
systemd=trueв/etc/wsl.confдля работы systemd-сервисов. Без этого шлюз переходит наnohup(падает при завершении сессии). - Шлюз в петле перезапуска: сбросьте состояние ошибки:
systemctl --user reset-failed hermes-gateway
Специфические проблемы платформ
- Бот Discord молчит: необходимо включить Message Content Intent в Bot → Privileged Gateway Intents.
- Бот Slack работает только в личных сообщениях: нужно подписаться на событие
message.channels. Без него бот игнорирует публичные каналы. - Проблемы Windows (
Alt+Enterперевод строки, WinError 10106, UTF-8 BOM в конфиге, тестовый набор, окончания строк): см. раздел Особенности Windows выше.
Вспомогательные модели не работают
Если задачи auxiliary (vision, compression, session_search) молча завершаются с ошибкой, провайдер auto не может найти бэкенд. Установите OPENROUTER_API_KEY или GOOGLE_API_KEY, либо явно настройте провайдер для каждой вспомогательной задачи:
hermes config set auxiliary.vision.provider <your_provider>
hermes config set auxiliary.vision.model <model_name>
Где что найти
| Ищу… | Где смотреть |
|---|---|
| Параметры конфига | hermes config edit или документация по конфигурации |
| Доступные инструменты | hermes tools list или справочник инструментов |
| Слэш-команды | /help в сессии или справочник слэш-команд |
| Каталог навыков | hermes skills browse или каталог навыков |
| Настройка провайдера | hermes model или руководство по провайдерам |
| Настройка платформы | hermes gateway setup или документация по мессенджерам |
| MCP-серверы | hermes mcp list или руководство по MCP |
| Профили | hermes profile list или документация по профилям |
| Cron-задания | hermes cron list или документация по cron |
| Память | hermes memory status или документация по памяти |
| Переменные окружения | hermes config env-path или справочник переменных окружения |
| CLI-команды | hermes --help или справочник CLI |
| Логи шлюза | ~/.hermes/logs/gateway.log |
| Файлы сессий | hermes sessions browse (читает state.db) |
| Исходный код | ~/.hermes/hermes-agent/ |
Краткий справочник для контрибьюторов
Для разовых участников и авторов PR. Полная документация для разработчиков: https://hermes-agent.nousresearch.com/docs/developer-guide/
Структура проекта
hermes-agent/
├── run_agent.py # AIAgent — core conversation loop
├── model_tools.py # Tool discovery and dispatch
├── toolsets.py # Toolset definitions
├── cli.py # Interactive CLI (HermesCLI)
├── hermes_state.py # SQLite session store
├── agent/ # Prompt builder, context compression, memory, model routing, credential pooling, skill dispatch
├── hermes_cli/ # CLI subcommands, config, setup, commands
│ ├── commands.py # Slash command registry (CommandDef)
│ ├── config.py # DEFAULT_CONFIG, env var definitions
│ └── main.py # CLI entry point and argparse
├── tools/ # One file per tool
│ └── registry.py # Central tool registry
├── gateway/ # Messaging gateway
│ └── platforms/ # Platform adapters (telegram, discord, etc.)
├── cron/ # Job scheduler
├── tests/ # ~3000 pytest tests
└── website/ # Docusaurus docs site
Конфигурация: ~/.hermes/config.yaml (настройки), ~/.hermes/.env (API-ключи).
Добавление инструмента (3 файла)
1. Создайте tools/your_tool.py:
import json, os
from tools.registry import registry
def check_requirements() -> bool:
return bool(os.getenv("EXAMPLE_API_KEY"))
def example_tool(param: str, task_id: str = None) -> str:
return json.dumps({"success": True, "data": "..."})
registry.register(
name="example_tool",
toolset="example",
schema={"name": "example_tool", "description": "...", "parameters": {...}},
handler=lambda args, **kw: example_tool(
param=args.get("param", ""), task_id=kw.get("task_id")),
check_fn=check_requirements,
requires_env=["EXAMPLE_API_KEY"],
)
2. Добавьте в toolsets.py → список _HERMES_CORE_TOOLS.
Автообнаружение: любой файл tools/*.py с вызовом registry.register() на верхнем уровне импортируется автоматически — вручную перечислять не нужно.
Все обработчики должны возвращать JSON-строки. Используйте get_hermes_home() для путей, не хардкодьте ~/.hermes.
Добавление слэш-команды
- Добавьте
CommandDefвCOMMAND_REGISTRYвhermes_cli/commands.py - Добавьте обработчик в
cli.py→process_command() - (Опционально) Добавьте обработчик шлюза в
gateway/run.py
Все потребители (текст справки, автодополнение, меню Telegram, маппинг Slack) автоматически берут данные из центрального реестра.
Цикл агента (высокий уровень)
run_conversation():
1. Build system prompt
2. Loop while iterations < max:
a. Call LLM (OpenAI-format messages + tool schemas)
b. If tool_calls → dispatch each via handle_function_call() → append results → continue
c. If text response → return
3. Context compression triggers automatically near token limit
Тестирование
python -m pytest tests/ -o 'addopts=' -q # Full suite
python -m pytest tests/tools/ -q # Specific area
- Тесты автоматически перенаправляют
HERMES_HOMEво временные директории — никогда не трогают настоящий~/.hermes/ - Запускайте полный набор перед каждым пушем
- Используйте
-o 'addopts='для сброса встроенных флагов pytest
Контрибьюторам на Windows: scripts/run_tests.sh ищет POSIX-структуру venv (.venv/bin/activate / venv/bin/activate) и завершится с ошибкой на Windows, где используется venv/Scripts/activate + python.exe. Hermes-установленный venv в venv/Scripts/ также не содержит pip или pytest — урезан для уменьшения размера установки. Обходной путь: установите pytest + pytest-xdist + pyyaml в пользовательский site-packages системного Python 3.11 (/c/Program Files/Python311/python -m pip install --user pytest pytest-xdist pyyaml), затем запускайте тесты напрямую:
export PYTHONPATH="$(pwd)"
"/c/Program Files/Python311/python" -m pytest tests/tools/test_foo.py -v --tb=short -n 0
Используйте -n 0 (а не -n 4), потому что pyproject.toml уже включает -n в addopts по умолчанию, а гарантии CI-совместимости обёртки не работают вне POSIX.
Кроссплатформенные гварды для тестов: тесты, использующие только POSIX-системные вызовы, нуждаются в skip-маркере. Часто встречающиеся в кодовой базе:
- Создание символических ссылок →
@pytest.mark.skipif(sys.platform == "win32", reason="Symlinks require elevated privileges on Windows")(см.tests/cron/test_cron_script.py) - POSIX-права доступа (0o600 и т.д.) →
@pytest.mark.skipif(sys.platform.startswith("win"), reason="POSIX mode bits not enforced on Windows")(см.tests/hermes_cli/test_auth_toctou_file_modes.py) signal.SIGALRM→ только Unix (см.tests/conftest.py::_enforce_test_timeout)- Живые Winsock / Windows-специфические регрессионные тесты →
@pytest.mark.skipif(sys.platform != "win32", reason="Windows-specific regression")
Подмены sys.platform через monkeypatch недостаточно, когда тестируемый код также вызывает platform.system() / platform.release() / platform.mac_ver(). Эти функции независимо читают настоящую ОС, поэтому тест с sys.platform = "linux" на Windows-раннере всё равно получит platform.system() == "Windows" и пойдёт по Windows-ветке. Патчите все три вместе:
monkeypatch.setattr(sys, "platform", "linux")
monkeypatch.setattr(platform, "system", lambda: "Linux")
monkeypatch.setattr(platform, "release", lambda: "6.8.0-generic")
Рабочий пример: tests/agent/test_prompt_builder.py::TestEnvironmentHints.
Расширение блока execution-environment в системном промпте
Фактическая информация о хост-ОС, домашней директории пользователя, рабочей директории, бэкенде терминала и оболочке (bash vs. PowerShell на Windows) генерируется в agent/prompt_builder.py::build_environment_hints(). Там же живут WSL-подсказка и логика зондирования для каждого бэкенда. Соглашение:
- Локальный бэкенд терминала → выводить информацию о хосте (ОС,
$HOME, cwd) + Windows-специфические заметки (hostname ≠ username,terminalиспользует bash, а не PowerShell). - Удалённый бэкенд терминала (любой из
_REMOTE_TERMINAL_BACKENDS:docker, singularity, modal, daytona, ssh, managed_modal) → не выводить информацию о хосте совсем, описывать только бэкенд. Живой зондuname/whoami/pwdзапускается внутри бэкенда черезtools.environments.get_environment(...).execute(...), кэшируется в_BACKEND_PROBE_CACHEна процесс, со статическим фолбэком при таймауте. - Важно для написания промптов: когда
TERMINAL_ENV != "local", каждый файловый инструмент (read_file,write_file,patch,search_files) работает внутри контейнера бэкенда, а не на хосте. В этом случае системный промпт не должен описывать хост — агент не имеет к нему доступа.
Полные заметки по дизайну, точные генерируемые строки и ловушки при тестировании: references/prompt-builder-environment-hints.md.
Паттерн безопасного рефакторинга (POSIX-equivalence guard): когда выносите инлайн-логику в хелпер, который добавляет Windows/платформо-специфичное поведение, оставьте в тестовом файле функцию-оракул _legacy_<name> — дословную копию старого кода, затем сравните их через параметризованный тест. Пример: tests/tools/test_code_execution_windows_env.py::TestPosixEquivalence. Это фиксирует инвариант битовой идентичности POSIX-поведения и заставит любой будущий дрейф громко упасть с понятным diff.
Соглашения о коммитах
type: concise subject line
Optional body.
Типы: fix:, feat:, refactor:, docs:, chore:
Ключевые правила
- Не нарушайте кэширование промптов — не меняйте контекст, инструменты или системный промпт в середине разговора
- Чередование ролей сообщений — никогда два сообщения assistant или два user подряд
- Используйте
get_hermes_home()изhermes_constantsдля всех путей (безопасно для профилей) - Настройки идут в
config.yaml, секреты — в.env - Новые инструменты должны иметь
check_fn, чтобы появляться только при выполнении требований