同时跑5个AIAgent不乱,Herdr做到了

上周五晚上,我同时开了 4 个 AI coding agent 在不同的终端里干活——Claude Code 在写新功能,Codex 在跑测试,另一个 Claude 在做 code review,还有一个在帮我整理文档。
问题来了:我得不停地在终端之间 cmd+tab 切来切去,生怕某个 agent 卡住了在等我批准什么东西。有时候切过去一看,它已经等了 5 分钟了,白白浪费时间。
后来同事甩给我一个链接:"试试这个。" 点进去一看——Herdr,一个终端工作区管理器,专门给 AI coding agent 设计的。5 个月,GitHub 上 35000 多颗星。
我装上试了一周,现在离不开了。
它到底解决了什么问题
先说清楚一件事:Herdr 不是又一个 AI 工具,它不写代码、不做补全、不帮你 review。它做的事更底层——给你的 AI agent 提供一个运行环境。
你可以这么理解:tmux 管的是终端,Herdr 管的是终端里的 agent。
举个具体例子。你用 tmux 开了 4 个 pane,每个跑一个 Claude Code。tmux 只知道这 4 个 pane 里在跑某个进程,但它完全不知道哪个 agent 在干活、哪个卡住了、哪个已经做完了。你得自己一个一个切过去看。
Herdr 不一样。它的侧边栏会实时告诉你:pane 1 的 Claude 正在 working,pane 2 的 Codex 状态是 idle,pane 3 的 agent 变成了 blocked——它在等你批准一个文件操作。
这个信息差,在同时管 3-5 个 agent 的时候,就是生产力的分水岭。
架构:一个 Rust 二进制搞定所有事
Herdr 整个就是一个 21MB 的 Rust 可执行文件,没有 Electron、没有 Node.js、没有运行时依赖。这个二进制根据启动参数不同,可以扮演三种角色:

Server 进程是核心。它在后台持有所有 pane 的 PTY(伪终端),agent 就跑在这些 PTY 里面。你关了笔记本盖子、SSH 断了、终端崩了——都不影响。Server 还在,agent 还在跑。
**Client(TUI)**就是你看到的那个界面。它通过 Unix Socket 连到 Server,只负责渲染和交互。ctrl+b q 退出 TUI,Server 完全不受影响。下次输入 herdr 就能重新 attach 回来。
CLI 模式是给 agent 和脚本用的。所有控制命令(创建 pane、发指令、读输出)都走同一套 Socket API,返回 JSON。这意味着 agent 可以操控 agent——Agent A 可以通过 CLI 启动 Agent B,给 B 派活,等 B 做完再取结果。
这套架构有几个很漂亮的设计:
State 和 Runtime 分离。AppState 是纯数据结构,可以不依赖任何 PTY 就做单元测试。PaneState(pane 的逻辑状态)和 PaneRuntime(pane 的 PTY 实例)也是分开的。
渲染是纯函数。compute_view() 负责处理几何计算和状态变更,render() 只读 &AppState 画图——渲染期间不可能改状态。这让 UI 的行为非常可预测。
平台代码隔离。 所有 OS 相关的东西都在 src/platform/<os>.rs 里,核心模块里一行 #[cfg(target_os)] 都没有。
herdr (单二进制 21MB)
├── src/server/ # 后台常驻,持有 PTY 池
├── src/client/ # TUI 渲染层
├── src/protocol/ # Wire format + JSON endpoints
├── src/detect/ # Agent 检测引擎
├── src/pty/ # 伪终端管理
├── src/app/ # 状态、会话、agent、worktree
└── src/platform/ # macOS / Linux / Windows 隔离
Agent 检测:Herdr 最核心的黑科技
这是 Herdr 区别于所有传统终端复用器的关键能力。
它怎么知道一个 pane 里跑的是什么 agent、agent 现在是什么状态?答案是:持续扫描终端输出缓冲区,用正则匹配识别。
每种 agent 都有一个独立的 TOML 检测 manifest 文件。拿 Claude Code 举例,它的 manifest 里定义了十几条规则:
- 检测 OSC title 中的 Braille 转圈字符 → 判定为
working - 扫描底部 12 行,匹配到
esc to interrupt→ 判定为working - 匹配到
Enter to confirm · Esc to cancel→ 判定为blocked(在等用户操作) - 匹配到提示符 → 判定为
idle
每条规则还有优先级权重,最终取最高优先级的匹配结果作为 agent 当前状态。
这套检测系统的 5 种状态各有含义:
- idle:agent 在等输入,并且它所在的 tab 你已经看过了
- working:agent 正在干活,别打扰它
- blocked:agent 遇到了需要你操作的对话框(比如权限确认、文件覆盖提示)
- done:和 idle 类似,但你还没切过去看结果——相当于"有未读消息"
- unknown:检测到有 agent 在跑,但没法精确分类当前状态

