OpenCode Deep Dive

Go 原生终端 AI 编程助手深度解析 -- opencode-ai/opencode

ARCHIVED -- 后继者 Crush Go 100% + Bubble Tea TUI MIT License 11K+ Stars 10+ Provider 12 内置工具 Last: v0.0.55

M0 项目概览与定位

Go 原生终端 AI 编程助手,Charm 生态集大成之作。已归档,但其架构设计极具学习价值。

项目背景

OpenCode 是由 opencode-ai 团队(后并入 Charm 团队)开发的 Go 原生终端 AI 编程智能体。项目在 2024-2025 年快速发展,积累了 11K+ GitHub Stars,但在 2025 年被标记为 ARCHIVED,团队资源转向其后继项目 Crush

最终版本为 v0.0.55,100% Go 语言实现,深度使用 Charm 生态(Bubble Tea / Lip Gloss / Glamour)构建终端 UI。尽管已归档,其多 Provider 统一抽象、LSP 集成、SQLite 持久化等设计理念值得深入学习。

OpenCode 是 CLI AI 编程助手赛道中唯一的 Go 原生 实现(Claude Code 用 TypeScript,Aider 用 Python,Codex CLI 用 TypeScript)。Go 的编译型特性带来了极快的启动速度和极低的内存占用,但也意味着放弃了 Node/Python 生态中丰富的 AI SDK。OpenCode 通过自建 Provider 抽象层解决了这一问题。

核心差异化

维度OpenCodeClaude CodeAider
语言Go 100%TypeScript/NodePython
TUI 框架Bubble Tea (Charm)Ink (React)Rich
Provider 数量10+ (含 Copilot)Anthropic 为主多 Provider
免费使用GitHub Copilot 集成需付费 API需付费 API
持久化SQLite + 迁移JSON 文件Git History
LSP 集成内置完整 LSP 客户端
代码搜索Sourcegraph 内置Grep/GlobGrep
主题系统11 个内置主题单一风格单一风格
System Prompt双策略 (Anthropic/OpenAI)单策略单策略
MCP 支持stdio + SSEstdio
状态ARCHIVED活跃维护活跃维护

技术栈一览

核心依赖
Go 1.23+ + Bubble Tea + Lip Gloss + Glamour
数据与通信
SQLite (modernc) + sqlc (codegen) + goose (migration) + SSE
CLI 与协议
Cobra CLI + LSP Protocol + MCP (mcp-go) + Sourcegraph API

信息来源

GitHub Repo Official Site README Bubble Tea Lip Gloss Glamour

vs Claude Code 对比验证

上方对比表已涵盖 M0 级别的核心差异。需注意:Claude Code 的 MCP 支持已扩展至 stdio + SSE(与 OpenCode 一致),LSP 集成在 Claude Code 中也已实现(diagnostics + rename/definition/references)。表中"无"的标注反映的是较早版本的状态。

M1 核心架构

Go monorepo 结构 + Charm 生态 TUI + 4 Agent 角色协作,理解 OpenCode 的骨架。

目录结构

cmd/ Cobra CLI 入口点,命令行参数解析 Entry
app/ App struct -- 组装所有服务的中枢 Orchestrator
llm/ agent/ (Agent Loop) + provider/ (Provider Adapters) Core
tui/ Bubble Tea TUI -- 对话/日志/会话/命令面板 Presentation
lsp/ Language Server Protocol 客户端,编译器诊断 Integration
db/ SQLite + goose 迁移 + sqlc 代码生成 Persistence
mcp/ MCP 客户端 -- stdio + SSE 传输 (mark3labs/mcp-go) Extension

4 Agent 角色

OpenCode 采用 多角色 Agent 设计,4 个 Agent 各司其职,每个 Agent 可独立配置 model、maxTokens、reasoningEffort:

Coder (主 Agent)
  • 核心编程 Agent,执行所有代码编辑任务
  • 拥有全部 12 个工具的访问权限
  • 可以读写文件、执行 bash、调用 sub-agent
  • 默认使用最强模型 (Claude/GPT-4o)
Task (Sub-Agent)
  • 只读 sub-agent,由 Coder 通过 agent 工具调用
  • 只能使用读取类工具(view/glob/grep/ls)
  • 用于复杂的上下文收集和分析任务
  • 避免 sub-agent 意外修改代码
