CLI 设置仅控制终端客户端。它们与 opencode.json(c) 中的服务器和项目设置相互独立。
按下 Ctrl+P,然后选择 Open settings,即可在 TUI 中修改常用设置。
OpenCode TUI 设置对话框

配置文件

OpenCode 将 CLI 设置存储在一个全局文件中:
~/.config/opencode/cli.json
当设置了 $XDG_CONFIG_HOME 时,OpenCode 使用:
$XDG_CONFIG_HOME/opencode/cli.json
不存在项目本地的 CLI 设置文件。可添加已发布的 JSON Schema 以获得校验与自动补全:
{
  "$schema": "https://opencode.ai/v2/cli.json"
}
OpenCode 在创建或迁移该文件时会写入 $schema。有效的编辑会在 TUI 运行期间重新加载。
未知设置会被忽略。保留 $schema,以便编辑器标记无效值。

内联配置

设置 OPENCODE_CLI_CONFIG_CONTENT,即可通过内联 JSON 应用 CLI 设置:
OPENCODE_CLI_CONFIG_CONTENT='{"tabs":{"mode":"off"}}' opencode
OpenCode 会将内联设置合并到全局 cli.json 之上。嵌套对象会被合并,而来自环境变量的数组和标量值会替换全局值。只要该变量被设置,内联设置始终优先。

外观

选择主题、控制界面动效,并覆盖终端光标:
{
  "theme": {
    "name": "tokyonight",
    "mode": "system"
  },
  "animations": true,
  "cursor": {
    "style": "block",
    "blinking": true
  }
}
| 设置 | 取值 | 说明 | | --------------- | --------------------------------------- | -------------------------------------------------------- | | theme.name | string | 选择内置、自定义或从终端派生的主题。 | | theme.mode | system、dark 或 light | 跟随终端外观,或将主题锁定为某一种颜色模式。 | | animations | boolean | 启用界面动画。 | | cursor.style | block、underline、line、default | 设置光标形状。default 保留终端的光标形状。 | | cursor.blinking | boolean | 控制光标闪烁。当样式为 default 时无效。 |
有关选择和创建主题,参见主题。

输入

配置鼠标捕获、滚动、编辑器上下文、粘贴以及提示输入的图片预览:
{
  "mouse": true,
  "scroll": {
    "speed": 3,
    "acceleration": false
  },
  "prompt": {
    "editor": true,
    "paste": "compact",
    "image_preview": false
  }
}
| 设置 | 取值 | 说明 | | -------------------- | --------------------------- | -------------------------------------------------- | | mouse | boolean | 启用终端鼠标捕获。 | | scroll.speed | number,至少 0.001 | 设置每次滚动输入的固定距离。 | | scroll.acceleration | boolean | 加速连续滚动。启用时优先于 speed。 | | prompt.editor | boolean | 将编辑器中当前活动的文件或选区作为提示上下文包含。 | | prompt.paste | compact 或 full | 将大量粘贴内容显示为紧凑占位符或完整文本。 | | prompt.image_preview | boolean | 在提示输入框上方显示图片附件预览。 |

会话

配置全屏 TUI 会话的呈现方式以及新会话的起始位置:
{
  "session": {
    "sidebar": "auto",
    "scrollbar": false,
    "thinking": "hide",
    "grouping": "auto",
    "image_preview": false,
    "tps": true,
    "markdown": "rendered",
    "new_location": "launch",
    "permissions": "prompt"
  }
}
| 设置 | 取值 | 说明 | | --------------------- | ----------------------- | ------------------------------------------------ | | session.sidebar | auto 或 hide | 空间允许时显示侧边栏,或始终隐藏。 | | session.scrollbar | boolean | 显示会话记录滚动条。 | | session.thinking | show 或 hide | 默认显示或隐藏模型推理过程。 | | session.grouping | auto 或 none | 将相关的会话记录条目分组,或分别渲染每个条目。 | | session.image_preview | boolean | 在会话记录中显示用户附件和工具结果中的图片。 | | session.tps | boolean | 在助手回复页脚显示每秒输出 token 数。 | | session.markdown | source 或 rendered | 显示 Markdown 语法标记,或在渲染内容中隐藏它们。 | | session.new_location | launch 或 inherit | 从 TUI 启动目录开始,或继承当前会话的位置。 | | session.permissions | prompt 或 autoaccept | 对权限请求进行提示,或自动接受每个请求。 |

标签页

配置持久化会话标签栏:
{
  "tabs": {
    "mode": "auto",
    "scope": "cwd",
    "layout": "horizontal",
    "indicators": "status"
  }
}
旧版布尔值设置 tabs.enabled 仍受支持:true 等同于 on,false 等同于 off。OpenCode 会读取它,但不会重写配置文件。
| 设置 | 取值 | 说明 | | ----------------- | --------------------------- | ------------------------------------------ | | tabs.mode | auto、on 或 off | 自动、始终或从不使用标签页。Auto 模式下会在 Herdr 内隐藏它们。 | | tabs.scope | cwd 或 global | 按工作目录分别保留标签页,或全局共享。 | | tabs.layout | horizontal 或 vertical | 将标签页放置在水平条或垂直侧边栏中。 | | tabs.indicators | status 或 numbers | 显示状态图标,或始终显示标签页编号。 |
数字指示器会保留状态颜色和背景动画。在任一指示器模式下,Ctrl+数字快捷键都可切换标签页。

差异

配置初始差异范围与呈现方式:
{
  "diffs": {
    "source": "branch",
    "wrap": "word",
    "tree": true,
    "single": false,
    "view": "auto"
  }
}
| 设置 | 取值 | 说明 | | -------------- | ------------------------------------------- | ---------------------------------------- | | diffs.source | branch、committed、working 或 turn | 设置初始审查范围。 | | diffs.wrap | word 或 none | 按单词换行长行,或不换行。 | | diffs.tree | boolean | 显示差异文件树。 | | diffs.single | boolean | 仅显示所选文件的补丁。 | | diffs.view | auto、split 或 unified | 设置布局。auto 根据可用宽度选择。 |
branch 显示 All 的分支与本地更改,committed 仅显示分支提交,working 显示已暂存、未暂存和未跟踪的更改。turn 显示 Last turn,即会话在最新一轮中更改的文件;当会话完成一轮时它会刷新,若 /diff 并非从会话中打开则回退到 branch。
在 /diff 中,按 d 可更改范围,或从 Base 选择比较分支。这些视图内的选择会持续到 TUI 退出为止,且不会修改 cli.json。

提醒

可分别启用系统通知与提示音:
{
  "attention": {
    "notifications": true,
    "sound": true,
    "volume": 0.4,
    "sound_pack": "opencode.default",
    "sounds": {
      "permission": "/home/me/sounds/permission.wav"
    }
  }
}
| 设置 | 取值 | 说明 | | ------------------------ | -------------------- | -------------------------------------------------------------------------- | | attention.notifications | boolean | 显示系统通知,通常在终端未获得焦点时。 | | attention.sound | boolean | 播放提示音。 | | attention.volume | 0 到 1 的数字 | 设置音量。 | | attention.sound_pack | string | 选择当前生效的音效包 ID。 | | attention.sounds | object | 覆盖 default、question、permission、error、done 或 subagent_done 的音效文件。 |
无效或不可读的覆盖文件会回退到该事件的内置音效。
更新后,TUI 会在主屏幕上一次性展示新版本的亮点。运行 /highlights 可再次查看,或关闭该对话框:
{
  "highlights": false
}

终端

配置终端集成:
{
  "terminal": {
    "title": true,
    "copy": "select"
  }
}
| 设置 | 取值 | 说明 | | ---------------- | -------------------- | ---------------------------------------------------------------------------------------- | | terminal.title | boolean | 更新终端窗口标题。 | | terminal.copy | manual 或 select | 手动复制,或在选中后立即复制。平台默认值:Windows 上为 manual,其他平台为 select。 |

Mini

mini 设置组控制 opencode mini,即极简交互界面:
{
  "mini": {
    "thinking": "show",
    "tools": "hide",
    "shell_output": "hide",
    "turn_summary": "show",
    "footer": "show",
    "splash": "show",
    "work_spinner": "block-soft-slide",
    "mono": false,
    "replay": true,
    "replay_limit": 200
  }
}
| 设置 | 取值 | 说明 | | ------------------- | ------------------------ | ------------------------------------------------------------ | | mini.thinking | show 或 hide | 显示或隐藏模型推理过程。 | | mini.tools | show 或 hide | 显示或隐藏工具调用及其之前的助手文本。 | | mini.shell_output | show 或 hide | 显示或隐藏 shell 工具的原始输出。 | | mini.turn_summary | show 或 hide | 在回滚记录中显示或隐藏智能体、模型和耗时摘要。 | | mini.footer | show 或 hide | 显示或隐藏常驻的活动、模型、用量和上下文详情。 | | mini.splash | show 或 hide | 显示或隐藏进入和退出时的启动画面。 | | mini.work_spinner | spinner ID | 选择页脚中的工作动画。 | | mini.mono | boolean | 使用单色 ASCII 输出。 | | mini.replay | boolean | 在恢复会话和终端尺寸变化时重建会话历史。 | | mini.replay_limit | 正整数 | 将回放限制为最新的消息。默认上限为 200。 |
可用的 spinner ID 如下:
block-soft-slide  block-soft-sweep  block-low-comet  block-low-duet
block-shuttle     block-bridge      block-squeeze    small-toggle
square-toggle     grow-shrink       quadrant-orbit   crosshatch
density-wave      seed
命令行 mini 回放相关 flag 会在该次调用中覆盖这些设置。

快捷键

覆盖命令绑定以及 leader 键超时时间:
{
  "keybinds": {
    "leader": "ctrl+x",
    "app.exit": ["ctrl+c", "ctrl+d", "<leader>q"],
    "prompt.paste": {
      "key": "ctrl+v",
      "event": "press",
      "preventDefault": false,
      "fallthrough": false
    },
    "help.show": false
  },
  "leader": {
    "timeout": 2000
  }
}
| 设置 | 取值 | 说明 | | --------------------------- | --------------------------------------- | ------------------------------------------------ | | keybinds.leader | 绑定值 | 设置其他绑定中 <leader> 所引用的按键。 | | keybinds.<command> | 绑定值 | 覆盖某个命令 ID 的绑定。 | | keybinds.*.key | 按键字符串或描述符 | 为对象绑定选择按键。 | | keybinds.*.event | press 或 release | 将对象绑定限定为某一种按键事件。 | | keybinds.*.preventDefault | boolean | 控制是否阻止终端的默认按键行为。 | | keybinds.*.fallthrough | boolean | 允许优先级更低的处理程序接收同一事件。 | | leader.timeout | 正整数 | 设置在 leader 键之后等待的毫秒数。 |
绑定值可以是字符串、备选按键数组,或对象。使用 "none" 或 false 可禁用某个绑定。有关可接受的按键语法、全部命令 ID 和全部默认绑定,参见快捷键。

插件

按顺序加载仅限终端的插件:
{
  "plugins": [
    "-opencode.notifications",
    {
      "package": "./plugins/status",
      "options": {
        "compact": true
      }
    }
  ]
}
| 设置 | 取值 | 说明 | | ------------------ | ------- | -------------------------------------- | | plugins | array | 声明有序的启用指令与外部插件。 | | plugins[].package | string | 设置包名、本地路径或文件 URL。 | | plugins[].options | object | 向该插件传递插件特定的选项。 |
有关包的形式、本地发现、通配符和禁用指令,参见插件。

调试与实验性功能

启用诊断功能,或选择加入当前可用的实验特性:
{
  "debug": {
    "devtools": false,
    "timing": false,
    "turn_tokens": "verbose"
  },
  "experimental": {}
}
| 设置 | 取值 | 说明 | | ------------------- | --------------------------------- | ---------------------------------------------------------------- | | debug.devtools | boolean | 显示 DevTools 调试栏。 | | debug.timing | boolean | 在调试栏中显示首次绘制耗时诊断。 | | debug.turn_tokens | boolean 或 verbose | 显示每轮的 token 用量;verbose 还会包含工具调用输入。 | | experimental | 特性 ID 到布尔值的对象 | 启用或禁用可能变更或在无通知情况下移除的实验特性。 |
仅使用 TUI Experiments 对话框中当前列出的特性 ID。未知 ID 不会产生任何效果。