OpenCode 是 MIT 许可的开源编程 Agent,源码能直接读,接哪家模型由你配。
想要一个换模型厂商不用换工具的备用 Agent,可以把它留着。
另外 OpenCode Go 套餐里的 DeepSeek 挺便宜,不过它是自部署的,不是官方服务(上次 DeepSeek 大面积宕机,它没受影响)。
一、OpenCode 是什么
OpenCode 是 Anomaly 团队开源的编程 Agent,有终端界面、桌面应用和网页版三种形态。
它和 Claude Code、Codex 在结构上有一处不同:后台跑着一个服务,终端、桌面应用、网页都只是连到这个服务上的客户端。所以终端里开一个会话,换手机浏览器也能接着看(opencode pair)。
| Claude Code | Codex | OpenCode | |
|---|---|---|---|
| 出品方 | Anthropic | OpenAI | 开源社区(Anomaly) |
| 模型 | Claude 为主 | GPT 为主,可接 DeepSeek | 不绑定,内置几十家服务商 |
| 项目说明 | CLAUDE.md |
AGENTS.md |
AGENTS.md |
| 配置文件 | settings.json |
config.toml |
opencode.json |
| 权限默认 | 改文件、跑命令都问 | 沙箱内不问 | 默认全放行,只有 .env 要问 |
二、安装与接模型
1. 安装
# macOS / Linux
curl -fsSL https://opencode.ai/v2/install | bash
# 或者用 npm(需要 Node.js)
npm install -g @opencode/cli
2. 接入 DeepSeek
DeepSeek 是 OpenCode 内置的服务商,不用写配置,两种接法任选。
方式一,环境变量。推荐这个,第一本书配 Claude Code 时用的就是这个做法:
# 写进 ~/.zshrc 或 ~/.bashrc
export DEEPSEEK_API_KEY="sk-你的key"方式二,在界面里输入:启动 OpenCode 后输入 /connect,搜索 DeepSeek,粘贴 Key。
我用的是方式一。输入 /connect 搜 deepseek,能看到 DeepSeek 已经是连接状态,右边写着它从哪个环境变量读到 Key:

⚠️ 改了环境变量不生效:OpenCode 在后台跑着一个服务,这个服务是第一次启动时带着当时的环境变量起来的。你后来再
export,它看不到。运行一次opencode service restart就好。这是我实测踩到的坑。
然后输入 /models,搜 deepseek,选一个模型:

列表里有两类。服务商写着 DeepSeek 的,走你自己的 Key,按 DeepSeek 的价格计费;写着 OpenCode 的,是 OpenCode 官方提供的模型,要先在 /connect 里连上 OpenCode 账号,其中几个限时免费,适合练手(免费名单经常变)。
下面还有几个写着 Amazon Bedrock 的,是别的云平台托管的 DeepSeek 模型,国内读者用不上,不用管。
想把默认模型固定下来,在项目根目录新建 opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"model": "deepseek/deepseek-flash"
}模型名写成「服务商/模型」,DeepSeek 的两个模型是 deepseek/deepseek-flash 和 deepseek/deepseek-v4-pro。
3. 第一次启动
cd your-project
opencode
输入框下面显示当前用的 Agent,这时是 Build,马上会讲;旁边是当前模型,比如 DeepSeek V4.1 Flash 1017,OpenCode 显示的是完整名字。右下角 shift+tab agents 切换 Agent,ctrl+p commands 打开命令面板;左下角 1 MCP 是已连接的数量。
三、概念对照表
| 概念 | Claude Code(第一本) | OpenCode | 主要差别 |
|---|---|---|---|
| 项目说明 | CLAUDE.md |
AGENTS.md |
V2 不读 CLAUDE.md |
| 生成项目说明 | /init |
/init |
OpenCode 是引导式的 |
| Skills | .claude/skills/ |
.opencode/skills/ |
也直接读 .claude/skills/ 和 .agents/skills/ |
| 斜杠指令 | Skill + disable-model-invocation |
.opencode/commands/*.md |
指令和 Skill 是两种东西 |
| MCP | claude mcp add |
opencode.jsonc 的 mcp.servers |
默认用 Code Mode 调用 |
| 权限模式 | Shift+Tab 切换 |
没有模式,只有规则 | 默认全放行 |
| 权限规则 | allow / ask / deny |
permissions 数组,allow / ask / deny |
最后命中的规则说了算 |
| 计划模式 | 一种权限模式 | Plan Agent | Shift+Tab 在 Build 和 Plan 之间切 |
| 子代理 | .claude/agents/*.md |
.opencode/agents/*.md |
写法几乎一样,可以单独限制权限 |
| Hooks | settings.json 里的 shell 脚本 |
插件(TypeScript) | 要写代码 |
| 压缩上下文 | /compact |
自动,或 ctrl+x c |
|
| 回退 | /rewind |
ctrl+x u 撤销、ctrl+x r 重做 |
都能把文件改回去 |
| 新会话 / 切换会话 | /clear、/resume |
/new、/sessions |
输入 / 能看到所有指令,接着打字可以过滤。比如输入 /te,我自己加的 /test(进阶第 3 节)就排在第一个:

四、入门:15 分钟跑通一个工作流
还是用 order-admin 项目。跟着上一节配过 Codex 的话,很多东西不用重做。
1. AGENTS.md
项目里已经有 AGENTS.md 的话,OpenCode 直接读,什么都不用做。
没有的话,输入 /init,OpenCode 会一步步引导你生成一份。生成后照第一本第二章第4节的标准删改:只留每次都要知道的事。
⚠️ OpenCode 不读
CLAUDE.md。项目里只有CLAUDE.md的,要么复制一份成AGENTS.md,要么把内容挪进AGENTS.md,原文件里只写一行@AGENTS.md
2. 先把权限收紧
OpenCode 默认除了读 .env 要问你,其他一律放行:改文件、跑任何命令都不会问。这和 Claude Code 默认每样都问的习惯正好相反。
在 opencode.jsonc 里加上权限规则:
{
"$schema": "https://opencode.ai/config.json",
"model": "deepseek/deepseek-flash",
"permissions": [
{ "action": "shell", "resource": "git push *", "effect": "ask" },
{ "action": "shell", "resource": "rm -rf *", "effect": "deny" },
{ "action": "read", "resource": "*.env", "effect": "deny" }
]
}每条规则三个字段:
| 字段 | 意思 | 例子 |
|---|---|---|
action |
什么操作 | shell 跑命令、edit 改文件、read 读文件 |
resource |
对什么 | 命令、文件路径,支持 * 通配 |
effect |
怎么处理 | allow 放行、ask 问你、deny 拒绝 |