问题
每个 Agent(包括父 Agent 和所有模式的 subagent)都应拥有独立 Inbox,并在创建时自动注册。父子之间、兄弟 subagent 之间应通过同一套可寻址的投递机制通信;经 IOA 收到的消息也应送入目标 Inbox,由运行时负责消费和调度。
目前兄弟 subagent 可以通过 IOA 共享空间主动 send/read 完成通信,但还没有形成“发送到目标 Agent → 自动进入目标 Inbox → 消费或唤醒 → 回复”的闭环。
当前实现
agent/subagent.go 为 async / fork 子任务创建独立 Inbox,并登记在 SubAgentTool.running。subagent 的 action=message 按名字投递到运行中的子任务;结束后移除登记。sync 子任务没有进入这个消息登记表。
- 父子共享工具实例,兄弟在工具可用时可以通过上述入口互发,但父 Agent 没有进入同一套寻址表,不能形成统一的双向通信入口。
- 父子共享 IOA Client、Node ID 和当前 Space。
pkg/runtime/ioa.go 的自动订阅过滤本节点消息;pushAsync 将外部消息送到主 Session,未按目标 subagent 分发。
- 子任务通过
subagent_completion 自动通知父 Inbox;IOA delegate / return handoff 是过程记录,不承担目标 Inbox 的投递。
harness/subagent_ioa_test.go 已验证真实父 Agent 派发两个真实子 Agent、子 Agent 主动读写 IOA、父 Agent 收到完成通知。该用例没有覆盖兄弟 Inbox 自动接收或空闲唤醒。
预期行为
- 统一身份与自动注册:父 Agent 与所有模式的子 Agent 创建时拥有独立 Inbox,并在所属运行时作用域内自动注册;用唯一 Agent / Session ID 寻址,名字只作展示或查找,处理重名与作用域边界。
- 统一双向投递:支持父 → 子、子 → 父、兄弟 → 兄弟。保留发送者、接收者、消息 ID 和回复关联;调用方不能冒用其他 Agent 身份。复用现有 Inbox 与 Session 调度能力,收敛现有 message / completion 路径。
- 消费与唤醒:运行中在轮次边界消费消息;空闲且仍可接收消息的 Agent 由调度器唤醒。同一个 Agent 不得出现并行模型循环。明确一次任务完成、会话空闲、Agent 关闭的区别,以及子任务何时保留或关闭接收能力。
- IOA 接入:明确逻辑 Agent 身份与 IOA Node / 消息目标的映射,将消息投递到正确 Inbox;解决共享 Node ID 导致的自发消息过滤问题,同时避免重复投递和回环。无需预设每个子 Agent 都建立独立网络连接。
- 生命周期与结果语义:关闭时注销并清理资源;取消、父会话关闭和投递并发时行为确定。明确区分已入队与已消费,对未知目标、已关闭目标、队列已满给出可观察结果。补充消息顺序和重连重复消息的处理语义。
- 可追踪性:通过现有事件和证据关联发送、投递、消费、唤醒及回复,能区分真实消息消费与模型文字声称已收到。
Harness 验收
使用隔离的本地通信环境,保留无 LLM 与真实 LLM 两类验证,并接入 CI:
- 真实父 Agent 通过 subagent 工具创建 A、B;A 获得本次随机内容,B 的初始任务不包含该内容。
- A 自主向 B 发送;B 从自己的 Inbox 自动收到并回复;A 消费回复后确认;两个子 Agent 向父 Agent 汇报,父 Agent 消费结果后完成。
- 分别验证本地投递和 IOA 接入;自动接收用例不能依赖兄弟反复调用
ioa read 或父 Agent 代为转述。
- 使用实际身份、消息关联和运行时消费事件断言全过程,不能仅检查模型最后说“成功”。
- 覆盖运行中追加输入、空闲唤醒、双向并发发送、重名/跨作用域隔离、未知或关闭目标、队列满、取消和关闭期间投递,以及 IOA 重连重复消息处理。
- 真实模型用例设置请求、时间和输出预算;使用仅支持该通信任务的工具范围。保留现有共享空间主动读写测试作为另一种通信方式的验证。
完成标准
父子和兄弟可以通过统一 Inbox 寻址与投递;IOA 消息可自动到达指定子 Agent;任务完成与接收生命周期有明确契约;运行时确保单一执行循环;上述真实场景在 CI 中有可核验的通过证据。
问题
每个 Agent(包括父 Agent 和所有模式的 subagent)都应拥有独立 Inbox,并在创建时自动注册。父子之间、兄弟 subagent 之间应通过同一套可寻址的投递机制通信;经 IOA 收到的消息也应送入目标 Inbox,由运行时负责消费和调度。
目前兄弟 subagent 可以通过 IOA 共享空间主动 send/read 完成通信,但还没有形成“发送到目标 Agent → 自动进入目标 Inbox → 消费或唤醒 → 回复”的闭环。
当前实现
agent/subagent.go为 async / fork 子任务创建独立 Inbox,并登记在SubAgentTool.running。subagent的action=message按名字投递到运行中的子任务;结束后移除登记。sync 子任务没有进入这个消息登记表。pkg/runtime/ioa.go的自动订阅过滤本节点消息;pushAsync将外部消息送到主 Session,未按目标 subagent 分发。subagent_completion自动通知父 Inbox;IOA delegate / return handoff 是过程记录,不承担目标 Inbox 的投递。harness/subagent_ioa_test.go已验证真实父 Agent 派发两个真实子 Agent、子 Agent 主动读写 IOA、父 Agent 收到完成通知。该用例没有覆盖兄弟 Inbox 自动接收或空闲唤醒。预期行为
Harness 验收
使用隔离的本地通信环境,保留无 LLM 与真实 LLM 两类验证,并接入 CI:
ioa read或父 Agent 代为转述。完成标准
父子和兄弟可以通过统一 Inbox 寻址与投递;IOA 消息可自动到达指定子 Agent;任务完成与接收生命周期有明确契约;运行时确保单一执行循环;上述真实场景在 CI 中有可核验的通过证据。