OpenCode:开源中立的 Agent

4,285 字 · 预计阅读 12 分钟

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. 安装

bash
# macOS / Linux
curl -fsSL https://opencode.ai/v2/install | bash

# 或者用 npm(需要 Node.js)
npm install -g @opencode/cli

opencode --version 输出 opencode v2.0.32


2. 接入 DeepSeek

DeepSeek 是 OpenCode 内置的服务商,不用写配置,两种接法任选。

方式一,环境变量。推荐这个,第一本书配 Claude Code 时用的就是这个做法:

bash
# 写进 ~/.zshrc 或 ~/.bashrc
export DEEPSEEK_API_KEY="sk-你的key"

方式二,在界面里输入:启动 OpenCode 后输入 /connect,搜索 DeepSeek,粘贴 Key。

我用的是方式一。输入 /connect 搜 deepseek,能看到 DeepSeek 已经是连接状态,右边写着它从哪个环境变量读到 Key:

/connect 搜索 deepseek,DeepSeek 显示已连接,来源是 $DEEPSEEK_API_KEY

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

然后输入 /models,搜 deepseek,选一个模型:

/models 搜索 deepseek:DeepSeek V4.1 Flash Free(OpenCode 提供)、DeepSeek V4.1 Flash 1017、DeepSeek V4 Pro

列表里有两类。服务商写着 DeepSeek 的,走你自己的 Key,按 DeepSeek 的价格计费;写着 OpenCode 的,是 OpenCode 官方提供的模型,要先在 /connect 里连上 OpenCode 账号,其中几个限时免费,适合练手(免费名单经常变)。

下面还有几个写着 Amazon Bedrock 的,是别的云平台托管的 DeepSeek 模型,国内读者用不上,不用管。

想把默认模型固定下来,在项目根目录新建 opencode.jsonc:

jsonc
{
  "$schema": "https://opencode.ai/config.json",
  "model": "deepseek/deepseek-flash"
}

模型名写成「服务商/模型」,DeepSeek 的两个模型是 deepseek/deepseek-flash 和 deepseek/deepseek-v4-pro。


3. 第一次启动

bash
cd your-project
opencode

OpenCode 主界面:输入框下方显示当前 Agent 是 Build,模型是 DeepSeek V4.1 Flash

输入框下面显示当前用的 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 节)就排在第一个:

输入 /te 过滤后的斜杠指令列表,第一个是自定义的 /test


四、入门: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 里加上权限规则:

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 拒绝

本文是会员内容

全文 4,285 字,已试读约 30%。开通专业版可阅读全文,并解锁全部官方课程与后续更新。

开通专业版

支持 7 天无理由退款 · 早鸟价 99 元/年(售完恢复365/年)

课程中涉及的第三方项目,其著作权与商标归各自权利人所有;引用处的署名与许可见《开源与来源说明》。