DeepSeek Harness plugin

dsh-task-worktree

Complete task-scoped git worktrees for DSH: per-repo manifest for durable state, branch-and-path names (slashes allowed, e.g. refactor/logging), bring-back to main or direct commit, optional carry-over of uncommitted main changes.

Jump to install

Source facts

Repository
Letter2025/dsh-task-worktree
Latest update
Aug 19, 2026
Category
Git & Code Review
GitHub stars
0

Install

Start with a prompt that asks an agent to read the source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to read the page and repository first.

Do not install anything yet. Read this DeepSeek Harness plugin and explain what it does, which files, networks, or credentials it can access, and how to install and remove it.

Plugin page: https://deepseekplugins.org/plugins/Letter2025/dsh-task-worktree
GitHub: https://github.com/Letter2025/dsh-task-worktree
Plugin: dsh-task-worktree
Author: Letter2025
Install command: dsh plugin --profile web add github:Letter2025/dsh-task-worktree

Do not run the install command until I confirm.

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-task-worktree

English | [中文](README.zh.md)

Complete Git worktree support for DeepSeek Harness.

A community plugin that gives DSH the task-scoped worktree workflow of Qoder / Codex / Claude Code: each task gets its own isolated git worktree checkout on its own branch, recorded in a per-repo manifest so it survives sessions and restarts. The main workspace stays untouched; the worktree is registered as a DSH workspace so you can open it from the GUI and work there, then bring the changes back (Move to local) or commit directly on the worktree branch — always under explicit human control.

It follows the design of Qoder's Worktree execution environment, Codex's codex worktree create --permanent, and Claude Code's --worktree sessions, adapted to DSH's session/workspace model.

Design

Concept (this plugin)QoderCodexClaude Code
Task-scoped isolated checkoutWorktree execution environmentcodex worktree create --permanentclaude --worktree <name>
Worktrees live in <repo>/.dsh-worktrees/background worktree checkout.codex/worktrees/.claude/worktrees/
Durable registry survives restartsper-sessionglobal indexsession binding
Own branch per taskbranch selectorworktree-<name>
Open as a DSH workspace from the GUIpanel selectorcodex worktree openlaunches into the worktree
Bring changes back to mainMove to localexit/cleanup prompt
Direct commit on the worktree branchReview & commit panelcommit in the worktree sessioncommit in the worktree
Carry uncommitted main changes inInclude uncommitted changes toggle.worktreeinclude
Auto-ignore the worktree directory.gitignore tip

How it works

Local session                                Worktree session (open <.dsh-worktrees/<name>> as workspace)
   │  agent calls worktree_create                 │
   ├─────────────────────────────────────────────►│ isolated checkout, normal dev & commits
   └──────────────────────────────────────────────┴─ done, back to the local session
        │
        ├─ /worktree bring-back <name>  → merge worktree branch into the main branch
        │                                 (requires a clean main workspace)
        ├─ /worktree finish <name> <msg> → commit on the worktree branch, keep it there
        └─ /worktree remove <name>       → delete the worktree + branch

1. Ask the agent to isolate a task: "用 worktree 隔离干活,任务叫 xxx" — the model calls worktree_create; the name is both the branch and the relative path (slashes allowed, e.g. refactor/logging.dsh-worktrees/worktree/refactor/logging) and the worktree is registered as a workspace. 2. Open the returned path as a workspace in the GUI — that session's cwd is the worktree, so every edit stays inside it; subagents inherit the isolation. 3. When done, go back to the local session and choose: - /worktree bring-back <name> — commit any worktree changes onto its branch, then merge the branch back into your current main branch (Qoder's Move to local); - /worktree finish <name> <message> — commit directly on the worktree branch and leave it there; - /worktree remove <name> (or --force) — delete the worktree and its branch. 4. /worktree status / list / prune inspect and clean up.

Install

dsh plugin --profile web add dsh-task-worktree

Requires: DeepSeek Harness 0.1.0-rc.7 package line, Git 2.31+, Node 20+.

Model tools

ToolPurpose
worktree_create {name, baseCommit?, includeUncommitted?}Create a task worktree (name = branch and relative path, slashes allowed); optionally carry uncommitted main-workspace changes in
worktree_listList the repository's managed worktrees (state / dirty / branch)
worktree_status {name?}Status of one worktree, or the one the current session is inside

Delivery and cleanup actions (finish / bring-back / remove) stay human-only — the model never reaches them.

Human commands

/worktree create <name> [<base>] [--carry]
/worktree list
/worktree status [<name>]
/worktree finish <name> <message>
/worktree bring-back <name> [<message>]
/worktree remove <name> [--force]
/worktree prune

Safety model

  • @deepseek-ai/* are peerDependencies only — the host supplies them; the plugin never installs infrastructure copies into a profile (a second instance breaks TOOL_RUNTIME_SCHEDULER's unique symbol and kills tool calls).
  • bring-back requires a clean main workspace (MAIN_DIRTY) and refuses to run from inside the worktree.
  • remove refuses the worktree the current session is working inside (IN_USE).
  • All git operations go through ctx.subprocess (harness-managed); the test path uses a child_process runner.
  • Manifest writes are atomic (tmp + rename); prune drops records whose checkout no longer exists.

Local development

npm test              # smoke test: full lifecycle on a scratch repository
npm pack --dry-run    # inspect the tarball before publishing

License

MIT — see [LICENSE](LICENSE)