lisycotana/dsh-workflow-worktree ↗★ 0
dsh-workflow-worktree
Git worktree isolation backend for DeepSeek Harness workflows: binds each write-capable workflow agent to its own recoverable checkout.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:lisycotana/dsh-workflow-worktree说明文档
阅读完整 README ↗dsh-workflow-worktree
Git worktree isolation for DeepSeek Harness workflows — every write-capable workflow agent gets its own checkout that cannot touch your working tree, and survives a crash.
The gap this fills
@dsh-external/workflow reserves a
seam for worktree isolation and deliberately ships no implementation. Its README
is explicit: "worktree 通过 registerIsolationAdapter() 接入,未注册时明确失败."
So a workflow task declaring isolation: 'worktree' fails today:
workflow worktree isolation requested but no isolation adapter is configured
This plugin is that adapter.
Not another worktree manager
Several plugins manage git worktrees. This one is not for you to use — it is for the workflow engine to use.
| manual worktree plugins | dsh-workflow-worktree | |
|---|---|---|
| who creates it | you, or the model, on request | the workflow engine, per task |
| bound to | a name you pick | runId + taskId + session |
| lifetime | permanent until you delete it | the task's, with dirty-lane retention |
| entry point | agent tools / chat commands | registerIsolationAdapter() |
If you want to fork a workspace and keep working in it, use a manual plugin such
as dsh-worktree. If you want
spawnAgent({ isolation: 'worktree' }) to work, use this one. They coexist.
Install
dsh plugin --profile web add @dsh-external/workflow
dsh plugin --profile web add dsh-workflow-worktree
Then a workflow task can ask for isolation:
await wf.spawnAgent({
name: 'refactor-auth',
prompt: '…',
isolation: 'worktree', // ← previously a hard failure
})
What a lane is
/.dsh-worktrees/wf-- the checkout
dsh/wf-- its branch
/.dsh-worktrees/lanes.json the manifest