Claude Code 用了4个月,我为什么切到了 OpenCode
起因
去年11月开始用 Claude Code。说实话,代码理解能力很强,多文件重构直接一把梭。
但两件事让我动了换工具的念头。
一个是可用性。Claude API 在凌晨2点挂过两次。其中一次正好赶上线上 bug 热修复,终端卡在那转圈,整个人干瞪眼。项目等着你修,工具先趴了。
另一个是钱。大仓库重构任务,一次对话十几美元。我统计了下,一个月 CLI agent 开销 400 多刀。Sonnet 便宜是便宜,但碰到复杂任务会漏改文件,回头人工补更浪费时间。
3月初同事甩了个链接过来:OpenCode。装上跑了一周,现在变成了默认工具。
OpenCode 干了什么事
支持 75+ 模型的 AI 编程 CLI。Claude、GPT、Gemini、DeepSeek、本地 Ollama 都能接。不绑任何一家。
几个我觉得值得单独说的功能:
双 Agent 架构。 Plan Agent 只读分析代码,不动文件;Build Agent 负责改代码跑测试。Tab 切换。先看方案确认了再动手,不会上来就给你改一通。
Auto Compact。 长对话 token 越聊越多,后面又慢又贵。它会自动压缩历史,保留关键信息丢掉冗余。我在一个持续3天的重构里试了,token 消耗比 Claude Code 低了大概 40%。
内置 Session Review。 不用开另一个终端 git diff。TUI 里直接看改了哪些文件、改了什么、为什么改。
怎么装
# Homebrew
brew install anomalyco/tap/opencode
# 或者 npm
npm i -g opencode-ai@latest
项目目录下直接跑 opencode。
核心是配置多 Provider。项目根目录建 opencode.json:
{
"provider": {
"default": "anthropic",
"anthropic": {
"apiKey": "${ANTHROPIC_API_KEY}",
"model": "claude-sonnet-4-20250514"
},
"openai": {
"apiKey": "${OPENAI_API_KEY}",
"model": "gpt-4.1"
},
"ollama": {
"baseUrl": "http://localhost:11434",
"model": "llama3:70b"
}
},
"fallback": ["openai", "ollama"],
"autoCompact": true
}
fallback 是关键。Anthropic 挂了自动切 OpenAI,再不行用本地 Ollama。不用手动切,不中断工作。
实战:pg 迁移到 Drizzle ORM
上周拿 OpenCode 重构了一个 Node.js 项目的数据库层。120 个文件,30 多个查询散在各处。
Plan Agent 先扫了整个仓库:
14个 service 文件有 pool.query() 调用
3个 middleware 有事务处理
2个 cron job 有批量 INSERT
1个 migration 脚本要重写
我花5分钟确认清单没遗漏,然后切到 Build Agent 开干。
它装了 drizzle-orm 和 drizzle-kit,根据现有 SQL 建了 schema,逐个文件改写查询。跑测试挂了2个——类型不匹配和 null 处理——自己修好重跑,全绿。
14个 service 文件,3小时搞完。手动做估计两天。
费用:Claude Sonnet + Auto Compact 开着,总共 8.5 刀。之前用 Claude Code 做类似规模的迁移(Sequelize 到 Prisma),花了 22 刀。
4个坑
Ollama 上下文窗口。 Llama3 70B 默认 8K 上下文,跑大仓库分析完全不够。启动时设置:
OLLAMA_NUM_CTX=32768 ollama serve
文件权限。 OpenCode 直接用 shell 命令写文件。碰到只读文件(比如生成的 protobuf 代码)会报 "failed to write file",不会告诉你是权限问题。排查了半天。
Auto Compact 丢上下文。 对话早期提的代码风格要求,40 多轮后被压缩掉了,后面生成的代码不遵守了。解法:重要约束写到 .opencode/rules.md,这个文件每次都加载,不会被 Compact。
Node.js 运行时。 v1.3.0 之前只支持 Bun。现在支持 Node.js 了,但要加 --runtime node 参数,否则默认找 Bun。
怎么选
Claude Code 做复杂代码分析和架构设计,输出质量确实更好。可能是 Anthropic 在 System Prompt 层做了针对性调优。
OpenCode 赢在灵活。不怕单点故障,不怕某家涨价,本地模型兜底让你断网也能干活。
我现在的搭配:日常用 OpenCode(默认 Sonnet,fallback 本地 Llama),架构设计切 Claude Code 用 Opus。