🍺 Homebrew 更新周报 # 20261010 | 这一周,锁好之后的东西开始流动

上一期,Homebrew 给 agent 工作流的两端上锁——编译期一把锁,运行期一把锁,协作期一把锁。

这一期再打开 brew update,锁没有回潮。
出现的全是另一种东西:让配置、协议、会话从各自为政的抽屉里流出来的东西。

不是一个新防火墙,
是一个叫 mcplinker 的 GUI,把散落在 Claude Code、Cursor、Codex、Windsurf 各自配置文件里的 MCP server 收成一份,一键同步到所有客户端;
不是又一个 MCP 客户端,
是 Apify 出的一个叫 mcpc 的命令行——它回应的不是一个功能需求,是那句流行论断"MCP sucks, CLIs are better";
不是又一只 agent 管理器,
是一个叫 nodeterm 的 Mac 应用,把终端和 agent 变成无限画布上的活节点——重启机器,每只 session 都回来;
不是又一个远程桌面,
是一个叫 lody 的东西,让 agent 会话在手机和桌面之间流来流去,进度挂在灵动岛上。


本周一句话总结

上期给 agent 上锁,本期 agent 开始流动:
配置在客户端之间流动(mcplinker),协议在 shell 里流动(mcpc),
会话在画布上流动(nodeterm),会话在设备和人之间流动(lody)。


本周新增工具速览

🧪 New Formulae

名称 中文说明
cymbal tree-sitter 驱动的语言无关代码导航 CLI
mcpc Model Context Protocol 的通用命令行客户端(Apify 出品,Apache-2.0)
[email protected] Python 3.15 正式进入 Homebrew
[email protected] Python 3.15 的 gdbm 接口
[email protected] Python 3.15 的 Tcl/Tk 接口

🧩 New Casks

名称 中文说明
argo-books 面向小企业的记账软件
auto-tune-central Antares 产品的软件下载管理器
azure-cli Microsoft Azure CLI 2.0(以 cask 形式进场)
buildin 笔记、文档与 wiki 的协作工作区
crest 带小组件的刘海工具
designcraft 页面排版与出版工具
filmcraft 视频编辑器
fl-studio 数字音频制作工作站(FL Studio)
fluxer 面向朋友、群组、社区的聊天——文字、语音、视频
font-lexica-ultralegible Lexica Ultralegible 字体
holst 团队协作在线白板
keyecho 每次按键播放机械键盘音效
lightcraft 照片库管理与 raw 修图
littlebird 捕捉会议与工作上下文的 AI 助手
lody 跨桌面与移动共享 coding agent 会话
mcplinker 跨 AI 客户端管理与同步 MCP server 配置
nodeterm 画布式终端管理器——终端与 coding agent 变成画布上的节点
pdfcraft PDF 编辑器
photocraft 图像编辑器
picsart-ai-playground AI 图像、视频、音频创作工作区
sandisk SanDisk 外置盘管理工具
sdrmm-app 模块化客户端-服务器软件定义无线电
solidtime 开源时间追踪
sononym AI 驱动的音频采样浏览器
stashcat 面向组织的加密通讯
swiftcord 原生 Discord 客户端
threat-dragon 威胁建模工具(OWASP 项目)
vectorcraft 矢量编辑器
zed-delta 用 agent 写代码的多人协作环境(Delta)

值得留意的几个方向

这一节不求全,
只挑 4 个 值得停下来看的点。


mcplinker:MCP 配置第一次被当成"需要独立管理的资产"

mcplinker — 从官方 MCP Registry 浏览并安装 server

mcplinker 的副标题写得很直白:

One-click add and sync MCP servers across AI clients — No LLM calls needed, built-in marketplace.

它解决的是一个过去两年慢慢长出来的小烦恼:你同时用 Claude Code、Cursor、Codex、Windsurf——每一家的 MCP 配置是各自一份,存在各自的配置文件里。装一个新 server,同样的 JSON 要抄四遍;改一个 endpoint,四处要记得同步。这件事小到没人写工具,直到配置条目多到开始漂移。

mcplinker 做了两件事:内置官方 MCP Registry(registry.modelcontextprotocol.io),浏览、点 "Get"、点 "Add",server 直接装进你选的客户端;然后把所有客户端的配置收在本地做一键同步——全程不调 LLM。

这件事本身不大,但它是一个信号:

当某个东西需要专门工具来同步的时候,说明它已经被当成了资产,而不是某个客户端的私有设置。

MCP server 配置走过这条路——从"一个客户端的 config 字段"到"横跨所有 AI 客户端的独立资产层"。 USB-C 的比喻 README 里也有,但真正让它像回事的不是接口形状,是配置终于不跟着单个客户端走了。

顺带一个细节:mcplinker 的作者是 milisp,同一个人写了 codexia——OpenAI Codex CLI 的那个轻量 GUI。一个人同时在做"Codex 的壳"和"所有客户端的配置总线",这条产品线的选择本身就是站队:客户端会换,配置和协议不动。


mcpc:当"MCP sucks, CLIs are better"有人认真回应了

mcpc — 把每个 MCP 操作映射成一条 shell 命令的通用客户端

mcpc 是 Apify 出的(就是做爬虫平台的那家)。它的 README 开头不是功能介绍,是一场论战:

Many AI agents misuse MCP. They treat tools as prompt-time function calls, repeatedly injecting tool definitions and results into the context. Tokens get wasted, context rots, the agent gets slower and less reliable — hence the popular conclusion: "MCP sucks, CLIs are better".

mcpc challenges that narrative.

它的方案是把每个 MCP 操作映射成一条 shell 命令——tools、resources、prompts、async tasks、skills 全覆盖,agent 只需要一个 Bash() 工具就能拿到完整 MCP 协议,不用在 prompt 里挂几十个 function 定义。JSON 输出能接 jq、xargs、管道,CLI 工作流的全部既有知识直接适用。

README 里有一句话值得抄下来:

CLI is the perfect local interface between agents and MCP, while MCP remains the standard remote interface for server discovery, authentication, payments, and access control.

这句话是整期的题眼。MCP 和 shell 不是二选一——MCP 管远端(发现、认证、计费、权限),shell 管本地(调用、组合、管道)。这个分工和数据库当年"SQL over network protocol"的分层几乎同构。

还有两个细节让 mcpc 不只是"又一个 CLI":

  • 认证一次,所有 agent 复用——同一台机器上的 Claude Code、Codex、Cursor 共享 mcpc 的 OAuth profile 和活跃 session。MCP server 的凭据从"每个 agent 各存一份"变成"操作系统 keychain 里一份"。
  • AI sandboxing——agent 的 MCP 连接走 mcpc 的 proxy,agent 生成的代码摸不到原始凭据。上期 hol-guard 在 syscall 层拦 agent,mcpc 在 MCP 协议层做同一件事:凭据不进 agent 的上下文。

19 次 30 天安装,很早期。但"一个 MCP server 的行为可以被 curl 式地检查"这件事,意味着 MCP 第一次有了独立于任何 agent 的调试和脚本化入口。


nodeterm:把"哪只 agent 在哪个窗口"从记忆问题变成视野问题

nodeterm — 终端和 coding agent 变成无限画布上的活节点

nodeterm 的主张一句话:turns terminals and coding agents into live nodes on an infinite canvas。

它和 0930 的 ccmux 是一对可以直接对读的工具——同一个问题("同时跑着的多只 agent 怎么管"),两个相反的答案:

维度 ccmux (0930) nodeterm (1010)
形态 tmux 之上的 TUI 独立 GUI,无限画布
组织原则 列表 + 状态机(idle/working/waiting) 空间位置(把节点拖到哪儿,它就代表那个意思)
跨 agent 通讯 handoff via relay skill 在两个节点之间画一条线,彼此可按需读对方 context
独有细节 split-pane live preview 重启机器,每只 session 都回来

那一栏画线值得多看一眼。agent 之间的协作在 ccmux 里是"派活"(handoff 一个 task),在 nodeterm 里是"连线"(画一条 edge,两个 Claude 节点互相读对方上下文)。前者是工单思维,后者是接线板思维——你按空间直觉把相关的工作放在一起,然后像接电路一样把它们连起来。subagent 被派生出来的时候,作为新节点直接在画布上扇形展开,你能亲眼看着 agent 的工作树长大。

但让我停下来的细节是那句不起眼的话:

Restart the machine; every session comes back.

列表式调度(ccmux)解决的是"现在哪只在等我",画布(nodeterm)解决的是另一个更老的问题——你上一个 session 的心智地图,能不能不丢。tmux 从来没解决这个问题(tmux attach 找回的是 pane,不是你当时摆的空间结构)。nodeterm 把"agent 工作现场"当成一个可以持久化的对象:终端、agent、editor、diff、便签全是节点,重启回来,摆好的位置还在。

31 次 30 天安装。早期,但它是这期 agent 类工具里唯一一个在回答"上下文怎么留下来"的。


lody:agent 会话开始跟着人走

lody — 在手机和桌面之间共享 coding agent 会话

lody 的官方定位是 team agent workspace——Share coding agents with your team on phone and desktop。Shared sessions、live diffs、一个控制面。

