8 月 20 日,Thomas Ptacek 在博客上发了一篇《Stop Making TUIs》,三个单词,把开发者圈子点着了。
Ptacek 是谁?安全圈的老资格——Matasano 的创始人,Latacora 的联合创始人,很多人是看着他博客长大的。他这次开炮的对象,是这些年火得一塌糊涂的 TUI。
先说清楚:TUI 不是命令行,是"终端里的图形界面"。lazygit、k9s、btop 这类,在终端里画窗口、画进度条、做交互的,就是 TUI。他的观点一句话:CLI 要留,TUI 该停。

他反对的不是命令行,是"终端里的界面"
这是全文最关键的一条分界线,很多人没读懂就开喷了。
Ptacek 说得很直白:"写命令行工具,几乎总是好主意;写 TUI,几乎从来不是。"原话是"Building a CLI is almost always a good idea. Building a TUI almost never is."
为什么?因为 CLI 和 TUI 虽然都活在终端里,基因却完全不同。CLI 可以组合、可以进管道、可以被脚本调用,是"程序员的接口";TUI 是给人看的交互界面,却要受制于 70 年代电传打字机的老骨架。
用他的话讲,终端界面存在的理由只有两个:调制解调器,和当年那批 Unix 极客不想学 Motif。他自己 90 年代中期做过一点 Motif——"那点活让我接下来 29 年都不想再碰 UI 开发"。
换句话说,TUI 一直是个"没得选"的产物,从来不是"更优"的产物。
一屋子原生 App,全是"召唤"出来的
转折来了:他说,这个"没得选"的借口,今年起不成立了。
理由就一个——AI 编程代理把原生 UI 的成本打到了几乎为零。他把自己最近几个月"召唤"出来的一堆 macOS App 列了个清单:
一个 Markdown 查看器 MDV.app;一个 SageMath 的原生前端;一个叫 DJ Roomba 的 Apple Music 播放器,里面塞了个 LLM agent,听得懂"我要去地下室做个相框,给我个不跳歌的播放列表";还有一个自动写维基的 LLMwiki、一个饮食热量记录器、一个温度传感器菜单栏 App、一个 Apple TV 遥控器菜单栏 App。

关键不是这些 App 有多精致,而是他补的那句:"这些界面代码,几乎没有一行是我手写的。"
他现在的流程简单到离谱:复制一个模板目录,打开 Claude 或 Codex,告诉它想造什么,然后去吃午饭,回来就能用。
终端爱好者会怎么反驳?他预先全怼了一遍
这篇博文最厉害的地方,是他把反对意见先替你列出来,再一条条拆掉。
第一,"TUI 信息密度高、键盘流快"。他承认这些都对,但补了一句:图形界面之所以显得笨重,是因为它们从来不是给极客设计的。没人拦着你做一个又密又快的 GUI,这事早有人做到过。
第二,"TUI 能跑在 SSH 上,生产环境离不开它"。他的回应是:生产环境真正需要的不是界面,是 CLI;界面应该跑在你自己的 Mac 上,再通过 SSH 去驱动服务器。Emacs 的 TRAMP 早就是这么干的。
第三,"TUI 无障碍更好"。他直接说这大概率是错的——屏幕阅读器读 TUI,是一串"井号、井号、井号、横线、横线"。原生框架从一开始就把无障碍树建好了。
第四,"TUI 跨平台"。这是他唯一认怂的一条,但他补了句大实话:"我又不是给别人造 App,我是给自己造。"

吵翻了:380 分、500 条评论
这篇帖子当天就上了 Hacker News,冲到了 380 分、500 条评论。评论区几乎是两派直接对撞。
反方火力很猛。Ratatui 这个 TUI 框架的维护者亲自下场:"别啊,请继续造 TUI"——然后他承认自己也用 vibe coding 造了个 SwiftUI 应用,而且"要不是有 coding agent,我根本不会去探索这个方向"。这其实等于半路倒戈了。
还有更硬核的:"我要的不是'用户'界面,是'程序员'的界面。我喜欢命令行不是因为我是 Unix 极客,是因为它能让我快速拼出小工具、直接跑起来。"
正方也有狠话。一条高赞评论说:那些"什么都该用 TUI"的人,"像一群说服不了的宗教原教旨主义者"。有人现身说法:"每次用 Claude Code 我都想不通,自己怎么退化成了机器——贴张图想让它修,连个预览都看不到。"

对一个 Mac 用户,这条新闻意味着什么
先别管 TUI 死不死。真正值得 Mac 用户听进去的,是 Ptacek 顺手示范的那件事。
他说自己过去"习惯性地不写界面代码",现在这个身份开始站不住了。对普通 Mac 用户,翻译过来就是一句话:你抽屉里那些"随手写的小命令行",现在每一个都可能长成一个原生菜单栏 App,而你甚至不用写一行 SwiftUI。
区分 CLI 和 TUI,其实是一套很实用的判断标准:一件事如果要被组合、被脚本化、被塞进管道,继续写成 CLI;如果它是要给你自己反复点来点去的,那就别再用终端硬扛了,让它长成一个原生窗口。
Simon Willison 是这么接的。他在转发里说,自己 3 月 vibe-code 的两个 macOS 菜单栏 App——一个看带宽、一个看 GPU——到今天还在天天用。"我还没养成给别的项目也做 UI 的习惯,但已经越来越没借口了。"

被抹平的,是二十年的老边界
回到这场争吵本身,TUI 该不该死,这题能吵到 2046 年。
但 Ptacek 真正点破的那层窗户纸,比 TUI 重要得多:agent 已经把"前端/后端、Web/原生"这些用了二十年的边界,一点点抹平了。
过去,一个系统程序员说"我不写界面代码",是天经地义;现在,这个身份开始变得可疑。UI 不再是一道需要多年修炼才能跨过去的门槛,而是一个你花十分钟就能"召唤"出来的普通零件。
如果连安全圈最硬核的那批人,都开始把手里的命令行一个个变成菜单栏 App——那这个行业的天平,是真的开始倾斜了。
评论区