Preface¶
DeepSeek Harness (hereinafter referred to as dsh) packages model adaptation, tools, session logs, and the web interface all as plugins, with the core philosophy of “everything is a plugin”. When using the web UI to run agents on a daily basis, a single conversation can often be very long: you may have revised requirements, asked follow-up questions about errors, and inserted supplementary messages midway. When you later want to find a specific message you sent, you can only scroll back and forth in the conversation area.
The community plugin dsh-navbar does a very specific thing: it places a row of evenly spaced nodes on the right edge of the conversation area, with a dot corresponding to each user message. Hover over them to see a preview, and click to jump back to that message. This article explains what it is, how to install it, and how to use it, based on cross-checking from the plugin directory page, GitHub repository README, and source code.
First, you need to clarify two things. DeepSeek Harness itself is an open-source agent runtime by DeepSeek; while the DeepSeek Harness Plugin Repository is an independent community directory, not affiliated with DeepSeek / Fangfu, and is not an official app store. The directory page labels dsh-navbar as an “official bundle plugin”, which only means it adopts the official bundle form of dsh – dsh.bundle plus the browser-side client channel – and does not mean it is produced by DeepSeek officially.
What is this¶
dsh-navbar is a UI enhancement plugin maintained by vlln, with the npm package name @vlln/dsh-navbar. The current repository version is 0.3.0, licensed under MIT. As of August 17, 2026, the GitHub repository has 31 stars, and its primary language is TypeScript. It was included in the community directory on August 15, 2026, categorized under “UI Enhancement”.
The problem it solves can be summarized in one sentence: use a row of nodes on the right edge of the Chat view to index the user messages that have been rendered on the current page, so you don’t have to scroll through the conversation area as much.
It is purely a browser-side plugin. The apply() function on the Node side is an empty function, only used to allow the bundle to be attached to the profile; the actual navigation bar, preview cards, and pin buttons are all written in the client bundle. package.json declares "platform": "web" and requires Node.js >=22.19.0 and dsh >=0.1.0-rc.5. The repository README states that it is implemented according to the “conversation node navigation bar” specification from issue 144 of the dsh-external repository, and does not register model-facing tools or open additional data channels.
Core Features¶
Based on the “More Introduction” on the directory page, the capability table in the README, and src/client/index.ts, the confirmed capabilities of the current version are as follows.
- Right-edge node row: A vertical column of dots appears on the right side of the conversation area, with one dot for each user message. It is almost invisible by default, only appearing when the mouse hovers near the navigation bar. The navigation bar will automatically hide if there are fewer than 2 user messages in the current session, or if you are not on the chat page.
- Follow reading position: The current message being read will turn into a brand blue capsule (called the active pill in the source code) about 22px wide, and it will move along with the conversation area when scrolling.
- Hover preview: When the cursor stops on a node, a preview card will pop up on the left, with the text truncated to 6 lines, visually aligned with the HoverCard that comes with the web UI. The entire navigation bar (including the gaps between nodes) will respond to hovering: the preview will switch to follow the nearest node, and the corresponding dot will stretch into a gray pill to indicate “where you will jump to if you click now”, with no dead area in between.
- Click to jump: You don’t need to accurately click the 7px small dot; the entire navigation bar is clickable, and it will jump to the nearest node. After jumping, it will smoothly scroll to the corresponding message and add a brand blue highlight ring. The source code also enlarges the hot zone for the pill to reduce aiming difficulty.
- Scroll switching: When the cursor is hovering over the navigation bar, scrolling the mouse wheel will jump to the previous or next user message, and prevent the conversation area itself from scrolling. The source code applies a throttle of about 120ms to the scroll wheel to avoid jumping multiple times with a single scroll pulse.
- Sliding window: When there are more than 11 nodes, the navigation bar will only display a segment near the currently active position (about 5 nodes before and after the active node), with thin dots at both ends to indicate there are more nodes, preventing the right edge from being filled with dots.
- Message pinning: Move your mouse over the action bar of an assistant message, and a 📌 button will appear between copy and Good response. Click it, and the corresponding turn in the navigation bar will turn into a thin golden oval disc, which will always be visible; the preview card will have a 📌 badge, and clicking it will jump directly to the pinned reply. Click again to unpin. The pinned status is saved in the browser’s
localStorageper session, and will persist after page refresh.
Where the data comes from also determines its boundaries. As clearly stated in the README, it has zero data channel dependencies, and only relies on the official user message anchor attribute data-time-hover-root (the comment mentions the UserStyleBubble line starting from August 6th). There is no polling, routing, or tools. Therefore, the navigation bar indexes the user messages that have been rendered in the current conversation area, and does not pull all earlier history that has not been loaded into the DOM in the background.
Installation and Activation¶
First confirm that you can start the dsh web UI locally. The official repository’s startup method is:
npx @deepseek-ai/dsh web
The default interface is at http://127.0.0.1:3080. dsh-navbar only declares the web platform, so installing it on a headless profile without a browser interface is meaningless.
The installation command given on the community directory page is:
dsh plugin add github:vlln/dsh-navbar
The recommended method from the repository README is more explicit, installing it to the web profile and pinning to the main branch (the build artifacts are already included in the repository, so local building will not be triggered when installing from the git source):
dsh plugin --profile web add "github:vlln/dsh-navbar#main"
If you have cloned the repository locally, you can also install it from the directory:
git clone https://github.com/vlln/dsh-navbar.git
cd dsh-navbar
dsh plugin --profile web add .
The directory page also reminds: if you need a reproducible installation, please fix the commit hash. Replace #main with a specific commit, for example, the commit of the repository’s main branch on August 15, 2026:
dsh plugin add github:vlln/dsh-navbar#10e9d1546db28c499687d66a369e548cd3f52237
You need to restart the web service for the changes to take effect. Afterwards, you can disable or re-enable it in the “Plugins” panel of the settings page. It works immediately after installation, with no additional commands required, and it does not register tools for the model.
The plugin runs with the permissions of the current dsh process, and may execute code during installation. Before installing, please visit the GitHub repository to review the source code and MIT license, and do not install it just based on the description on the directory page.
Usage¶
Open a Chat session that contains at least two user messages. A node bar will appear on the right edge of the conversation area.
- Move your mouse over the right-edge node row, and the preview card will display the beginning of the corresponding user message.
- Click a node (or the blank space near the node) to jump to that message; after jumping, a blue highlight ring will prompt the landing position.
- When the cursor is hovering over the navigation bar, use the mouse wheel to switch between adjacent user messages.
- To mark a reply, hover over the action bar of that assistant message and click 📌. The node for that turn will turn into a golden oval disc; click again to cancel.
- When the system has “Reduce motion” enabled (
prefers-reduced-motion), the plugin will turn off transition animations.
If the navigation bar does not appear, you can check the following items: whether you are currently on the Chat view; whether there are at least two user messages in this session; whether you have fully restarted dsh web after installation (refreshing the browser is not enough); whether the plugin is disabled in the settings.
Applicable Scenarios and Notes¶
It is suitable for these situations: when the conversation in the web UI has become very long and you often need to jump back to a specific original message you sent; or when you want to pin a key reply to the navigation bar so you can find it at a glance later. It does not change the agent loop, nor does it add tools callable by the model, it only changes how you read the conversation in the browser.
There are several boundary conditions you need to know before using it.
First, this is a community plugin, not an official DeepSeek application. The directory is an independent website; the repository LICENSE states that the copyright belongs to Sam Gao (vlln), 2026, under the MIT license. The so-called “official bundle” only describes the packaging form.
Second, it is bound to the current DOM contract of the web UI. The user message rows rely on data-time-hover-root, and the pin buttons are attached to the official conversation.chat.assistant-actions slot. If the structure of the dsh web page changes in a future version, the navigation bar may be misaligned or stop displaying entirely. The source code comments also show that it has made adaptations for several rounds of scroll judgment in August 8, 10, and 11, indicating that this type of UI plugin will follow the host version updates.
Third, earlier messages that have not been rendered into the page will not appear in the node row. If you need the ability to “load all conversation history at once without waiting for page turning”, this plugin’s design goals do not cover that scenario.
Fourth, the pinned status is stored in the local browser’s localStorage, and will not be carried over when switching browsers, clearing site data, or changing devices.
Fifth, check the source code and license before installing. The plugin has the same permissions as the current dsh process; the directory page also includes the same warning.
Summary¶
dsh-navbar turns the task of “finding a specific user message in a long conversation” into a row of nodes on the right edge: hover to preview, click to jump, scroll to switch, and you can also pin key replies into golden nodes. It is lightweight, does not register tools, uses the official bundle’s web client channel, and works immediately after restarting the service.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-navbar/
GitHub: https://github.com/vlln/dsh-navbar