Hermes может создавать изолированные дочерние агенты для параллельной работы над задачами. Каждый под-агент получает собственный диалог, сессию терминала и набор инструментов. Обратно возвращается только итоговое резюме — промежуточные вызовы инструментов никогда не попадают в ваше контекстное окно.
Задачи, которые заполнили бы ваш контекст промежуточными данными
Параллельные независимые направления работы (исследование A и B одновременно)
Задачи с чистым контекстом, где вы хотите, чтобы агент подошёл без предвзятости
Когда использовать другое:
Одиночный вызов инструмента → просто используйте инструмент напрямую
Механическая многошаговая работа с логикой между шагами → execute_code
Задачи, требующие взаимодействия с пользователем → под-агенты не могут использовать clarify
Быстрые правки файлов → делайте их напрямую
Долговременная работа, которая должна пережить текущий шаг → cronjob или terminal(background=True, notify_on_complete=True). delegate_task является синхронным: если родительский шаг прерван, активные дочерние задачи отменяются, а их работа теряется.
Паттерн: Параллельное исследование
Исследуйте три темы одновременно и получите структурированные резюме:
Research these three topics in parallel:
1. Current state of WebAssembly outside the browser
2. RISC-V server chip adoption in 2025
3. Practical quantum computing applications
Focus on recent developments and key players.
За кулисами Hermes использует:
delegate_task(tasks=[{"goal":"Research WebAssembly outside the browser in 2025","context":"Focus on: runtimes (Wasmtime, Wasmer), cloud/edge use cases, WASI progress","toolsets":["web"]},{"goal":"Research RISC-V server chip adoption","context":"Focus on: server chips shipping, cloud providers adopting, software ecosystem","toolsets":["web"]},{"goal":"Research practical quantum computing applications","context":"Focus on: error correction breakthroughs, real-world use cases, key companies","toolsets":["web"]}])
Все три запускаются одновременно. Каждый под-агент независимо ищет в интернете и возвращает резюме. Затем родительский агент собирает их в единый связный обзор.
Паттерн: Ревью кода
Делегируйте проверку безопасности под-агенту с чистым контекстом, который подходит к коду без предубеждений:
Ключевой момент — поле context: оно должно включать всё, что нужно под-агенту:
delegate_task(goal="Review src/auth/ for security issues and fix any found",context="""Project at /home/user/webapp. Python 3.11, Flask, PyJWT, bcrypt. Auth files: src/auth/login.py, src/auth/jwt.py, src/auth/middleware.py Test command: pytest tests/auth/ -v Focus on: SQL injection, JWT validation, password hashing, session management. Fix issues found and verify tests pass.""",toolsets=["terminal","file"])
warning Проблема контекста
Под-агенты абсолютно ничего не знают о вашем разговоре. Они начинают с нуля. Если вы делегируете "исправь ошибку, которую мы обсуждали", у под-агента нет ни малейшего представления, о какой ошибке речь. Всегда явно передавайте пути к файлам, сообщения об ошибках, структуру проекта и ограничения.
Паттерн: Сравнение альтернатив
Оцените несколько подходов к одной и той же задаче параллельно, затем выберите лучший:
Каждый под-агент исследует один вариант независимо. Благодаря изоляции отсутствует перекрёстное загрязнение — каждая оценка опирается на собственные достоинства. Родительский агент получает все три резюме и проводит сравнение.
Паттерн: Рефакторинг нескольких файлов
Разделите крупную задачу рефакторинга между параллельными под-агентами, каждый из которых обрабатывает свою часть кодовой базы:
delegate_task(tasks=[{"goal":"Refactor all API endpoint handlers to use the new response format","context":"""Project at /home/user/api-server. Files: src/handlers/users.py, src/handlers/auth.py, src/handlers/billing.py Old format: return {"data": result, "status": "ok"} New format: return APIResponse(data=result, status=200).to_dict() Import: from src.responses import APIResponse Run tests after: pytest tests/handlers/ -v""","toolsets":["terminal","file"]},{"goal":"Update all client SDK methods to handle the new response format","context":"""Project at /home/user/api-server. Files: sdk/python/client.py, sdk/python/models.py Old parsing: result = response.json()["data"] New parsing: result = response.json()["data"] (same key, but add status code checking) Also update sdk/python/tests/test_client.py""","toolsets":["terminal","file"]},{"goal":"Update API documentation to reflect the new response format","context":"""Project at /home/user/api-server. Docs at: docs/api/. Format: Markdown with code examples. Update all response examples from old format to new format. Add a 'Response Format' section to docs/api/overview.md explaining the schema.""","toolsets":["terminal","file"]}])
Каждый под-агент получает собственную сессию терминала. Они могут работать в одном и том же каталоге проекта, не мешая друг другу — при условии, что редактируют разные файлы. Если два под-агента могут затронуть один и тот же файл, обработайте этот файл самостоятельно после завершения параллельной работы.
Паттерн: Сбор, затем анализ
Используйте execute_code для механического сбора данных, затем делегируйте анализ, требующий рассуждений:
# Step 1: Mechanical gathering (execute_code is better here — no reasoning needed)execute_code("""from hermes_tools import web_search, web_extractresults = []for query in ["AI funding Q1 2026", "AI startup acquisitions 2026", "AI IPOs 2026"]: r = web_search(query, limit=5) for item in r["data"]["web"]: results.append({"title": item["title"], "url": item["url"], "desc": item["description"]})# Extract full content from top 5 most relevanturls = [r["url"] for r in results[:5]]content = web_extract(urls)# Save for the analysis stepimport jsonwith open("/tmp/ai-funding-data.json", "w") as f: json.dump({"search_results": results, "extracted": content["results"]}, f)print(f"Collected {len(results)} results, extracted {len(content['results'])} pages")""")# Step 2: Reasoning-heavy analysis (delegation is better here)delegate_task(goal="Analyze AI funding data and write a market report",context="""Raw data at /tmp/ai-funding-data.json contains search results and extracted web pages about AI funding, acquisitions, and IPOs in Q1 2026. Write a structured market report: key deals, trends, notable players, and outlook. Focus on deals over $100M.""",toolsets=["terminal","file"])
Это часто самый эффективный паттерн: execute_code дёшево выполняет 10+ последовательных вызовов инструментов, а затем под-агент выполняет одну дорогостоящую задачу рассуждения с чистым контекстом.
Выбор набора инструментов
Выбирайте наборы инструментов в зависимости от того, что нужно под-агенту:
Тип задачи
Набор инструментов
Зачем
Веб-исследования
["web"]
только web_search + web_extract
Работа с кодом
["terminal", "file"]
Доступ к shell + операции с файлами
Полный стек
["terminal", "file", "web"]
Всё, кроме обмена сообщениями
Анализ только для чтения
["file"]
Только чтение файлов, без shell
Ограничение наборов инструментов держит под-агента сфокусированным и предотвращает случайные побочные эффекты (например, исследовательский под-агент, выполняющий shell-команды).
Ограничения
По умолчанию 3 параллельные задачи: пакеты по умолчанию запускают 3 одновременных под-агента (настраивается через delegation.max_concurrent_children в config.yaml, без жёсткого лимита, минимум 1)
Вложенное делегирование — опционально: листовые под-агенты (по умолчанию) не могут вызывать delegate_task, clarify, memory, send_message или execute_code. Под-агенты-оркестраторы (role="orchestrator") сохраняют возможность delegate_task для дальнейшего делегирования, но только если delegation.max_spawn_depth поднят выше значения по умолчанию 1 (поддерживается 1-3); остальные четыре остаются заблокированными. Отключите глобально через delegation.orchestrator_enabled: false.
Настройка параллелизма и глубины
Параметр
По умолчанию
Диапазон
Эффект
max_concurrent_children
3
>=1
Размер параллельного пакета на один вызов delegate_task
max_spawn_depth
1
1-3
Сколько уровней делегирования могут порождать дальнейших агентов
Пример: запуск 30 параллельных рабочих с вложенными под-агентами:
Отдельные терминалы — каждый под-агент получает собственную сессию терминала с отдельной рабочей директорией и состоянием
Без истории разговора — под-агенты видят только goal и context, которые передаёт родительский агент при вызове delegate_task
По умолчанию 50 итераций — установите max_iterations ниже для простых задач, чтобы сэкономить ресурсы
Не долговременно — delegate_task синхронен и выполняется внутри родительского шага. Если родитель прерван (новое сообщение пользователя, /stop, /new), все активные дочерние задачи отменяются (status="interrupted"), а их работа теряется. Для работы, которая должна пережить текущий шаг, используйте cronjob или terminal(background=True, notify_on_complete=True).
Советы
Будьте конкретны в целях. "Исправь ошибку" — слишком размыто. "Исправь TypeError в api/handlers.py на строке 47, где process_request() получает None от parse_body()" даёт под-агенту достаточно информации для работы.
Указывайте пути к файлам. Под-агенты не знают структуру вашего проекта. Всегда указывайте абсолютные пути к соответствующим файлам, корень проекта и команду для запуска тестов.
Используйте делегирование для изоляции контекста. Иногда нужен свежий взгляд. Делегирование заставляет вас чётко сформулировать проблему, а под-агент подходит к ней без допущений, накопившихся в вашем разговоре.
Проверяйте результаты. Резюме под-агента — это всего лишь резюме. Если под-агент говорит "исправил ошибку, тесты проходят", проверьте это, запустив тесты самостоятельно или прочитав diff.
Полную справочную информацию о делегировании — все параметры, интеграцию с ACP и расширенную настройку — см. в разделе Делегирование под-агентов.