别再用了:OpenCode 是安全灾难
Stop Using OpenCode
如果你不知道 OpenCode 是什么,那就想象一只用 TypeScript 打造的靴子,正无情地践踏着我们自 1940 年代以来积累的所有安全与系统软件知识。作为 GitHub 上拥有 16 万星标的热门开源 AI 编程代理,OpenCode 在我用本地 LLM 测试后,被证明是充满安全漏洞的“小丑车”。文章详细剖析了其令人抓狂的设计缺陷:从频繁导致 Prompt Cache Miss 的文件读取机制,到粗暴的上下文修剪逻辑,再到充满矛盾的系统提示词。更可怕的是,其权限管理存在严重漏洞,缺乏“永不”选项,让用户的机器面临被轻易利用或意外抹除的风险。作者强烈呼吁大家立即停止使用 OpenCode,因为它在安全性和可用性上都彻底失败了。
HN 评论区
279- LaurensBER
我觉得这篇文章更好的标题应该是:“一些若被修复就能提升 OpenCode 体验的小麻烦”
# 提示缓存未命中(Prompt Cache Misses)
> 它在每个 SSE 回合都会遍历文件系统并重新读取 AGENTS.md(该文件会被注入到 turn-0 的系统提示中)。如果你为了在下一会话中读取而在 AGENTS.md 里加个简短备注,就会立即触发一次完整的重新评估。
> 我个人最讨厌的一点是:它在 turn-0 的系统提示中放入了当前日期,并在每个 SSE 回合重新评估。如果你在午夜使用 OpenCode,就会遭遇一次完整的提示缓存未命中。
好吧,这些我还能忍受。
# 压缩(Compaction)
>
> 想坐等 10 分钟,让 LLM 服务器用一个新的前置提示填充整个会话,仅仅为了把它变成 5 个要点放到新会话的顶部吗?我也不想。我明白他们的意图,但我没见它运作得有多好。无论是压缩还是修剪,实现得都不够好,而且它们之间的交互也很糟糕。
这是 OpenCode 特有的问题吗?我在 Codex 和 Claude 上也见过同样的情况。
# 系统提示(System Prompts)
> 默认的系统提示带有主观倾向(这没问题),但它的主见烂透了(这就不行了)。我花了好一会儿才搞清楚,为什么我的代理在分发子代理时总说“绝对不要写注释”。
好吧,那就改呗?任何 LLM 都有主观倾向,这个系统提示能在不同模型间强制保持一致性,这看起来挺合理。
- lucideer
这是对使用代理型 CLI 工具风险的很好总结,但标题和整体聚焦于 OpenCode 却显得很奇怪,原因有二:
1. 最明显也最重要的是,这是一篇没有提出明确替代方案的抱怨帖。另一位评论者提到,建议修复 OpenCode 会更有建设性:我不一定完全同意,因为这些问题中的许多都是根本性的,可能需要几乎从头重新思考和重写;但问题在于,这篇文章完全没有提出任何建设性的方案:它的标题完全可以改成“停止使用 LLM”。
2. 列出的主要问题并非 OpenCode 独有。至少在我看来,“令人担忧的事项”中的完整列表同样适用于 Claude CLI,我猜也适用于大多数来自前沿模型提供商的其他代理。
当然,记录这些问题以呼吁有人从头构建更好的工具是 worthwhile 的,所以这篇文章绝非毫无价值——相反,我已经将其加入书签,并将广泛分享和引用它。但标题和焦点确实非常奇怪,似乎有些误导,尤其是考虑到文章其余内容其实相当出色。
- chuckadams
> 如果你不知道 OpenCode 是什么,想象一只靴子永远踩在人类脸上。这只靴子由 TypeScript 制成,而被踩的脸则是自 20 世纪 40 年代电子计算机发明以来,我们在安全和系统软件领域学到的一切。
我提名这段话角逐“扭曲隐喻”类别的 Bulwer-Lytton 奖。
- dboon
这段文字读起来充满了愤怒和刻薄;抽象地说,我同意其中的很多观点,但当我读到这段话时:
> 我的结论是,OpenCode 是一辆马戏团小丑车般的垃圾软件,其安全姿态就是“让我为你弯下腰,爸爸”。所有使用它的人都应该停止使用它。
我就不想再读下去了。写这个软件的是活生生的人。什么时候开始,人们可以这样谈论开源软件了?如果有人这样写你写的软件,你会有什么感觉?读这篇文章让我感到极度不适。
- drdexebtjl
无论 OpenCode 有什么缺陷,它都是我迄今为止生产力最高的工具,我也都尝试过其他所有工具。
这些无非是一些小麻烦、一些分歧,最重要的是,对命令过滤(command filtering)的目的存在根本性的误解。它不是为了安全,而是为了引导(steering)。
总之,作者听起来并没有真正尝试用 OpenCode 构建过任何东西,即便尝试过,他们也没有提到最重要的一点:它的表现到底如何?
- nirinor
我在客户那里使用 CC,因为那是他们的技术栈。我自己工作则使用(特定版本的)OpenCode,因为它好太多了。读这篇帖子让我很难过。
因为文中描述的一切都与我所见并原谅过的怪现象吻合。所以尽管文中有夸张之处,且作者的整体情绪并非我之所感,但他基本上是对的,我需要寻找不同的工具。
如果这篇帖子也引起了你的共鸣,并且你已经找到了更好的替代品,我很乐意听取推荐。pi 在这里被提及得最多,有人觉得它(或其他选项)在这些架构方面确实更好吗?
- volf_
我从 OpenCode 切换到了 Pi,在工具调用性能方面有了显著提升,而且我觉得体验中的 bug 也更少了。
OpenCode 似乎也已经从 https://openrouter.ai/apps/category/coding 上消失了。
- simonw
在系统提示中包含日期——即使代价是午夜时缓存失效——这是一个完全合理的决定。大多数其他工具包也都这么做。
包含完整的日期时间才是不负责任的,但 OpenCode 并没有这么做。