위임 및 병렬 작업
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"]
}
])
세 가지 모두 동시에 실행됩니다. 각 하위 에이전트는 웹을 독립적으로 검색하고 요약을 반환합니다. 그런 다음 상위 에이전트는 이를 일관된 브리핑으로 종합합니다.
패턴: 코드 검토
선입견 없이 코드에 접근하는 새로운 컨텍스트 하위 에이전트에 보안 검토를 위임합니다.
Review the authentication module at src/auth/ for security issues.
Check for SQL injection, JWT validation problems, password handling,
and session management. Fix anything you find and run the tests.
핵심은 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"]
)
하위 에이전트은 사용자의 대화에 대해 전혀 아무것도 알지 못합니다. 그들은 완전히 새롭게 시작합니다. "우리가 논의 중이던 버그 수정"을 위임하면 하위 에이전트는 사용자가 말하는 버그가 무엇인지 알 수 없습니다. 항상 파일 경로, 오류 메시지, 프로젝트 구조 및 제약 조건을 명시적으로 전달하세요.
패턴: 대안 비교
동일한 문제에 대한 여러 접근 방식을 병렬로 평가한 후 가장 좋은 방법을 선택합니다.
I need to add full-text search to our Django app. Evaluate three approaches
in parallel:
1. PostgreSQL tsvector (built-in)
2. Elasticsearch via django-elasticsearch-dsl
3. Meilisearch via meilisearch-python
For each: setup complexity, query capabilities, resource requirements,
and maintenance overhead. Compare them and recommend one.
각 하위 에이전트는 하나의 옵션을 독립적으로 조사합니다. 격리되어 있기 때문에 교차 오염이 없습니다. 각 평가는 그 자체의 장점을 가지고 있습니다. 상위 에이전트는 세 가지 요약을 모두 가져와서 비교합니다.
패턴: 다중 파일 리팩토링
대규모 리팩토링 작업을 병렬 하위 에이전트로 분할하여 각각 코드베이스의 서로 다른 부분을 처리합니다.
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_extract
results =
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 relevant
urls = [r["url"] for r in results[:5]]
content = web_extract(urls)
# Save for the analysis step
import json
with 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 $.""",
toolsets=["terminal", "file"]
)
이는 종종 가장 효율적인 패턴입니다. execute_code은 10개 이상의 순차적 도구 호출을 저렴하게 처리한 다음 하위 에이전트가 깨끗한 컨텍스트를 사용하여 비용이 많이 드는 단일 추론 작업을 수행합니다.
도구 세트 선택
하위 에이전트에 필요한 사항에 따라 도구 세트를 선택하세요.
| 작업 유형 | 도구 세트 | 왜? |
|---|---|---|
| 웹 조사 | ["web"] | web_search + web_extract 전용 |
| 코드작업 | ["terminal", "file"] | 쉘 액세스 + 파일 작업 |
| 풀스택 | ["terminal", "file", "web"] | 메시지를 제외한 모든 것 |
| 읽기 전용 분석 | ["file"] | 파일을 읽을 수만 있고 쉘은 사용할 수 없습니다. |
도구 집합을 제한하면 하위 에이전트에 집중이 유지되고 우발적인 부작용(예: 셸 명령을 실행하는 연구 하위 에이전트)이 방지됩니다.
제약
- 기본 3개의 병렬 작업: 배치는 기본적으로 3개의 동시 하위 에이전트로 설정됩니다(config.yaml의
delegation.max_concurrent_children을 통해 구성 가능, 하드 한도 없음, 1층만). - 중첩 위임은 선택 가능: 리프 하위 에이전트(기본값)는
delegate_task,clarify,memory,send_message또는execute_code을 호출할 수 없습니다. Orchestrator 하위 에이전트(role="orchestrator")는 추가 위임을 위해delegate_task을 유지하지만delegation.max_spawn_depth이 기본값인 1(1-3 지원) 이상으로 증가한 경우에만 해당됩니다. 나머지 4개는 차단된 상태로 유지됩니다.delegation.orchestrator_enabled: false을 통해 전역적으로 비활성화합니다.
동시성 및 깊이 튜닝
| 구성 | 기본값 | 범위 | 효과 |
|---|---|---|---|
max_concurrent_children | 3 | >=1 | delegate_task 호출당 병렬 배치 크기 |
max_spawn_depth | 1 | 1-3 | 추가로 생성할 수 있는 위임 수준 수 |
예: 중첩된 하위 에이전트를 사용하여 30개의 병렬 작업자 실행:
delegation:
max_concurrent_children: 30
max_spawn_depth: 2
- 별도의 터미널 — 각 하위 에이전트는 별도의 작업 디렉터리와 상태를 갖는 자체 터미널 세션을 갖습니다.
- 대화 기록 없음 — 하위 에이전트는
delegate_task을 호출할 때 상위 에이전트가 전달하는goal및컨텍스트만 볼 수 있습니다. - 기본 50회 반복 — 비용 절감을 위해 간단한 작업의 경우
max_iterations을 더 낮게 설정 - 지속적이지 않음 —
delegate_task은 동기식이며 상위 턴 내에서 실행됩니다. 상위 항목이 중단되면(새 사용자 메시지,/stop,/new) 모든 활성 하위 항목이 취소되고(status="interrupted") 해당 작업이 삭제됩니다. 현재 턴보다 오래 지속되어야 하는 작업의 경우cronjob또는terminal(background=True, notify_on_complete=True)을 사용하세요.
팁
목표를 구체적으로 설정하세요. "버그 수정"은 너무 모호합니다. "process_request()가 pars_body()에서 None을 받는 api/handlers.py 라인 47에서 TypeError를 수정합니다."는 하위 에이전트가 작업하기에 충분하도록 제공합니다.
파일 경로를 포함합니다. 하위 에이전트는 프로젝트 구조를 모릅니다. 항상 관련 파일, 프로젝트 루트 및 테스트 명령에 대한 절대 경로를 포함하세요.
컨텍스트 격리를 위해 위임을 사용하세요. 때로는 새로운 관점을 원할 때도 있습니다. 위임을 하면 문제를 명확하게 설명할 수 있으며 하위 에이전트는 대화에서 쌓인 가정 없이 문제에 접근합니다.
결과를 확인하세요. 하위 에이전트 요약은 바로 요약입니다. 하위 에이전트가 "버그를 수정하고 테스트를 통과했습니다"라고 말하면 직접 테스트를 실행하거나 차이점을 읽어 확인하세요.
전체 위임 참조(모든 매개변수, ACP 통합 및 고급 구성)는 하위 에이전트 위임을 참조하세요.