前言¶
在 DSH 中跑编码任务时,一个常见问题是 Agent 直接修改 Local checkout:任务增量容易和已有 staged、unstaged、untracked 内容混在一起;多个任务也可能争用同一个 checkout。
dsh-git-worktree 针对这个点,把“施工”和“交付”拆开:Agent 在隔离 Worktree 中修改和测试,用户先查看可撤回的 Local Preview,确认后再由 Host 保存本轮任务增量。
这是什么¶
wloops/dsh-git-worktree 是 DeepSeek Harness 的实验性 Session Target 插件,由 wloops 维护,使用 MIT 许可证。
它的一句话定位是:让 Agent 在真实 Git Worktree 中执行任务,先预览修改,再由用户明确确认是否保存。
它是独立维护的社区插件,不是 DeepSeek 官方项目,也不代表官方背书、合作或授权。当前定位是项目级 Worktree Session 交付插件,不是跨项目全局 Worktree Manager。
核心功能¶
- 每个任务拥有独立 Git Worktree、Workspace 和唯一 owner Session。
- Agent 只在隔离 Worktree 中修改和测试。
- 用户先查看可撤回的 Local Preview。
- Host 只保存本轮任务增量,不吞入无关 Local 修改。
- 无法证明安全时停止写入并保留恢复证据。
- Managed owner 以 Branch Icon 和状态 Badge 直接归入原 Local 项目;普通 Local Session 保持官方行为。
- Ready 后由用户选择“预览修改”“确认并保存”或其他操作。
- 预览写入 Local 但不立即创建 Commit,可安全撤回。
- 最终只为本轮累计增量创建一个 Commit。
- Checkpoint 只存在于 managed Worktree,最终仍合并为一次交付。
- 处理 Local 漂移、冲突、
preview_detached、重启和 cleanup 中断。 - 多个 Worktree 可并行工作,同一 Local 项目一次只接受一个 Preview。
- 交付并 cleanup 后,可在原 Session 和对话中开始下一轮。
安装与启用¶
环境要求¶
- Node.js
^22.19.0 || >=24.0.0 - DeepSeek Harness
0.1.1-rc.2包线 - Harness Web Client
- Git Workspace
安装¶
下面命令用于在 web profile 下安装插件:
dsh plugin --profile web add dsh-git-worktree
如果需要使用指定版本:
dsh plugin --profile web add github:wloops/dsh-git-worktree#v0.7.1
启用¶
安装后打开 Git Workspace,在新建 Session 时启用 Worktree。
已有 Local Session 也可以让模型调用 worktree_create 创建隔离 Session。
第一次使用建议先完成一次完整流程:
创建 → 预览修改 → 确认并保存 → cleanup
典型用法¶
验收时怎么选¶
根据目标选择操作:
| 目标 | 操作 |
|---|---|
| 先在 Local 查看效果 | 预览修改 |
| Preview 没问题 | 确认并保存 |
| 任务很长,先固定进度 | 保存阶段并继续 |
| 还要让 Agent 改代码 | 继续修改或撤回本次预览 |
| 不需要 Preview | 跳过预览并保存 |
几个关键行为如下:
- “预览修改”会写入 Local,但不立即创建 Commit,可安全撤回。
- “确认并保存”最终只为本轮累计增量创建一个 Commit。
- “保存阶段并继续”会在 managed Worktree 中保存 Checkpoint,最终仍合并为一次交付。
本地开发¶
如果你要参与该插件开发,按下面命令安装依赖并跑检查:
pnpm install
pnpm run typecheck
pnpm test
pnpm run build
pnpm run check:publish
端到端启动:
pnpm run dev:dsh
安全边界与当前限制¶
- 所有 Local 写入都由 Host 在执行前重新检查,浏览器缓存和模型输出不构成写入授权。
- 插件会验证 Session、checkout、revision、Git 身份、Preview receipt 和 Local 状态;遇到分支切换、重叠冲突、未知残余或恢复证据不足时会 fail closed。
- owner 缺失、额外 Session 或归属冲突时保留原 Workspace,避免静默隐藏数据。
- Worktree-aware Fork 尚未实现,本版不显示普通 Fork 入口。
- 子 Agent 继承父 Session cwd,插件不额外创建 per-child Worktree。
- Checkpoint 不提供历史编辑、删除、重排或任意回退。
- Domi 的全局 Manager、Local Maintenance、依赖快照和完整 collaborator 生命周期不在本插件范围内。
适用场景与注意¶
适合这类使用场景:
- 想让 Agent 先改、先测,不直接污染 Local checkout。
- 想在 Local 中看到可撤回预览后再决定是否保存。
- 需要把本轮任务增量保存成一次交付,而不是混入其他本地修改。
- 希望多个 Worktree 可以并行工作,但同一 Local 项目一次只接受一个 Preview。
使用前注意:
- 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
- 它是独立社区插件,不是 DeepSeek 官方项目,也不代表官方背书、合作或授权。
- 社区目录页提供插件信息,但不等同于官方应用商店。
结尾¶
dsh-git-worktree 的核心价值,是把 Agent 的本地修改从“直接落盘”变成“隔离施工、人工预览、确认交付”。如果你希望在 DSH 中控制 Agent 修改 Local 的边界,它提供了一个可用的工作流方案。
目录页:
https://www.skillhub.cn/plugins/wloops/dsh-git-worktree
GitHub: