我的 Mac mini 死了。不是那种轰然倒下的死法——它只是变成了一台我信不过的机器,而理智的做法就是把硬盘抹掉,从头重装。
这套流程我走过很多遍了。仪式从来没变过:重装系统,然后花一整个晚上把东西一个个装回来。Homebrew。Node。Python。十来个你已经想不起来什么时候装过的命令行工具。然后三周之后,你发现漏掉了一个——因为某个以前能用的东西现在不能用了。
这次我换了个做法。
我先装 Chrome,然后在 Terminal 里跑一条命令把 harness 本身装上。整张清单就这些。剩下的我让它自己去配。
在这件事里,Chrome 不是摆设。它是我唯一真正想要的 GUI 应用,同时也是 agent 需要浏览器时去驱动的那一个。浏览器工具跟其他东西一样,写在 harness 的配置里,而不是靠手工安装。
harness 正是我一直忽略的那一环
过去两年,我想 AI 编码工具的时候,主要想的是模型。哪个模型最聪明,哪个最便宜,哪个写前端代码更好。我为这个问题取消过订阅,也写过不止一篇文章。
我一直低估的是 harness——真正坐在我和机器之间的那个东西。模型提供智力。harness 提供手、提供“我平时怎么干活”的记忆,还有界面。
这次重建,干活的是 OpenCode 这个 harness,模型是 DeepSeek V4.1 Flash。但我已经不再觉得这两层里的任何一层应该固定成唯一选择,因为挑它们的依据完全不是一回事。
模型我按四件事来挑: 它有多聪明、生成有多快(每秒多少 token,这个感受比我预想的强得多)、花多少钱,以及我发过去的数据会被怎么处理。
成本这件事不能只看标价,因为标价不等于你实际付的钱。真正要紧的数字是缓存命中率。当 harness 能维持一个稳定的上下文时,大部分输入都由缓存提供,账单就会塌下来——我的 DeepSeek 缓存命中率常年高于 99%。两个 token 单价相同的模型,实际花销可能差得很远,取决于你的 harness 能不能把缓存留住。
我也不会把所有事情都走同一个模型。不同的任务适合不同的模型,机械性的活儿用一个免费模型往往就够了——拿前沿模型去干这种事纯属浪费。
harness 我按偏好来挑。 界面,还有习惯。我用 OpenCode,因为我的习惯长在那里;同时我也跑 DeepSeek 自家的 harness,因为我喜欢在两边都干活。工作时我用的是另一个——Antigravity CLI 驱动 Gemini 4 Argon 或 3.8 Flash——因为那份工作的形状不一样:我丢给它一个计划,它能一连干上几个小时。
这些事没有任何 benchmark 能替你定,不像模型还有一个分数可看。你得知道自己要什么,然后照着它去挑。
八月我写过,我把工作收敛到单一模型加单一 harness,但没点出真正改变我的那个东西。那篇文章的结尾我说,我会开始更多地用 Flash,因为在这个价位上没有理由不用。这篇讲的就是那件事,只更正一点:单一这个直觉才是错的。
这个区分听起来很学术,直到你用它重建一台电脑。然后它很快就不学术了。一个能跑命令、读写文件、装软件包、还会试着自己检查工作的 harness,不是一个自动补全框。它更像是一层操作系统——而一旦你有了这一层,需要你自己装的东西就变得非常少。
具体流程,一步一步来
每次的模式都一样,而且都不是我以前的工作方式:
- 描述结果,而不是步骤。 不是“这是 brew 命令”,而是“我需要在本地跑这类脚本,你配一下”。
- 让 agent 去安装和配置,包括把它自己刚弄坏的东西修好。
- 验证——这一步还是我的。 agent 能把它跑过的命令原样给你看,这正是让验证变便宜的原因。
- 我验证不了的东西,就自己动手。 服务密钥和 SSH 凭据是仅有的两样我亲手创建、没有交出去的东西。
- 读它到底做了什么,并且接受它迟早会给出一个听起来很合理的错误答案。 不用每一行都读——读到足以知道这台机器上变了什么,也足以看出那个看起来对、其实不对的改动。
和我以前的重装相比,差别用表格比用文字说更清楚:
| 我以前的重装 | 这一次 | |
|---|---|---|
| 手工安装的部分 | 系统,然后一晚上的 Homebrew、Node、Python 和十来个 CLI 工具 | Chrome,外加一条装 harness 的命令 |
| 其他所有东西 | 我自己,花一个晚上 | agent,按需 |
| 状态存在哪里 | 本地服务、运行时、容器镜像 | 一个配置文件,和一次授权过的连接 |
| 会积累什么 | 每一次实验留下的沉积 | 什么都不装“以防万一” |
有两件事让这一切成为可能。一是 harness 把配置放在我能读、能改的文件里——我能清楚看到接了什么,也能改。二是我的 MCP 服务器里,跑在远程的越来越多。Supabase、Resend、Vercel 都是我授权过一次的 URL,不在我的硬盘上。本地的那些通过 npx 按需运行,所以不到用它的那一刻就不算装上。
我的机器以前装着一堆服务。现在它装着一个配置文件和一枚 token,服务本身在别处。
磁盘一直是空的
我没有专门为了测这个而做这件事,所以把它当作一个观察,而不是一次测量。但这个数字很难忽略:和以前那套配置相比,同样一台机器上,我现在多了大约 60 GB 可用空间。
对一台 SSD 焊死在主板上的机器来说,这不是可以忽略的零头。存储是现代 Mac 上少有的几件没法后加的东西,而且定价贵得离谱。多出来的 60 GB,已经接近升级到下一档存储要花的钱了。
这些空间去了哪里,解释起来比证明起来容易。有些工具现在按需运行,而不是常驻硬盘;预装东西的习惯也淡了,因为等需要的时候再要,成本很低。
从“应用态”到“意图态”
下面这个转变,我自己也还在琢磨它能走多远。
我人生里的大部分计算经历都是应用态的。我想做一件事,就去找能做成这件事的应用,装上,学它的界面,然后活在它设定好的框框里。应用是工作的单位。
现在这种干活的方式是意图态的。我描述我需要什么。某个有本事在机器上动手的东西会自己判断需要哪些零件、把它们配好、然后做完。应用变成了一个实现细节,有时候甚至是我从没主动装过的细节。
这比“AI 帮我写代码”要大得多。写代码从来不是我的瓶颈;瓶颈是想做一件事和把它做出来之间的距离。现在这个距离短了很多。
这也是我为什么一直半开玩笑地说,我最后可能会换到 Linux。我在 macOS 上待了这么多年,原因从来不是这个系统本身,而是我攒下来的那套配置,换平台就得重来一遍。如果你的环境主要是一个配置文件加一个能干的 agent,底下跑的是哪个平台,就没有以前那么要紧了。这周我不会换。我只是不再确定还有什么能拦住我。
我得承认,这个变化我没预见到。如果五年前有人告诉我,一台新 Mac 加一个浏览器再加一个 agent 就够我重新开工,我会以为你在描述一个 demo,而不是一个安静的周二晚上。
我不主张什么
说几条诚实的保留意见,因为关于这套东西的兴奋文章我读得够多,多到该对自己保持一点警惕。
- 现在 harness 成了新的锁定。 模型越来越容易换,但我的习惯、配置和工作流都长在 harness 里。这是实实在在的依赖,我盯着它。
- “它把什么都装好了”不等于“我理解我的机器”。 我对自己这套配置的熟悉程度,反而不如当年手工组装的时候。这是真实的代价,也正是我上面留了第五步的原因。
- 这不是免费的。 过去 30 天大约 $60,而这个数字不只是我写代码——它还包括我几个产品在生产环境里跑着的 DeepSeek API。作为参照,一年前同样的用法每月要花掉我大概 $200。(这个转变我在八月写过。)
常见问题
AI 编码里的 harness 是什么?
harness 是把模型接到真实环境上的那个程序。模型负责推理;harness 给它工具——执行命令、读写文件、调用外部服务——并管理围绕这些工具展开的对话和权限。OpenCode 刻意做成模型无关,所以我能直接换掉底下的模型,其他什么都不用动。Claude Code 和 Codex 也是 harness,只不过各自都是围绕自家厂商的模型搭的。我的经验法则:选模型看能力、速度、成本和数据处理;选 harness 看你是不是真的喜欢在里面干活。
真的只靠一个浏览器和一个 AI agent,就能把新电脑配好吗?
就我这套配置而言——一个主要在终端和浏览器里干活的开发者——大体上可以,而且是一条命令,不是零条。你需要一个浏览器去连模型、连网络,需要一种方式把 harness 本身装上,还需要愿意去验证 agent 做了什么。设计师或者会计的机器适不适用,我不敢假设。
为什么这套配置占的磁盘少这么多?
比我以前那套少了大约 60 GB,有三个原因。有些服务改成远程运行,通过一个 URL 访问,而不是装在本地。有些工具改成按需运行,而不是常驻硬盘。还有,“以防万一”先装上的习惯会慢慢消失——因为等以后需要时再要,成本很低。
还是有点意外,“装个 Chrome 看看会怎样”最后变成了一台能用的电脑。
祝好,Chandler :P