多 Agent 时代的终端困局:工具还停留在单任务时代

2026 年的重度用户早就不是开一个 agent 了:主开发一个、review 一个、跑测试一个、查文档一个、研究依赖一个。然后问题来了——终端这个基础设施还是 tmux 时代的设计:

这个工坊写过一堆解决部分问题的工具:cmux(macOS 专属的 Ghostty 终端)、claude-squad(tmux + worktree 编排)、superset 和 orca(Electron 桌面 IDE)。但它们要么是 GUI 壳、要么是 tmux 包装、要么平台受限。herdr 选了一个没人做过的角度:做一个常驻 server,直接接管终端本身,把「agent 是活物」这件事做成第一公民。

它是什么:server 住在后台,终端们住在 server 里

herdr 是一个 Rust 写的终端工作区管理器,单二进制(linux-x86_64 约 21MB,无 Electron),Apache-2.0。架构一句话:后台常驻 server 拥有所有 PTY 和进程,TUI 只是一个可以随时断开重连的客户端。

层是什么例子
Workspace顶层项目容器,一个仓库/任务一个w1(sidebar 状态按 workspace 汇总)
Tabworkspace 内的布局页w1:t1(agents / logs / server 分开放)
Pane一个真实终端,PTY 归 server 管w1:p1、w1:p2
Agentpane 里被识别出来的 coding agent 进程Claude Code / Codex / Hermes / Pi / Qwen…20+ 种

跟 tmux 的本质区别:tmux 只分屏,不知道里面跑的是什么;herdr 给每个 pane 挂了agent 状态机——blocked(等你审批)、working(干着呢)、done(干完了你没看)、idle(闲着)、unknown(认不出来)。sidebar 把状态一路向上汇总:一个 blocked 的 agent 会让它的 pane、tab、workspace 全部显示「需要你」。开了八个 agent 也不用挨个切。

核心机制一:agent 状态是怎么被「看见」的

状态检测有两条路径,按优先级:生命周期 hooks(integration)> 屏幕快照匹配(screen manifest)。官方 integration 装了之后(herdr integration install claude),agent 通过 hook 主动上报 idle/working/blocked,这是权威来源;没装 integration 的 agent 靠读取 pane 底部缓冲区的实时屏幕快照,跟内置的 TOML 规则匹配——识别到「等待审批」的 UI 形状就标 blocked。规则还能从远端热更新(herdr server update-agent-manifests),不用升级二进制。

Agent状态权威会话恢复
Claude Code / Codex / Grok / Devin / Qwen / Hermes…screen manifest(屏幕规则)--resume <id> 原生恢复
Pi / OMP / Kimi Code / OpenCode / Kilo / MastraCodelifecycle hooks(装了 integration 时)--session <path> 原生恢复
Gemini CLI / Cline可检测,测试较少—

blocked 检测是故意保守的:只有屏幕快照明确匹配到已知的审批/提问 UI 才算 blocked,认不出来的新 UI 会落到 idle 兜底(herdr agent explain 能告诉你为什么这么判)。宁可漏报也不误报——这设计很清醒。

核心机制二:持久性是个四级体系

「关终端 agent 不死」不是一句空话,herdr 用四级机制实现,从强到弱:

场景进程还活着吗布局回来吗屏幕回来吗会话续上吗
detach / 重连(ctrl+b q)✅ 活着✅✅ 活的终端✅ 进程没停过
server 重启❌ 没了✅ 快照恢复仅开 pane_history 时✅ 原生 session restore(16 种 agent 支持 --resume)
升级 --handoff(实验)✅ 尽力转移活 pane✅✅✅

注意两个默认值:pane_history(屏幕历史持久化)默认关,因为 pane 输出里可能有密钥和 token;native session restore 默认开——server 重启后,装了官方 integration 的 agent 会自动用 claude --resume <id> 之类的命令把会话续回来,不用你手动重开。远程场景 herdr --remote workbox 直接 SSH 过去 attach,本机按键绑定不变。

