Introduction

DeepSeek Harness (DSH) provides a fork API for session branching, but the Web interface currently only supports branching from the latest turn of a conversation (tail). In addition, the official sidebar is designed to remain flat, so users cannot view the historical lineage of a session. For developers who need to backtrack to a specific context within a complex conversation flow, there is no intuitive branch management entry. dsh-session-git extends the Web UI through a plugin, allowing users to branch from any completed turn in the history and rendering a family tree in the child session header. It focuses on session lineage management.

What Is This?

dsh-session-git is an accompanying plugin for DeepSeek Harness, maintained by JUANWANG-BUAA and released under the MIT license. Its core purpose is session lineage management: it allows users to branch from any completed turn (turn/end) in the conversation history and displays a family tree in the child session header. Unlike plugins that rewrite files or merge logs, it does not modify workspace files and does not alter the source session.

Core Features

  1. Header branch selection: Provides a “Branch from turn” option in the session header, listing all completed turns (turn/end) within the current loaded window for user selection. This does not directly trigger a branch; instead, it provides the selection entry point.
  2. Historical branch entry: For earlier turns that did not produce files, provides a “Branch from here” button.
  3. Family tree display: Displays a family tree in the session header via a Popover and shows a read-only parent session chip.
  4. Source session protection: The plugin does not archive, cancel, or prompt changes to the source session; the source session remains unchanged.
  5. Duplicate branch prevention: Rejects overlapping branch operations from the same source (error.in-flight).
  6. Compatibility: Strictly compatible with the fork semantics of DeepSeek Harness 0.1.0-rc.5.

Installation and Enablement

Before installing, ensure that DeepSeek Harness Web mode is already installed and that the Node.js version meets ^22.19.0 || >=24.

Run the following command to install the prebuilt package:

dsh plugin --profile web add https://github.com/JUANWANG-BUAA/dsh-session-git/releases/latest/download/dsh-session-git.tgz

After installation, you can verify the configuration with the following command:

dsh --profile web --dump-config | grep session-git

Start Web mode. If debugging is needed, it is recommended to unset the environment variable DSH_HOME:

env -u DSH_HOME dsh --profile web

Typical Usage

  1. Open a conversation that contains at least one completed turn.
  2. In the session header, use Branch from turn to select a split point, or use Branch from here for an early turn that did not create files.
  3. A child session will open, containing the history before that turn (not including subsequent turns).
  4. In the child session header, use the Parent button or the family tree popover to return to the source session.
    Note: Child session titles follow the official (1) / (n) numbering convention.

Use Cases and Notes

  • Environment requirements: It must be run with --profile web, and the Node.js version must meet the requirements.
  • File rewrite difference: The plugin only manages session branching and does not rewrite workspace files. If you need file time-travel functionality, use a dedicated rewind plugin.
  • Title rules: When a turn produces files, official deliverables occupy the turnTail chain, so use the header selector to perform the split. Child session titles are managed by the official logic.
  • Parent session state: Archived parent sessions or parent sessions outside the workspace are rendered as placeholders.
  • Branching logic: session.fork copies the current workspace at the moment of forking, not a file snapshot from that turn. This plugin is not responsible for rolling back file system state.

Conclusion

By adding historical branch selection and family tree display to the Web interface, this plugin fills the gap in historical backtracking left by the official fork feature. It focuses on the visualization and navigation of session lineage, does not involve file system operations, and is well suited for developers who need context isolation and backtracking capability in long-running conversations.