Double Ctrl C
OpenCode TUI plugin: press ctrl+c twice to exit, replicating Claude Code and Codex CLI. One press clears the prompt; on an empty prompt it asks for a second press instead of quitting.
0
58
近 7 天 28
30.8
生态多维模型
8 天前
2026-09-04
快速安装与配置
opencode.json写入当前项目的 opencode.json,只对这个仓库生效。
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-double-ctrl-c@0.1.1"]
}写入 ~/.config/opencode/opencode.json,对所有项目生效。
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-double-ctrl-c@0.1.1"]
}若你要在本地改造这个插件,先装到项目里再从本地路径引用。
shell
pnpm add -D opencode-double-ctrl-cOpenCode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。
Press ctrl+c twice to exit OpenCode, the way Claude Code and Codex CLI do. Out of the box a single ctrl+c on an empty prompt quits the OpenCode TUI immediately, which is easy to hit by reflex in a long session. This plugin replicates the ctrl+c behaviour of Claude Code and Codex CLI:
- text in the prompt → ctrl+c clears it
- empty prompt → ctrl+c shows "ctrl+c again to exit"
- second ctrl+c within 1.5 s → exits
Nothing else changes. Escape still interrupts a running turn, ctrl+d and /exit still quit.
Double-press exit is a long-standing feature request upstream (#9041, #26371, #10975); this is a plugin you can use today.
Install
opencode plugin opencode-double-ctrl-c -g
That installs the package into your global OpenCode config and adds it to tui.json. Drop -g to install it for the current project only. Restart OpenCode afterwards; plugins load at startup.
Without npm
TUI plugins are not auto-discovered, so a file install needs both steps:
mkdir -p ~/.config/opencode/tui-plugins
curl -fsSL https://raw.githubusercontent.com/tannerbruhn/opencode-double-ctrl-c/main/src/tui.ts \
-o ~/.config/opencode/tui-plugins/double-ctrl-c.ts
Then add it to ~/.config/opencode/tui.json (create the file if it does not exist):
{
"$schema": "https://opencode.ai/tui.json",
"plugin": ["./tui-plugins/double-ctrl-c.ts"]
}
Do not put the file in ~/.config/opencode/plugin/. That directory is auto-discovered for server plugins and will try to load it the wrong way.
No keybind changes are required: the plugin registers ctrl+c at a priority above the built-in exit binding.
Options
"plugin": [["opencode-double-ctrl-c", { "window": 1500, "interrupt": false, "key": "ctrl+c" }]]
window– milliseconds allowed between the two presses. Default 1500. Codex CLI uses about 1000, Claude Code a little longer; set whichever you are used to.interrupt– when true, the first press on an empty prompt stops a running turn instead of arming exit, which is what Claude Code and Codex CLI both do. Default false, because escape already does that in OpenCode.key– the key to take over. Defaultctrl+c.
If a single press still exits
Some builds may let the host's exit binding run first. If so, take ctrl+c off it in tui.json and the plugin does the rest:
"keybinds": { "app_exit": "ctrl+d,<leader>q" }
How it works
It registers one keymap layer with priority: 1000 and a single binding for ctrl+c. The command reads the focused prompt's text: if there is any, it dispatches OpenCode's own prompt.clear; otherwise it arms a timer and shows a toast, and a second press inside the window dispatches app.exit. With interrupt on, a busy session gets session.interrupt on the first press instead.
Requirements
OpenCode 1.18.18 or newer (the TUI plugin API with keymap layers). Tested on 1.18.26.
License
MIT
同类生态推荐
Aside
opencode-aside
Claude Code's /btw side chat for opencode - ask a one-shot question in an overlay, with no tools and nothing added to the transcript
Snap To Bottom
opencode-snap-to-bottom
Terminal-style snap-to-bottom for the opencode transcript
Loopd
@bojackduy/opencode-loopd
Codex-inspired background goal engine for OpenCode — autonomous subagents, engine-driven loop, child worker sessions and modal TUI dashboard. Like Claude Code loop for OpenCode.