@devcxl/opencode-worktreeOpenCode Worktree Plugin - Creates isolated git worktrees for AI development sessions
0
59
近 7 天 10
25.1
生态多维模型
3 个月前
2026-05-01
快速安装与配置
opencode.json写入当前项目的 opencode.json,只对这个仓库生效。
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@devcxl/opencode-worktree@0.1.2"]
}写入 ~/.config/opencode/opencode.json,对所有项目生效。
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@devcxl/opencode-worktree@0.1.2"]
}若你要在本地改造这个插件,先装到项目里再从本地路径引用。
shell
pnpm add -D @devcxl/opencode-worktreeopencode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。
opencode-worktree
Git Worktree 即开即用,自动生成独立终端,为 AI 驱动的开发提供零摩擦隔离环境。
English | 简体中文
一个 OpenCode 插件,用于创建隔离的 git worktree——每个 worktree 自动打开独立终端并在其中运行 OpenCode。无需手动设置,无需上下文切换,无需事后清理。
为什么需要这个插件
手动创建 worktree 需要:创建 worktree、打开终端、导航到目录、启动 OpenCode。OpenCode Desktop 虽然支持 worktree,但仅限于 GUI 流程。每一步都是摩擦。
本插件消除了所有摩擦。当 AI 调用 worktree_create 时,终端自动打开,OpenCode 自动运行,文件自动同步。当 AI 调用 worktree_delete 时,变更自动提交,worktree 自动清理。这不仅是拥有一个工具,而是拥有一个完整的工作流。
与 cmux 配合使用效果最佳,cmux 提供原生工作区管理和程序化控制能力,非常适合自动化开发工作流。同时支持 tmux。
何时使用
| 方式 | 适用场景 | 权衡 |
|---|---|---|
| 手动 git worktree | 一次性实验,完全控制 | 手动设置,无自动清理,上下文切换 |
| OpenCode Desktop UI | 可视化工作流,集成体验 | 绑定桌面应用,自动化程度低 |
| 本插件 | AI 驱动工作流,自动化,CLI 优先用户 | 项目需要添加插件依赖 |
如果你偏向手动控制或只使用 OpenCode Desktop,本插件可能不是必需的。但如果希望 AI 代理能无缝创建和管理隔离的开发会话——包括自动打开终端和自动状态清理——这就是你要找的工具。
工作流程
flowchart LR
A[创建 Worktree] --> B{终端自动打开}
B --> C[OpenCode 运行中]
C --> D[隔离开发]
D --> E[删除 Worktree]
E --> F{自动提交 & 清理}
F --> G[会话结束]
- 创建 - AI 调用
worktree_create("feature/dark-mode") - 终端打开 - 新窗口启动 OpenCode,工作目录为
~/.local/share/opencode/worktree/<project-id>/feature/dark-mode - 开发 - AI 在完全隔离的环境中实验
- 删除 - AI 调用
worktree_delete("reason") - 清理 - 变更自动提交,git worktree 删除
Worktree 存储在 ~/.local/share/opencode/worktree/<project-id>/<branch>/,位于仓库之外。
安装
在项目根目录的 opencode.json 中加入:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@devcxl/opencode-worktree"]
}
前置条件:OpenCode 所使用的 shell 必须能直接执行 node。
使用方法
插件提供两个工具:
| 工具 | 用途 |
|---|---|
worktree_create(branch, baseBranch?) |
创建新的 git worktree 用于隔离开发。自动打开新终端并运行 OpenCode。 |
worktree_delete(reason) |
删除当前 worktree。删除前自动提交变更。 |
创建 Worktree
worktree_create:
branch: "feature/dark-mode"
baseBranch: "main" # 可选,默认为 HEAD
调用后:
- 在
~/.local/share/opencode/worktree/<project-id>/feature/dark-mode创建 git worktree - 根据
.opencode/worktree.jsonc配置同步文件 - 执行创建后钩子(如
pnpm install) - 打开新终端并运行 OpenCode
删除 Worktree
worktree_delete:
reason: "功能开发完成,合并到 main"
调用后:
- 执行删除前钩子(如
docker compose down) - 提交所有变更并生成快照信息
- 使用
--force删除 git worktree - 清理会话状态
平台支持
插件自动检测终端环境:
| 平台 | 支持的终端 |
|---|---|
| macOS | Ghostty, iTerm2, Kitty, WezTerm, Alacritty, Warp, Terminal.app |
| Linux | Kitty, WezTerm, Alacritty, Ghostty, Foot, GNOME Terminal, Konsole, XFCE4 Terminal, xterm |
| Windows | Windows Terminal (wt.exe), cmd.exe 回退 |
| cmux | 检测到 CMUX_WORKSPACE_ID 或显式启用 socket 控制(CMUX_SOCKET_PATH + CMUX_SOCKET_MODE=allowAll)时使用原生 cmux 工作流;每个 worktree 启动创建新的 cmux workspace |
| tmux | 在所有平台上创建新的 tmux window |
| WSL | 通过 wt.exe 跨系统调用 Windows Terminal |
检测优先级
- tmux - 所有平台运行时优先检测,已在 tmux 内时创建新 window,不切换终端应用
- cmux - 推荐用于新的 AI 工作流。通过
CMUX_WORKSPACE_ID或显式 socket 控制检测,每个 worktree 启动创建新的 cmux workspace - WSL - Linux 子系统使用 Windows Terminal
- 环境变量 - 检测
TERM_PROGRAM、KITTY_WINDOW_ID、GHOSTTY_RESOURCES_DIR等 - 回退 - 系统默认终端(Terminal.app、xterm、cmd.exe)
配置
首次使用时自动创建 .opencode/worktree.jsonc:
{
"$schema": "https://github.com/devcxl/opencode-worktree/raw/main/schemas/worktree.json",
"sync": {
// 从主 worktree 复制的文件
"copyFiles": [],
// 软链接的目录
"symlinkDirs": [],
// 排除的模式
"exclude": []
},
"hooks": {
// 创建后执行
"postCreate": [],
// 删除前执行
"preDelete": []
}
}
常见配置
Node.js 项目:
{
"sync": {
"copyFiles": [".env", ".env.local"],
"symlinkDirs": ["node_modules"]
},
"hooks": {
"postCreate": ["pnpm install"]
}
}
Docker 项目:
{
"sync": {
"copyFiles": [".env"]
},
"hooks": {
"postCreate": ["docker compose up -d"],
"preDelete": ["docker compose down"]
}
}
常见问题
为什么不直接用 git worktree?
手动 worktree 需要手动设置:git worktree add、打开终端、导航、启动 OpenCode。每一步都是摩擦。本插件提供一个命令完成全部流程,包括文件同步和生命周期钩子。
是否兼容 OpenCode Desktop?
本插件创建的 worktree 可在 OpenCode Desktop 中正常使用,但无法自动打开终端。插件的核心价值在于 CLI 优先工作流和 AI 自动化——如果只使用 Desktop,可能不需要本插件。
忘记删除 worktree 会怎样?
变更保留在 ~/.local/share/opencode/worktree/<project-id>/<branch>。分支存在于 git 中。你可以手动检出或删除它。插件不会强制清理——默认路径是方便,但非强制。
能否同时创建多个 worktree?
可以。每个 worktree 拥有独立的终端和 OpenCode 会话,完全隔离。
会不会影响现有的 git 工作流?
不会。它使用标准的 git worktree:git worktree list 可以看到它们,分支可以正常合并。
为什么不复用当前终端?
隔离。关闭 worktree 会话不会影响主工作流。如果 AI 出了什么问题,原始终端不受影响。
限制
安全
- 分支名会验证 git ref 规则和 shell 元字符
- 文件同步路径会验证防止目录遍历
- 钩子命令以用户权限在 worktree 目录中执行
终端启动
- macOS 上 Ghostty 使用内联命令避免权限弹窗
- Kitty 标签支持需要
allow_remote_control配置(回退到窗口模式) - 部分终端不支持标签页,会打开新的 OS 窗口
手动安装
声明
本项目并非由 OpenCode 团队构建,与 OpenCode 无任何关联。
许可
MIT