omnigent-ai/omnigent 是一个开源代理框架,可统一管理 Claude Code、Codex、Cursor、Pi 等编码代理。2026 年 11 月 6 日的提交 57c2b64(#13079)修复了该运行器的原生终端面板清理行为。由其他代理启动的会话,也就是子代理用的面板,现在在一小时后会回收,而由人直接打开的顶层会话的面板则仍按原有的保留时间处理。
问题出在时间设置上。原生面板沿用运行器的空闲超时,这个值用来让顶层会话不会消失,但在托管主机上该值是一天。因此,其他代理创建的短命工作会话中残留的 CLI、TUI、MCP 进程各自会堆积长达一天。修复方式是把子代理面板的空闲窗口限制为一小时,也就是原生面板的默认值(可通过环境变量 OMNIGENT_NATIVE_PANE_IDLE_TIMEOUT_S 调整)。实现上在 pane_reaper.py 中新增了 resolve_sub_agent_pane_idle_timeout_s,并给 PaneRef 加上 sub_agent 标志,以便按面板选择空闲窗口。在 app.py 一侧,子代理与否通过会话初始化封装中的父连接来判定。
同一 PR 中后续的修复让“将 runner.idle_timeout_s 设为 0 即关闭原生面板回收”这一已文档化的行为重新生效。此前的实现即使在值为 0 时也会把子代理窗口恢复为原生默认值,因此仍会在一小时后回收子面板。现在 0 会同时关闭顶层和子代理的回收,只有在值为正数时才限制子代理窗口。测试以 init-envelope 为依据,确认 Codex 子会话拿到一小时窗口、而顶层会话保持 24 小时窗口。
不过,仅凭这次提交记录还有很多地方无法判定。许可证和发布版本、服务器上实际减少的进程数都没有给出。由于子代理判定依赖父连接,未带该标记的子会话会照旧保留更长的窗口。这是收窄回收范围的改动,因此在生产环境中减少的进程数需要另行确认。