Title (自动命名)
  • 自动为会话生成简短标题
  • 在首次用户消息后触发
  • 使用轻量模型节省 token
  • 标题限制 80 字符以内
Summarizer (自动摘要)
  • 当上下文达到 95% maxTokens 时自动触发
  • 压缩历史对话为精简摘要
  • 即 Auto Compact 机制
  • 保持关键上下文不丢失

Agent Loop 流程

User Input TUI / CLI --prompt LLM Provider Anthropic/OpenAI/... AGENT LOOP Process Response Execute Tools tool_results fed back to LLM File Tools view / write / edit / patch Search Tools glob / grep / ls Exec Tools bash / fetch Intelligence Tools diagnostics / sourcegraph / agent Permission Layer Auto-approve safe commands | Single grant | Session-persistent grant | Forbidden list Glamour Markdown Render

双 System Prompt 策略

OpenCode 根据 Provider 类型选择不同的 System Prompt 风格,这是一个独特的设计:

Anthropic Style

用于 Anthropic / Bedrock 等 Claude 系 Provider:

  • XML 标签结构化 (<tool_instructions>)
  • 强调 "thinking" 和 "reasoning"
  • 详细的工具使用规范
  • 匹配 Claude 的训练风格
OpenAI Style

用于 OpenAI / Azure / Copilot / 其他 Provider:

  • Markdown 格式化
  • 更简洁的指令结构
  • 适配 GPT 系列的理解方式
  • 共享相同的工具定义

双 System Prompt 策略是 OpenCode 的一个产品级洞察:不同模型家族对 prompt 格式有不同偏好。Anthropic Claude 更擅长解析 XML 结构,而 OpenAI GPT 更适应 Markdown。这种适配让 OpenCode 能在不同 Provider 间获得更一致的表现,而非一刀切使用同一个 prompt。

Charm 生态集成

用途在 OpenCode 中的角色
Bubble TeaTUI 框架 (Elm Architecture)整个终端 UI 的骨架,Model-Update-View 循环
Lip Gloss终端样式引擎颜色/边框/布局/主题系统的实现基础
GlamourMarkdown 渲染器将 LLM 输出的 Markdown 美化渲染到终端
Huh表单组件权限确认对话框、输入交互

vs Claude Code

维度OpenCodeClaude Code
语言与运行时Go + Bubble Tea TUI(单二进制,零运行时依赖)TypeScript + Node.js(需安装 Node)
System Prompt双策略(Anthropic XML / OpenAI Markdown)按 Provider 适配单策略,针对 Claude 深度优化
Agent 角色4 种(coder / task / title / summarizer)多种 Sub-Agent(general / Explore / Plan 等)
模型集成多 Provider 广度覆盖Anthropic 深度集成,Extended Thinking 等独有能力
OpenCode 胜出
  • 零依赖单二进制,启动快、部署简单
  • 双 Prompt 策略按 Provider 优化,多模型表现更一致
Claude Code 胜出
  • 更深度的模型集成(Extended Thinking、Token Counting 等)
  • 更丰富的 Sub-Agent 类型,任务分解更精细

M2 核心功能模块

12 个内置工具 + LSP 集成 + Sourcegraph 搜索 + Auto Compact + Custom Commands + 11 主题。

12 个内置工具

OpenCode 的工具分为 4 类:文件操作、搜索导航、执行外部命令、智能分析。

bash
view
write
edit
patch
fetch
sourcegraph
diagnostics
agent
工具类别功能关键参数
bash执行执行 shell 命令command, timeout, description
glob搜索按 glob 模式搜索文件pattern, path
grep搜索在文件中搜索文本内容pattern, path, include
ls搜索列出目录内容path
view文件查看文件内容(支持行范围)file, offset, limit
write文件创建新文件或完整覆写file, content
edit文件精确编辑(old_string/new_string)file, old_string, new_string
patch文件应用统一 diff 格式补丁file, diff
fetch网络HTTP GET 获取 URL 内容url
sourcegraph智能Sourcegraph 全球代码搜索query
diagnostics智能获取 LSP 编译器诊断信息(自动从 LSP 获取)
agentAgent调用只读 Task sub-agentprompt

