公开子智能体生命周期 API
插件可以启动并监督全新的 Hermes 子会话,而无需 import tools.delegate_tool、网关内部机制、TUI 状态或 AIAgent 字段。该服务从当前智能体轮次解析其父级,因此它在 CLI、网关、非交互和看板 worker 会话中都能工作。在活动智能体轮次之外启动会失败即关闭,报 No active Hermes parent session。
from agent.subagent_lifecycle import SubagentLaunchRequest
def launch_review(ctx):
# 在智能体轮次活动期间,从插件工具或钩子调用。
service = ctx.subagent_lifecycle
handle = service.launch(SubagentLaunchRequest(
goal="Review this change for regressions.",
context="Only inspect the supplied repository.",
role="leaf",
correlation_id="review-42",
allowed_toolsets=("file",),
))
# 如需持久化 handle.to_dict()。
if service.wait(handle, timeout_seconds=2).timed_out:
return handle.to_dict()
return service.result(handle)
SubagentHandle 可序列化,携带一个带版本号的不透明能力。把它传回 status、wait、cancel、result 或 reconnect;畸形或伪造的句柄返回 UNKNOWN/UNKNOWN_HANDLE,无法访问子进程。
稳定状态为 PENDING、STARTING、RUNNING、SUCCEEDED、FAILED、INTERRUPTED、CANCEL_REQUESTED、CANCELLED 和 UNKNOWN。
cancel(handle, reason=...) 是协作式的:它请求子智能体在下一个安全边界中断,并返回 CANCEL_REQUESTED;在 wait 或 result 观察到终态之前,它绝不声称完成。终态结果不可变、幂等、上限 32k 字符,省略记录和隐藏推理,并含一个稳定结果哈希。
本 API 是受生命周期管理的异步执行。子进程构建和完成使用与 delegate_task 相同的主机归属路径,包括父级工具解析恢复、记忆通知、序列化的 subagent_stop 钩子、资源清理和子进程成本汇总。它不改变同步的 delegate_task 工具、批量委派或其网关/TUI 显示。初始实现在进程内保留元数据和终态结果一小时。进程重启后,reconnect 返回 RECONNECT_UNAVAILABLE,绝不启动替换子进程。运行中的 Python 线程也不能在进程退出后存活;调用方必须把这些句柄视为被进程退出中断。
请求失败即关闭:goal/context/metadata 大小有上限,未知或扩大父级范围的工具集被拒绝,按工具阻止、工作目录覆盖和按启动超时被显式拒绝,直到 Hermes 能在不削弱隔离的情况下支持它们。用 allowed_toolsets 收窄子进程;Hermes 既有的不安全工具阻止仍强制执行。