跳到主内容
快讯直播
AI智模界
教程

上手 OpenCode 2.0:终端里的开源编码智能体

适用场景

这套方案适合已经习惯在终端里干活、希望把 AI 编码能力装进自己仓库的开发者:不想被某一家云端 IDE 绑定,想用自有或自建的模型 API(包括公司内网的 OpenAI 兼容网关),同时需要一套能审计、能限权的自动化改动流程。它解决的问题是:让"读仓库 → 改代码 → 跑测试 → 提交"这条链路在终端里闭环,而不是在浏览器里复制粘贴。

环境与前置条件

  • 操作系统:macOS、Linux 均可;Windows 建议在 WSL2 里跑,原生 PowerShell 的体验以官方文档为准。
  • 运行时:需要 Node.js(LTS 版本即可)用于 npm 安装方式;如果用官方安装脚本,脚本会自行处理依赖。具体最低版本以官方文档当前版本为准。
  • 终端:支持 256 色的现代终端(iTerm2、Windows Terminal、Ghostty、Kitty 等),TUI 界面依赖终端转义序列,老旧终端可能出现花屏。
  • 磁盘:CLI 本体占用很小,预留 500MB 给依赖和缓存即可。
  • 模型侧:一个可用的 API Key(Anthropic、OpenAI、Google 或任意 OpenAI 兼容端点),并确认该端点支持流式输出与工具调用(function calling)。不支持工具调用的模型在编码任务里基本不可用。
  • Git:仓库需已初始化并至少有一次提交,方便用 git diff 检查智能体的改动。

分步骤部署

第 1 步:安装 CLI

两种常见安装方式,任选其一。

官方安装脚本:

```bash

curl -fsSL https://opencode.ai/install | bash

```

(脚本地址与安装路径以官方文档当前版本为准,安装完成后脚本会打印实际落地目录。)

npm 方式:

```bash

npm install -g opencode-ai

```

Homebrew、Scoop 等其他渠道以官方文档为准。安装完成后确认命令可用:

```bash

opencode --version

```

能打印出版本号就说明二进制已经进入 PATH。如果提示 command not found,把安装脚本打印的 bin 目录加进 shell 配置:

```bash

export PATH="$HOME/.opencode/bin:$PATH"

```

写入 ~/.zshrc 或 ~/.bashrc 后重新打开终端。

第 2 步:登录模型账号

```bash

opencode auth login

```

交互界面里会列出可选的模型提供方,方向键选择后粘贴 API Key。凭据通常保存在 ~/.local/share/opencode/auth.json,该文件权限建议保持 600:

```bash

chmod 600 ~/.local/share/opencode/auth.json

```

查看已登录的提供方:

```bash

opencode auth list

```

能看到刚登录的提供方即成功。

第 3 步:接入自有模型 API(OpenAI 兼容端点)

如果用的是公司内网网关、vLLM、Ollama、LiteLLM 这类服务,用自定义 provider 接入。项目根目录新建 opencode.json:

```json

{

"$schema": "https://opencode.ai/config.json",

"provider": {

"internal": {

"npm": "@ai-sdk/openai-compatible",

"name": "Internal Gateway",

"options": {

"baseURL": "https://your-gateway.example.com/v1",

"apiKey": "{env:INTERNAL_API_KEY}"

},

"models": {

"coding-model": {

"name": "Coding Model"

}

}

}

}

}

```

要点说明:

  • baseURL 一般要以 /v1 结尾,写错会出现 404。
  • {env:INTERNAL_API_KEY} 是配置文件的变量引用语法,避免把密钥写进 Git 仓库;配置里也支持 {file:...} 引用本地文件。
  • models 下的键名就是调用时使用的模型 ID,必须与网关实际暴露的名字一致,name 只是显示名。

设置环境变量后重启终端:

```bash

export INTERNAL_API_KEY="你的密钥"

opencode models

```

opencode models 能列出 internal/coding-model 就说明接入成功。

第 4 步:写仓库规则文件 AGENTS.md

在仓库根目录创建 AGENTS.md,这是智能体每次启动都会读取的项目说明:

```markdown

项目说明

技术栈

  • 前端:Vite + React + TypeScript
  • 后端:Node.js + Fastify
  • 测试:Vitest

约定

  • 提交信息用中文,格式 类型: 描述
  • 新增依赖前必须说明理由
  • 所有导出函数补 JSDoc
  • 不要改动 migrations/ 下的历史文件

常用命令

  • 安装依赖:pnpm install
  • 跑测试:pnpm test
  • 类型检查:pnpm typecheck

```

在 TUI 里输入 /init 也可以让智能体扫描仓库自动生成一份初稿,再手工精修。文件不超过一屏效果通常更好。

第 5 步:配置权限

默认行为以官方文档为准,建议显式声明,避免智能体在没打招呼的情况下执行破坏性命令。在同一份 opencode.json 里加:

```json

{

"$schema": "https://opencode.ai/config.json",

"permission": {

"edit": "ask",

"bash": {

"*": "ask",

"git status": "allow",

"git diff*": "allow",

"git log*": "allow",

"ls*": "allow",

"cat*": "allow",

"rm -rf*": "deny",

"curl*": "deny"

}

}

}

```

三个取值:allow 直接执行,ask 每次弹窗确认,deny 直接拒绝。规则按最长匹配优先,所以 git diff* 会盖住 *。刚开始建议全部 ask,跑顺了再逐步放开只读命令。

第 6 步:定义子智能体

