Spawning — это механизм запуска дополнительных экземпляров Hermes Agent как полностью независимых подпроцессов. Каждый spawned-агент получает собственную сессию, набор инструментов и окружение, изолированное от родительского процесса.
Когда использовать spawning vs delegate_task
В Hermes есть два способа запустить дополнительного агента: delegate_task (инструмент делегирования) и spawning (запуск отдельного процесса hermes). Выбор зависит от задачи:
| Параметр | delegate_task | Spawning hermes-процесс |
|---|---|---|
| Изоляция | Отдельная беседа, общий процесс | Полностью независимый процесс |
| Длительность | Минуты (ограничено родительским циклом) | Часы / дни |
| Доступ к инструментам | Подмножество инструментов родителя | Полный доступ ко всем инструментам |
| Интерактивность | Нет | Да (PTY-режим через tmux) |
| Сценарий | Быстрые параллельные подзадачи | Долгие автономные миссии |
One-shot режим
Для одиночных запросов используйте флаг -q. Агент выполнит задачу и завершится:
# Одиночный запрос (блокирующий, таймаут 300 сек)
hermes chat -q 'Исследуй статьи про GRPO и напиши резюме в ~/research/grpo.md'
# Фоновый запуск для длительных задач
hermes chat -q 'Настрой CI/CD для ~/myapp' &
Флаг -q запускает Hermes в неинтерактивном режиме — не нужен PTY, не нужен tmux. Идеально для fire-and-forget задач.
Interactive PTY-режим через tmux
Hermes использует prompt_toolkit, которому нужен настоящий терминал. Для интерактивного spawning используйте tmux:
# Создать сессию tmux с Hermes
tmux new-session -d -s agent1 -x 120 -y 40 'hermes'
# Подождать запуска, затем отправить сообщение
sleep 8 && tmux send-keys -t agent1 'Build a FastAPI auth service' Enter
# Прочитать вывод
sleep 20 && tmux capture-pane -t agent1 -p
# Отправить продолжение
tmux send-keys -t agent1 'Add rate limiting middleware' Enter
# Завершить
tmux send-keys -t agent1 '/exit' Enter
sleep 2 && tmux kill-session -t agent1
Через инструмент terminal
Если вы запускаете spawning из другого агента через инструмент terminal:
# 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)
# Exit
terminal(command="tmux send-keys -t agent1 '/exit' Enter && sleep 2 && tmux kill-session -t agent1", timeout=10)
Multi-agent coordination
Можно запустить несколько агентов параллельно, каждый в своей tmux-сессии. Это полезно для задач, которые разбиваются на независимые направления:
# Агент A: backend
tmux new-session -d -s backend -x 120 -y 40 'hermes -w'
sleep 8 && tmux send-keys -t backend 'Build REST API for user management' Enter
# Агент B: frontend
tmux new-session -d -s frontend -x 120 -y 40 'hermes -w'
sleep 8 && tmux send-keys -t frontend 'Build React dashboard for user management' Enter
# Проверить прогресс
tmux capture-pane -t backend -p | tail -30
# Передать контекст между агентами
tmux send-keys -t frontend 'Here is the API schema from the backend agent: ...' Enter
Флаг -w (worktree mode) создаёт изолированную git-ветку для каждого агента, предотвращая конфликты при одновременном редактировании кода.
Session resume
Hermes поддерживает возобновление предыдущих сессий:
# Продолжить последнюю сессию
hermes --continue
# Продолжить конкретную сессию по ID
hermes --resume 20260225_143052_a1b2c3
# Продолжить конкретную сессию по имени
hermes --continue my-project-name
Через tmux для фонового возобновления:
# Resume most recent session
tmux new-session -d -s resumed 'hermes --continue'
# Resume specific session
tmux new-session -d -s resumed 'hermes --resume 20260225_143052_a1b2c3'
Полезные советы
- Используйте
delegate_taskдля быстрых подзадач — меньше накладных расходов, чем запуск полного процесса. - Используйте
-w(worktree mode) при запуске агентов, которые редактируют код — предотвращает конфликты git. - Устанавливайте таймауты для one-shot режима — сложные задачи могут занять 5–10 минут.
- Используйте
hermes chat -qдля fire-and-forget — не нужен PTY, не нужен tmux. - Используйте tmux для интерактивных сессий — raw PTY-режим имеет проблемы с
\rvs\nиз-за prompt_toolkit. - Для запланированных задач используйте инструмент
cronjobвместо spawning — он обрабатывает доставку и повтор. - Профили (
-p) позволяют запускать несколько агентов с полностью изолированными конфигурациями, навыками и памятью.
Пример: полный workflow
Типичный сценарий — запустить агента для длительной задачи и периодически проверять прогресс:
# 1. Запустить фоновый агент
tmux new-session -d -s migration -x 120 -y 40 'hermes -w'
# 2. Отправить задачу
sleep 8 && tmux send-keys -t migration 'Migrate the database from PostgreSQL to SQLite, preserving all data and relationships' Enter
# 3. Проверить через 5 минут
tmux capture-pane -t migration -p | tail -40
# 4. При необходимости — отправить уточнение
tmux send-keys -t migration 'Also add an index on the email column' Enter
# 5. Когда задача завершена — забрать результат и убить сессию
tmux capture-pane -t migration -p > ~/migration-log.txt
tmux kill-session -t migration