OpenCode

OpenCode 技术文档

开源 AI 编程助手 —— 无供应商锁定的 Claude Code 替代方案,支持 75+ LLM 提供商

MIT License 100% 开源 TypeScript Terminal TUI LSP 支持

一、项目概览

1.1 项目定位

OpenCode 是一款开源的 AI 编程助手,定位为 Claude Code 的开源替代品。它专为开发者设计,提供自主代码生成、修改和项目管理能力,同时避免供应商锁定。

🎯

目标场景

终端环境下的智能编程辅助,支持代码分析、生成、重构和调试

👥

目标用户

偏好终端工作流的开发者,特别是 Neovim/Vim 用户群体

🔓

核心理念

开源透明、无供应商绑定、可扩展、以终端为中心

1.2 核心价值

  • 供应商无关:支持 Claude、OpenAI、Google、Azure、AWS Bedrock 以及本地模型(Ollama、LM Studio)
  • 完全透明:MIT 协议开源,代码可审计,无隐藏遥测
  • 原生 LSP 支持:开箱即用的语言服务器协议集成,提供代码定义、引用、悬停信息
  • Client/Server 架构:支持远程操作,可在服务器运行 OpenCode 并从本地连接
  • 高度可定制:自定义命令、工具、技能、Agent、主题

1.3 社区数据

43.8k
GitHub Stars
3.8k
Forks
471+
Contributors
633
Releases

1.4 技术栈

TypeScript
82.4%
CSS
8.6%
MDX
7.2%
Other
1.8%

核心依赖:Bun(包管理器)、Turbo(Monorepo)、Nix(配置)、SST(基础设施)

二、快速开始

2.1 系统要求

要求 说明
操作系统 macOS、Linux、Windows
终端 支持 Truecolor 的现代终端(WezTerm、Alacritty、Ghostty、Kitty、iTerm2)
LLM API Key 至少一个 LLM 提供商的 API 密钥(或使用 OpenCode Zen)

2.2 安装方式

# 官方一键安装脚本(推荐)
curl -fsSL https://opencode.ai/install | bash

安装目录优先级:$OPENCODE_INSTALL_DIR$XDG_BIN_DIR$HOME/bin$HOME/.opencode/bin

# 使用 npm
npm install -g opencode-ai@latest

# 使用 Bun
bun install -g opencode-ai@latest

# 使用 pnpm
pnpm add -g opencode-ai@latest
# macOS / Linux
brew install opencode

# 安装桌面应用(Beta)
brew install --cask opencode-desktop
# Windows - Scoop
scoop bucket add extras
scoop install extras/opencode

# Windows - Chocolatey
choco install opencode

# Arch Linux
paru -S opencode-bin

# Nix
nix run nixpkgs#opencode

# Mise
mise use -g github:sst/opencode

2.3 首次运行

进入项目目录并启动
cd your-project
opencode
配置 Provider

在 TUI 中输入 /connect 命令,选择 LLM 提供商并完成认证

推荐

新手可选择 OpenCode Zen,无需单独申请 API Key

初始化项目

运行 /init 命令,自动分析代码库并生成 AGENTS.md 配置文件

开始使用

使用 @ 符号引用文件,按 Tab 切换 Agent 模式

三、核心概念

3.1 Agent 体系

OpenCode 采用双 Agent 架构,通过 Tab 键在不同模式间切换:

🔨

Build Agent

默认模式。拥有完整的文件系统访问和命令执行权限,用于实际的代码修改和开发任务。

📋

Plan Agent

只读模式。用于代码分析和方案规划,不会修改任何文件,适合在执行前预览实施策略。

Subagent(子代理)

  • General:通过 @general 调用,处理复杂的多步骤搜索和研究任务
  • Explore:专门用于代码库探索和结构分析

3.2 Provider 支持

OpenCode 通过 AI SDK 和 Models.dev 支持 75+ LLM 提供商

类型 支持的提供商
云服务 OpenAI、Anthropic (Claude)、Google (Gemini)、Azure OpenAI、AWS Bedrock
本地模型 Ollama、LM Studio、llama.cpp
其他 Groq、Together AI、Fireworks、Mistral、Cohere 等

3.3 配置层级

配置按以下优先级覆盖(后者覆盖前者):

  1. 全局配置~/.config/opencode/
  2. 项目配置.opencode/(项目根目录)
  3. 工作目录配置.opencode/(当前工作目录)

3.4 主题系统

内置 10+ 预设主题,支持自定义:

system tokyonight catppuccin gruvbox nord everforest ayu kanagawa one-dark matrix
// opencode.json
{
  "theme": "tokyonight"
}

四、配置详解

4.1 配置文件结构

主配置文件为 opencode.json,可放置于全局或项目目录:

{
  // 主题设置
  "theme": "tokyonight",

  // Provider 配置
  "provider": {
    "anthropic": {
      "options": {
        "baseURL": "https://api.anthropic.com/v1"
      }
    }
  },

  // 权限控制
  "permission": {
    "edit": "ask",
    "bash": "ask"
  },

  // 工具配置
  "tools": {
    "lsp": true,
    "webfetch": true
  }
}

4.2 Provider 配置

认证方式

API 密钥存储于 ~/.local/share/opencode/auth.json,通过 /connect 命令配置

自定义 Provider 示例

{
  "provider": {
    "my-provider": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "My Custom Provider",
      "options": {
        "baseURL": "https://api.myprovider.com/v1",
        "apiKey": "{env:MY_API_KEY}"
      },
      "models": {
        "my-model": {
          "name": "My Model"
        }
      }
    }
  }
}
环境变量语法

使用 {env:VARIABLE_NAME} 引用环境变量,避免在配置文件中硬编码密钥

4.3 权限系统

OpenCode 提供细粒度的权限控制,每个工具支持三种权限级别:

级别 说明
allow 允许操作,无需用户确认
ask 每次操作前询问用户确认
deny 禁止该操作

Bash 命令粒度控制

{
  "permission": {
    "bash": {
      "git *": "allow",
      "npm test": "allow",
      "rm *": "ask",
      "terraform *": "deny"
    }
  }
}

特殊权限项

  • doom_loop:防止无限循环,当相同工具调用连续重复 3+ 次时触发确认
  • external_directory:保护工作目录外的文件修改

五、内置工具

OpenCode 提供 13 个内置工具,LLM 可调用这些工具与代码库交互:

工具 功能 说明
bash 执行 Shell 命令 运行终端操作如 npm installgit status
edit 修改文件 通过精确文本匹配进行文件编辑
write 创建/覆写文件 创建新文件或完全覆写现有文件
read 读取文件 支持指定行范围读取大文件
grep 正则搜索 在代码库中快速搜索内容
glob 文件模式匹配 使用 glob 模式查找文件如 **/*.js
list 目录列表 列出目录内容,支持 glob 过滤
lsp 代码智能 提供定义跳转、引用查找、悬停信息(实验性)
patch 应用补丁 应用 diff/patch 文件到代码
skill 加载技能 加载 SKILL.md 文件内容
todowrite 创建任务 在复杂操作中管理进度跟踪
todoread 读取任务 读取当前任务列表状态
webfetch 网页抓取 获取并读取网页内容

工具配置

可在 opencode.json 中全局或按 Agent 配置工具启用状态:

{
  "tools": {
    "lsp": true,
    "webfetch": false,
    "mymcp_*": false  // 通配符批量控制
  }
}

六、Agent 系统

6.1 Agent 配置选项

选项 说明
description Agent 描述(必填)
mode primary / subagent / all
model 覆盖默认模型,格式:provider/model-id
prompt 自定义系统提示词,支持 {file:./path} 引用
temperature 创造性控制(0.0-1.0),越低越确定性
maxSteps 限制代理迭代次数
tools 启用/禁用特定工具
permission 设置工具访问级别

6.2 创建自定义 Agent

方式一:JSON 配置

{
  "agent": {
    "reviewer": {
      "description": "Code review specialist",
      "mode": "subagent",
      "model": "anthropic/claude-3-opus",
      "temperature": 0.2,
      "tools": {
        "edit": false,
        "write": false
      }
    }
  }
}

方式二:Markdown 文件(~/.config/opencode/agent/reviewer.md

6.3 Temperature 指南

  • 0.0 - 0.2:分析任务,需要精确和一致性
  • 0.3 - 0.5:常规开发,平衡创造性和准确性
  • 0.6 - 1.0:头脑风暴,需要多样化输出

七、自定义扩展

7.1 自定义命令

创建方式:在 .opencode/command/ 目录下添加 Markdown 文件,或在 opencode.json 中定义

// opencode.json
{
  "command": {
    "test": {
      "template": "Run all tests for $ARGUMENTS and report failures",
      "description": "Run tests for specified module"
    }
  }
}

命令特性

  • 参数替换:$ARGUMENTS$1$2
  • Shell 输出注入:!`command` 语法
  • 文件引用:@filename 表示法
  • 可覆盖内置命令

7.2 自定义工具

使用 TypeScript/JavaScript 定义自定义工具:

// .opencode/tool/database.ts
import { tool } from "@opencode-ai/plugin"

export default tool({
  description: "Execute database queries",
  args: {
    query: tool.schema.string().describe("SQL query to execute")
  },
  async execute(args) {
    // 实现逻辑
    return { result: "Query executed" }
  }
})

7.3 Skills(技能)

Skills 是可复用的指令集,存放于 .opencode/skill/<name>/SKILL.md

---
name: git-release
description: Create consistent releases and changelogs
license: MIT
---

## Instructions
When creating a release:
1. Update CHANGELOG.md
2. Bump version in package.json
3. Create git tag
...

命名规则

  • 1-64 字符
  • 仅小写字母、数字、连字符
  • 不能以连字符开头或结尾
  • 目录名必须与 name 字段匹配

八、完整实战教程

本教程将引导你从零开始,完成 OpenCode 的完整工作流程。

教程目标

使用 OpenCode 为一个 Node.js 项目添加用户认证功能

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

预期结果:终端显示安装成功,opencode --version 返回版本号

配置 LLM Provider
# 启动 OpenCode
cd your-project
opencode

# 在 TUI 中执行
/connect

选择 Provider(如 OpenAI),输入 API Key 完成认证

预期结果:显示 "Connected to OpenAI" 或类似提示

初始化项目配置
/init

预期结果:生成 AGENTS.md 文件,包含代码库分析结果

使用 Plan Agent 分析需求

Tab 切换到 Plan 模式,输入:

分析当前项目结构,规划添加 JWT 用户认证功能的实现方案
需要包括:用户模型、注册/登录接口、中间件

预期结果:获得详细的实施计划,但不会修改任何文件

切换到 Build Agent 实施

Tab 切换回 Build 模式,批准计划并开始实施:

按照上述计划,实现用户认证功能

每个文件修改前会请求确认

引用特定文件进行修改
@src/routes/auth.js 添加密码重置端点

使用 @ 语法精确指定要修改的文件

撤销与重做
# 撤销上一次修改
/undo

# 重做被撤销的修改
/redo
添加自定义命令

创建 .opencode/command/auth-test.md

---
description: Run authentication tests
---
Run all tests in src/__tests__/auth/ and report failures with suggestions

使用 /auth-test 调用

切换主题
/theme catppuccin

预期结果:TUI 界面切换为 Catppuccin 配色

分享对话
/share

预期结果:生成可分享的对话链接

教程完成

你已掌握 OpenCode 的核心工作流程!可继续探索自定义工具、远程模式等高级功能。

九、最佳实践

9.1 工作流程建议

  • 先 Plan 后 Build:复杂任务先用 Plan Agent 分析,确认方案后再切换到 Build
  • 精确引用:使用 @filepath 明确指定目标文件,减少误操作
  • 分步执行:大型重构分解为小步骤,每步验证后再继续
  • 善用 /undo:出错时立即撤销,避免错误累积

9.2 性能优化

  • 合理配置 maxSteps 限制迭代次数
  • 对大型代码库,使用 globgrep 工具而非全量读取
  • 启用 LSP 获得更精确的代码智能,减少不必要的搜索

9.3 安全注意事项

  • 生产环境 API Key 使用环境变量,不硬编码
  • 敏感命令(如 rm、数据库操作)设置为 ask 权限
  • 启用 external_directory 保护,防止修改工作目录外文件
  • 定期审计 .opencode/ 中的自定义工具代码

9.4 故障排除

问题 解决方案
主题颜色异常 确认终端支持 Truecolor:echo $COLORTERM 应返回 truecolor
Provider 连接失败 检查 API Key 和网络代理设置,尝试配置 baseURL
LSP 不工作 确认对应语言的 Language Server 已安装并在 PATH 中
Skill 不显示 验证 SKILL.md 大小写、frontmatter 格式、命名规则

十、资源与参考

10.1 官方资源

10.2 社区渠道

10.3 相关项目对比

特性 OpenCode Claude Code
开源 ✅ MIT ❌ 闭源
Provider 支持 75+ 提供商 仅 Anthropic
LSP 支持 ✅ 原生
远程操作 ✅ Client/Server
界面 Terminal TUI Terminal TUI
可定制性 高(命令/工具/技能/Agent)

10.4 贡献指南

如需贡献代码,请参阅: