Devotd Github
新发现AI 智能体

omnigent-ai/omnigent #13079 — 子代理原生面板一小时后回收

修复由其他代理启动的子代理原生终端面板,使其在一小时后被回收,而不是沿用运行器的一天空闲窗口的提交。

仓库信息omnigent-ai/omnigent ↗

修复由其他代理启动的子代理原生终端面板,使其在一小时后被回收,而不是沿用运行器的一天空闲窗口的提交。

GitHub 项目说明: Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents — swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.

星标
★ 10.9K
复刻
1.8K
语言
Python
许可证
Apache-2.0
最新版本
v0.18.0
查看原始来源 ↗在 GitHub 查看 ↗

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 小时窗口。

不过,仅凭这次提交记录还有很多地方无法判定。许可证和发布版本、服务器上实际减少的进程数都没有给出。由于子代理判定依赖父连接,未带该标记的子会话会照旧保留更长的窗口。这是收窄回收范围的改动,因此在生产环境中减少的进程数需要另行确认。