乐于分享
好东西不私藏

一个终端,管一群 agent:把 AI 编程助手装进 Herdr 里

一个终端,管一群 agent:把 AI 编程助手装进 Herdr 里

🐐 一个终端,管一群 agent:把 AI 编程助手装进 Herdr 里

本期主题来源于前两天公众号小伙伴“佛波勒”推荐的 herdr,我之前没有听说过,收到推荐后我这两天上手体验了一下。虽然目前我自己的单项目任务运行占了我一大半,少部分时候我会进行多项目并行,我还没有用满 herdr,但是现在只要跑 agent 任务,我都更愿意放到 herdr 当中来跑了,状态提醒的功能太香了。😂😂😂


1. 🐐 从零到跑起来

Herdr 是一个二进制命令行工具(不是 Electron 应用,不是浏览器 dashboard),它在一个终端窗口中管理多个 AI 编程 agent 的 PTY 会话。它的定位是 Agent Multiplexer(agent 多路复用器)——就像 tmux 多路复用了多个 shell session,Herdr 多路复用了多个 agent session。

核心设计哲学:"Real panes, not rebuilt chat views."——Herdr 不重新实现 agent 的聊天界面,而是让 agent 运行在真正的终端 PTY 中,保留 shell、字体、keybinding 等一切终端体验。

安装十分简单,执行命令即可:

# 安装脚本
curl -fsSL https://herdr.dev/install.sh | sh
# 或者 Homebrew
brew install herdr

装完之后终端里敲:

herdr

一个带 sidebar 的 TUI 界面就出来了。可以发现有三个面板:spaces、agents、Pane,Pane 就是一个正常的终端界面,在这里直接运行一个 opencode,然后开始对话,在 agents 面板中可以方便地查看 opencode 的运行状态。

图:herdr 的 TUI 界面,左侧 spaces/agents 面板,右侧真实 PTY 终端

操作到这里,其实可以说已经掌握 herdr 的核心用法了。

首次运行 herdr 背后做了两件事:在后台 spawn 一个 server 进程,同时在前台启动一个 client TUI。你看到的只是 client,server 悄悄在后台活着。这个分离是理解 herdr 一切行为的关键——后面会展开讲。


2. 多 agent 并行,sidebar 帮你盯全场

装完之后我做了件很自然的事:跑 agent。

在 herdr 里跑 agent 和平时在终端里跑没有区别。你就在 pane 里敲 opencode,它就在那个 pane 里启动。唯一的区别是——sidebar 上多了一个状态标记。

Herdr 不需要你告诉它"这个 pane 里跑的是 agent"。它通过两套机制自动检测:

1. Screen Manifest(屏幕快照匹配):读取 pane 底部终端的实时画面,用规则去匹配——比如 Claude Code 的权限确认弹窗匹配到 blocked 规则。零配置,开箱即用。
2. Integration Hooks(集成钩子上报):对于支持完整生命周期 hook 的 agent(如 Pi、OpenCode),让 agent 自己主动告诉 Herdr 自己的状态。更精确。

两种机制互斥:有 hook 就不走 screen manifest。

herdr 真正强大的地方,不是跑一个 agent,而是同时跑多个

当你打开了一个 workspace,Ctrl+B v 向右 split 了一个 pane,又 Ctrl+B - 向下 split 了一个。三个 pane,每个里面跑一个 opencode,分别输入不同的任务指令。

然后 sidebar 上你可能看到的画面是这样的:

• opencode working 🟡 — 正在写代码
• opencode blocked 🔴 — 卡住了,在等你确认权限
• opencode done 🔵 — 干完了,等你看

不用手动切 tab 去看谁干完了。 sidebar 帮你盯全场。哪个 agent blocked 了需要你介入,哪个 done 了可以去看结果——一目了然。

有了这个状态展示的功能,我就不用像之前那样,在 Ghostty 中反复的去切换 Tab 页查看各个 agent 的运行状态了。方便了太多了,而且这样的感觉很棒。

Herdr 里 agent 有五种状态:

图:Herdr 中 agent 的五种状态及触发条件

状态会向上汇总:一个 blocked 的 agent 让它所在的 pane、tab、workspace 都在 sidebar 上亮红灯。这是 herdr 的核心工作流——起几个 agent 并行干活,sidebar 告诉你哪个项目需要你。

鼠标操作也很舒服:点击 pane 聚焦,拖边框 resize,右键出菜单,选中文本自动复制。herdr 是 mouse-native 的,不强迫你用键盘——但快捷键也全都给了。

图:Herdr 常用快捷键速查


3. 关终端 ≠ 关 session

这是我最开始的理解盲区。我以为 herdr 和普通命令行程序一样——我关掉终端,它就应该随着我终端的进程被杀没了。

❌ 但是不是的。

还记得前面说的吗?首次 herdr 做了两件事:后台 spawn server,前台启动 client。你关终端窗口,死掉的只是 client。Server 和它手里的所有 agent 进程还活着。

你可以验证:

# 关掉所有终端后,新开一个跑:
ps aux | grep herdr
# 你会看到 herdr server 进程还在

⚠️ 注意:这个行为对习惯了"关窗口 = 结束一切"的人来说是一个认知切换。如果你不知道这个机制,你可能会在不知不觉中让好几个 herdr server 在后台吃资源。

