有人在修改OpenCode工具代码时发现:运行`opencode serve`后,Web UI的所有请求都被代理到这里。没有启动参数可以关闭,没有选项可以修改。
GitHub上堆积了十几个相关PR和issue,最早的投诉可以追溯到几个月前。防火墙内运行?启动时会卡在白屏等待外部请求超时。完全断网?功能直接残废。
更诡异的是,即便关闭自动更新,Web UI版本依然会自动刷新,新的模型provider会突然出现,甚至成为默认选项。一位用户说得直白:“我以为在用本地模型,结果OpenRouter给我发了账单补充提醒。”
有网友验证:启动时的第一个动作就是把你的初始prompt上传到opencode.ai/zen/v1/responses生成标题,无论你用的是不是本地模型。除非手动指定small_model,否则这个行为无法避免。文档里写着“会fallback到主模型”,但代码里根本不是这么干的。
看看RolandCode(一个剥离了隐私功能的fork)删掉的endpoint列表:
- us.i.posthog.com → 使用分析
- api.honeycomb.io → 遥测数据、IP、位置
- api.opencode.ai → 会话内容、prompts
- opencode.ai/zen/v1 → prompts代理
- app.opencode.ai → 全局代理
一个本地工具需要连接这么多服务器?
有观点认为这是为了盈利做的妥协。OpenCode背后有VC资金支持,拒绝合并显示tokens-per-second指标的PR,在OpenCode Zen项目中对provider、量化方案、速率限制都不透明。锁定默认的build prompts,要求重新编译才能修改,这种设计选择本身就很可疑。
另一个细节:即便用户明确关闭自动更新,Web UI仍会静默升级,新的模型provider会突然出现在列表里,甚至自动成为默认路由目标。这不是失控,是有意为之。
社区里开始有人重新审视当初OpenCode和Crush的争议:“现在想想,那场冲突可能不是我们以为的那样。”
终端复制粘贴遵循不了Linux标准,退出后看不到会话历史,这些看似小问题的背后是什么?有人说是editor风格的trade-off,但Gemini CLI、Claude CLI、Codex都没这些毛病。
现在的选择:
Pi Coding Agent被多次提及,简单、轻量、真正本地。有人fork了oh-my-pi增强版,也有人在用RolandCode。Nanocoder从头设计,原生支持agentic coding和tool calling。
但守住“本地”这个词的意义比工具本身更重要。
模型权重能离线运行吗?系统能在没有任何外部API调用的情况下工作吗?网络访问是可选还是强制?如果运行时管道依赖远程endpoint,那就别叫它“本地”,叫“混合”更准确。
本地AI的价值在于隐私、确定性和成本控制。当这些保证被隐藏的网络依赖打破,整个价值主张就变了。