🍺 Homebrew 更新周报 # 20260608 | 划定边界

这周 brew update 之后,有一行描述让我停了一下。

"Vim 8 long term support version with no LLM-generated code"

这不是功能描述,是一种表态。
就好像某家餐厅在门口挂出"不用味精"的牌子——
这家餐厅要传达的,不只是关于味精。


本周一句话总结

工具还在进场,但边界开始出现了。


本周新增工具速览

🧪 New Formulae

名称 中文说明
ansible@13 Ansible 13 稳定版,自动化部署与配置管理
baguette iOS 26 无头模拟器管理与宿主端输入注入
bun 极快的 JS 运行时、打包器、测试运行器(终于进 core)
cargo-show-asm 查看 Rust 代码生成的汇编、LLVM-IR、MIR 和 WASM
ec TUI 三路 git merge 工具
elio 功能完备的终端文件管理器,带丰富预览
ghcid 基于 GHCi 的极简 Haskell IDE
gixy 面向安全的 NGINX 配置静态分析器
hookdeck 把 Hookdeck 的 webhook 事件转发到本地服务
k0sctl k0s Kubernetes 集群的引导与管理工具
kimi-code Moonshot AI 出的终端 AI 编码 Agent
libbcg729 ITU G.729 A/B 语音编解码器的编解码库
m4rie GF(2^e) 上稠密矩阵快速算术库(2≤e≤16)
miniz 轻量级高性能 zlib/Deflate 压缩库
pitchfork 以开发者体验为核心的守护进程 CLI 管理工具
rmux tmux 风格 CLI 加守护进程运行时的终端多路复用器
rura 用于构建 shell 管道的交互式 TUI 便签本
threatdeck TUI 威胁情报监控与告警平台
vim-classic Vim 8 长期支持版,声明无 LLM 生成代码
wtype Wayland 版的 xdotool type,模拟键盘输入

🧩 New Casks

名称 中文说明
buzz 本地语音转录与翻译
clickshare Barco 会议系统无线投屏客户端
dfu-blaster-pro 把 Apple Silicon Mac 强制进 DFU 模式的工具
dotnet-reactor .NET 代码保护与混淆工具
dwellclick 无需按键、靠悬停触发点击的无障碍辅助工具
font-geist-pixel Geist 像素风字体
groove-omnidialer 外呼销售拨号管理
ibm-notifier IBM 出的企业端自定义通知与告警 Agent
macparakeet 本地语音转文字、转录与会议录音
microsoft-365-copilot Microsoft 365 的 AI 生产力助手
microsoft-remote-help 微软企业 IT 支持用的远程协助与屏幕共享
mindmanager 思维导图与可视化项目管理
openlogi 本地优先的 Logitech Options+ 替代品,适配 HID++
power-monitor 电源适配器与电池状态报告
shichizip-zs 基于 mcmilk/7-Zip-zstd 的 7-Zip 衍生 GUI

值得留意的几个方向

这周有一个我从没见过的措辞出现在 Homebrew 里。
它让其他几个工具都显得更值得一看了。


vim-classic:一行描述,一种立场

brew info vim-classic 只有一行核心描述:
"Vim 8 long term support version with no LLM-generated code"

"no LLM-generated code"——这在工具的官方元数据里出现,是我第一次见到。

这不是在说 LLM 生成的代码质量不好。
它说的是一种可追溯性:每一行代码,作者都清楚它从哪儿来、为什么在这里。
Vim 8 已经是功能意义上的成品,它不需要新功能,只需要有人认真维护。
vim-classic 的选择是用人的判断来做这件事,而不是借助辅助生成。

你可能不需要 vim-classic。Neovim 更好、vim 够用。
但它的出现本身是一个信号:
当 LLM-assisted 成为默认时,"手写"开始变成一种需要声明的特性,就像"有机"或"手工"一样。

这种逻辑早晚会蔓延到更多地方。


ec:终于有人把三路 merge 做成 TUI 了

┌─────────────────────────────────────────────┐
│  ec — TUI 3-way git mergetool               │
├───────────────┬───────────┬─────────────────┤
│   LOCAL       │   BASE    │   REMOTE        │
│               │           │                 │
│ func foo() {  │ func foo  │ func foo() {    │
│   return 1    │  () {     │   return 2      │
│ }             │   return  │ }               │
│               │   0       │                 │
│               │ }         │                 │
├───────────────┴───────────┴─────────────────┤
│  MERGED OUTPUT                              │
│  func foo() {                               │
│    return ▌                                 │
│  }                                          │
└─────────────────────────────────────────────┘
  ← → 切换块   Space 选择   Enter 应用   q 退出

三路 merge 是 git 里最让人头疼的一环。
git mergetool 默认弹出 vimdiff 或者你随便配的编辑器,
多数人要么不知道怎么用,要么每次都要重新想"左边是我的还是他的"。

ec 做的事很简单:把 LOCAL / BASE / REMOTE 三路放在 TUI 里并排,
让你用键盘选择每个冲突块应该用哪个版本,然后输出 MERGED。
它省掉的,是"看着 <<< === >>> 手动对齐"那种脑力消耗。


rura:shell 管道的草稿本

很多人不知道自己其实需要一个"管道调试器"——
直到他们写出了 cat file | grep foo | awk '{print $2}' | sort | uniq -c | sort -rn 这样一条命令,
然后发现根本不知道哪一步开始出错了。

rura 是个 TUI 便签本:你在里面一段一段地搭 pipeline,
每加一步都能即时看到那一步的输出,
错了就改那一步,不用每次都重跑整条命令。

┌─────────────────────────────────────────────┐
│  rura — shell pipeline scratchpad           │
├─────────────────────────────────────────────┤
│  INPUT                                      │
│  cat access.log                             │
├─────────────────────────────────────────────┤
│  STEP 1  grep "404"          [42 lines]     │
│  STEP 2  awk '{print $7}'    [42 lines] ▲   │
│  STEP 3▌ sort | uniq -c      [editing...]   │
├─────────────────────────────────────────────┤
│  PREVIEW                                    │
│    128 /api/missing                         │
│     43 /favicon.ico                         │
│      7 /admin/login                         │
└─────────────────────────────────────────────┘

它不是 shell 的替代品,是 shell 的草稿纸。
它省掉的是那种"我不确定这一步对不对,但也不想重跑一遍"的犹豫。


rmux:tmux 的精简重写,带守护进程运行时

tmux 很好,但配置文件那几百行、插件生态、偶尔出问题时的调试——
对于"我只是需要一个会话持久化的终端分窗"来说,有点重了。

rmux 的定位是:tmux 的 CLI 风格,更简单的守护进程模型。
你依然用 rmux new -s myprojectrmux attach -t myproject 这种命令,
但它的守护进程从设计上更轻,更容易推理。

这不是要取代 tmux 的项目。
它是"我知道 tmux 能做到,但我只需要 20% 的那个人"的选项。


一点个人感受

bun 终于进了 homebrew/core,而不是只在 tap 里。
这件事本身不大,但标志着它已经不是"新东西"了。

kimi-code 进场了——Moonshot AI 的编码 Agent 加入了 Claude Code、Codex、Gemini CLI 的行列。
现在 Homebrew 里的 AI 编码 Agent 已经有七八个了,
我有点好奇大家到底在用哪几个、或者全都在用。

vim-classic 是这周我想得最久的。
不是因为我会用它,而是因为它的描述方式让我意识到:
"这段代码是人写的"正在从隐含假设变成需要被声明的事。
这个转变发生得比我想象的快。

macparakeet 和 buzz——本地语音转录这个品类今年明显多了。
不知道是 M4 芯片快到了足够跑的程度,还是大家开始认真对待隐私。
或者两者都有。


结语

这一周没有爆炸性的工具,但有一行描述让我觉得这期值得写。

"no LLM-generated code"——四个词,一条隐形的分界线。
它出现在一个 Vim 的 fork 里,出现在 2026 年,
这件事本身比任何新 AI Agent 都更值得记下来。

当默认值发生变化,反其道而行就变成了一种声明。