Elric Li

OpenCode 使用指南

记录学习 OpenCode 的使用方法。

OpenCodeTerminalVibe Coding

OpenCode 使用指南

OpenCode 是一款运行在终端中的 AI 编程助手(Terminal User Interface),提供键盘驱动的编码体验。本指南基于 v1.18.1 整理。

关于插件依赖:本指南中部分进阶能力依赖以下插件,非 OpenCode 原生功能,已逐处标注:

  • [oh-my-opencode-slim] — 提供 designer、fixer、librarian、oracle、observer 等 specialist agent 类型
  • [superpowers] — 提供技能系统(skill 工具、brainstorming、systematic-debugging 等工作流模板)、subagent-driven-development、AGENTS.md 委托工作流等

目录


第一部分:高效工作方法论

掌握 OpenCode 的第一步不是背快捷键,而是理解它的工作机制。以下几点直接影响你每天的实际效率。

Agent 分工机制 [oh-my-opencode-slim]

⚠️ 本节介绍的 specialist agent 类型来自 oh-my-opencode-slim 插件。OpenCode 原生仅有 orcherstrator、explore、general 等基础 agent 类型。tab/shift+tab 切换 agent 是内置功能,但可用 agent 列表依赖插件配置。

调度者(orchestrator)本身不应该做所有事,而是把专业任务分发到更有针对性的 agent。

Agent 擅长领域 使用场景
@explorer 代码库搜索和模式匹配 需要查找文件、定位函数、理解代码结构时使用。它搜索速度是调度者的 2 倍,且只返回摘要,不膨胀上下文。
@librarian 外部文档和库研究 需要查阅第三方库的 API、官方文档、GitHub 示例或 bug 解决方案时使用。成本和速度均优于调度者自行查阅。
@oracle 架构决策、复杂调试、代码审查 遇到难以定位的 bug(两次尝试仍未解决)、做跨系统的架构决策、或需要独立代码审查时使用。
@designer UI/UX 设计和样式 用户可见的界面改动、响应式布局、动画效果等视觉相关工作。设计水平远高于调度者。
@fixer 边界清晰的代码实现 改多文件、跨文件夹的实现工作。编辑速度是调度者的 2 倍,成本仅一半。
@observer 图片、PDF、截图的视觉分析 需要分析设计稿、错误截图、PDF 文档等视觉内容时使用。

一个简单的判断原则:如果是单行修改或确认性问题,自己完成;否则,委托出去。

上下文管理

LLM 的上下文窗口是有限且昂贵的资源。每一条消息都在消耗 token,而 token 直接影响成本和响应质量。

背景并行任务

这是最能提升效率的技巧:把没有依赖关系的任务同时发给不同 agent,而不是串行等待。

❌ 低效模式:
  调度者搜文件 → 找到 → 调查文档 → 查到 → 开始改

✅ 高效模式:
  调度者同时发起:
  ├── @explorer 搜索接口定义  ───┐
  └── @librarian 查阅库文档     ──┤
        两者完成后 ←──────────────┘
  调度者整合结果,规划修改方案

判断标准:如果两个任务之间没有依赖关系,就应该并行执行。

委托决策参考 [oh-my-opencode-slim]

下面这张对照表总结了最常见的“自己动手”误区:

习惯做法 更好的方式 效率差异
“让我搜一下这个文件在哪” 交给 @explorer 搜索 2x 快,成本 1/2
“让我看看这个库的文档” 交给 @librarian 查阅 2x 快,成本 1/2
“这个改动很直观,我自己改” 交给 @fixer 编辑 2x 快,成本 1/2
“这个 UI 我来调一下” 交给 @designer 设计水平 10x

会话复用

多次委托同一个 agent 时,传入 task_id 可以复用该 agent 之前的会话上下文。这避免了每一次都重新理解项目和环境,显著降低 token 开销。这是 OpenCode 内置的 task 工具功能。

技能与工作流模板 [superpowers]

⚠️ 技能系统(skill 工具及所有技能文件)来自 superpowers 插件。未安装时,OpenCode 不提供这些工作流模板。

OpenCode 的技能系统为常见工作场景提供了预置流程。有对应技能时优先加载,它提供了完整的工作清单。下表列出最常用的几个:

场景 推荐流程
需求模糊,不知道从哪里开始 先做头脑风暴(brainstorming),问清楚再动手
遇到 bug 需要排查 使用系统化调试(systematic-debugging),而非盲目尝试
开发新功能 先写计划(writing-plans),再用 TDD(test-driven-development),有方案有测试再实现
修改 UI 界面 加载 Vue 最佳实践(vue-best-practices)+ 交给 @designer
改动完成准备收尾 运行完成前验证(verification-before-completion),避免遗漏