整个检测引擎有一个铁律:detector 只读 screen snapshot,绝不碰 parser 或 viewport。 这保证了检测不会影响终端的正常渲染和输入处理。检测引擎运行在 server 端,每个 pane 的 detection buffer 被独立扫描,即使你同时开了 15 个 pane,检测也不会成为瓶颈——Herdr 的 PR 合并标准里明确要求必须在 1 个和 15+ 个 pane 下都跑 benchmark。
目前 Herdr 内置了 21 种 agent 的检测规则:Claude Code、Codex、Cursor、GitHub Copilot、Gemini、Grok、Hermes、OpenCode、Devin、Cline、Kiro、Kimi、Droid、Qwen,等等。基本上你能叫得出名字的 AI coding agent,它都认识。而且检测 manifest 支持远程更新——新 agent 上线后,Herdr 可以后台拉取最新的检测规则,不需要升级整个二进制。
一个人怎么用多个 Agent
说完原理,聊聊实际使用场景。
最典型的用法是一人多 agent 流水线。比如我现在的工作流:
herdr # 启动
herdr pane split --current --direction right # 右边开一个新 pane
herdr agent start reviewer --kind claude --pane w1:p2 # 在新 pane 里启动 Claude
herdr agent prompt reviewer "Review the diff and report findings" --wait
左边我在写代码,右边 Claude 在做 review。侧边栏能看到两边各自的状态。reviewer 做完后状态变成 idle,我一瞥就知道可以去看结果了。
更高阶的玩法是让 agent 编排 agent。
假设你有一个 "orchestrator" agent,它可以通过 Herdr CLI 的 Socket API:
herdr pane split创建新 paneherdr agent start coder --kind codex启动一个 Codexherdr agent prompt coder "实现这个功能"给它派活herdr agent wait coder --until idle等它做完herdr agent read coder --source recent-unwrapped读取它的输出- 根据输出决定下一步:是开一个新 agent 做测试,还是自己来 review
这不是科幻,这是 Herdr 的 Socket API 已经支持的能力。
长任务挂后台也是高频场景。agent 在重构一个大模块,预计要跑 20 分钟。ctrl+b q detach,去开会、去喝咖啡,回来 herdr 一下就能看到结果。SSH 断了也不怕,重连后 attach 回来,一切都在。
Git Worktree 并行开发是另一个加分项。herdr worktree create feature-auth 一条命令,Herdr 就帮你创建一个 Git worktree 并绑定到一个新的 workspace。你可以在不同 workspace 里针对不同分支各跑一个 agent,互不干扰。比如 workspace 1 在 main 上修 hotfix,workspace 2 在 feature 分支上做新功能,切换就像浏览器切 tab 一样简单。
远程开发也是一等场景。herdr --remote user@server 一条命令,通过 SSH 直接 attach 到远端机器上的 Herdr server。你在公司服务器上挂了 3 个 agent 跑任务,回家打开终端 remote attach 一下,就能看到所有 agent 的状态和输出,继续操作。比传统的 SSH + tmux 方案多了 agent 状态感知的优势。

