opencode是什么?
在探索了 OpenCode 的各项功能与架构细节后,可以清晰地看到,OpenCode不仅仅是一个简单的代码生成工具,而是一个专为现代开发者设计的、以终端为核心的 AI 编程协作者。
OpenCode 的最大魅力在于它找到了灵活性 与功能性 的完美平衡点:
-
极致的终端融合体验 :它生来就是为了终端而设计的。通过原生的 TUI(终端用户界面),OpenCode 让开发者无需脱离熟悉的命令行环境,就能享受 AI 带来的强大能力,将 AI 操作无缝融入到日常的开发工作流中。
-
模型无关性与开源自由 :不同于许多闭源的 SaaS 产品,OpenCode 采用创新的客户端-服务器架构,支持多种主流模型(如 GPT、Claude、Gemini 等)甚至本地模型。这种"模型无关性"赋予了你绝对的选择自由,你可以根据任务需求、成本预算或隐私要求,随时切换后端模型。
-
强大的扩展生态 :基于 MCP(模型上下文协议)和插件系统,OpenCode 的能力边界被无限拓宽。它不仅能写代码,还能通过自定义工具与你的数据库、API 甚至业务系统进行交互,真正成为一个能执行复杂任务的"智能体",而不仅仅是一个聊天机器人。
-
安全与成本的双重掌控:作为一款开源工具,它给予了开发者对数据隐私的完全控制权,敏感代码无需离开本地环境。同时,其灵活的按需付费模式(或本地部署零成本模式),让它在成本效益上远超传统的订阅制软件。
总而言之,如果你是一位:
● 重度终端用户 ,厌恶在 IDE 和浏览器之间频繁切换;
● 对代码隐私有严格要求 ,希望数据保留在本地;
● 追求极致性价比 ,希望自由选择模型提供商;
● 渴望自动化,希望 AI 能不仅仅是聊天,而是能通过脚本和工具帮你完成实际工作。
那么,OpenCode 无疑是你工具箱中值得立刻尝试的"瑞士军刀"。它代表了 AI 编程工具的一个新方向------开放、灵活且由开发者自己掌控。
与Claude Code的区别
专注TUI, 为了把终端变得更强而生
A focus on TUI. OpenCode is built by neovim users and the creators of terminal.shop; we are going to push the limits of what's possible in the terminal.
- TUI 是 Text-based User Interface (基于文本的用户界面)的缩写, "A focus on TUI" (专注于 TUI)
- Built by neovim users and the creators of terminal.shop
- Neovim 用户:Neovim 是一个高度可扩展、模块化的文本编辑器,深受极客和高级开发者喜爱
- Terminal.shop 的创建者:Terminal.shop 是一个知名的售卖高质量终端相关数字产品的平台(如主题、教程等)
- 即opencode懂终端用户的思维,不是为了做 AI 而强行套壳,而是为了真正提升终端开发体验
- Push the limits of what's possible in the terminal
- 挑战并拓展终端能力的边界
- 致力于在终端里实现以前只有在图形界面里才有的复杂功能,让终端变得更强大、更智能,打破大家对"终端只能跑命令"的刻板印象
OpenCode 是一个为"命令行极客"打造的工具。它的开发者是一群和你一样热爱终端、甚至以此为生的人。他们不满足于现状,决心利用 AI 技术,把终端的能力推向一个新的高度,让你在不离开命令行的情况下,就能享受最先进、最流畅的 AI 编程体验。
即Opencode 是一个 "懂终端、爱终端、为了把终端变得更强而生" 的 AI 编程助手
100%开源,不与任何LLM绑定
- 推荐通过
OpenCode Zen提供的模型; - OpenCode可以与Claude、OpenAI、谷歌甚至本地模型一起使用。
- 随着模型的发展,不同模型之间的差距将会缩小,价格将会持续下降,因此与供应商无关是很重要的。
开箱即用的LSP支持
LSP指 Language Server Protocol(语言服务器协议)
在win11下的LSP Server
C:\Users\【用户】\.local\share\opencode\bin\node_modules\.bin目录下的vue-language-server、yaml-language-server都是LSP ServerC:\Users\【用户】\.local\share\opencode\bin\jdtls\bin目录下的jdtls.bat
LSP在编辑器和编程语言之间架起了一座通用的桥梁。
编辑器只需要实现 LSP 客户端,语言开发者只需要实现 LSP 服务器。两者通过 JSON-RPC 格式的消息进行通信,就能实现智能代码提示
Opencode内置针对LSP的支持,针对各种编程语言提供智能辅助功能
LSP 主要负责提供代码智能分析能力。当你启用 LSP 支持后,OpenCode 能够为你提供以下核心功能:
| 功能类别 | 具体能力 | 作用 |
|---|---|---|
| 代码诊断 | 实时错误检查 | 像拼写检查一样,实时在编辑器中波浪线下划线标出代码语法 错误或潜在漏洞(如未使用的变量)。 |
| 代码导航 | 跳转到定义 | 按住 Ctrl(或 Cmd)点击函数/变量,直接跳转到其定义处; 查找所有引用位置。 |
| 代码编辑 | 智能补全 | 根据上下文自动提示可用的变量、函数和类名; 支持代码片段(Snippets)自动插入。 |
| 代码重构 | 重命名/修复 | 重命名一个变量,所有引用处自动同步更新; 提供"一键修复"建议(如自动导入包)。 |
| 文档信息 | 悬停提示 | 鼠标悬停在代码上时,显示类型信息、函数参数说明和文档注释。 |
| 根据 OpenCode 的相关开发指南,它的 LSP 集成方案还有一些优化特性: |
- 性能优化 : 例如预加载关键配置文件(如
tsconfig.json)、跳过node_modules等非源代码目录的扫描,以加速大型项目的服务器初始化过程 - 多语言支持:
- AI 辅助增强:OpenCode 未来的发展方向还包括在 LSP 的诊断结果中集成 AI 辅助的代码修复建议,让代码修复更加智能。
采用client/server架构
opencode 采用了前后端分离的设计, client/server架构
-
将 "计算/处理逻辑" (Server)和 "用户交互界面"(Client)分离,
-
因为核心逻辑(Server)和界面(Client)是分离的,开发者可以为 OpenCode 开发各种各样的界面
-
Server (服务器端 - OpenCode):
- 核心大脑,负责处理代码分析、文件读写、运行 LSP(语言服务器协议)、执行命令等繁重任务。
- 运行在主力电脑(例如运行 Windows/Mac/Linux 的台式机或笔记本)上。
-
Client (客户端 - 移动 App):
- 用户用来操作和查看结果的界面。
- 客户端是一个手机 App。它不负责处理复杂的代码逻辑,只负责显示画面和接收你的触摸/点击指令。
如何安装
- 从github 上下载opencode的最新版本, 如 v1.1.14/opencode-windows-x64.zi
- 解压,将opencode.exe放在windows的PATH目录下
- 从powershell 或 IntelliJ IDEA 的 terminal 执行输入opencode即可进入
配置信息
C:\Users\用户\.local\share\opencode数据与插件存储- 存放 OpenCode 运行时产生的数据文件 、下载的模型缓存 以及安装的插件/扩展
- 插件/扩展: 如特定语言的辅助插件、MCP 服务器
- 模型缓存:
- 日志文件:
- 存放 OpenCode 运行时产生的数据文件 、下载的模型缓存 以及安装的插件/扩展
C:\Users\用户\.local\share\opentui: TUI 前端资源- tree-sitter
C:\Users\用户\.config\opencode配置中心- opencode.json 核心配置文件
- 其他配置:快捷键映射、界面主题设置、历史记录配置等
如何配置本地LLM
可以配置为兼容openai的LLM接口,如CSDN
注意: 目前CSDN提供的接口还不能用哈,因为被Blocked by Cloud WAF拦截了
json
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"csdn": {
"npm": "@ai-sdk/openai-compatible",
"name": "csdn",
"options": {
"baseURL": "https://models.csdn.net",
"apiKey": "sk-xxxxxxx"
},
"models": {
"deepseek-v3": {
"name": "Deepseek-V3"
}
}
}
}
}
常用命令
- /connect 连接LLM
- /models LLM列表
- /init 初始化项目,主要是在项目根目录下产生
AGENTS.md文件 : - ask question: 与opencode进行交互,让LLM干活 👨🏭,
- 解释某段代码
- 优化某个类
- 写一个具体的功能模块
Agent Skills
Define reusable behavior via SKILL.md definitions
存放位置
为每个技能创建一个文件夹,并在此文件夹内用 "SKILL.md" 文件描述技能信息。
OpenCode搜索这些位置:
- Project config:
.opencode/skill/<name>/SKILL.md - Global config:
~/.config/opencode/skill/<name>/SKILL.md - Project Claude-compatible:
.claude/skills/<name>/SKILL.md - Global Claude-compatible:
~/.claude/skills/<name>/SKILL.md
并加载发现的所有技能。
skill文件内容格式
格式要求
Each SKILL.md must start with YAML frontmatter. Only these fields are recognized:
name(required) : 64个字符串内,符合^[a-z0-9]+(-[a-z0-9]+)*$description(required): 1024个字符串内,保证清晰、具体,方便LLM能正常的选择license(optional):compatibility(optional)metadata(optional, string-to-string map)
Unknown frontmatter fields are ignored.
示例如下
python
---
name: git-release
description: Create consistent releases and changelogs
license: MIT
compatibility: opencode
metadata:
audience: maintainers
workflow: github
---
## What I do
- Draft release notes from merged PRs
- Propose a version bump
- Provide a copy-pasteable `gh release create` command
## When to use me
Use this when you are preparing a tagged release.
Ask clarifying questions if the target versioning scheme is unclear.
Tools
管理LLM能用的工具
默认所有工具都能使用,可以在opencode.json配置工具的权限
json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}
内置的工具包括但不限于如下:
- bash
- edit
- write : 创建新文件或覆盖现有文件。
- read
- grep
- glob
- list
- lsp: 与已配置的LSP服务器交互,以获得代码智能特性,如定义、引用、悬停信息和调用层次结构。
- patch: Apply patches to files
- skill
- todowrite
- todoread
- webfetch: Fetch web content
- question: Ask the user questions during execution.
- 用于:
- Gathering user preferences or requirements
- Clarifying ambiguous instructions
- Getting decisions on implementation choices
- Offering choices about what direction to take
- Each question includes a header, the question text, and a list of options
- 用于:
注意:
- Internally, tools like
grep,glob, andlistuse ripgrep under the hood. 会忽略.gitignore中的文件及目录 - 如果要包含通常会被
.gitignore忽略的文件,在项目根目录下创建.ignore文件,示例如下: - 可以自定义tool 或 集成 mcp servers
python
!node_modules/
!dist/
!build/
Agents
agent是专门的人工智能助手,可以为特定的任务和工作流程进行配置
Agent可以配置自定义的prompt、模型、工具列表
Agent类型
Primary agents
- 处理您的主要对话,并可以访问所有配置的工具
- 内置2个:
- Build: 用于需要完全访问文件操作和系统命令的开发工作。
- Plan: 用于计划和分析,不能执行文件写操作及Bash脚本
Subagents
- Primary agents为特定任务调用的专门助手
- 内置2个:
- General :
- 用于研究复杂问题、搜索代码和执行多步骤任务的通用代理
- 在搜索关键字或文件时,如果你不确定在最初的几次尝试中是否能找到正确的匹配,就使用它。
- Explore :
- 专门用于探索代码库的快速代理
- 当需要按模式快速查找文件、搜索关键字代码或回答有关代码库的问题时,可以使用此方法
- General :
配置
可以为不同的Agent指定不同的LLM及工具
json
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"mode": "primary",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"mode": "primary",
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
},
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"mode": "subagent",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
"write": false,
"edit": false
}
}
}
}
Plugins
编写自己的插件来扩展OpenCode。
如何加载
从本地文件加载
将JavaScript或TypeScript文件放在插件目录中。
.opencode/plugin/- Project-level plugins~/.config/opencode/plugin/- Global plugins
这些目录中的文件在启动时自动加载。
从npm加载
python
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
}
Both regular and scoped npm packages are supported.
Packages and their dependencies are cached in ~/.cache/opencode/node_modules/.
参见: https://opencode.ai/docs/ecosystem#plugins
加载顺序
- Global config (
~/.config/opencode/opencode.json) - Project config (
opencode.json) - Global plugin directory (
~/.config/opencode/plugin/) - Project plugin directory (
.opencode/plugin/)
Duplicate npm packages with the same name and version are loaded once. However, a local plugin and an npm plugin with similar names are both loaded separately.