描述需求与验收标准

指令的清晰度直接决定输出质量:

❌ 模糊指令:
  "把这个页面改好看点"

✅ 明确指令:
  "把按钮间距从 8px 改为 16px,
   卡片圆角改为 12px,
   标题字号加大到 20px"

给出明确的验收条件后,agent 可以自主迭代到目标,无需反复确认。

如果发现某些指令反复出现,可以考虑将它们写入项目的 CLAUDE.mdAGENTS.md 规则文件,例如:“本项目使用 pnpm,不要用 npm”、“修改之前先跑一遍现有测试”。


第二部分:快捷键与操作

OpenCode 的交互主要靠键盘。熟悉以下快捷键后,手不用离开键盘就能完成多数操作。

输入框操作

输入框遵循 Readline/Emacs 编辑风格。最值得记住的是清空输入框ctrl+c)和快速删除整行ctrl+shift+d)。

光标移动

快捷键 作用
ctrl+a 光标移动到行首
ctrl+e 光标移动到行尾
ctrl+bleft 左移一个字符
ctrl+fright 右移一个字符
alt+balt+left 左移一个单词
alt+falt+right 右移一个单词

文本删除

快捷键 作用
ctrl+c 清空整个输入框
ctrl+u 删除光标到行首
ctrl+k 删除光标到行尾
ctrl+shift+d 删除整行
ctrl+walt+backspace 删除前一个单词
alt+d 删除后一个单词
ctrl+ddelete 删除光标下的字符
backspace 删除光标前的字符

编辑与历史

快捷键 作用
ctrl+v 粘贴
ctrl+zcmd+z 撤销输入
ctrl+.cmd+shift+z 重做输入
cmd+a 全选文本
ctrl+t 交换光标前后两个字符
ctrl+g 取消弹窗 / 中止 AI 响应
ctrl+alt+k 打开按键提示面板(Which-Key)
up / down 浏览输入历史
shift+left/right/up/down 选区操作

提交与换行

快捷键 作用
Enter 提交消息
shift+enter 插入换行
ctrl+enter / alt+enter / ctrl+j 换行(备用方式)

部分终端默认不发送 shift+enter,需要在终端设置中额外配置。

Leader 键体系

OpenCode 使用 Leader 键 避免快捷键与终端冲突。默认 Leader 键为 ctrl+x,操作方式是:先按下 ctrl+x 然后松开,再按第二个键。Leader 键的等待超时默认为 2000 毫秒,可在配置中调整。

以下是完整的 Leader 键映射:

快捷键 对应命令 作用
ctrl+x n /new 新建一个空白会话
ctrl+x l /sessions 列出所有历史会话并切换
ctrl+x c /compact 压缩会话上下文(token 接近上限时使用)
ctrl+x u /undo 撤销上一条消息,文件修改也会自动回滚(需要 Git 仓库)
ctrl+x r /redo 重做刚才撤销的操作
ctrl+x x /export 导出会话为 Markdown,在 $EDITOR 中打开
ctrl+x e /editor $EDITOR 编写消息(适合长内容)
ctrl+x q /exit 退出 OpenCode
ctrl+x m /models 切换 AI 模型
ctrl+x t /themes 切换界面主题
ctrl+x a 查看可用的 Agent 列表
ctrl+x s 查看当前状态
ctrl+x b 切换侧边栏显示
ctrl+x y 复制选中消息的内容
ctrl+x g 打开会话时间线
ctrl+x h 显示帮助 / 提示信息
ctrl+x down 跳转进入子会话

全局快捷键

以下快捷键无需 Leader 键,在 TUI 的任何位置都可以直接使用:

快捷键 作用
ctrl+p 命令面板——最常用的入口,可以搜索并执行各种操作
ctrl+t 循环切换模型 variant(如默认 ↔ 长思考模式)
escape 中断 AI 当前响应 / 关闭弹窗 / 从输入框失焦
tab 切换到下一个 Agent
shift+tab 切换到上一个 Agent
f2 切换到最近使用过的模型
shift+f2 反向切换最近使用的模型
ctrl+a 查看 Provider 列表
ctrl+r 重命名当前会话
ctrl+d 删除当前会话(会话列表内)
ctrl+z 挂起终端进程(POSIX),Windows 下为撤销输入
ctrl+f 模型选择对话框中添加/取消收藏
ctrl+? 显示当前上下文所有可用快捷键

消息区导航

快捷键 作用
pageup / pagedown 消息区翻页
home / ctrl+g 跳到消息开头
end / ctrl+alt+g 跳到消息末尾
ctrl+alt+u / ctrl+alt+d 消息区半页滚动
ctrl+alt+y / ctrl+alt+e 消息区逐行滚动

子会话导航(当 agent 产生子会话时):

快捷键 作用
left / right 在多个子会话之间切换
up 回到父会话

第三部分:命令系统

Slash 命令

在输入框直接键入 / 加命令名即可执行。多数 Slash 命令都有对应的 Leader 键快捷键。

命令 别名 作用
/new /clear 新建会话
/compact /summarize 压缩当前会话的上下文
/undo 撤销上条消息,自动回滚文件改动(需要 Git 仓库)
/redo 重做已撤销的操作
/sessions /resume, /continue 列出并切换历史会话
/models 列出可用模型
/themes 切换主题
/help 显示帮助信息
/export 导出当前会话为 Markdown
/editor 在外部编辑器编写长消息
/thinking 显示或隐藏模型的思考过程
/details 显示或隐藏工具执行的详细信息
/init 交互式创建或更新 AGENTS.md
/exit /quit, /q 退出 OpenCode
/connect 添加新的 AI Provider
/share 分享当前会话
/unshare 取消共享

TUI 快捷用法

除了快捷键和命令之外,输入框还支持两种特殊前缀:

前缀 用法 示例
@ 模糊搜索并引用项目中的文件,文件内容会自动注入到对话上下文 @src/utils/auth.ts 这个函数做了什么?
! 在输入框开头执行 shell 命令,命令输出会带入上下文 !ls -la!git diff

@ 还支持引用配置好的 references(参考目录),用法为 @别名/


第四部分:CLI 命令行

除了 TUI,OpenCode 也提供了完整的命令行接口,适合脚本化、自动化或快速操作。

启动与运行

# 基本启动
opencode                  # 在当前目录打开 TUI
opencode /path/to/project # 在指定目录打开 TUI

# 会话恢复
opencode -c               # 继续上一次的会话
opencode -s <sessionID>   # 恢复指定会话
opencode --fork            # 派生会话(配合 -c 或 -s)

# 指定模型和 Agent
opencode -m openai/gpt-4   # 指定模型启动
opencode --agent explorer  # 指定 Agent 启动
opencode --prompt "..."    # 指定初始提示词

# 特殊模式
opencode --mini            # 极简界面
opencode --auto            # 自动批准权限(⚠️ 高风险)
opencode --pure            # 不加载插件,干净启动
opencode --no-replay       # 禁用历史回放
opencode --replay-limit 10 # 限制回放的消息数量
opencode --log-level DEBUG --print-logs  # 调试模式

# 单次运行
opencode run "分析这个项目的架构"  # 执行一次后退出

会话管理

opencode session list              # 列出所有会话
opencode session delete <sessionID> # 删除指定会话
opencode export <sessionID>         # 导出为 JSON
opencode import <file>              # 从 JSON 或 URL 导入会话

模型与用量

opencode models            # 列出所有可用模型
opencode models openai     # 列出指定 Provider 的模型
opencode stats             # 查看 token 用量和费用
opencode providers         # 管理 Provider 和 API 凭证

调试工具

opencode debug config      # 查看最终合并的配置
opencode debug info        # 版本、系统、插件信息
opencode debug paths       # 全局路径(data/config/cache/state)
opencode debug skill       # 列出所有可用技能
opencode debug agent fixer # 查看指定 agent 的配置
opencode debug startup     # 启动耗时分析

插件与其他

opencode plugin oh-my-opencode-slim   # 安装插件
opencode plugin oh-my-opencode-slim -g # 全局安装
opencode plugin <pkg> -f              # 强制替换已有版本
opencode completion                   # 生成 shell 自动补全脚本
opencode upgrade                      # 升级到最新版
opencode upgrade 1.18.0               # 升级到指定版本
opencode uninstall                    # 卸载并清理
opencode serve                        # 启动 headless 服务器
opencode web                          # 启动服务器并打开 Web 界面
opencode mcp                          # 管理 MCP 服务器
opencode pr 42                        # 拉 GitHub PR 分支并启动

启动选项(服务器模式)