子智能体适合把"只读审查""写测试""改文档"这类职责拆开,避免一个智能体既改代码又给自己打分。在项目里建 .opencode/agent/reviewer.md:

```markdown

---

description: 只读代码审查,输出问题清单,不修改任何文件

mode: subagent

temperature: 0.1

tools:

write: false

edit: false

bash: false

---

你是资深代码审查员。收到代码变更后,按以下顺序输出:

1. 逻辑错误与边界条件

2. 安全问题(注入、越权、密钥硬编码)

3. 性能问题(N+1 查询、无索引扫描)

4. 可读性建议

只输出问题清单,每条给出文件名和行号,不要贴大段代码。

```

tools 里把写、编辑、执行全部关掉,这个子智能体就只能看,不会误改。全局子智能体放在 ~/.config/opencode/agent/ 下,项目级的放在 .opencode/agent/ 下,同名时项目级覆盖全局。

第 7 步:在真实仓库里跑一次改动

先看只读能力:

```bash

opencode run "说明 src/api 目录的请求链路,列出三个可能的错误处理缺口"

```

确认无误后再让它改代码:

```bash

opencode run "给 src/utils/parseDate.ts 补单元测试,覆盖空字符串和非法格式两种情况,然后跑 pnpm test"

```

跑完检查边界:

```bash

git status

git diff

```

实测下来的边界大致是这样:单文件重构、补测试、补类型、改配置、按现有模式新增一个路由,这类任务通常一次就能跑通;跨多个服务的接口改动、需要访问数据库或线上凭据的操作、大规模重命名,建议拆成小步并人工逐步确认。大仓库里它可能只读到部分文件,改动前用 git diff 复核仍然必要。

验证部署是否成功

逐条执行,对照预期:

```bash

opencode --version

```

预期:打印版本号,无报错。

```bash

opencode models

```

预期:列表里能看到已登录提供方的模型,以及自定义 provider 下的模型 ID。

```bash

opencode run "当前仓库根目录下 package.json 的 name 字段是什么?只回答字段值"

```

预期:直接输出字段值,不带多余解释。这条命令同时验证了鉴权、模型连通性和文件读取三件事。

```bash

git status --short

```

预期:如果没有让它改动文件,这里应为空。若不为空,说明有意外写入,先看 diff 再决定是否保留。

常见报错与解决

报错信息:command not found: opencode

原因:安装目录没有加入 PATH,或安装到了当前 shell 未加载的位置。

解决:

```bash

ls ~/.opencode/bin ~/.local/bin 2>/dev/null

echo 'export PATH="$HOME/.opencode/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc

```

报错信息:401 Unauthorized 或 invalid api key

原因:密钥错误、已过期,或自定义 provider 没有读取到环境变量。

解决:

```bash

opencode auth list

echo $INTERNAL_API_KEY

export INTERNAL_API_KEY="新的密钥"

opencode auth login

```

如果是 {env:...} 引用失效,确认环境变量是在启动 opencode 的同一个 shell 里导出的。

报错信息:404 Not Found 或 model not found

原因:baseURL 少了 /v1 后缀,或者 models 下的键名与网关实际模型名不一致。

解决:直接探测端点确认可用模型名:

```bash

curl -s https://your-gateway.example.com/v1/models \

-H "Authorization: Bearer $INTERNAL_API_KEY" | head -40

```

把返回的 id 原样填进 opencode.json 的 models 键名。

报错信息:fetch failed / ETIMEDOUT

原因:公司网络需要走代理,或证书链不被信任。

解决:

```bash

export HTTPS_PROXY="http://proxy.example.com:8080"

export HTTP_PROXY="$HTTPS_PROXY"

export NODE_EXTRA_CA_CERTS="/path/to/corp-ca.pem"

```

报错信息:TUI 启动后花屏、按键错乱

原因:终端类型或 locale 不被支持。

解决:

```bash

export TERM=xterm-256color

export LANG=en_US.UTF-8

```

换用 iTerm2、Windows Terminal、Ghostty 等现代终端通常也能解决。

后续维护

备份配置。 需要备份的是 ~/.config/opencode/(全局配置与全局智能体)、~/.local/share/opencode/(凭据,注意加密保存或干脆不入备份)、以及各仓库里的 opencode.json、AGENTS.md 和 .opencode/ 目录。项目级文件直接进 Git 就好。

升级。 用 npm 安装的跟着包管理器升级,用安装脚本的重新执行一次脚本即可;升级前先记录当前版本,出问题可以回退。版本发布节奏以官方文档与仓库 release 页为准。升级后重跑一遍上面的验证命令。

日志。 界面异常时把日志级别调高并直接打到终端:

```bash

opencode --log-level DEBUG --print-logs

```

日志文件通常落在 ~/.local/share/opencode/log/ 下,具体路径以实际输出为准。日志里会包含请求元信息,分享前记得检查是否带上了密钥或内部 URL。

成本与配额。 长会话会不断累积上下文,TUI 里用 /compact 压缩历史,或直接开新会话;把 AGENTS.md 写清楚能显著减少来回追问的次数。

权限收口。 跑顺之后不要急着把 bash 全设成 allow,保留 rm -rf*、curl*、git push* 这类规则的 deny 或 ask。智能体改完代码后,人工过一遍 git diff 再提交,这条习惯比任何配置都管用。

规则文件迭代。 每次发现智能体犯了重复的错,就把对应的约束补进 AGENTS.md。这份文件是长期资产,写得越具体,后续每次任务的返工就越少。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。