前几周,我们在看工具重新挑形态——CLI 反向写给 agent,客户端做回 terminal,系统能力挖到菜单栏。
这一周,工具开始挑人。
不是又有了一个 terminal,
是有人把 terminal 改名为"for agent-driven development",
把"等待输入"当成一等公民事件,顺手把 worklanes、agent sidebar、approval signals 一起装上;
不是又有一只桌面宠物,
是宠物这周开始替你点 Allow——它能浮出一张权限卡,
能远程推到 Telegram、飞书、Slack,能问你"要不要放过这个命令";
不是又有一个终端浏览器,
是一个叫 terminal-browser 的东西把"ssh 进去看后端 dashboard"做成了一件不需要端口转发的事,
顺手给 agent 留了一根 CLI——它能让模型替你看网页。
本周一句话总结
工具的边界不再以"形态"划分(CLI 还是 GUI),也不仅以"接口"划分(对 agent 友好还是对人友好)——这周开始以"目标用户"划分:哪些是给 agent 住的,哪些是陪 agent 一起住的,哪些是给盯着 agent 的人看的。
本周新增工具速览
🧪 New Formulae
| 名称 | 中文说明 |
|---|---|
| pnpm@11 | pnpm 包管理器 11.x 系列(11.26.0) |
| trealla-prolog | Trealla Prolog 解释器 3.9.43 |
| snx-rs | Rust 写的 Check Point SNX VPN 客户端 |
| robot-framework-robocop | Robot Framework 静态代码检查工具 9.0.0 |
| forgejo-runner | Forgejo Actions runner 13.1.0 |
| libmysofa | HRTF 声场定位的 SOFA 文件处理库 |
| budget-tracker | 命令行预算追踪工具 |
| tgrep | 配合 Trealla Prolog 使用的 grep 工具 |
| virglrenderer | Virgil 3D GPU 虚拟化渲染器 |
| elasticmq | SQS 兼容的本地消息队列(适合本地/测试) |
| xevd | MPEG-5 EVC 视频解码器 |
| ntfs2btrfs | NTFS 到 Btrfs 的就地文件系统转换 |
| rubocop | Ruby 静态代码分析工具 1.89.0 |
🧩 New Casks
| 名称 | 中文说明 |
|---|---|
| audacity@3 | 开源音频编辑器 3.x 系列 |
| privacynotes | 端到端加密的笔记、任务、密码同步应用 |
| zentty | "Terminal for agent-driven development"——为 coding agent 而做的原生 macOS 终端 |
| stockbit | 印尼股票市场数据与社交交易平台 |
| open-science | 开源科学文献与数据分析工作台 |
| minmaxcal | 极简 macOS 日历小组件 |
| omniwm | 仿 Hyprland/Niri 的 macOS 平铺窗口管理器 |
| agentide | 为 coding agent 设计的源代码控制桌面应用 |
| sxitch | 树状应用切换器 |
| MangoDisk | 跨设备文件同步与备份工具 |
| diskboard | 磁盘基准与 S.M.A.R.T. 健康监测 |
| vernier-graphical-analysis | Vernier 传感器数据分析软件 |
| tone3000 | AI 音色搜索与生成平台 |
| airstats | 航班实时统计与追踪 |
| clawd-on-desk | 桌面宠物,可识别 19+ coding agent 的运行状态,带权限批准浮窗 |
| db-pro | 数据库桌面客户端(MySQL/Postgres/Mongo/SQLite) |
| dockdoor-pro | 带小组件与窗口预览的 Dock 替换 |
| terminal-browser | 终端里跑的浏览器,可与 agent 同居 |
| mac-performance-monitor | 带历史回放的菜单栏性能监控 |
| macshot-offline | 离线版 macOS 截图标注工具 |
| gamemaker@beta | GameMaker 引擎测试版 |
值得留意的几个方向
这一节不求全,
只挑 4 个 值得停下来看的点。
zentty:"Terminal for agent-driven development"——把 terminal 重新做给 agent 住
zentty 是这周新进的 Cask 里第一个让我停下来读两遍的。它的描述只有一句话:
Terminal for agent-driven development.
这句话的副标题比主标题更重要。它的开发方 Zenjoy(比利时鲁汶)在文档里说:"iTerm2、Terminal.app、WezTerm 是给'用 shell 的人'的;zentty 是给'让 shell 和 agent 共存的人'的。"
zentty 的核心抽象是一个新词:worklanes。
你可以把它理解成"横向滚动的 pane 列"。每个 worklane 是属于同一个工作流(一个 feature branch、一次 debug session、一次 release 准备)的若干 pane。agent 和 dev server 在同一个 worklane 里并排存在,worklane 跨重启被 layout/session restore 保留。
zentty 把 worklane 这个抽象做得比 tmux 的 session/workspace 重一点:
- agent sidebar:Claude Code、Codex、Cursor、Antigravity、Copilot、OpenCode、Kimi、Grok、Pi、Amp、Droid、Gemini——12 个 agent out-of-the-box 被识别。
识别的依据是 agent 的 hook 协议(各家都暴露 SessionStart / tool call / PermissionRequest / SessionEnd 这类生命周期事件),zentty 把这些事件归一化成 sidebar 上的一个统一状态机:running / idle / needs input / needs approval / done。 - attention signals:agent 走到"等你批准"或"问你一个问题"时,sidebar chip、macOS 通知、菜单栏图标三处同步提示——点一下,光标跳到那个 worklane 的那个 pane。
- CLI:
zentty命令加一组 pane 级环境变量,让 hook 和脚本能精准定位到 pane。
它省掉的是**"agent 在终端里跑来跑去,人要从一堆 tab 里找回它刚才问到哪儿了"**这件事。过去一年 iTerm2 的 tmux integration、WezTerm 的 multiplexer 都在解类似问题,但都默认 pane 是给人看的。zentty 第一次把"agent 状态"当成 pane 的一等公民来设计。
和上一期 readwise-cli 把 CLI 反向写给 agent 相比,zentty 更进一步——readwise-cli 是"一个 CLI 工具给自己装上 agent 友好层",zentty 是"一个 terminal 把'住着 agent'当成默认假设"。
如果上期 readwise-cli 是"产品面对 agent 转变态度",zentty 这一期就是"基础设施面对 agent 转变形态"。
clawd-on-desk:当宠物开始替你点 Allow
上周 petdex 进了 Homebrew,我写过它"agent 终于有了一只宠物"。这一周又来一只,而且这只比 petdex 走得远得多。
clawd-on-desk 的描述只有一行"Desktop pet that reacts to AI coding agents"。但它的真实身份远不止"反应"。读完它的文档你会发现,它在尝试回答一个 petdex 没问过的问题:
如果 agent 需要人来批准权限——这个动作,凭什么不能交给桌面那只宠物?
具体来说,clawd-on-desk 在做的事是:
- 12 种动画状态:idle / thinking / typing / building / 单 subagent groove / 多 subagent juggling / error / happy / notification / sweeping / carrying / sleeping。三个内置皮肤(Clawd 像素蟹、Calico 三花猫、Cloudling 云宝),都可以从 Codex Pet 的 zip 导入自定义。
- 检测 19 个 coding agent 的生命周期事件:Claude Code、Codex CLI、Copilot CLI、Gemini CLI、Antigravity、Cursor Agent、CodeBuddy、WorkBuddy、Kiro CLI、Kimi Code CLI、Qwen Code、ZCode、CodeWhale、Reasonix、opencode、MiMo Code、Pi、OpenClaw、Hermes Agent……比 petdex 那种"看进程"的方式精细得多——它通过 agent 自己暴露的 hook(
/stateendpoint 或settings.json里的 hooks) 拿事件。 - permission bubbles(权限浮窗):agent 发 PermissionRequest 时,宠物从屏幕边缘浮一张卡片出来,带 Allow / Deny 按钮。全局热键 Ctrl+Shift+Y/N 也能答。多请求排队、自动消除(如果在终端里已经回过)、三种模式(每次都问 / 只问选择题 / 全自动批)。
- 远程通知:推到 Telegram 和飞书,带 interactive Allow/Deny 卡片;推到 Slack 是只读的 rich card。
- PWA 移动伴侣:同 LAN 内,手机可以只读镜像 live sessions。
它最有争议的设计,是把"批准权限"这件事交给了一个像素蟹。
一周前我会说"这有点过度拟人化"。但读完 clawd-on-desk 的实现细节,我想收回这个判断——它做的事情非常具体:把 PermissionRequest 从"切回终端找那个光标"改成"看屏幕角落那只生物"。这件事的真实成本在长任务上非常明显:agent 跑了 5 分钟等你批,你去了趟洗手间回来发现它早就停在那里了。
petdex 是"agent 状态的玩具化",clawd-on-desk 是"agent 交互的玩具化"。这个差别比看起来重要——前者只显示状态,后者开始代理行为。
和 0817 期 petdex 那段连起来读,你会看到一条线:agent 可观察性正在从工程问题(日志/dashboard)转向存在性问题(它在吗?它在问什么?),而存在性问题正在被玩具化(像素蟹替你看)。
terminal-browser:浏览器被做回 TUI,但只为了一件事——和 agent 并排放
┌────────────────────────────────────────────────────────────────┐
│ ~/projects/blog · zsh ⏵ ⏸ │
├─────────────────────────┬──────────────────────────────────────┤
│ claude> run tests │ terminal-browser.com/dashboard │
│ │ ┌──────────────────────────────┐ │
│ $ npm run test │ │ requests/min 1,284 │ │
│ > running... │ │ p95 latency 84ms │ │
│ > coverage: 87% │ │ errors 0.2% │ │
│ │ │ [────────────────] live │ │
│ claude> ok, fix the │ └──────────────────────────────┘ │
│ latency spike in /api │ │
│ /checkout │ $ terminal-browser open dashboard │
│ │ $ terminal-browser split right │
│ claude> waiting... │ $ ▌ │
│ │ │
└─────────────────────────┴──────────────────────────────────────┘
⌘P palette ⌘D split ⌘W close agent-browser compatible cli
terminal-browser 是这周让我最费解的一个。它的官网只有一句话:
Your website and agent, side by side.
不是"在 terminal 里跑浏览器"(那种 ASCII art 浏览器 1990 年代就有了)——它跑的是真浏览器,用现代 terminal 的 GPU 图形能力渲染(Ghostty/Kitty 协议栈)。它甚至专门写了支持 cmux、Herdr、tmux、"50 and more" libghostty-based terminals。
它真正的卖点是三件事:
- side-by-side:终端左边跑 agent,右边跑浏览器,同一个 terminal tab,同一个键盘焦点。你不必切换应用,不必"alt-tab 去看网页"——这是它省掉的最大心智成本。
- agent-browser compatible CLI:它和 agent-browser 共享 CLI 接口,意思是 agent 可以通过
terminal-browser action <command>直接控制这个浏览器——agent 在本地直接打开远程 dashboard,不需要端口转发。 - HTML plan 可视化:agent 想要给你看一份 HTML plan 时,不再需要截图或开浏览器,直接在它的 terminal tab 里渲染。
和 0831 期的 tele(Telegram 做回 TUI)对比:tele 是"住 terminal 的人要聊天,不用切出去";terminal-browser 是"住 terminal 的人要给 agent 看网页,不用切出去"。
更精确的对照是:tele 是 TUI 取代 GUI,terminal-browser 是 TUI 与 GUI 在同一 tab 里共存。它没有假装渲染纯文本,它承认现代 terminal 已经可以承载真浏览器,然后把这个事实和 agent 工作流拼起来。
它支持 SSH 直连远程 dashboard,不需要端口转发——这件事单独就够写一节。你在远程服务器跑了一个内部 dashboard,过去要 ssh -L 8080:localhost:8080 然后浏览器开 localhost:8080;现在直接在 terminal 里 terminal-browser ssh://prod/dashboard,agent 也能跟着看。
omniwm:macOS 抽象层降级的下一格——tiling WM 进 Homebrew,但不要求你关 SIP
omniwm 是这周最"工程味"的一个。它的描述简单:GPL-2.0,macOS 26+ (Tahoe),Apple Silicon only,0.6.8 版本,装在 menu bar 里。
但它身上有几个不常见的细节:
- 不需要关 SIP。这是 macOS tiling 圈一件大事。yabai 用了十年来一直要求
csrutil disable——这条命令等于让你放弃 Apple 的大部分安全承诺。omniwm 用 ApplicationDelegate + Accessibility API 达到同样的窗口控制,全程 SIP 保持开启。 - 支持 Niri 风格的 scrolling columns:无限横向滚动条,焦点像摄像机一样滑动。这个模式在 Linux 上 Niri 走通了一年多,macOS 上一直没人做。OmniWM 是第一个。
- 支持 Hyprland 风格的 BSP(dwindle) tiling:在更宽的方向二分当前 tile。
- 自带 Quake terminal:用 libghostty 内嵌,不是 wrapper。
omniwmctlCLI:NDJSON over local socket,你可以 script 它。- Developer ID 签名 + Apple 公证。
它和 0831 期的 crisp(挖 macOS 隐藏显示控制)/betterglobekey(重做 Globe 键)是同一条曲线的延伸:抽象层在降级,工具在变具体。tiling WM 在 macOS 上一直存在,但过去十年都带着"先关 SIP"的入场费——omniwm 把入场费取消了。
它现在只有 2 个 30 天安装,处于早期。这件事我把它放进来不是因为我推荐你装,而是因为它代表的方向很清晰:macOS 抽象层降级这一波,已经从菜单栏小工具(menubar app)走向了窗口管理器(WWM/AWM)这种重活。这种事过去没人做,是因为 SIP 把门槛拉得太高;现在有人做了,说明 Apple 在 Accessibility API 这块的口子在慢慢松。
你短期大概率不需要装它。但这件事值得记。
一点个人感受
zentty 我大概率会装。我用 iTerm2 用了八年,tmux 用了五年,但我从来没有真正享受过"agent 跑长任务时切换 focus"这件事——它总是意味着"切到一个我看不见的 pane,找一段我读不懂的输出,然后用一个我可能点错的选项回应"。zentty 把这件事做成了"它在屏幕左侧告诉你它在干什么,等你的时候 sidebar chip 闪一下"。这个 UX 不是革命性的,但它把"和 agent 共用一个 terminal"这件事的摩擦降到了我可以日常忍受的范围。
clawd-on-desk 我会装,纯因为我好奇那只像素蟹在屏幕角落做 juggling 的样子。但我会关掉 permission bubbles——把批准权限交给桌面宠物这件事,我想了想还是太激进。如果我人在电脑前,我在终端里回;如果我不在,我宁愿让 agent 等。这不是工具的问题,是我自己的边界感。
terminal-browser 是这周让我犹豫最久要不要装的。它的侧-by-侧模式解决的是真实问题:agent 在跑测试,我要看一眼 localhost:3000 的状态——这件事我大概每天发生 30 次。但它的"agent-browser 兼容 CLI"那部分让我有点顾虑,因为这又是一个"agent 能替你点网页"的工具,prompt injection 的攻击面又大了一圈。我会装,但只用 side-by-side 模式,不开启 agent control。
omniwm 大概率短期不装——macOS 26 还没升,而且我用 Rectangle 已经很顺手。但它"不要求关 SIP"这件事让我重新看了它一眼——yabai 我装过两次,每次都被 csrutil disable 吓回去。omniwm 把这件事做了,是 tiling 圈这两年最该发生的事之一。
sxitch 是这周表格里我没展开写但想单独提一句的——它做"tree-based app switcher",意思是你按个快捷键,所有打开的应用按你之前定义过的层级树弹出来。这是 Alfred/Raycast 早就能做的事,但 sxitch 把"切换"这件事从"打字搜索"降级到"看一眼选一下"。和 omniwm 一样,是抽象层降级的另一个切面。
budget-tracker 是 Formulae 里唯一一个我犹豫要不要放进重点的——CLI 预算工具。但仔细看,它和我已经用的一些本地记账工具重叠,而且命令行记账的核心痛点不是"切换格式",是"持续记录"——这件事 CLI 帮不上忙。所以它留在表格里就够了。
如果非要挑一句话总结这一周,我可能更愿意说:上几周我们在看工具重新挑形态(CLI/TUI/GUI/menu bar),这周开始,工具在挑人——哪些是给 agent 住的(zentty),哪些是陪 agent 一起住的(terminal-browser),哪些是给盯着 agent 的人看的(clawd-on-desk)。
结语
这一周我装 clawd-on-desk 的同一个下午,顺手装了一个叫 diskboard 的磁盘健康监测。
diskboard 是表格里我没什么可展开写的一个——磁盘基准、S.M.A.R.T. 健康、读写历史。功能传统上属于 smartctl 或 DriveDx——但 diskboard 把它做成了一个 menu bar 应用,只在你点开它的时候才出现,平时安静得像不存在。
这件事放在这一周的大背景下看,比它本身重要:
zentty 把 terminal 做给 agent 住;
clawd-on-desk 把 agent 状态做给盯着它的人看;
terminal-browser 把浏览器做回 terminal,只为了和 agent 并排放;
omniwm 把 tiling WM 做给不想关 SIP 的人用;
diskboard 把磁盘监测做给想不起来自己有一块磁盘的人用。
这一周的 Homebrew 不在谈新功能,在谈工具该给谁看。
当一个工具开始问"我的目标用户是 agent 还是人,是终端里那位还是终端外那位",说明 agent 时代的工作流分层正在发生——不是人在用工具,是 agent 和人在用同一套工具的不同入口。
zentty 是给 agent 住的入口。clawd-on-desk 是给盯着 agent 的人看的入口。terminal-browser 是给想和 agent 看同一个网页的人开的入口。omniwm 是给不想为 tiling WM 付 SIP 代价的人开的入口。
工具在变,这次变的是观众。