这是什么
解决的三个问题
- OpenCode 会话被显示为 Claude —— oh-my-openagent 的 Claude-hook 兼容层在 OpenCode 内重跑了 vibe-island-bridge --source claude,把 OpenCode 会话标成了 Claude。
- 点击 Ghostty 跳转失效 —— 这些误标的记录没有 tty,Vibe Island 不知道该跳回哪里。
- 会话标题被污染 —— /save 这类 slash 命令被展开成长长的 <auto-slash-command> 块;图片输入留下 [Image 1] dashboard:... 占位。两者都直接成了 notch 标题。
工作原理
- 订阅 OpenCode 插件事件(session.*、message.part.updated、permission.*、question.*)。
- 通过 Vibe Island 的 Unix socket(~/.vibe-island/run/vibe-island.sock)发送事件,显式带上 source: "opencode"。
- 沿进程树定位 opencode attach 终端的真实 tty,让点击跳转能回到对应 Ghostty tab。
- 在 prompt 变成标题前,过滤 <auto-slash-command> / <command-instruction> 块和 [Image N] 占位。
- 对 PermissionRequest 和 AskUserQuestion 复用 held connection 模式,等 Vibe Island 决策后再 in-process 回复 OpenCode。
安装
Bash
curl -fsSL https://raw.githubusercontent.com/nxxxsooo/opencode-vibe-island-plugin/main/plugin/vibe-island.js \
-o ~/.config/opencode/plugins/vibe-island.js
Json
{
"plugin": [
"./plugins/vibe-island.js",
"oh-my-openagent@latest"
]
}
Json
{
"disabledHooks": {
"PreToolUse": ["vibe-island-bridge"],
"PostToolUse": ["vibe-island-bridge"],
"UserPromptSubmit": ["vibe-island-bridge"],
"Stop": ["vibe-island-bridge"],
"PreCompact": ["vibe-island-bridge"]
}
}
验证
Bash
tail -f ~/Library/Logs/VibeIsland/vibe-island.log | grep 'recv event'
不隶属于 Vibe Island。Vibe Island 是 Edward Luo / vibeisland.app 的产品。本仓库针对其文档化的 socket 协议做社区集成。