选项 说明
--port 8080 指定监听端口
--hostname 0.0.0.0 指定主机名,默认 127.0.0.1
--mdns 启用 mDNS 服务发现
--mdns-domain myapp.local 自定义 mDNS 域名
--cors https://example.com 添加额外 CORS 域名

第五部分:配置与定制

tui.json 配置

TUI 的界面行为通过 ~/.config/opencode/tui.json 控制(也支持 .jsonc 格式)。这个文件独立于 opencode.json(后者控制运行时行为)。keybinds 字段与内置默认值合并,这意味着只需写你要改的项。

{
  "$schema": "https://opencode.ai/tui.json",
  "theme": "opencode",
  "leader_timeout": 2000,
  "keybinds": {
    "leader": "ctrl+x"
  },
  "scroll_speed": 3,
  "scroll_acceleration": {
    "enabled": true
  },
  "diff_style": "auto",
  "mouse": true,
  "attention": {
    "enabled": true,
    "notifications": true,
    "sound": true,
    "volume": 0.4,
    "sound_pack": "opencode.default",
    "sounds": {
      "error": "./sounds/error.mp3"
    }
  }
}

各配置项说明

外观

配置项 说明
theme 界面主题,默认为 "opencode"
diff_style Diff 展示风格。"auto" 自适应宽度,"stacked" 始终单列
mouse 是否启用鼠标捕获。默认 true,设为 false 恢复终端原生选择/滚动

快捷键

配置项 说明
keybinds.leader 修改 Leader 键,默认 ctrl+x
leader_timeout Leader 键后等待第二键的超时时间(毫秒),默认 2000

滚动

配置项 说明
scroll_speed 滚动速度,默认 3,最小值 0.001
scroll_acceleration.enabled 启用 macOS 风格滚动加速。开启后 scroll_speed 被忽略

通知与声音

配置项 说明
attention.enabled 总开关,默认 false
attention.notifications 终端失焦时的桌面通知,默认 true
attention.sound 播放提示音,默认 true
attention.volume 音量 0-1,默认 0.4
attention.sound_pack 音效包 ID,默认 "opencode.default"
attention.sounds 按事件覆盖音效文件,支持 defaultquestionpermissionerrordonesubagent_done

快捷键绑定语法

{
  "keybinds": {
    "action_name": "ctrl+k",
    "multi_keys": "ctrl+a,ctrl+b",
    "array_keys": ["ctrl+a", "ctrl+b"],
    "disable_key": "none",
    "advanced": {
      "key": "ctrl+v",
      "preventDefault": false
    }
  }
}

命令面板中的隐藏设置

通过 ctrl+p 打开命令面板后,可以搜索并切换一些界面设置,这些设置会自动持久化:

编辑器集成

ctrl+x e(外部编辑)和 ctrl+x x(导出)会调用系统配置的 EDITOR。在 ~/.zshrc~/.bashrc 中添加:

export EDITOR="code --wait"   # VS Code
export EDITOR="nvim"          # Neovim
export EDITOR="vim"           # Vim
export EDITOR="nano"          # Nano
export EDITOR="subl --wait"   # Sublime Text

GUI 编辑器需要 --wait 参数,表示进程会一直阻塞直到窗口关闭。


第六部分:进阶功能

Agent 体系 [oh-my-opencode-slim]

⚠️ orchestrator 是 OpenCode 原生 agent;explorerlibrarianfixeroracledesignerobserveroh-my-opencode-slim 插件提供;councillorsuperpowers 插件提供。tab/shift+tab 切换 agent 是内置功能,但可用列表依赖插件配置。

Agent 来源 角色定位
orchestrator OpenCode 原生 默认调度者,负责任务分析、分发和协调。它不是执行者,而是管理者。
explorer oh-my-opencode-slim 代码库搜索专家。快速定位文件、符号和代码模式,只返回摘要而非原始内容。
librarian oh-my-opencode-slim 外部知识专家。获取第三方库的最新文档、API 参考和 GitHub 实例。
fixer oh-my-opencode-slim 快速执行专家。接收明确的任务规格,高效完成代码编辑工作。
oracle oh-my-opencode-slim 高级架构顾问。处理架构决策、复杂调试、代码审查和简化建议。
designer oh-my-opencode-slim UI/UX 设计专家。负责视觉层次、响应式布局、动画效果和交互体验。
observer oh-my-opencode-slim 视觉分析专家。解析图片、截图、PDF 和图表,提取结构化描述。
councillor superpowers 只读架构咨询,属于 oracle 体系的一部分。

通知与声音

attention.enabled 设为 true 后:

← 返回博客列表