核心机制三:agent 可编程化——CLI、socket API、SKILL.md 三件套

herdr 最好玩的是它把整个会话暴露成了编程接口。CLI 全部输出 JSON,背后是同一个 socket API(协议 v19,90+ 个方法:agent.prompt、agent.wait、pane.wait_for_output、workspace.create、worktree.create…)。再加一个官方 SKILL.md(npx skills add herdrdev/herdr --skill herdr -g),装进你的 coding agent 后,agent 自己就能:

skill 第一条是安全守门:test "${HERDR_ENV:-}" = 1——只有确认自己真的跑在 herdr 管理的 pane 里才允许碰 CLI,防止外面的 agent 乱控别人的会话。这个设计值得所有 agent 工具抄。

上手:实测跑通的命令序列

# 安装(curl 脚本 / brew / mise 都行)
curl -fsSL https://herdr.dev/install.sh | sh
herdr --version          # v0.8.0

# 起 server(headless 也行,不需要 TUI 客户端)
herdr server             # 或直接 herdr 进 TUI

# 建工作区 + 分屏 + 跑长命令
herdr workspace create --cwd ~/proj --label api --no-focus
herdr pane split w1:p1 --direction right --no-focus
herdr pane run w1:p2 'npm test'

# 读输出 / 等输出(agent 自动化最爱)
herdr pane read w1:p2 --source recent-unwrapped --lines 120
herdr pane wait-output w1:p2 --match "test result" --timeout 120000

# 起一个 agent 并驱动它
herdr agent start h1 --kind codex --pane w1:p2
herdr agent prompt h1 "Review the current diff" --wait --timeout 120000
herdr agent wait h1 --until blocked --timeout 60000   # 等它卡住找你

# 断开 / 重连 / 停服
ctrl+b q                 # detach,agent 继续跑
herdr                    # 重连
herdr server stop        # 结束会话,停掉所有 pane

实测与踩坑(v0.8.0,Linux headless)

这台机器上没有显示器,正好测它的无头形态。全链路:herdr server 后台起 → workspace/split/pane run/read 全部 JSON 返回 → 模拟状态上报 blocked 立刻进 agent list → agent start h1 --kind hermes 真实拉起 Hermes TUI(检测到 idle、interactive_ready)→ agent prompt h1 真实驱动它调 DeepSeek 回了一句 PONG-herdr,--wait 等到状态回 idle 才返回 → server stop 重启后 workspace 快照恢复,两个 pane 以新 shell 回来。全部跑通。坑有两个:

对比:跟工坊写过的「多 agent 终端」们

工具形态进程保活agent 感知可编程平台
herdrRust 常驻 server + TUI✅ detach/SSH/重启(四级)✅ 状态机 + 20+ 种检测✅ CLI/socket/SKILLLinux/macOS/Win beta
cmuxGhostty 原生终端✅ 终端级部分(标签显示 git/PR)❌macOS only
claude-squadGo 二进制(tmux 包装)✅ tmux 保活部分(agent 状态有限)CLI跨平台
supersetElectron 桌面 IDE✅ 应用级✅ worktree 隔离MCP桌面
裸 tmux分屏器✅ 但进程照跑❌ 完全不知道谁是谁脚本跨平台

一句话:cmux 是「给 agent 用的终端」,superset/orca 是「管 agent 的 IDE」,herdr 是「agent 住进去的运行时」——它不包装任何 agent,只管它们的终端、状态和通信。

什么时候别用它

说点反话:单 agent 轻量用户不需要它,裸 tmux 够用;需要沙箱隔离的,herdr 明确不做安全沙箱(agent 有你的权限,跑不可信代码请上 Docker/VM);重度 GUI 偏好者选 superset 更顺手;macOS 用户想少装一个 Rust 二进制可以先用 cmux。但如果你已经开着多个 agent、为「合盖丢进度」和「不知道谁在等我」烦过——这就是那个把终端从「工具」升级成「基础设施」的东西。4 个月 3 万 star,v0.8.0 刚从 AGPL 改 Apache-2.0,方向赌对了。