位置
internal/agent/subgoal_track.go recordToolCall(约 196 行)
问题
if strings.Contains(argLower, kw) || strings.Contains(toolLower, kw) {
s.subgoals[i].addressed = true
工具名(tc.Name,如 read_file/edit_file/search_files/run_command)与子目标关键词做子串匹配。file/search/test/grep/command/edit 等高频词不在 sgStopWords,导致无关工具调用把子目标误标 addressed,且 addressed 单向置位无恢复。
复现场景(subagent 实测复现)
计划:
Plan:
1. Modify the config file
2. Update database schema
3. Refactor payment service
一次完全无关的 read_file /tmp/README.md 即将子目标 1 标为 addressed(read_file 含 file)。
影响
- 方向:漏报(false negative)——subgoal warning 被系统性抑制,missing-step 早期感知失效
- 严重度:低(advisory 非阻塞,且整个 subgoal 检测被
claimsSupervision 门控,agent.go:1978 opt-in)
- 含
file/test/search 等词根的子目标基本全部失效
独立复核
subagent 已确认:匹配路径存在、无抵消机制、调用方传入原始工具名、构造场景实测复现。
建议修复
删除 strings.Contains(toolLower, kw) 分支(工具名是固定小集合,命中与子目标内容无关,几乎纯噪声),仅依赖 args 匹配;或对关键词加长度 ≥5 + 工具名词根黑名单过滤。
位置
internal/agent/subgoal_track.gorecordToolCall(约 196 行)问题
工具名(
tc.Name,如read_file/edit_file/search_files/run_command)与子目标关键词做子串匹配。file/search/test/grep/command/edit等高频词不在sgStopWords,导致无关工具调用把子目标误标 addressed,且 addressed 单向置位无恢复。复现场景(subagent 实测复现)
计划:
一次完全无关的
read_file /tmp/README.md即将子目标 1 标为 addressed(read_file含file)。影响
claimsSupervision门控,agent.go:1978 opt-in)file/test/search等词根的子目标基本全部失效独立复核
subagent 已确认:匹配路径存在、无抵消机制、调用方传入原始工具名、构造场景实测复现。
建议修复
删除
strings.Contains(toolLower, kw)分支(工具名是固定小集合,命中与子目标内容无关,几乎纯噪声),仅依赖 args 匹配;或对关键词加长度 ≥5 + 工具名词根黑名单过滤。