Spawning: запуск дополнительных агентов

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-режим имеет проблемы с \r vs \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