它做的事可以这样描述:在任意一台机器上跑 npx lody daemon start,那台机器就一直在线;然后你从手机、网页、脚本或 CI 给它派活——lody session create --agent codex "Fix the auth 500s"。agent 会话是共享的,队友可以打开你的 session 接着聊,PR 状态、CI 检查、merge 动作都在会话里完成。

两个细节:

  • "One agent can run the others"——从一个 chat 里管理跨机器、跨 agent、跨 repo 的多个会话:让一个 agent 派 sub-agent 在 macOS、Linux、Windows 上并行测试,一个 review、一个 fix,依赖坏了就开个 sub-session 修完再收回来。0930 的 ccmux 在 tmux 里做 agent 调度,lody 把调度台搬到了聊天窗口——而且这个聊天窗口在哪台设备上都开得起来。
  • agent 进度挂在灵动岛上——手机锁屏,刘海那里显示 Claude 跑到第几步。这个交互选择说明 lody 对"人和 agent 的距离"有一个明确判断:agent 跑活的时候,人应该只在需要他的时候被打断,其余时间是余光。

它还有一个生态站位:接入方式是 ACP(Agent Client Protocol)——"If it adapts the Agent Client Protocol, it plugs into Lody",列表从 Claude Code、Codex 排到 Pi、Poolside,几十个。当"共享 agent 会话"这件事需要一个协议层入场券时,ACP 出现在了 Homebrew 一个 cask 的 README 里——协议之争还在早期,但会话可移植这个需求已经被当成前提了。

13 次 30 天安装。比 nodeterm 还早。但把"agent 会话"从一台机器的 tmux 里解放出来、让它在设备和团队成员之间流动,这一步本期没有第二个工具在做。


一点个人感受

最大的没写进正文观察,是那六个 craft——designcraft、filmcraft、lightcraft、pdfcraft、photocraft、vectorcraft,加上 crest 的排版,同一周进场六个"craft"后缀的创作工具,排版、视频、照片、PDF、图像、矢量各一个。像某个套件整批发行,也像某个团队第一次发现 Homebrew 这个渠道。Homebrew 长期是开发者工具的天下,一周之内一个"创意套件"级别的东西整批进场,这件事比任何一个 craft 本身都值得记。

zed-delta 是本周 agent 类安装量最高的(68 次,是 mcplinker 的三倍),但注意它的 requirement:arm64 only。一个标着 "Multiplayer environment for coding with agents" 的东西,第一道门槛是芯片而非账号——多人 agent 协作这件事,目前只对一半的 Mac 存在。我不装它,因为我的 agent 工作流里还没有"和人实时同处一个工作现场"的真实场景;lody 的共享会话更贴近我现在"夜里派活、白天收活"的节奏。

cymbal 是本周 Formulae 里我最想再看一眼的——tree-sitter 驱动的语言无关代码导航 CLI。它和 agent 的关系很直接:agent 读代码需要的不是 IDE,是一套可以脚本调用的符号索引。cymbal 这种工具如果成熟,agent 的 "find references" 就从 LSP 进程依赖里解放出来,变成 shell 里的一条命令——和 mcpc 对 MCP 做的事情是同一个方向:能力下沉到 shell。

threat-dragon 出现在这一周有点微妙——上期刚有 hol-guard 在运行期给 agent 上锁,本期来了个 OWASP 的威胁建模工具。设计期画威胁图、运行期拦 syscall,这条安全链的上下两端各自来了新工具,唯独中间没人补。我不常用这类工具,但它的出现让我确认:agent 安全是这个季度 Homebrew 的持续投资方向,不是单周热点。

最后是一个缺席:本周没有任何一个"锁"类工具进场。锁没有回潮,流动的工具直接建立在"锁已经在那儿"的假设上——mcpc 敢让 agent 通过 shell 打 MCP,前提是 proxy 在前面挡着凭据。流动和设防不是两件事,是同一件事的两期。


结语

这期四个工具里,我最先装的是 nodeterm。不是因为画布比列表高级,而是因为那句 README 里的旁白——Restart the machine; every session comes back.

我试了一下,重启之后,画布上 46 个 session 一个不少地回来了,摆好的位置都没动。

同一周,lody 把 agent 会话的进度挂上了手机灵动岛——session 不再属于某台机器的某个 tmux,它属于你,跟着你从桌面走到地铁。

上期我们给 agent 上锁,是为了它跑的时候不出事;
这一期的所有工具都在回答另一个问题:它跑完之后,现场怎么办?
配置要能搬(mcplinker),协议要能试(mcpc),现场要能复原(nodeterm),会话要能带着走(lody)。

锁住是让东西不被拿走。
流动是让东西不会丢。
这两件事,原来是一件事。