Preface

The web interface of DeepSeek Harness (dsh) runs locally by default, with the conversation list in the sidebar. After opening a specific chat, the browser address bar usually still stays at the root path. If you refresh the page, open a new tab, or share the current address with a colleague, the recipient will not land directly on the same conversation, and will have to click through the sidebar manually.

The community plugin dsh-session-deeplink does one very specific thing: it writes the current conversation ID into the ?session= parameter of the URL, and switches back to the corresponding conversation when the link is opened. It is a web client plugin and does not attach any services to the host process.

This article is collated after cross-checking the community directory page, GitHub repository README, client source code, and npm package page. The community plugin directory deepseek-harness-plugin.com is an independent site and has no official affiliation with DeepSeek or Magic Square. The core philosophy of DeepSeek Harness itself is “everything is a plugin”, and plugins are released by the community.

What is this

dsh-session-deeplink is a conversation deep link plugin for the DeepSeek Harness web client, maintained by R3alloc, licensed under MIT. The directory page categorizes it under the “Conversations and Messages” section. As of 2026-08-18, the GitHub repository R3alloc/dsh-session-deeplink has 6 stars, and the version on npm is 0.1.1.

It solves the problem of enabling direct URL addressing for conversations on the local machine (or the same conversation list). The README clearly states that as long as the target conversation still exists in the DSH conversation list, opening this URL will restore the same conversation. It is not a cloud sharing feature that sends conversation content to the public internet, nor does it automatically synchronize conversation storage across machines.

The repository splits the plugin into two parts:
- Node entry src/index.ts: The apply method is empty, it does not inject or provide any host services, only to allow the Loader to recognize this entry and scan for the dsh.client declaration.
- Browser-side src/client/index.ts: The actual working part. In package.json, dsh.client.platform is set to web, and it declares an injection dependency on @deepseek-ai/dsh-client-runtime.

Core Features

Based on the README and client source code, the capabilities can be summarized into the following four points.

Open a specified conversation via ?session=

The query parameter name is fixed as session. The address format is:

http://127.0.0.1:3080/?session=session-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

3080 is the default port for the DeepSeek Harness Web UI, as shown in the README example. The plugin reads this parameter after the conversation list enters the ready state: if the target ID exists in sessions.list and the current conversation is not the target, it calls ctx.sessions.open(target). It only processes the initial parameter once, and will not repeatedly open conversations based on the URL afterwards.

If the target does not exist, the source code will print a console.warn and will not attempt to open it. The repository’s test coverage covers this scenario: changing the address bar back to a currently valid session will not change the sidebar selection.

Sync address bar when switching conversations

After the initial deep link is processed, the plugin subscribes to sessions.list. When the current conversation changes, it uses history.replaceState to update the session parameter to the new ID. It uses replace instead of push, so switching conversations will not pile up a series of nearly identical pages in the browser history.

Preserve other query parameters and fragments

When syncing, only the session key is modified, while pathname, other query parameters, and hash are retained. The repository’s test coverage covers this scenario: if the original page was /?mode=test#conversation, after switching conversations, the URL will include the session= parameter while retaining mode=test and #conversation.

When there is no current conversation, the session parameter will be removed instead of leaving an empty value.

Only runs in the browser

Both the README and the Node entry comments state that no host services are added. cordis.patch.yml only inserts the plugin with ID session-deeplink into the profile’s layer stack, so that the client-side part can be recognized in the browser roster.

Installation and Activation

The installation command given on the directory page is:

dsh plugin add github:R3alloc/dsh-session-deeplink

The repository README requires installing it into the web profile, since this is a web client plugin. The author provides two installation methods:

Install from npm (the README recommends using this for daily use, the client bundle is already included in the package, no need to run a build during installation):

dsh plugin --profile web add dsh-session-deeplink

Install from GitHub:

dsh plugin --profile web add github:R3alloc/dsh-session-deeplink

Git dependencies will run the prepare script in the package to build locally. The README notes that pnpm 10 and above may require first granting build authorization in the corresponding profile’s pnpm-workspace.yaml, then re-running the installation:

allowBuilds:
  dsh-session-deeplink: true

For reproducible installations, the directory page recommends pinning the commit hash. When checking the repository’s main branch for this article, the latest commit is f6250b6c5ec6bcc8a6f715b59d034664f409281e (2026-08-14), which can be used as:

dsh plugin --profile web add github:R3alloc/dsh-session-deeplink#f6250b6c5ec6bcc8a6f715b59d034664f409281e

Both the directory page and the README remind users that the plugin runs with the permissions of the current dsh process, and may execute code during installation. Please inspect the source code repository and license before installing.

Restart dsh web after installation.

Typical Usage

  1. Start the Web UI (the official repository’s default address is http://127.0.0.1:3080) and open any existing conversation.
  2. The address bar should update to a URL with the ?session= parameter. Bookmark this link, copy it to another tab, or share it with someone using the same conversation list.
  3. When you reopen the page with this URL, as long as the conversation is still in the list, the interface will switch to the corresponding conversation without needing to click through the sidebar.
  4. Afterwards, switching conversations in the sidebar will update the ID in the address bar; refreshing the page should keep you on the current conversation.

No additional configuration is required. There are no adjustable option objects in the source code, and the query key name is hardcoded as session.

Applicable Scenarios and Notes

Suitable for these situations:
- Opening multiple tabs locally, each pinned to a different conversation
- Bookmarking an ongoing conversation and returning to it the next day using the same URL
- Pointing team members to a specific conversation when sharing the same DSH conversation storage

Please note the following before use:
1. Capability Boundaries. The link can only open the conversation if it already exists in the current DSH conversation list. If the recipient does not have this conversation, opening the link will not pull the conversation content over automatically. The plugin also does not handle copying conversation context or registering custom protocols.
2. Web-only Functionality. package.json declares dsh.client.platform as web. Installing it into a non-web profile will not activate the browser-side logic.
3. Version Compatibility. The README states that the current version is developed based on DeepSeek Harness 0.1.0-rc.6. Harness is still in developer preview, and subsequent versions may require synchronizing plugin updates.
4. Security. The plugin runs with the permissions of the current dsh process. Installing from GitHub will also execute the prepare build script locally. You should read src/client/index.ts, src/index.ts, and the MIT license before installing. Using the npm package for daily installation is preferred to avoid running build scripts during the installation phase.
5. Failure Behavior. When the conversation is deleted or the ID is entered incorrectly, the plugin only prints a warning and will not throw an error to interrupt the interface; the address bar will sync to the currently valid conversation.

Summary

dsh-session-deeplink turns DSH web conversations into a query parameter in the address bar: it supports opening conversations, syncing the address bar, and preserving other URL fragments, without adding any services to the host side. Its feature set is narrow, but it directly addresses daily frictions like “losing the conversation on refresh” and “links not going back to the right place”.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-session-deeplink/

GitHub: https://github.com/R3alloc/dsh-session-deeplink