生态:5 个月长出 827 个项目
一个工具火不火,看生态就知道。
Herdr 从今年 3 月底发布到现在 5 个月,awesome-herdr 列表里已经收录了 827 个 社区项目。几个大类:
- Agent 编排(157 个):多 agent 集群管理、自动 PR 循环、子 agent 启动器
- MCP & Socket API 客户端(106 个):Python/JS/Go/Rust SDK,Telegram/Discord/Slack 告警
- 编辑器集成(54 个):Neovim 30+ 个插件、VS Code 9 个
- 终端增强(359 个):Git worktree 自动化就有 99 个
- 伴侣应用(75 个):桌面端、移动端、甚至硬件显示器

几个值得单独说的项目:
herdr-remote 让你从菜单栏、手机、甚至 Telegram 远程监控和操控你的 agent 集群。出门在外也能看到 agent 的状态,必要时发个指令。
herdr-reviewr 是一个代码审查侧边栏,直接在 Herdr 里看 diff、写 comment、发回给 agent。
herdrm 是一个原生 macOS 桌面 console,专门用来管远程机器上的 agent。还有 Heeler,一个 iOS 原生客户端,通过 SSH 连你的 Herdr server。
连 DHH(Ruby on Rails 创始人)都亲自给 Herdr 提了 PR,贡献了 tab reorder、window title、pane borders 等 UI 特性。
还有一个值得关注的趋势:Herdr 从 v0.8.0 开始把开源协议从 AGPL-3.0 改成了 Apache-2.0。这个举动对商业团队来说是个大利好——意味着你可以在公司项目里自由使用,不用担心 copyleft 感染问题。同版本还正式支持了 Windows GA,把覆盖面从 macOS/Linux 扩展到了全平台。
和 tmux 比到底怎么样
很多人第一反应是:"这不就是 tmux 吗?"
确实,底层都是 client/server + PTY 管理。但区别在于 Herdr 多了一整层 agent 感知能力。
| 维度 | tmux | Herdr |
|---|---|---|
| Agent 状态感知 | 无 | 5 态实时检测 |
| Agent 控制 API | 无 | CLI + Socket JSON API |
| agent 编排 agent | 不可能 | 原生支持 |
| 鼠标操作 | 勉强支持 | 一等公民 |
| 插件生态 | 成熟但传统 | 新但专注 AI |
| 二进制大小 | ~1MB | 21MB |
| Git Worktree | 无 | 原生集成 |
如果你只是日常终端操作,tmux 完全够用,而且生态更成熟。但如果你在同时跑多个 AI agent——这已经是越来越多开发者的日常了——Herdr 就是另一个量级的体验。
我的真实感受
用了一周,说说真实体验。
好的地方: 侧边栏的 agent 状态监控确实省心,不用再挨个切 pane 了。detach/reattach 的体验很丝滑,和 tmux 一样顺。22 种 agent 的自动识别基本都准,我用 Claude Code 和 Codex 混着跑,从没有误判过。
不太好的地方: 21MB 虽然不大,但比 tmux 还是重了。主题虽然有 11 套,但有些细节的定制不如 tmux 灵活。另外如果你只用一个 agent,这个工具的核心价值就发挥不出来,不如直接用终端跑。
我的建议: 如果你已经开始同时用 2 个以上 AI agent 干活,现在就装。brew install herdr,两分钟的事。如果你还是单 agent 模式,可以先观望,但这个工具的方向肯定是对的——multi-agent 协作是接下来的大趋势。
在这个 AI agent 越来越多的时代,我们需要的不只是更好的 agent,还需要更好的方式来管理它们。Herdr 抓住了这个需求,而且做得很漂亮。
你平时同时开几个 AI agent 干活?有没有被"切来切去找哪个卡住了"折磨过?欢迎评论区聊聊。