背景
之前我写过一篇《使用 Claude Code + 火山方舟 Coding Plan 自动写 Hexo 博客》,介绍了如何通过 LiteLLM 代理把 Claude Code 接到方舟模型上。那套方案能跑,但用下来越来越别扭,最后我彻底把 Claude Code 换成了 OpenCode。
这篇文章讲两件事:
- 为什么我要离开 Claude Code——它在「登录」「联网校验」「数据上报」这些地方的做法实在让人无法忍受;
- 如何用 OpenCode 直连火山方舟 Coding Plan,搭建一套干净、可控、无需代理的本地编程工作流。
严厉谴责:Claude Code 到底做错了什么
Claude Code 作为一个命令行工具,本应该是「我给它密钥、它帮我干活」这么简单的关系。但实际体验完全不是这样,下面这些行为我必须明确批评。
1. 强制登录,把开发工具绑成账号牢笼
一个本地 CLI 工具,凭什么要求我先登录账号才能用?
- 即使你已经有合法的 API Key 或第三方网关,官方版本依然不断把你往「登录 Claude 账号 / 订阅」的路径上引导;
- 登录态、订阅校验和工具功能深度耦合,账号一旦异常,本地工具直接罢工;
- 这本质上是把开发者工具变成账号的人质——你的生产力被绑定在它的账号体系上,而不是绑定在你自己的密钥和代码上。
工具就该是工具。强制登录是在用「身份」绑架「能力」,这是第一条不可接受的地方。
2. 频繁联网校验,离线环境直接瘫痪
Claude Code 在使用过程中会反复回连官方服务器做各种校验。带来的后果是:
- 网络稍有波动,命令就卡住、超时、报错;
- 在内网、隔离环境、弱网条件下几乎没法稳定工作;
- 你根本不清楚每一次「校验」背后到底传了什么、传了多少。
一个编程助手,本职工作是读代码、写代码、跑命令,不应该把「能不能联上官方服务器」当成能不能干活的前提。
3. 不透明的数据发送与「邮件 / 通知」骚扰
最让人不安的是数据流向的不透明:
- 工具会在你不完全知情的情况下向外发送遥测、使用统计、账号相关信息;
- 各种账号通知、营销邮件、状态推送随之而来,你的邮箱成了它的广播渠道;
- 对于在公司项目、私有仓库里使用的人来说,这种「默认上报 + 默认通知」的设计是实打实的合规与隐私风险。
我用一个 CLI 写代码,不代表我同意把项目信息、使用行为打包发回去,更不代表我想收一堆邮件。默认就该是静默、本地、最小化数据,而不是反过来让用户去一项项关闭。
小结
强制登录、频繁联网校验、不透明的数据发送和邮件骚扰——这三点叠加,让 Claude Code 从一个「好用的工具」变成了一个「我必须时刻提防的工具」。对开发者来说,可控性和隐私比那一点点模型体验上的差异重要得多。所以我换到了 OpenCode。
为什么选 OpenCode
OpenCode 是一个开源的终端 AI 编程工具,定位和 Claude Code 类似,但在我最在意的几点上做得更好:
- 开源透明:代码公开,行为可审计,不存在「偷偷干了什么」的疑虑;
- 不强制登录:你只需要给它一个 API Key(或本地模型),不需要注册它家的账号;
- 原生支持 75+ 提供商:基于 AI SDK 和 Models.dev,包括各种 OpenAI 兼容网关;
- 直连方舟,无需代理:火山方舟 Coding Plan 提供的是 OpenAI 兼容接口,OpenCode 可以直接对接,彻底干掉上一篇文章里的 LiteLLM 中间层;
- 配置即文件:所有配置都在
opencode.json里,清清楚楚,可以纳入版本管理(注意别把密钥提交上去)。
对比上一套 Claude Code + LiteLLM 方案,OpenCode 直连方舟少了一整个代理进程,少了一层协议转换,链路更短、更稳、更好排查。
整体架构
相比之前「Claude Code → LiteLLM → 方舟」的三段式,OpenCode 的链路简单到几乎没有中间环节:
1 | OpenCode CLI |
不需要 LiteLLM,不需要协议转换,不需要本地额外起一个代理端口。
迁移步骤
第一步:安装 OpenCode
1 | # 推荐方式(macOS / Linux) |
安装完成后执行 opencode --version 确认可用。
第二步:获取火山方舟 Coding Plan 的接入信息
登录火山方舟控制台;
开通 Coding Plan,在控制台获取 Coding Plan 专用的 API Key;
记录下 Coding Plan 的 Base URL,形如:
1
https://ark.cn-beijing.volces.com/api/coding/v3
注意:方舟 Coding Plan 的具体模型列表、Base URL 和定价可能随时间变化,请以火山方舟官方文档为准。
第三步:在 OpenCode 中配置方舟自定义 Provider
OpenCode 把任意 OpenAI 兼容服务都当作「自定义 Provider」处理,使用 @ai-sdk/openai-compatible 这个 npm 包即可。
编辑 ~/.config/opencode/opencode.json:
1 | { |
关键字段说明:
provider.volcengine-plan:自定义 Provider 的 ID,名字随意,但要和顶层model的前缀对应;npm:固定用@ai-sdk/openai-compatible,OpenCode 会用它走 OpenAI 协议;options.baseURL:方舟 Coding Plan 的接口地址;options.apiKey:用{env:ARK_API_KEY}从环境变量读取,绝对不要硬编码真实密钥;models:列出你要用的模型及其上下文 / 输出上限,模型名即方舟侧的模型 ID;- 顶层
model:设置默认模型,格式为<provider-id>/<model-id>,例如volcengine-plan/glm-5.2。
第四步:通过环境变量注入密钥
1 | # 临时使用 |
推荐用 direnv 在项目目录自动加载,避免每次手动 export:
1 | # 在项目根目录创建 .env(确保已被 gitignore) |
安全提醒:OpenCode 的
opencode.json是纯文本配置,很容易被同步到 Git 或 dotfiles 仓库。千万不要把真实apiKey直接写在options.apiKey里,一律用{env:...}引用环境变量。
第五步:验证并选择模型
启动后用内置命令确认一切就绪:
1 | opencode |
进入 TUI 后:
- 输入
/models,应该能看到Volcano Engine下列出的所有模型; - 选择
glm-5.2(或你常用的模型); - 随便提个需求测试一下,比如「列出当前目录结构并解释项目用途」。
用 OpenCode 写 Hexo 博客
迁移完成后,写博客的流程和之前几乎一样,只是把 claude 命令换成了 opencode。
创建新文章
在 Hexo 项目目录下启动:
1 | cd /path/to/hexo_source_file |
然后用自然语言描述需求:
1 | 帮我创建一篇关于 Unity Addressables 资源管理最佳实践的博客, |
OpenCode 会读取项目里的 AGENTS.md / CLAUDE.md 约定,按照你现有博客的风格创建文章、填好 Front Matter 并生成内容。
提示:OpenCode 默认读取项目根目录的
AGENTS.md(也兼容CLAUDE.md)作为项目规则。把「永久链接格式」「文章目录」「写作风格」「安全规则」写进去,可以让生成结果更稳定。
本地预览与部署
1 | 创建一篇关于 Lua 热更新方案对比的博客,然后执行 hexo server 让我本地预览 |
确认无误后:
1 | 帮我执行 hexo deploy 部署博客 |
Claude Code vs OpenCode 对比
| 维度 | Claude Code | OpenCode |
|---|---|---|
| 是否强制登录 | 强引导登录 / 订阅 | 不需要,给 Key 即用 |
| 接方舟 Coding Plan | 需要 LiteLLM 代理转协议 | 原生直连,无需代理 |
| 配置方式 | 散落在环境变量 / settings.json | 集中在 opencode.json |
| 数据 / 遥测 | 不透明、默认上报 | 开源可审计 |
| 链路复杂度 | CLI → 代理 → 方舟 | CLI → 方舟 |
安全清单(务必照做)
无论用哪个工具,密钥安全的底线都不能松:
- 密钥只走环境变量:配置文件里一律用
{env:ARK_API_KEY},绝不硬编码; - gitignore 排除敏感文件:
.env、.envrc、包含密钥的本地配置都要忽略; - 检查你的全局配置:
~/.config/opencode/opencode.json如果同步到了 dotfiles 仓库,确认里面没有明文apiKey; - 方舟侧加额度上限:为 Coding Plan 的 Key 设置调用额度,泄漏后也不至于产生高额费用;
- 定期轮换密钥。
总结
从 Claude Code 迁移到 OpenCode,对我来说不只是换个工具,而是把「工具应该服从用户」这条原则重新拿回来:
- 不被强制登录绑架;
- 不被频繁联网校验拖累;
- 不被默认上报和邮件骚扰侵犯隐私;
- 还顺手干掉了 LiteLLM 代理,直连方舟 Coding Plan,链路更短更稳。
如果你也在用方舟 Coding Plan,并且受够了 Claude Code 那套账号 + 上报的玩法,OpenCode 值得一试。核心原则不变:密钥永远只通过环境变量传递,绝不出现在代码、配置文件或 Git 仓库中。