OpenCode爆出161k星标却让开发者连夜跑路,你的终端还敢让它裸奔吗?
OpenCode这个号称最火的开源AI编程助手,GitHub星标161k,但实测下来从缓存机制到权限管理全是坑。默认直连云端模型、HTTP服务裸奔、命令过滤形同虚设,本地开发环境分分钟变高危地带。本文硬核拆解OpenCode的崩溃设计,从提示词缓存失效到远程代码执行漏洞,带你看清AI编程助手光鲜外表下的安全真相。
缓存机制把本地GPU当柴火烧
本地跑大模型最怕的就是提示词缓存反复失效。OpenCode在系统提示词里塞进当前日期,每轮对话都重新计算,你要是半夜十二点还在写代码,立马触发全量重算。本地Qwen3.6-27B模型预填充阶段能把GPU干满十分钟,等你喝完整杯咖啡它才开始吐第一个字。
更离谱的是它每轮SSE都要重新读取AGENTS.md文件,你刚往里面加一行提示,整个对话缓存直接作废。按理说缓存命中才是常态,但OpenCode的设计让你每次对话都像在跑全新的推理任务。
它还有个剪枝机制,距离当前写入位置超过四万token的工具调用结果直接丢弃。这相当于每两三轮对话就扔掉一整本小说的上下文,你刚让AI读完的技术方案文档转头就忘,连个招呼都不打。
压缩功能让用户当人肉沙包
上下文窗口满了怎么办?OpenCode的解决方案是把整个会话压缩成五个要点塞进新窗口。但它的压缩提示词插在最前面,导致你得等服务器把整段对话重新预填充一遍。我实测过,会话长度超过十万token时,这个操作能让你盯着屏幕看十分钟进度条。
更搞笑的是压缩和剪枝两个功能互相打架。你刚压缩完会话,剪枝机制转头就扔掉刚生成的要点摘要。想保持上下文连续性?除非你手动整理笔记然后开新会话,否则OpenCode的内置机制就是来添乱的。
它的设计理念是把有限上下文窗口伪装成无限,但这个抽象层漏得跟筛子似的。与其这样不如承认窗口限制是客观存在的,给用户提供更好的管理工具,而不是让AI自己瞎编乱造。
系统提示词教AI说废话连篇
默认系统提示词啰嗦到令人发指,大部分篇幅都在教AI如何简洁回答。这种自相矛盾的设计导致AI动不动就蹦出“使用绝对不要加注释”这种奇葩指令,我查了半天源码才发现是系统提示词在作怪。
计划模式告诉AI不能写任何目录,但它其实被允许写入特定文件夹。这种不一致导致两种情况都见过:AI主动往那个目录写文件,以及明确要求它写的时候坚决拒绝。更糟的是你没法全局修改默认提示词,每个项目都得复制一份。
不同模型的提示词质量参差不齐,Beast模式的提示词直接命令AI“必须用谷歌验证第三方包”,理由是“不可能成功完成否则”。这种把AI当弱智的写法反而暴露了开发团队对模型能力的认知偏差。
权限系统假装在保护你
AI想访问项目外的文件?OpenCode会弹出对话框问你允许还是拒绝。但选项里只有Yes、No、Always,唯独没有Never。这意味着你没法永久禁止某个危险操作,只能每次都手动点否。
更坑的是子代理访问/tmp目录时你点No,整个子代理和它已完成的工作直接销毁。迫于无奈你只能点Yes放行,等于默许AI在临时目录里搞事情。这种设计让权限提示变成了形式主义,你连续点几十次Yes之后早就麻木了,真遇到危险操作也反应不过来。
命令过滤的实现更是灾难。它用tree-sitter解析bash命令AST,然后匹配正则表达式判断是否允许。但echo git status | bash这种管道命令轻松绕过,env git status也畅通无阻,甚至连base64编码后的命令都能执行。文本命令过滤就是皇帝的新衣,骗骗自己罢了。
远程优先把本地隐私当祭品
默认配置下OpenCode直连云端模型,文档里连个本地模型的简单配置示例都找不到。你费劲配置好本地模型,启动后还得在交互界面里手动选择,而它已经在后台连上远程服务了。整个过程你的本地shell一直开着,任何操作都在裸奔。
默认模型的URL不是静态写在代码里的,而是从models.dev动态下载。更骚的是安装完opencode,按一个字母加回车就足以让远程模型接入你的本地shell,全程无需任何用户配置。如果第一条消息是空的或模糊的,模型第一件事就是扫描当前目录开始读文件,你项目里的敏感代码全被上传到云端。
WebFetch工具的存在让情况更糟。系统提示词里明确告诉AI可以用它抓取网页内容,但关于“是否该猜测URL”的措辞模糊到令人发指。考虑到bash命令本身没有网络沙箱,这等于在给AI递刀——万一它执行curl | bash怎么办?
文件权限四处漏风
默认阻止AI访问项目目录外的文件,但实现方式简陋到令人无语。它同样用AST解析bash命令,然后路径解析并验证。所以cat /tmp/logfile触发权限提示,但python3 -c 'import shutil; shutil.rmtree("/")'畅通无阻。这种安全检查跟闹着玩似的。
更搞笑的是它维护一个FILES列表,列出所有可能访问文件的命令。不在列表里的命令默认不会触碰文件,路径验证直接跳过。echo命令不在列表里,但echo 21 > /sys/class/gpio/export却能修改系统硬件接口。你之前允许过echo执行,现在想收回去?来不及了。
权限持久化机制让问题雪上加霜。你允许过一次python3,以后所有python3命令都自动放行。攻击者可以让AI写个脚本读取~/.ssh/id_rsa,因为python3已经在你白名单里了。这套权限系统不仅是漏勺,它干脆就是个自动浇灌系统,专门给漏洞施肥。
RCE漏洞全家桶让人头皮发麻
最炸裂的是那个CVE-2026-22812漏洞。OpenCode默认开启HTTP服务,CORS头完全放行,POST接口执行任意shell命令,GET接口读取任意文件。这意味着你浏览任何网页,那个网站都能敲OpenCode的默认端口,直接拿下你系统的用户级权限。
开发团队的“修复”方案更骚:默认禁用服务,但解释为什么还需要给opencode.ai留例外——让官网能远程控制你的机器。然后承诺以后会做得更好,接着就人间蒸发了,stale bot把issue一关仿佛什么都没发生过。
类似的剧本反复上演。有个issue报告认证命令会fetch并执行你传入的任意URL,同样被stale bot无情关闭。虽然URL是用户控制的,但这操作逻辑本身就够离谱的。
本地模型只是另一种慢性毒药
用本地Qwen模型确实避免了云端隐私问题,但模型小到没法完整复现训练集,输出的可信度反而更难判断。它犯蠢的时候一目了然,这反而让你放松警惕,觉得“反正一眼就能看出错”。问题是等它看起来有点聪明的时候,你已经上钩了。
把LLM当代码生成器用就是条死路。不管你对架构理解多透彻,AI总能用“把可变状态移到中间让大家共享”这种馊主意把你的设计毁掉。长期来看,你损失的是对代码库的理解能力,省下来那点时间根本不值。
从模型权重里直接找答案必然产生幻觉,万亿参数模型都逃不掉。如果大家肯面对现实,就不会给数据中心盖新电厂,也不会把AI硬塞进每个产品里。整个LLM生态烂到根了,指望它变成“可靠工具”之前,得先有正经的系统工程师来收拾这堆烂摊子。
原文认为:OpenCode的161k星标是靠堆功能忽悠来的,但安全架构跟纸糊的没区别。默认云端优先、本地缓存乱杀、权限系统形同虚设,RCE漏洞全家桶轮番上阵。要么乖乖用Docker或其他沙箱隔离,要么趁早换Pi或Codex,别拿自己的开发环境赌运气。反正我连夜卸载了,你呢?
原文标题 / Annoying and alarming things about OpenCode
网友观点
对OpenCode产品的态度分歧
- 唱赞歌的说它是目前免费又好用的“天花板”,计划模式(Plan mode)用起来很顺手,虽然浑身是刺儿但干活确实利索。
- 唱反调的觉得这玩意儿就是“屎山代码”(vibe-coded)堆出来的,越更新越臃肿,默认上传数据、权限过滤跟闹着玩似的,早该换了
关于安全性的争议
- 一方说这权限过滤就是个摆设,echo git | bash都能绕过,默认还直连云端,这就是在给黑客递刀。
- 另一方反驳说命令过滤本来就不是为了防黑客的,是为了“引导AI别乱来”。真怕死就自己套个Docker或沙箱,别指望这工具自带金钟罩
关于替代品的讨论
- 吵到最后其实都是在安利替代品。推荐最多的是 Pi(或者套了壳的OhMyPi),都说它更稳、设计更走心。Codex 也有人提,说它内存占用比OpenCode小得多。还有人提到Maki、Kilo这些,都是看到OpenCode这堆问题后自己搞的轻量级平替。