一、那天晚上我只想让一个东西改两行配置

上周在家里的 NAS 上折腾 Caddy 的证书配置,需求具体到有点寒酸:读一个 Caddyfile,改两行,跑一次配置校验。

我打开 OpenCode,然后依次做了这些事:确认自己在哪个模式(plan 还是 build)、扫一眼侧边那一列 provider 和 MCP 的连接状态、等它在目录里把索引建完。等真正把话发给模型时,我离那个"改两行"的需求已经隔了三四次交互。

不是慢,是仪式感太重。

那一刻我的念头很明确:给我四个工具,然后闭嘴。

二、说我为什么当初选 OpenCode,现在也一样承认它好

OpenCode 是 AnomalyCo(原 SST)做的,定位是"全家桶式"的终端编码 agent:75+ provider、LSP 集成、MCP、子 agent、plan/build 双模式、多会话并行,外加桌面端、IDE 插件和终端 TUI。社区规模大概是 Pi 的十倍以上。

我用了很久,不后悔。如果今天有人问我"第一个 CLI agent 装什么",我还是会推它——开箱即用,遇到问题搜得到答案,坑都有人替你踩过了。OpenCode ≈ VS Code:你不需要先想清楚自己的工作流,先跑起来再说。

三、触动我切换的瞬间

并不是某一个 bug 把我推走的。真正让我动摇的,是一个很朴素的观察:我 90% 的活儿是「读一个文件 → 改两行 → 跑一条命令 → 看一眼日志」。

这类活不需要 plan 模式,不需要子 agent 编排,不需要 MCP,也不需要 LSP——但每次都得先穿过这些功能的"门厅"。

我在为一个两行的改动付复杂度的税。而这个复杂度不是别人强加给我的,是我自己当初挑工具时主动选的。有点恼火,也有点可惜:它是好工具,只是我用它做了它压根没打算优化的小事。

四、实际对比

维度OpenCodePi
定位全家桶式编码产品,开箱即用极简 agent harness,自己搭
内置工具12+ 工具、plan/build 双模式、子 agent、LSP、MCP核心只有 read / write / edit / bash,其余全是可选
扩展方式插件 + 配置驱动,扩展点有边界TypeScript 扩展、skills、prompt templates、themes,可打包成 Pi package 发 npm
模型支持75+ provider多 provider,可带本地模型;另有 print/JSON、RPC、TypeScript SDK
形态终端 TUI + 桌面端 + IDE 插件终端为主,兼作可嵌入的库(SDK 可嵌进自己的应用)
社区规模大,约 Pi 的十倍以上小,但方向上很稳
类比VS CodeNeovim

五、换到 Pi 之后的真实体验

上手成本比想象中高一点。 第一小时我一直在找"plan 模式在哪",答案是:没有,而且是有意不做。子 agent、权限弹窗、内置 todo 同理——官方的态度很直接:计划写进文件,权限交给容器,子 agent 你自己搭。

爽点在"少"。四个工具,模型拿到的东西干净,我做小事的时候不再需要穿过一堆功能。另外它不止是 CLI:print 模式可以进管道,RPC 和 SDK 能把 agent 嵌进自己的服务里,扩展是 in-process 的 TypeScript,想改行为就直接改代码。

# 无交互跑一句,结果可进管道
git diff | pi -p "给这个 diff 写一条提交信息"

# 以只读工具先探一遍仓库,不改文件
pi --tools read,grep,find,ls -p "讲清这个仓库的结构,别动文件"

别扭的地方也得说清楚:

  • 生态小。搜报错经常搜不到东西,只能翻源码、翻 issue,或者直接问 agent 自己。OpenCode 那个十倍 star 的差距,实际体现在"你踩的这个坑,别人是不是已经踩过并且写下来了"。
  • 没有内建权限弹窗,意味着安全边界要自己承担——它默认以启动它的用户权限运行,没有内建沙箱。对我这种把它放在隔离环境里干活的人没问题,但这是自由换来的,不是白送的。
  • 扩展要写 TypeScript。不写 TS 的人,会撞到一堵墙。
  • 有那么一两个下午,我确实怀念点一下就能用的 plan 模式。

六、卸载 OpenCode 的过程

我先把体积量了一遍,再决定删什么——删之前得知道自己在删什么:

du -sh ~/.npm-global/lib/node_modules/opencode-ai   # 二进制   ~186MB
du -sh ~/.config/opencode                           # 配置      52MB
du -sh ~/.cache/opencode                            # 缓存      10MB
du -sh ~/.local/share/opencode                      # 数据     6.1MB

数据目录里是 auth.json(登录凭证)和 opencode.db(历史会话库)。我没有一上来就全删,先把数据留着,观察一段时间确认没有回头的欲望。

opencode uninstall                     # 全部清理
opencode uninstall --keep-config       # 保留配置
opencode uninstall --keep-data         # 保留登录凭证和历史会话库

最后清掉约 320MB(186 + 52 + 10 + 6.1)。顺带一句:OpenCode 和 Pi 都是 TypeScript 写的、MIT 协议、开源,互不冲突,可以共存——卸载是选择,不是对抗。

七、结论:谁适合 Pi,谁该留在 OpenCode

适合换到 Pi 的人:任务以小而具体为主(读、改、跑一条命令);喜欢 Neovim 那种"我的环境我说了算"的掌控感;愿意为一个新工具写点 TypeScript 把工作流搭出来;能接受生态小、文档短、坑要自己趟。

该留在 OpenCode 的人:要开箱即用;依赖 MCP、子 agent、plan 模式、LSP 这些现成能力;团队里需要统一的工具链,不可能人人为自己搭一套 harness;或者单纯不想把时间花在维护 agent 上。

我不打算写"Pi 完胜"。这两个东西解决的是不同的问题:一个替你把工作流想好,一个给你积木让你自己拼。选哪个,取决于你愿意为掌控感付多少维护成本——和十年前在 VS Code 和 Neovim 之间选,是同一道题。

我现在把 Pi 放在主力位置,但 OpenCode 的数据没删干净。真到了要做多 agent 编排的那天,我会把它装回来。