Sub-Agent 架构

agent 工具是 OpenCode 实现多 Agent 协作的方式。Coder Agent 可以将复杂的信息收集任务委派给 Task Agent:

Sub-Agent 调用链
Coder Agent --agent tool--> Task Agent --result--> Coder Agent

Task Agent 限制:只能使用 view / glob / grep / ls 四个只读工具,无法执行 bash 或修改文件。这是安全设计 -- 防止 sub-agent 产生意外副作用。

LSP 集成

OpenCode 内置了完整的 Language Server Protocol 客户端,这在 CLI AI 编程助手中是独一无二的功能:

LSP 集成让 AI Agent 拥有了"编译器视角"。传统 CLI Agent 只能通过执行 go buildtsc 来获取错误信息(需要等待编译完成),而 LSP 提供增量、实时的诊断,可以在文件保存后毫秒级获得反馈。这大幅加速了 edit-check-fix 循环。

Sourcegraph 代码搜索

内置 Sourcegraph 搜索工具让 Agent 可以搜索 全球开源代码库,用于:

Auto Compact (自动摘要)

Auto Compact 机制详解
1/4
Step 1: Token 监控
Agent 在每次 LLM 调用前,计算当前上下文占用的 token 数。这个值包括 system prompt、历史消息、工具定义等所有内容。
Step 2: 阈值触发
当 token 使用量达到 Agent 配置的 maxTokens95% 时,自动触发 Summarizer Agent。这个 95% 阈值是硬编码的,留出 5% 的缓冲空间。
Step 3: Summarizer 压缩
Summarizer Agent 接收当前全部历史消息,生成精简摘要。摘要保留关键信息:当前任务目标、已完成的步骤、关键发现和决策、未完成的待办事项。
Step 4: 上下文替换
摘要替换历史消息,Agent Loop 继续执行。用户感知不到这个过程,但 Agent 的"记忆"从完整历史变成了压缩摘要。这类似于 Claude Code 的 /compact 命令,但 OpenCode 是全自动触发的。

Custom Commands 系统

OpenCode 支持用户自定义命令,类似 Claude Code 的 Skills,通过 Markdown 文件定义:

# 命令文件位置 ~/.opencode/commands/ # 全局命令 .opencode/commands/ # 项目级命令 # 文件名即命令名 # 例如: review.md -> /review 命令 # 支持的特殊指令: $VARIABLE # 参数占位符,运行时提示输入 RUN <command> # 执行 shell 命令并将输出注入上下文 READ <file> # 读取文件内容并注入上下文

示例:代码审查命令

# .opencode/commands/review.md 请审查以下代码变更: RUN git diff --cached 重点关注: 1. 安全漏洞 2. 性能问题 3. 代码风格 4. 潜在的 bug 请给出改进建议。

11 个内置主题

OpenCode 提供了丰富的主题选择,全部基于 Lip Gloss 实现:

Catppuccin
Dracula
Gruvbox
Tokyo Night
One Dark
Monokai
Material
Nord
Solarized
OpenCode
Default

vs Claude Code

维度OpenCodeClaude Code
LSPdiagnostics 为主更完整(rename / definition / references / diagnostics)
代码搜索Sourcegraph 内置(全网公开代码搜索)GitHub 搜索(gh CLI / MCP,仅限 GitHub)
主题11 个内置主题(Catppuccin / Dracula / Tokyo Night 等)无主题系统
自动 Compact95% 阈值触发接近上下文上限时触发(类似)
自定义命令Custom Commands(.md 文件 + $VARIABLE 参数)Skills 系统(更强大但概念类似)
编辑机制OmO: 哈希锚定编辑 + 5 并行 Agent + AST-Grep 25 语言Content-match 编辑(架构层面避免行号漂移)
OpenCode 胜出
  • Sourcegraph 搜索范围更广(全平台公开代码,非仅 GitHub)
  • 11 个精美主题,终端视觉体验远超 Claude Code
  • OmO Harness 潜力巨大:哈希锚定编辑让弱模型成功率提升 10 倍
Claude Code 胜出
  • LSP 集成实际更完整(rename / definition / references 全支持)
  • Content-match 编辑设计上更可靠,无需行号即可避免漂移问题

