AI AgentAI 编程开发工具

Herdr:Agent GUI 已经够好,为什么还要一个终端复用器?

如果你最近在关注多 Agent 工具,可能已经听过 Herdr。它在重度 CLI 用户中得到过一些很具体的推荐:有人同时运行十多个 Agent,用它避免审批请求在后台等上几天;也有多年使用 tmux 的开发者,因为同时使用 Claude Code、Codex、Cursor 和 Kiro 而迁了过去。这些推荐对应的究竟是什么工作流?Agent GUI 已经做得很好,Herdr 又能增加什么?

以前的讨论中,我们提到过 Harness Engineering 正在带来新的交互瓶颈。开发者在本地或者远程环境中部署的 Agent 越来越多,这些工具独立运行的时间也越来越长。以前那种人盯着命令行屏幕看输出的做法,慢慢变得不再适用。更多的程序开始并行运转,有的在后台继续处理,有的已经执行完毕,还有一些则停下来等待你的输入或审批。Agent 多了以后,人还得一个窗口一个窗口地翻,看谁跑完了、谁卡住了、谁在等确认。任务跑得更多,管理方式却还停在单 Agent 时代。这很快成了工作流里的老大难问题。

面对这种并发,市场给出了不同层面的应对方案。比如 Codex 桌面应用、Claude Code 的 Agent View 视图,以及 OpenCode 的各类客户端,都能在各自的生态内把任务分组排列。除了单一厂商的做法,也有跨工具的聚合看板和系统边缘的悬浮窗,帮你把后台程序汇总起来。

既然这些图形界面已经能标明哪些任务需要接管,并且支持用手机远程审批,平时在界面里看代码比对也比在终端里直观得多,为什么还会有人选择一个终端复用器?

只有在一种特定情况下,这种选择才说得通:终端会话本身依然是你主要的执行界面。

同一交互问题的三种答案

多个 Agent 一起跑,先要决定在哪一层管理它们。

如果你的日常开发主要留在一个工具生态里,使用厂商的官方界面通常是最顺畅的办法。Codex 桌面应用可以同时管理多个线程,并在界面上提供代码比对;它的手机客户端能处理跨线程的追踪和审批,桌面端也内置了 Remote SSH 供你连接远端开发机。Claude Code 的 Agent View 采用类似思路,将会话按 Needs inputWorkingCompleted 分组展示;配合 Remote Control,你能从手机或浏览器接管主机任务。对于使用 OpenCode 的人,它提供了多端支持,开启网页端服务后,挂载的纯文本 TUI 客户端也能与之共享会话信息。

如果你同时用着好几种模型工具,不想改变终端底层,只是缺一个统一的提醒,那么加上一个聚合看板或者轻量级悬浮窗就足够了。AgentsRoom 接入了多个供应商,提供终端画面流回放和通知,并配有移动端应用。不想装大型应用的话,系统边缘的悬浮窗是个更轻的替代。根据官方页面说明,CodeIslandVibe Island 能提取不同工具的等待请求并在屏幕边缘显示,点击即可跳回对应的终端面板。Vibe Island 的页面也说明了它支持跨网络监控远程服务器上的运行状况。

在这些选择之外,Herdr 作为一个纯终端复用器才显得特殊。它不在图形层工作。如果你因为工作环境的要求必须把会话留在终端里,它才派得上用场。它直接拥有这些会话进程,而不只是从外面观察并帮你跳回窗口。

Herdr 接管的是会话本身,不仅仅是通知

悬浮窗的作用是旁观,发现程序挂起后引导用户切回原位。各家厂商的 GUI 则是把运行过程装进自己定义好的项目和线程记录里。Herdr 作为一个终端复用器,它手里握着的是真实的 PTY(伪终端)进程,并把这些信息依附在它自己的面板上。

它因此保留了原生的命令行交互行为。你在它创建的分屏里可以同时跑普通的 Bash 脚本和各个厂商的 CLI 工具。全屏的文本界面和普通的命令行提示符都不受影响,依然是完整的终端会话。它同样具备一个复用器该有的基础能力:你可以运行 detach 命令关掉本地连接,让服务端和运行的程序在后台继续干活;过一阵子再用 reattach 命令连回去。程序运行期间,Herdr 会提取它们的运行阶段,并汇总到面板、标签页和工作区的层级结构上。

Herdr 将多个终端窗口转换为按 blocked、working、done 状态排序的注意力队列

因为它握着底层的进程和层级结构,Herdr 开放了让本地脚本直接调用的 CLI 与 Socket 接口。开发者可以写脚本来新建面板、列出目前的任务清单、切换焦点,也可以抓取面板里的输出文字,或者直接发送输入命令。脚本还可以挂起等待,直到某个面板里的任务发生改变再继续往下走。

GENDA 的一个案例中,开发团队需要同时处理 5 到 6 个代码 Issue,每个 Issue 还要同时配上 Claude Code 和 Codex。在这个流程里,Herdr 只是提供终端面板控制和信息收集。真正把这些模型工具串联起来的,是作者自己写了一套外部协议去调用 Herdr 的 Agent 技能接口来实现的。

为什么多数用户不该迁移

大部分开发者并不需要这种直接操作底层终端面板的权限,因此也就不需要改换复用器。

如果你平时主要使用单一厂商的 GUI 工具,留在那里你能获得直接的产品集成体验,拥有专门设计的代码比对界面,还有更完善的移动端审批流程。对于 macOS 上的用户,如果只是需要一个通知,添加一个悬浮窗的代价远比换掉整个终端复用器要小得多。那些早就习惯了用 tmux 或者 Zellij 的人,如果想要提示,通过社区提供的钩子项目为 tmuxZellij 增加指示器插件,就能保住自己配置多年的成熟环境。

而且,Herdr 自己的推断机制本身也不够准确。正如它的官方文档所述,为了获取 Claude Code 和 Codex 的运行阶段,Herdr 很大程度上仍然依赖于对前台进程的监控以及对终端屏幕内容的解析(screen-manifest)。这种单纯依赖查看屏幕内容来猜测程序执行意图的办法在实际使用中并不完美。在 0.7.3 版本期间提交的 Issue #1362 记录了一个情况:一个挂载在分屏里的 OpenCode 子会话可能仍在工作,但该子面板却显示为空闲,因此活动信号未必能可靠地传递到面板或工作区层级。

另外,它在会话状态的持久化上也有明确的边界。正如前面提到的,客户端的 detach 与 reattach 断连操作确实能让进程继续存活。但如果 Herdr 的服务端程序被完全停止并重新启动,它只会把窗口布局、工作目录和焦点恢复原样。服务端重启并不能保证任意进程或对话记录也能恢复。

Herdr 适合的少数场景

排除了上面的情况,Herdr 适合的人群非常具体。

它适合那些需要同时运行三个以上长期运行的 CLI Agent 的开发者。这些工具可能来自不同的框架,并且总是和各种普通的终端命令混杂在一起运行。对这些人来说,本地的终端、Linux 机器或者是通过网络连上的无头远程主机,就是他们写代码和跑程序的主阵地。他们希望有一个统一的工具能把这些 PTY 进程统揽起来,并且可以开放给本地的其他脚本或工具去检查和操作。出于这种需求,他们也愿意接受目前 0.x 早期版本在状态检测上的限制。

相对而言,如果你的情况属于以下任何一种,就不建议更换。如果你的工作流只围绕 Claude,那请先用 Claude Code 的 Agent View 和 Remote Control。如果你的工作重心全在 Codex,就先用 Codex 的官方桌面端、移动端和 Remote SSH。如果你高度依赖 OpenCode,它自带的桌面、网页和多会话界面也排在前面。如果你用 macOS 只是想看个提醒,别动现在的复用器,装个悬浮窗就行。如果你的工作非常依赖界面去比对代码、习惯在手机上办公,或者高度依赖 IDE、图形界面和语音输入,纯命令行复用器同样不适合你。对于那些需要任务调度器、自动 PR 审查流水线或者多团队协作系统的组织,Herdr 也办不到这些事。

虽然也有人用手机连接 SSH 来访问 Herdr 里的任务,但这通常只是一条用来应急的辅助路径。官方指南里确实演示过这种通过 SSH 连上去的响应式 TUI 界面。但从实际操作的体验来看,用它在小屏幕上审查代码或进行大段输入,远不如那些专门做过优化的官方移动端应用。这不该成为你迁移过去的理由。

Agent GUI、状态通知层与 Herdr 终端会话层解决的是不同问题

如果你执行命令的终端屏幕本身不再是你主要的执行界面,Herdr 大概率就不是你所需要的工具。

鸭哥每日手记

日更的深度AI新闻和分析