前三周,我们在看 agent 工作流怎么搭起来——terminal 给 agent 住(zentty),
agent 管个工单(ghostex),agent 在 tmux 里各跑各的(agent-manager),
你拿菜单栏麦克风给它喂东西(relay)。
这一周,Homebrew 不再搭工作流了。
它开始给 agent 的工作结果上锁。
不是一个新语言,
是一个叫 bend 的编程语言,头号承诺写在主页上——"Language that blocks AI mistakes via proof"——
它假设 AI 写代码会写错,然后让编译器替你把这件事挡掉,
用的不是 unit test,是数学证明;
不是一个新防火墙,
是一个叫 hol-guard 的菜单栏 app,头号承诺是"Local-first runtime firewall for AI coding agents",
即使你跑的不是 bend——Claude Code、Codex、Cursor、OpenCode 随便哪个——
它都在 syscall 层把 agent 不该发起的网络写、文件删、密钥访问拦下来;
不是又一只 agent 编排器,
是一个叫 ccmux 的 TUI,挂在 tmux 上面,实时告诉你"哪只 agent 在等你批、哪只在跑、哪只已经空了",
和 0914 的 agent-manager 比,它更激进一步——直接在 tmux 里实现了一只"agent 调度器";
不是又一只开发助手,
是一个叫 workmux 的小工具,做了"git worktree + tmux window"一对一的零摩擦并行,
一行命令切 branch、一行命令收尾,不再需要 stash,不再需要切回来重新补 env。
本周一句话总结
前三周 Homebrew 搭 agent 工作流,这一周开始给工作流的两端上锁:
入口端(bend、hol-guard)挡掉 agent 写出来的坏东西,
协作端(ccmux、workmux)让多个 agent 不再互相踩脚。
本周新增工具速览
🧪 New Formulae
| 名称 |
中文说明 |
| bashka |
安装脚本的静态验证工具 |
| bend |
用数学证明挡 AI 写错代码的语言(Apache-2.0) |
| ccmux |
在 tmux 里跑多只 AI coding agent,实时显示它们的状态机 |
| confluence-markdown-exporter |
把 Atlassian Confluence 页面导出成 Markdown |
| fastplong |
长读长测序数据的超快预处理与质控 |
| go-arch-lint |
Go 项目的架构 linter |
| hidapitester |
通过 HIDAPI 命令行测试 USB HID 设备 |
| kubectl-radar |
缺位已久的开源 Kubernetes UI,内置给 AI agent 用的 MCP server |
| libklvanc |
VANC(SMPTE 336M)处理框架 |
| [email protected] |
MySQL 的 drop-in 替代品 |
| plink1 |
全基因组关联分析工具集(经典 PLINK) |
| ratex |
Rust 写的超快 TeX 引擎 |
| smbclient-ng |
友好、快速的 SMB 共享交互命令行 |
| sofka |
Rust 重写的 Kubernetes TUI |
| somalier |
从 BAM/CRAM/VCF 推断样本亲缘与祖源 |
| taoup |
《The Tao of Unix Programming》的 Ruby 彩蛋 fortune 版 |
| tcltls |
给 Tcl 的 OpenSSL 扩展 |
| termaid |
在终端里渲染 Mermaid 图表 |
| vortix |
WireGuard/OpenVPN 的 TUI,带实时流量与防泄漏 |
| workmux |
git worktree + tmux window 一对一,零摩擦并行开发 |
| xgrammar |
LLM 的结构化生成与推理引擎 |
🧩 New Casks
| 名称 |
中文说明 |
| cline-app |
VSCode AI coding agent 的桌面独立版 |
| deepseek-harness |
本地 DeepSeek 模型的运行与控制台 |
| font-aptos |
Microsoft Aptos 字体(原本 Office 默认 Calibri 的替代) |
| font-pennstander |
PennStander 字体 |
| local-studio |
本地运行与管理语言模型的工作台 |
| plane |
开源项目管理、迭代与文档工具 |
| markpad |
极简 Markdown 查看与编辑器(开发者签名的 2.8.0 是第一个 notarized 版) |
| mdhero |
另一个 Markdown 查看与编辑器 |
| mindroom |
Matrix 之上的 self-hostable 多用户、多 agent AI 栈 |
| deviceshelf |
局域网设备、开放端口、安全风险扫描器 |
| buholaunchpad |
macOS Launchpad 的替代品 |
| highball |
运行 Windows 游戏的兼容工具(用 Wine 包装) |
| jpki |
日本 My Number Card 的电子签名与认证客户端 |
| hol-guard |
给 AI coding agent 用的本地 runtime firewall |
| look |
键盘优先的本地启动器 |
| pallycompanion |
由 pally 重命名而来 |
| caldera-amp |
Plex 音乐服务器的无头播放器 |
| activitywatch@experimental |
活动追踪的实验版本(0.14.0b8) |
| ssl-360 |
SSL 360 硬件的插件混音与控制软件 |
值得留意的几个方向
这一节不求全,
只挑 4 个 值得停下来看的点。
bend:用数学证明替 AI 写代码这件事上锁
┌──────────────────────────────────────────────────────────────────┐
│ LAWS.bend — the file where AI mistakes get blocked │
├──────────────────────────────────────────────────────────────────┤
│ LAW: "winning is impossible" │
│ LAW: "the sum of all balances must be zero" │
│ LAW: "players can never pass through solid walls" │
│ LAW: "array_set() may never be called out-of-bounds" │
│ LAW: "list_sort() must always return ascending numbers" │
└──────────────────────────────────────────────────────────────────┘
$ bend check game.bend
↳ proof obligations: 312
↳ proofs auto-derived: 308
↳ proofs to retry: 4 ◀ AI has to retry until zero
↳ time: 0.86s
Without LAWS.bend: With LAWS.bend:
┌──────────────────────┐ ┌──────────────────────┐
│ │ │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │
│ ◀────────▶ │ │ ▓ GAME OVER ▓ │
│ player wraps around │ │ ▓ ? ▓ │
│ and grabs the flag │ │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │
│ │ │ AI mistake: BLOCKED │
│ AI mistake: MERGED │ └──────────────────────┘
└──────────────────────┘
bend 的主页第一行,不是"a functional language",不是"GPU-accelerated",是:
"In the post-AGI economy, humans will eventually stop writing and reading code, but we still need an ambiguity-free language to communicate our intents to the AIs building the world around us. Bend is that language."
这一段比下面所有的"用数学证明挡 AI 写错代码"更重要——它把语言的目标用户从"程序员"改成了"AI"。
然后它说了一件具体的事:一个叫 LAWS.bend 的文件。
你在里面写规则——"winning is impossible"、"the sum of all balances must be zero"、"array_set() may never be called out-of-bounds"。bend 的编译器保证这些规则永远不会被破坏,靠的不是 unit test,是数学证明。
主页给了一个走完一遍的截图:一个本来 win condition 不该被触发的游戏,Claude 改了一行让 player 可以 wrap around 地图边缘拿旗子——没有 LAWS.bend 时这个 bug 直接进了 main,有 LAWS.bend 时编译器拦住了,Claude 被迫重写,直到 law 守得住为止。
这件事和 0914 那批 agent 工具的关系很微妙:
0914 的 calyx、ghostex、relay 关心的是"怎么让 agent 干得舒服";
**bend 关心的是"agent 干了之后,谁来替它兜底"**。
compelling 的细节是 bend 的 checker 速度——它声称 "outperform every proof assistant by several OOMs",一个 312 个 proof obligation 的文件在 0.86 秒内能 check 完。其他 proof assistant(Lean、Agda、Isabelle、Rocq)做类似规模要分钟级。
这件事让 LAWS.bend 不只是"另一个形式化方法"——它和 AI agent 的 retry loop 速度匹配。agent 重写的速度等于人类 unit test 跑一遍的速度。
但是 —— 我对 bend 也有保留。详见下方个人感受。
hol-guard:在 syscall 层给 agent 套 firewall,挡住证明层漏掉的东西
┌──────────────────────────────────────────────────────────────────┐
│ HOL Guard — Local-first runtime firewall for AI agents │
├──────────────────────────────────────────────────────────────────┤
│ AGENTS │
│ ▸ claude-code ✓ allowed (Claude Code 2.x) │
│ ▸ codex ✓ allowed (OpenAI Codex CLI) │
│ ▸ cursor-agent ✓ allowed │
│ ▸ opencode ✓ allowed │
│ ▸ amp ✓ allowed │
│ ▸ gemini-cli ⏸ paused (no policy yet) │
├──────────────────────────────────────────────────────────────────┤
│ RULES (12 enabled, 1 paused) │
│ ▸ block: write ~/.ssh/id_* (always) │
│ ▸ block: write ~/.aws/credentials │
│ ▸ block: spawn shell (whitelist: bash, zsh, fish) │
│ ▸ block: outbound DNS to *.ru, *.cn (non-whitelisted) │
│ ▸ ask: outbound HTTPS to api.github.com │
│ ▸ ask: outbound HTTPS to api.openai.com │
│ ▸ allow: all loopback │
│ ▸ ... │
├──────────────────────────────────────────────────────────────────┤
│ LIVE ACTIVITY │
│ claude-code blocked: write ~/.aws/credentials 2m ago │
│ codex asked: outbound api.openai.com ▶ allow │
│ cursor-agent allowed: loopback 127.0.0.1:5432 │
└──────────────────────────────────────────────────────────────────┘
hol-guard 是这周新增里最容易被低估的一个。它的描述只有一行:
Local-first runtime firewall for AI coding agents.
它做的事情和 bend 正交:
- bend 是编译期——你把 LAWS.bend 写好,编译器在 build 时证明"这版改动没有 break 任何 law"。
- hol-guard 是运行期——agent 在跑的时候,你在 syscall 层订阅它的所有动作,按规则允许/拒绝/问。
这两件事的并集是这样的:
bend 验证"agent 改的代码在语义上不会破坏你定义的规则";
hol-guard 拦截"agent 在执行时发起的越权动作"。
这件事和 0831 期的 readwise-cli 的"readonly 模式 + re-login 关卡"是同一条线——但 readwise-cli 是单一产品面对 agent 时的自我设防,hol-guard 是系统层给所有 agent 做的统一设防。
最值得记的是它完全本地(local-first)——不向云端上报任何 syscall,不依赖外部规则服务器。这意味着你的 agent 行为日志全在你 Mac 上,而不是某个 SaaS。配合 bend,你可以做到:本地编辑器层做证明,本地 runtime 层做兜底,中间没有任何数据外流。
6 次 30 天安装。早期。但这件事和 bend 放在一起看,趋势很清晰:
agent 时代的安全栈正在从"网络/主机"通用层下沉到"agent 行为"专用层。
ccmux:把 0914 的 agent-manager 朝"实时调度"再推一步
ccmux 的描述只有一句话——**"Run all your AI coding agents in tmux"**。但读完 README 你会发现,它在 0914 agent-manager 之上做了三件事:
- 真正的实时状态机——
idle / working / waiting (permission / plan approval / question),由一个 background daemon 通过 SSE 推,不是 polling。意味着 agent 一发 PermissionRequest,你的桌面通知立刻弹,你点通知直接跳到那个 pane 按 y/n。
- split-pane live preview——你从 picker 选中一个 session,右半边自动渲染那个 pane 的当前内容。光标 Tab 进 preview 之后,按键直接转发到 agent——你可以不切焦点就回它的提问。
- session handoff + git worktree 整合——"send a session's last response to another agent, from the CLI, the row menu, or agent-to-agent via the bundled relay skill"。一只 agent 可以直接把手里的 task 派给另一只 agent,中间通过 MCP。
把它和 0914 那批 agent 工具放在一起:
| 维度 |
agent-manager (0914) |
ccmux (0930) |
| 形态 |
TUI + 私有 tmux server |
TUI + daemon over SSE |
| 主要卖点 |
Diff review |
实时状态机 + handoff |
| worktree 整合 |
无 |
有(可以 spawn session 到 worktree,fork 后接手) |
| 跨 agent 通讯 |
无 |
handoff via relay skill |
| License |
Apache-2.0 |
未明示(README 显式) |
把这两个连起来读,可以看到一条很清楚的曲线:
agent-manager 是"tmux 上有 agent"
ccmux 是"tmux 上有 agent,而且它们之间会说话"
这件事比功能对比更重要——**ccmux 在 tmux 上做了一个"agent 调度器"**。你不再需要人决定"让 Claude 处理这个 feature、让 Codex 处理那个 bugfix",agent 之间可以通过 handoff 自己决定。
和 0914 ghostex 的"agent-to-agent via MCP"对比,ghostex 是 GUI 工作台派的 agent 调度,ccmux 是 tmux 派的 agent 调度。两者押的是同一个未来——agent 协作是默认假设——但交互形态不同。
workmux:把 git worktree × tmux 做成一对一,零摩擦并行开发
workmux 的描述看一眼就知道它要解什么:
Git worktrees + tmux windows for zero-friction parallel dev.
它做的事情可以一句话讲完:workmux add 一行命令,新开一个 git worktree,并创建一个对应的 tmux window,layout 按你的偏好(editor + shell + dev server + agent)自动铺好。workmux merge 一行命令,merge branch、关 window、删 worktree、删本地 branch,全套收尾。
它不试图替代 git,也不试图替代 tmux——它假设你已经在用这两样东西,然后在它们之间建一根自动化的桥。
它和 ccmux 的差别很明显:
| 维度 |
ccmux |
workmux |
| 核心抽象 |
agent session 状态 |
worktree × tmux window |
| 解决的问题 |
多只 agent 之间怎么协同 |
多个 feature 之间怎么并行 |
| 默认场景 |
你已经有 agent 在跑 |
你要开新 feature 同时切多个 branch |
| 协作面 |
跨 agent |
跨 worktree(从而跨人/跨 session) |
把 ccmux 和 workmux 放在一起看,会出现一个之前没有的产品分层:
workmux = 一个 worktree 一只 tmux window,一个 feature 一个窗口
ccmux = 一个 window 里多只 agent,一只 tmux 多个 pane
这不是替代关系,是上下两层。workmux 管 worktree 维度(ccmux 不会知道你开新 feature),ccmux 管 agent 维度(workmux 不会知道哪个 pane 是 Claude 哪个 pane 是 Codex)。
如果你已经在用 git worktree 手动搭 tmux window,workmux 是那种"我应该几年前就装"的工具。它的存在证明了一件事: 即便 2026 年了,git worktree × tmux window 这个组合依然有产品化的价值——不是所有人都愿意写 .tmux.session.sh 之类的 hack 脚本。
和 0831 tele、0914 agent-manager 放在一起,workmux 是另一段独立但平行的故事:GUI 早就有的工具被重做一遍 → TUI/TUI-friendly 重做一遍 → 工作流自动化重做一遍。workmux 是最后一段——工作流自动化。
一点个人感受
bend 我大概率短期不装,不是因为它不好,而是因为它解决的是一个我还不需要规模解决的问题。我目前的代码量没有需要"数学证明挡 bug"的级别,unit test 已经够了。但我会盯着它——如果它的 checker 速度真有 0.86 秒那个量级,它在 agent 时代的 retry-loop 里就是 form spec 的 Linux kernel,这件事比语言本身更值得记。
hol-guard 我会装,纯因为它解决的是真实且每天发生的事——Claude Code 上周问我"要不要 push 到 origin"我批了,但我事后才发现它 push 的 commit message 里漏了一个文件。hol-guard 的"ask before outbound HTTPS"那一栏能拦下这类事故。6 次 30 天安装,早期,我装它是为了支持这件事的存在——安全栈下沉到 agent 行为层这件事不能只有 SaaS 在做。
ccmux 我大概率会装——它和 agent-manager 是直接的对照,我目前用 agent-manager,但 ccmux 的 live preview + handoff 是我真实想要的(尤其当 Claude 干到一半把 task 转给 Codex 这种事变得越来越自然)。Apache-2.0 vs 它的 license 我还没确认,但功能上 ccmux 是 0914 那批的下一格。
workmux 是这周我会立刻装的那一个。我已经手动写了几年的 ~/bin/wt.sh 类脚本,每次新开 feature branch 都要手动跑 setup、装 deps、起 dev server。workmux 把它做成了一行命令,这件事在我的实际工作流里立刻就有收益,不依赖 agent 协作的成熟度。
termaid 是这周 Formulae 里我没展开写但想单独提一句的——它把 mermaid 图在终端里渲染。在 agent 工作流里,这意味着 agent 给你输出 architecture、sequence、flowchart 时,你不用打开浏览器、不用等 IDE preview、不用截图,直接终端里看。这件事和 0914 terminal-browser 是同一篇日记的两段——一个是 terminal 渲染 HTML,一个是 terminal 渲染 mermaid。两者押的是同一个趋势:agent 输出的所有形态都在被往 terminal 收。
kubectl-radar 和 sofka 是这周 k8s UI 的两条岔路——前者做 GUI + MCP(给 agent 看的 dashboard),后者做 TUI(给人看的精简视图)。这件事和 vortix(WireGuard/OpenVPN TUI)放在一起,有一个明显的方向:k8s/network 这类"日常操作本来在 GUI"的东西,正在被分流到 TUI 派和 MCP-for-agent 派。前者保留人本体验,后者为 agent 工作流准备。
taoup 是这周 Formulae 里最不实用但最让我高兴的一个——它把《The Tao of Unix Programming》做成了 Ruby 的 fortune 命令行版。这意味着现在你可以每天开机 taoup | cowsay,把 Eric Raymond 那篇 1997 年的散文当 screen of the day 来看。我大概率不装,但它让我看到了 Homebrew 的一种美学:严肃工具之外,它允许一个纯粹的"文化工具"占据一个 formula 槽。
如果非要挑一句话总结这一周,我可能更愿意说:前三周我们在搭 agent 工作流,这一周 Homebrew 开始给这个工作流的两端上锁——bend 锁编译期、hol-guard 锁运行期、ccmux 和 workmux 锁协作期。
结语
这一周我装 workmux 的同一个上午,顺手装了一个叫 look 的键盘优先启动器。
look 是表格里我没什么可展开写的一个——本地 launcher,模糊匹配,Vim 键位。它做的事传统上属于 Alfred 或 Raycast——但 look 是开源、键盘优先、零配置启动,只在你按快捷键时弹出来,平时安静得像不存在。
这件事放在这一周的大背景下看,比它本身重要:
bend 把 AI 写代码这件事从 IDE 提示层搬到编译器层;
hol-guard 把 agent 的 syscall 从网络层搬到本地防火墙层;
ccmux 把多 agent 协作从 GUI 工作台层搬到 tmux + SSE 层;
workmux 把 git worktree × tmux 从手工脚本层搬到一个 command;
look 把 launcher 从 Electron app 搬到键盘优先的小工具。
这一周的 Homebrew 不在谈新功能,在把每个工具的"该在哪儿"重新画一遍。
agent 时代的栈正在分层——编译期、运行期、协作期、交互期——每一层都有比上一层更细的专用工具。这些工具不是互相替代,是让你能在每一层独立选择。你想用 bend 替 agent 上编译锁,可以;想用 hol-guard 替 agent 上运行锁,也可以;想两把锁都上,完全没人拦你。
bend 给 agent 一把编译锁。
hol-guard 给 agent 一道防火墙。
ccmux 给 agent 一个调度器。
workmux 给开发一张并行网。
look 给启动器一个键。
半年后我们回头看 2026 年秋天的 Homebrew,可能最值得记的不是某个工具的功能,而是这一波工具在悄悄地把"agent 工作流的每一层"从通用工具里剥出来,变成一个独立的、可选择的、独立的层。