Replies: 3 comments
提示词: /goal 绘制15种不同风格的网页前端,主题你自己定 现象: 子agent进入代码审查阶段,主agent宣布任务已完成 对话记录: dsh-session-session-ed0e3ea9-cbdd-45d2-96a5-d34a02baa513.zip |
|
补充:已在实际 session 日志中完整复现该问题,附时间线证据。 场景:goal 目标「绘制15种不同风格的网页前端」(maxGoalRounds=256)。主 agent 并行派发 3 个后台子 agent(A/B/C 组),各自编写并核对 5 个风格页面,主 agent 另写 时间线(2026-08-13,本地时间):
主 agent 在 complete 后收到 B 组延迟报告时的 reasoning 原话:
结论:complete 时刻(23:08:54)仍有两个子 agent(A/B 组)未完成最终核对与报告, 补充建议:除「complete 前存在 running 子 agent 时拒绝/等待」外, |
|
我按这里的真实 session 时间线做了一个可安装的 userland guard,专门拦 |

Uh oh!
There was an error while loading. Please reload this page.
goal 模式:子 agent 未完成最终产物核验时,主 agent 提前宣布 complete
问题描述
在 goal 模式下,主 agent 会派发后台子 agent(如独立核验 reviewer)对最终产物进行核验。但子 agent 尚在运行、核验结论尚未返回时,主 agent 就可以调用
update_goal(action=complete)将 goal 标记为已完成。goal 进入complete阶段后自动续跑立即停止,子 agent 的核验结果(可能包含发现的问题)永远不会被主 agent 处理。复现步骤
run_in_background方式派发一个子 agent 执行最终产物核验。running)、尚未返回核验结论时,主 agent 在本轮调用update_goal(action=complete)。complete;后续子 agent 返回的核验结果不再被消费。实际行为
期望行为
根因分析(基于 master 分支源码)
completionAuthority()(packages/goal/tool-goal/src/authority.ts)对 complete 的权限校验只检查「当前 turn 含直接人类输入」或「当前 turn 恰为当前 goal 的 round」,完全不检查该主 agent 派生树中是否仍有 running 的子 agent。readyToDrive()(packages/goal/goal-round-driver/src/index.ts)只依据主 agent 自身status === 'idle'驱动下一轮,与子 agent 运行状态无关:主 agent 派发后台子 agent 后自身 idle,即可进入下一轮并宣布 complete。renderWrapupContext()(packages/goal/tool-goal/src/wrapup.ts)注入「Do not call any more tools in this run」的收尾指令,且 goal-round-driver 因 phase 不再是 active 而停止驱动——此后子 agent 返回的核验结果没有任何消费方。packages/goal/goal-round-driver/src/prompt.ts)仅以自然语言要求「Before claiming completion, gather evidence」,没有任何等待子 agent 的硬性约束,模型容易在核验进行中提前宣布完成。建议修复方向
update_goal的 complete 路径(completionAuthority或GoalService.complete)中检查 agent 注册表里该主 agent 的派生子 agent;若存在 running 子 agent,拒绝 complete 并返回结构化错误(如GOAL_SUBAGENT_PENDING),提示模型先等待/收集子 agent 结果后再 complete。renderGoalRoundPrompt中显式增加规则——若已派发核验子 agent,必须收到其结果后才能 claim completion。环境信息
@deepseek-ai/dsh0.1.0-rc.6(npm 安装,Web GUI)All reactions