什么情况 session 真会停?

图:不同事件对 Herdr Session 存活状态的影响

这个设计和 tmux 一模一样。tmux 的 session 在关终端后也继续跑——你把"agent"替换成"shell",把"herdr"替换成"tmux",行为逻辑是完全一致的。

而且就算 session 停止后,herdr 仍有两个恢复路径:

• 快照恢复(Snapshot Restore):重启 herdr 后自动恢复 workspace/tab/pane 的布局结构(cwd、名字、split 比例等),但 PTY 进程不会恢复——pane 会变成新的 shell。
• 原生 Session 恢复:对于安装了集成的 agent(Claude Code、Codex、Pi 等),herdr 会记住它们的 session ID,重启后自动用 claude --resume <id> 等方式恢复对话。前提是 agent 本身支持 session 恢复。

4. 五层俄罗斯套娃:Herdr 的架构模型

client-server 关系搞清楚了。下一个问题是:herdr 内部是怎么组织这些 pane 和 agent 的?

它的层级结构长这样:

图:Herdr 五层架构模型 — Session > Workspace > Tab > Pane > Agent

说人话:Session 是你整台电脑上的"herdr 世界",Workspace 是一个项目,Tab 是项目里的不同视角(比如"agents"和"logs"分开),Pane 是终端窗口,Agent 是跑在终端里的 AI。

图:Herdr 五层架构各层级的定义与创建方式

对准我的实操:我开的就是一个 workspace,在里面 split 了多个 pane,每个 pane 跑 OpenCode。herdr 把这些 pane 里的进程识别为 agent,在 sidebar 上汇总状态。

一个更完整的结构可能是这样的:

图:一个实际的 Session 结构示例,包含两个 Workspace

理解了这五层,后面看 herdr 的 CLI 命令就不会觉得乱了——所有命令都围绕这五层寻址。


5. 还能走多远:Agent 编排 + 插件生态

核心机制讲完了。herdr 还有两个进阶能力值得提一下。

5.1 Agent 可以操作 herdr 本身

herdr 提供一份 SKILL.md,可以装进任何 agent 的 skill 系统。直接从 GitHub 下载这个文件,配置到对应工具的 SKILL 目录即可——我用的 OpenCode,放在 ~/.config/opencode/skills/herdr 下。

它的工作原理很朴素:

1. Agent A 在 herdr 的一个 pane 里运行(HERDR_ENV=1 被自动注入)
2. Agent A 安装了 herdr 的 SKILL.md(一份 markdown 指令文件)
3. 这份 skill 教 Agent A:「你可以用 herdr pane split 开新窗格,用 herdr pane run 在里面启动另一个 agent」
4. Agent A 照做——就像它在终端里执行 ls 或 npm test 一样自然

本质就是 agent 在终端里跑 shell 命令,只不过这些命令恰好是 herdr 的 CLI。 装完之后 agent 就能跑这些命令:

图:Agent 通过 herdr CLI 操控 pane 和 agent 的核心命令

以下做了一个简单的样例演示:

已关注
关注
重播 分享

视频:在 herdr 中,Agent 通过 SKILL.md 操控 herdr 的 CLI 来 split pane、启动子 agent

Agent A 从头到尾只是在一个 pane 里跑 shell 命令。但因为这些命令能操作 herdr,它就获得了"调度其他 agent"的能力。这打开了一个方向:agent 自己管理自己的流水线,不需要人类在中间当传话筒。

5.2 插件生态

herdr 的插件系统也很轻:一个 herdr-plugin.toml 清单文件 + 任意语言的脚本 = 一个插件。推到 GitHub 加个 herdr-plugin topic,很快就会自动上架到 marketplace。

核心设计哲学和 Pi 很像:herdr 核心只负责 terminal workspace、pane、agent 检测、CLI/Socket API,所有额外的工作流全部外包给插件,避免了变成一个臃肿的"全家桶"。

目前我还没有体验插件,让 AI 自行调研了一下社区插件,差不多分为这几类:

图:Herdr 社区插件主要功能分类


6. 我的判断:没有负担,装上就不会想删

herdr 是一个很棒的工具。 安装零摩擦,跑 agent 和平时在终端跑没有区别——但多了一个状态面板的收益。多 pane 并行的时候,sidebar 上的 blocked/working/done 让"同时盯多个 agent"从一件需要手动切来切去的事,变成了一眼扫过去就知道的事。

herdr 的体验足够好,好到即使我没有"必须用"的场景,我也愿意把日常的 agent 放进 herdr 里跑。它没有额外的认知负担——开 herdr 然后跑 agent,和开终端跑 agent 一样简单。但多出来的那个 sidebar,让整个体验上了一个台阶。

对我最有用的两点:

• 多 pane 并行:不是"开多个终端 tab"能做到的——因为 herdr 的 sidebar 帮你汇总了所有 agent 的状态
• blocked 提醒:agent 卡住等你确认的时候,不用你手动去发现

我目前暂时还没有"关电脑 agent 继续在服务器上跑"的需求,也没有"需要同时盯三个项目的 agent 进度"的场景。但如果以后开始远程开发、或者 agent 的并行度上来了——herdr 是现成的,不用再找别的。建议大家都去试试,用着真的挺爽的,设计理念也很棒,主体精简,插件丰富,而且完全开源,推荐给大家。