委托
委托让 Anyy 把边界清晰的工作拆给子会话处理。子会话有自己的 transcript、运行状态、角色/工作区 scope 和工具视图;父会话继续保留面向用户的主对话。
适合委托的任务包括:并行调研、比较多个方案、检查仓库某个区域、执行一个可以独立总结的分析任务。
不要把普通追问、很快的查询、或长时间 shell 命令交给委托。快速工作留在当前轮;需要驻留后台继续跑的工作用 background_job;长 shell 命令用托管进程任务。
委托任务
主要的模型可见工具是 subagents toolset 里的 delegate_task。它会启动一个或多个子 Anyy 会话,并等待子会话完成后,把最终摘要返回给父会话。
常用参数:
| 参数 | 含义 |
|---|---|
task 或 goal | 单个子会话要完成的有界任务。 |
context | 附加给子任务的背景上下文。 |
label | 委托运行的短标签。 |
child_role_id | 可选的子会话 role id。 |
child_workspace_id | 可选的子会话 workspace id。 |
timeout_seconds | 子任务超时时间。 |
requested_model_id | 子任务的可选模型覆盖。 |
tasks | 批量模式,并行运行多个子任务。 |
批量模式受子任务并发上限约束。当前内置上限是每个父会话最多三个活跃子任务。
工具返回结构化 JSON,包含每个子任务的摘要、子会话 id 和 subagent run id。父会话应优先使用摘要回答用户,除非用户明确要求查看更详细的子会话内容。
子会话隔离
被委托的子任务是一个 source=subagent 的 Anyy 会话。它和其他会话一样会被存储和审计,但归属到父会话。
关键边界:
| 边界 | 行为 |
|---|---|
| Transcript | 子会话有独立 transcript。 |
| 深度 | 子会话不能再创建下一层子会话。 |
| 并发 | 一个父会话最多三个活跃子任务。 |
| 工具 | 子会话工具来自父会话可见工具,并叠加 subagent deny 规则。 |
| Messaging | 默认拒绝子会话使用 messaging toolset。 |
| Memory 和 automation 写入 | 默认拒绝 memory、automation mutation 等高影响工具。 |
delegate_task、background_job、subagent_list、subagent_history 和
subagent_cancel 在子会话内部禁用。
后台子任务
当用户明确要求“后台继续做”或“完成后通知我”时,使用 background_job。
background_job 会启动异步子会话,并立即返回:
| 字段 | 含义 |
|---|---|
background_job_id | Gateway 后台任务句柄。 |
subagent_run_id | 子任务运行 id。 |
child_session_id | 子会话 id。 |
async | 这个路径固定为 true。 |
运行时会把任务标记为完成后通知。用户可以继续在父会话里提问,而后台子任务继续运行。
准入控制
Anyy 也有自然语言准入路径:当请求明确表达后台、异步、长时间 agentic 工作时,运行时可以把它转为后台子任务。
分类器会把轻量查询留在前台。机械性的长时间 shell 工作会更倾向于托管进程任务。复杂的异步 agentic 工作可以转入后台子任务。
这个分类器有意保守。比如“查一下天气”不应该创建子会话;“在后台调研这个并完成后通知我”可以。
控制与历史
父会话可以查看和停止自己的子任务。
| Surface | 入口 |
|---|---|
| 模型工具 | subagent_list、subagent_history、subagent_cancel |
| TUI | /background <prompt>、/agents |
| RPC | session.spawn、subagents.list、subagents.history、subagents.kill、subagents.steer |
subagent_history 返回某个子任务的有界 transcript 和状态摘要。subagent_cancel 会停止当前会话拥有的 running 或 accepted 子任务。
subagents.steer 当前支持 cancel。message 和 restart 在 RPC 边界被识别,但在这个版本会返回 unsupported-action conflict。
使用建议
- 只委托能独立完成的任务。
- 给子任务明确交付物,比如“总结 migration tests”比“看看代码”更好。
- 只有当当前回复不依赖结果时,才使用
background_job。 - 敏感或会改变状态的工作应留在父会话,除非工具策略和审批路径很清楚。