
























Nous Research has shipped a change to Hermes Agent. Its delegate tool can now run subagents asynchronously. Per the announcement, delegated work no longer blocks the parent chat.
Hermes Agent is an open-source personal agent from Nous Research. A parent agent can spawn child agents, called subagents, to fan out work. Until now, that delegation made you wait.
The update was announced on X by Nous Research and co-founder Teknium. Existing users enable it by running hermes update.
— Teknium 🪽 (@Teknium) June 15, 2026Hermes Agent now supports asyncronous subagents!
The existing delegate tool, which your agent uses to spawn subagents to fan out and do work, no longer blocks your chat!
To access now, `hermes update`, and enjoy! pic.twitter.com/6hN94wpRLW
The delegation tool is delegate_task. It spawns a subagent, which is an isolated child agent. Each child gets its own conversation, terminal session, and toolset.
Only the final summary returns to the parent. The parent’s context never sees the child’s intermediate tool calls or reasoning. That keeps the parent’s context window small.
Isolation is strict. Subagents start with a completely fresh conversation. They have no knowledge of the parent’s history. The parent must pass everything through the goal and context fields.
Subagents inherit the parent’s API key, provider configuration, and credential pool. That credential pool enables key rotation on rate limits. You can route subagents to a cheaper model through config.yaml.
In source, delegate_task is synchronous. The parent blocks inside the tool call until every child completes. Your chat stays frozen during that wait.
That design prevented several workflows. You could not start a long agent and keep working. You could not check in on a run or steer it mid-flight.
Nous built the non-blocking path in the open. Issue #5586 adds an async_delegation toolset. It spawns a background agent and returns a task_id immediately. The announcement confirms async subagents are now available.
The async tools cover the full lifecycle:
delegate_task_async — spawn a background agent, return a task_idcheck_task — non-blocking status plus recent outputsteer_task — inject a message into a running taskcollect_task — block until done, then return the full resultcancel_task — stop a running tasklist_tasks — all async tasks in the sessionBackground agents run as in-process threads. They reuse the same AIAgent machinery, credentials, and toolsets as delegate_task.
| Dimension | Synchronous delegate_task | Asynchronous delegation (async_delegation, #5586) |
|---|---|---|
| Parent chat | Blocks until all children finish | Returns a task_id immediately; chat stays free |
| Control while running | None — you wait | Check status, steer, collect, or cancel per task |
| Execution | Parent waits inside the tool call | Background in-process threads |
| Context cost | Only the final summary returns | Only the final summary returns |
| Isolation | Fresh conversation per child | Fresh conversation per child |
| Best for | Quick fan-out you wait on | Long tasks you run alongside the chat |
| Durability | Not durable across turns | Single-session; ACP (#4949) targets cross-turn |
A synchronous batch spawns children in parallel and waits. Concurrency is capped by delegation.max_concurrent_children, which defaults to 3.
# Synchronous: the parent waits for all children
delegate_task(tasks=[
{"goal": "Research topic A", "toolsets": ["web"]},
{"goal": "Fix the build", "toolsets": ["terminal", "file"]},
])The async toolset from issue #5586 returns control immediately.
# Asynchronous (async_delegation toolset, issue #5586)
t1 = delegate_task_async(goal="Research topic A")
t2 = delegate_task_async(goal="Research topic B")
check_task(t1["task_id"]) # status, without blocking
steer_task(t2["task_id"], "Use post-2024 sources only")
results = [collect_task(t["task_id"]) for t in (t1, t2)]/agents overlay, aliased /tasks. It shows a live tree of running and finished subagents.async_delegation toolset, tracked in issue #5586.hermes update.Michal Sutter is a data science professional with a Master of Science in Data Science from the University of Padova. With a solid foundation in statistical analysis, machine learning, and data engineering, Michal excels at transforming complex datasets into actionable insights.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。