M3 安全与权限

Bash 安全机制 + 3 级权限模型 + 输出截断 -- 保障 Agent 执行安全。

Bash 工具安全机制

OpenCode 对 bash 工具实施了严格的安全策略,通过黑名单白名单机制控制命令执行:

禁止执行的命令 (Forbidden)
  • curl -- 防止任意网络请求
  • wget -- 同上
  • nc (netcat) -- 防止网络探测
  • telnet -- 防止远程连接
  • chrome -- 防止启动浏览器
  • firefox -- 同上

这些命令被完全禁止,即使用户授权也无法执行

自动批准的命令 (Auto-Approved)
  • ls -- 列出目录
  • echo -- 输出文本
  • pwd -- 显示当前目录
  • git status -- 查看仓库状态
  • git log -- 查看提交历史
  • git diff -- 查看变更

只读操作,无需用户确认即可执行

3 级权限模型

Level 1: 单次授权 (Single Grant)

用户对每个命令单独授权,执行后权限立即失效。适用于高风险操作如 rmgit push 等。

Level 2: 会话持久授权 (Session-Persistent Grant)

用户可以选择"本次会话全部允许",在当前会话中该命令不再需要确认。会话结束后权限失效。

Level 3: 自动批准 (Auto-Approve)

在配置文件中预设自动批准的命令列表。这些命令永远不需要用户确认。适合团队统一配置安全策略。

输出截断

当 bash 命令输出超过 30,000 字符 时,OpenCode 会自动截断输出以防止:

OpenCode 的安全设计体现了"默认安全"原则:禁止列表阻止已知危险命令,白名单免审批提升效率,而中间地带的命令需要用户逐次决策。对比 Claude Code 的 Bash 工具,Claude Code 使用更细粒度的正则匹配和行为分析,而 OpenCode 采用简单明确的命令名匹配 -- 实现更简单,但可能被命令别名绕过。

安全对比

维度OpenCodeClaude Code
命令拦截命令名黑名单匹配正则表达式 + 行为分析
免审批命令名白名单Glob 模式匹配
输出限制30,000 字符截断动态截断 + 省略中间内容
网络隔离禁止 curl/wget/nc不限制但有审查
Sub-Agent 限制只读工具子集权限继承 + 范围限制
复杂度简单直接复杂精细

vs Claude Code

维度OpenCodeClaude Code
命令拦截禁止命令列表(名称匹配)Tool 级权限 + Hooks 自定义策略
权限模型3 级(单次 / 会话 / 自动)类似的权限模型
输出截断30K 字符截断动态截断(也存在)
扩展安全策略Hooks 系统可自定义安全规则

两者安全模型大致对等。OpenCode 采用简单明确的命令名匹配(实现简单但可能被别名绕过),Claude Code 通过 Hooks 系统支持自定义安全策略,在可扩展性上略胜一筹。权限粒度和输出截断机制本质相似。

M4 配置与扩展

.opencode.json 统一配置 + 10+ Provider + Agent 独立配置 + MCP + LSP + contextPaths。

配置文件层级

OpenCode 使用 JSON 格式的配置文件,支持三层覆盖:

配置查找顺序(后面覆盖前面)
~/.opencode.json --> $XDG_CONFIG_HOME/opencode.json --> .opencode.json (项目根)

完整配置结构

