任务清单终于能套娃了:Hermes 的 todo 支持子任务嵌套

你有没有注意过,让 Hermes 干一件复杂活儿(比如“重构这个模块并补上测试”)时,它会在会话里维护一张任务清单(todo list),一边干活一边打勾,压缩上下文之后还能记得自己干到哪了。以前这张清单有个明显的天花板:它是扁平的。所有任务只能平铺排成一列,顺序即优先级——想表达“先把 A 做完,再在 A 里面细分 1、2、3 步”这种结构,只能靠文字硬写,agent 读起来费劲,你看起来也乱。8 月 29 日合并的 PR #97921 把这个天花板掀掉了:todo 项现在可以嵌套,子任务通过一个可选的 parent 字段挂在父任务下面,所有界面自动把树渲染成缩进结构。
todo 工具到底是什么
先交代背景。todo 是 Hermes 的一个内置工具:agent 在**复杂任务(官方工具文档的建议是 3 步以上)**或者你一次性交代多件事时,会自动用它建一张清单来跟踪进度。它的设计很克制:
- 只有一个
todo工具——传todos参数就是写入,不传参数就是读取当前清单; - 每次调用都会返回完整的最新清单,agent 始终知道“我干到哪了”;
- 状态只有四种:
pending(待办)、in_progress(进行中)、completed(完成)、cancelled(取消); - 上下文压缩之后,清单会带着一个固定的标题重新注入对话(“[Your active task list was preserved across context compression]”),所以长任务不会失忆。
清单是 agent 自己维护的,你不需要记任何命令——只要在任务描述里让它“先列个计划”或者“用任务清单拆解一下”,剩下的它自己来。
这次加的子任务长什么样
核心就一个改动:每个 todo 项多了个可选的 parent 字段,指向另一项的 id。
1. 重构 parser 模块 (id: t1)
├─ 拆分 parse_line 函数 (id: t2, parent: t1)
└─ 补单元测试 (id: t3, parent: t1)
2. 更新文档 (id: t4)
你看到的效果是:所有界面(CLI 文本、桌面应用的任务面板、ACP 适配层)都把子树渲染成缩进结构。官方在工具文档里写得很直白:一项的可选 parent 字段指向另一项的 id,它就变成子任务,界面按树缩进显示。
实现上还做了一堆防御,防止 agent 把自己绕晕:
- 自引用直接丢弃——
parent指向自己会被忽略; - 悬空引用和循环引用会被清理——
parent指向不存在的项、或者 A→B→A 这种环,写入后会消毒; - 父任务还活着时,子任务完成不会让父任务“看起来做完了”——压缩后重新注入时,只要还有后代处于进行中,父任务就保持可见;
- 重排序跳过嵌套清单——扁平地移动位置会把子任务从父任务身边撕走,所以排序时嵌套结构整体不动;
- ACP 适配层缩进最多 4 层——防止深到不可读。
这次改动的成本控制也很值得一提:整个功能只在缓存的工具 schema 上加了一个字符串属性和一句话描述,约 45 个 token。没有新工具,没有新参数(除了 parent),没有动系统提示词。
怎么用:说人话就行
你不需要写任何 JSON——todo 是 agent 的工具,你只要用自然语言表达“要分层”的意图:
"用任务清单把这次发布拆一下:先做代码冻结,冻结下面再分测试、构建、打包三个子任务"
agent 会照做,生成带 parent 的嵌套清单;你随时可以追问“现在到哪一步了?”,它读一遍清单就能告诉你。遇到需要并行推进的结构(比如“调研阶段”下面挂“对比方案 A”“对比方案 B”两个子任务),嵌套表达比平铺清晰得多。
什么时候它最有用
- 多阶段任务:发布、迁移、重构——天然是“大阶段 → 小步骤”的层级,嵌套让进度一眼可见。
- 长会话:压缩后清单会带着树结构重新注入,agent 不会把子任务和父任务搞混。
- 多人/多平台:桌面应用的任务面板会渲染成真正的树,网关消息里的文本也会缩进显示。
这个改动是 8 月 29 日刚合并的(PR #97921),目前在 main 分支上,还没有进入任何正式 release(v0.20.6 是 8 月 27 日打的)。想立刻体验就 hermes update 到最新代码。
小结
todo 从“扁平清单”变成“可嵌套的任务树”,看起来只是一个小字段,但对长任务体验的提升是实打实的:结构对了,agent 的进度跟踪和你的阅读理解都轻松一大截,而且代价只有 45 个 token。下次让 Hermes 干复杂活时,记得让它“把任务拆成带子任务的清单”试试。
想了解长任务相关的更多机制(回合数上限、运行预算、不打断的插话),可以看看回合数无限指南和上下文 token 优化指南。