Herdr 发布原生桌面应用:把编码 Agent 收进终端工作空间
产品概述
Herdr 是一个面向“终端 + 编码代理(coding agents)”的桌面应用,近日在 GitHub 发布原生应用仓库并登上 Hacker News 首页。项目定位很直接:把工作按 space 组织起来,让你一眼看出哪些 agent 正在等你,并且在关闭窗口后终端仍然继续运行。仓库采用 Apache-2.0 许可,当前约 162 个 star、114 次提交;Hacker News 上的帖子为 19 分、12 条评论,属于关注度尚在早期、但方向较清晰的开发者工具。
与常见的“在 IDE 里塞一个聊天框”不同,Herdr 的重心是终端会话管理与多 agent 状态可见性:窗口只是视图,真正跑程序的是独立的核心进程。这个划分贯穿了它的空间模型、远程能力和 agent 协作接口。
关键技术点
空间、标签与窗格的三层结构
Herdr 用三层组织工作:一个 space 对应一台机器上的工作,通常是一个仓库;space 内有 tabs;tab 可以拆成 panes,把终端或 mod 面板并排摆放。未命名的 space 会跟随其第一个终端的目录,新 tab 则从当前聚焦终端的目录启动。这套模型对多仓库、多任务的开发者比较自然,也便于后续把“某个 agent 在哪个目录干活”映射到界面上。
Agent 侧边栏与四种状态
侧边栏把各个 space 里的 agent 汇总成一个列表,包括由另一个 agent 启动的 worker。原文给出的状态语义是:
- Working:仍在忙
- Blocked:在等你
- Done:你看向别处时已经完成
- Idle:没在工作,或你已查看过的完成态 agent
点击 agent 即可查看;没有对应 pane 的 worker 会以 peek 方式浮在当前 tab 之上,需要长期观察再固化为 tab。终端文本里的存活终端地址也支持 Ctrl-click(macOS 为 Cmd-click)直接 peek,形如 t7 表示同机终端,vps/t7 表示另一台机器上的终端。
需要说明的是,原文未说明 agent 如何上报这些状态、是否依赖特定 agent 的适配层或某种约定协议。
窗口与核心分离
这是架构上最值得注意的一点:“窗口负责排列,核心负责运行”。关闭窗口不会终止终端,只有关闭 pane 或 tab 才会结束对应终端。重启或核心崩溃后,保留下来的 pane 会在各自最后的目录里拿到新的 shell,而不是恢复原来的程序——也就是说它是“会话位置的恢复”,不是“进程状态的恢复”,与 tmux 那类持久化不在同一层级,原文对此有明确表述。
更新机制也建立在这个划分上:已安装版本在后台检查更新,把新版本下载到正在运行的版本旁边,退出重开或主动选择更新动作后接管,而终端继续在 core 中运行。源码构建的版本不会自更新。
SSH 远程与常驻任务
从 Settings → Machines 或侧边栏可以添加 SSH 机器,space 的终端会跑在那台机器上。每台机器在自己的 core 中保存 space、tab 和分割结构,连接的多个屏幕共享同一套结构和实时终端,但各自保留焦点与缩放。只要远端机器和 core 还在运行,本地窗口关闭或笔记本睡眠都不会中断远端工作。对长时间训练、数据清洗、批量评测这类任务,这个语义比“本地终端 + tm