Provider 配置 10+ 支持
{ "provider": { "anthropic": { "apiKey": "sk-ant-...", "disabled": false }, "openai": { "apiKey": "sk-..." }, "copilot": {}, // 免费!使用 GitHub Copilot "gemini": { "apiKey": "..." }, "groq": { "apiKey": "gsk_..." }, "xai": { "apiKey": "xai-..." }, "azure": { "apiKey": "...", "baseURL": "https://xxx.openai.azure.com" }, "bedrock": { "awsRegion": "us-east-1" }, "vertexai": { "project": "my-project", "location": "us-central1" }, "openrouter": { "apiKey": "..." }, "local": { "baseURL": "http://localhost:11434/v1" } } }
Agent 独立配置 4 个角色
{ "agents": { "coder": { "model": "claude-sonnet-4-20250514", "maxTokens": 200000, "reasoningEffort": "high" }, "task": { "model": "gpt-4o", "maxTokens": 128000 }, "title": { "model": "gpt-4o-mini", // 轻量模型节省成本 "maxTokens": 4096 }, "summarizer": { "model": "gpt-4o-mini", "maxTokens": 16384 } } }

每个 Agent 可以使用不同 Provider 的不同模型,实现成本优化:核心编码用最强模型,辅助任务用轻量模型。

MCP 服务器配置 stdio + SSE
{ "mcpServers": { "filesystem": { "type": "stdio", "command": "npx", "args": ["-y", "@anthropic/mcp-filesystem"], "env": { "ALLOWED_DIRS": "/home/user/projects" } }, "remote-server": { "type": "sse", "url": "http://localhost:3001/sse" } } }

使用 mark3labs/mcp-go 库实现 MCP 协议,支持 stdio 和 SSE 两种传输方式。MCP 工具会自动注册到 Agent 的可用工具列表中。

LSP 服务器配置 多语言支持
{ "lsp": { "typescript": { "command": "typescript-language-server", "args": ["--stdio"] }, "go": { "command": "gopls" }, "python": { "command": "pyright-langserver", "args": ["--stdio"] } } }
contextPaths 兼容性 跨工具兼容
{ "contextPaths": [ "CLAUDE.md", // Claude Code ".cursorrules", // Cursor ".github/copilot-instructions.md", // GitHub Copilot "AGENTS.md", // Codex CLI "CONVENTIONS.md" // 自定义 ] }

OpenCode 会自动读取这些文件作为额外上下文注入 system prompt,实现与其他 AI 编程工具的指令兼容

其他配置项 Shell / TUI
{ "shell": "zsh", // 指定 shell "tui": { "theme": "catppuccin" // 11 个内置主题之一 }, "debug": false // 调试模式 }

10+ Provider 支持

Anthropic
Claude 系列 | 付费 API
OpenAI
GPT-4o / o1 / o3 | 付费 API
GitHub Copilot FREE
通过 Copilot 免费使用 GPT-4o
Google Gemini
Gemini Pro / Ultra | 付费
Groq
Llama / Mixtral | 高速推理
xAI (Grok)
Grok 系列 | 付费 API
Azure OpenAI
企业级部署 | 自有 Endpoint
AWS Bedrock
Claude on AWS | IAM 认证
Vertex AI
Claude/Gemini on GCP
OpenRouter
统一 API 网关 | 多模型
Local (Ollama etc.)
本地模型 | 完全离线

GitHub Copilot 集成是 OpenCode 的杀手级特性:任何有 Copilot 订阅的开发者都可以免费使用 OpenCode,无需额外的 API Key。这极大降低了使用门槛。对比 Claude Code 需要 Anthropic API 付费,Aider 也需要 API 付费,OpenCode 通过 Copilot 桥接让大量开发者零成本体验 AI 编程助手。


vs Claude Code

维度OpenCodeClaude Code
Provider 数量10+ Provider 内置(最大优势)仅 Anthropic
免费使用GitHub Copilot 免费接入无 Copilot 集成
配置兼容contextPaths 同时读取 CLAUDE.md + .cursorrules + copilot-instructions仅读取 CLAUDE.md
MCP 传输stdio + SSEstdio + SSE(相同)
Hooks 系统Hooks 生命周期钩子
Skills 系统无(仅 Custom Commands)Skills 系统(可复用工作流)
OpenCode 胜出
  • 多 Provider 一站式支持,一个工具接入所有主流模型
  • GitHub Copilot 免费接入,降低使用门槛
  • 跨工具配置兼容(.cursorrules / copilot-instructions 无缝读取)
Claude Code 胜出
  • Hooks 系统:生命周期钩子可自定义安全策略、自动化流程
  • Skills 系统:可复用的工作流模板,比 Custom Commands 更强大
  • 更深度的 Anthropic 集成(模型专属特性、官方支持)

M5 使用指南

安装 / CLI / 键绑定 / 会话管理 / 非交互模式 -- 快速上手 OpenCode。

安装方式

方式命令平台
快速安装curl -fsSL https://opencode.ai/install | bashLinux / macOS
Homebrewbrew install opencode-ai/tap/opencodemacOS
AURyay -S opencodeArch Linux
Go Installgo install github.com/opencode-ai/opencode@latestAll
源码构建git clone && go build ./cmd/opencodeAll

CLI 命令与 Flags

# 启动交互式 TUI opencode # 非交互模式(单次执行) opencode -p "重构 main.go 中的 handleRequest 函数" # 指定工作目录 opencode -c /path/to/project # JSON 格式输出(适合脚本集成) opencode -p "列出所有 TODO" -f json # 静默模式 opencode -p "修复 lint 错误" -q # 调试模式 opencode -d
Flag说明
-p, --prompt非交互模式,传入 prompt 直接执行
-c, --cwd指定工作目录
-f, --format输出格式:text (默认) 或 json
-q, --quiet静默模式,减少输出
-d, --debug启用调试日志

键绑定速查

OpenCode TUI 提供了丰富的键绑定:

Ctrl+C退出程序 Ctrl+L打开日志面板 Ctrl+A打开会话列表 Ctrl+K命令面板 (Command Palette) Ctrl+O选择模型 Ctrl+N新建会话 Ctrl+X取消当前操作 i聚焦编辑器(进入输入模式) Ctrl+S发送消息 Enter发送消息(单行模式)

会话管理

OpenCode 使用 SQLite 持久化会话,每个会话包含完整的消息历史和元数据:

非交互模式

通过 -p flag 实现非交互式执行,适合 CI/CD 和脚本集成:

# 单次任务执行 opencode -p "修复所有 TypeScript 编译错误" # 配合管道使用 echo "解释这段代码的功能" | opencode -p - # JSON 输出集成到脚本 result=$(opencode -p "列出项目依赖" -f json -q) # 在 CI/CD 中使用 opencode -p "生成单元测试" -c ./src --quiet

OpenCode 的非交互模式 (-p flag) 对标 Claude Code 的 --print 模式和 Codex CLI 的单次执行模式。但 OpenCode 的 JSON 输出格式 (-f json) 让其更容易集成到自动化工作流中 -- 输出结构化数据而非自由文本,对脚本更友好。


总结:OpenCode 的产品启示

值得学习的设计决策
  • Go 原生 -- 证明了非 Node/Python 生态也能构建优秀的 AI 编程工具,启动速度和资源占用有天然优势
  • 多 Provider 统一抽象 -- 10+ Provider 适配器 + Agent 级别独立模型配置 = 极致的灵活性和成本控制
  • Copilot 免费桥接 -- 降低使用门槛到零,这是增长策略级的产品决策
  • LSP 集成 -- 在 CLI Agent 中首次实现编译器级别的代码理解,大幅提升修复质量
  • 双 System Prompt -- 按模型家族适配 prompt 格式,体现了对模型差异的深刻理解
  • SQLite 持久化 -- 比 JSON 文件更可靠、更高效,支持复杂查询和迁移
  • contextPaths 兼容 -- 读取 CLAUDE.md / .cursorrules 等,降低跨工具切换成本
值得反思的问题
  • ARCHIVED 过早 -- 11K Stars 项目归档说明团队资源有限,Go 生态 AI SDK 不如 JS/Python 成熟增加了维护成本
  • 安全模型偏简单 -- 命令名匹配容易被别名/管道绕过,生产环境需要更精细的安全策略
  • v0.0.55 未到 1.0 -- 大量 API 和配置格式可能不稳定,社区信心不足
  • Charm 生态绑定 -- 深度依赖 Bubble Tea 意味着迁移成本高,但 Charm 团队接手降低了风险

OpenCode by opencode-ai | MIT License | GitHub: opencode-ai/opencode | Successor: Crush by Charm
Page generated for learning purposes | Data sourced from GitHub repo & official docs

vs Claude Code

维度OpenCodeClaude Code
安装方式go install(单二进制,零依赖)npm install(需 Node.js 运行时)
导航交互Vim 风格(h/j/k/l)模型选择器标准导航
启动速度Go 编译二进制,毫秒级启动Node.js 启动开销
日常使用大部分方面相似

使用体验层面两者差异不大。OpenCode 的安装体验略优 — 单二进制无需运行时依赖,go install 一步到位。Vim 风格导航对终端重度用户更友好。但 Claude Code 作为活跃维护的产品,在文档完善度和社区支持上占优。