Preface¶
DeepSeek Harness (command name dsh) is an open-source runtime for intelligent agents developed by DeepSeek AI, currently in developer preview. Its core philosophy is “everything is a plugin”: models, tools, skills, conversations, sandboxes, and interfaces can all be replaced or combined via plugins. There is also an independent community plugin directory site deepseek-harness-plugin.com, which has no official affiliation with DeepSeek / Fangfu, and collects community repositories tagged with the dsh-plugin topic.
When running long tasks via the web interface, a single conversation can easily accumulate dozens or hundreds of prompts. The model will think, call tools, and paste code blocks, making the conversation view extremely long. To return to a question from “the tenth or so round”, you often have to scroll up with the mouse wheel. The dsh-milestone maintained by SnowCrescenter-tech adds a dot timeline to the right side of the conversation: each prompt corresponds to a dot, with hoverable metadata, and clicking jumps to that message.
This article is collated after cross-checking with the plugin directory page, GitHub repository README / package.json / cordis.patch.yml, npm package page, and the official DeepSeek Harness repository.
What is this¶
dsh-milestone is a conversation milestone navigation bar for the DeepSeek Harness Web interface, maintained by SnowCrescenter-tech, with the repository address SnowCrescenter-tech/dsh-milestone. The community directory categorizes it under the “Conversations and Messages” section, with an MIT license, and the primary language is TypeScript. The current version on both the repository and npm is 0.6.0 (released on 2026-08-14). The dsh.client.platform field in package.json is set to web, meaning it runs on the web interface, not as a terminal TUI plugin.
As of 2026-08-17, GitHub shows 17 stars; the directory page still showed 14 stars at the time, so star counts should be referenced from the repository page. The GitHub repository was created on 2026-08-13, with the latest push on 2026-08-14.
It solves a specific problem: in long conversations, prompts get buried under code blocks and tool calls, and there is no “prompt map” available. The plugin does not modify the harness source code, instead mounting itself onto shell.overlay using official slots, reads conversation snapshots, and draws the dot list. The Node.js side only has an empty apply(), with the actual logic running in the browser.
Core Features¶
The README details the capabilities, which are grouped below by usage path, all sourced directly from the repository documentation rather than extra inferences.
Dot Timeline. An equally spaced dot track appears on the right side of the conversation: the latest prompt is the darkest, and the earliest is the lightest, looking like a Git commit graph. Clicking a dot will smoothly scroll to the corresponding message; when scrolling the conversation, the prompt closest to the viewport will show a white ring to mark “where you have read up to”. Dots are grouped by rounds, and long rounds can be collapsed into a single entry. When history has not finished loading, a “···” will appear at the top; clicking it will load earlier messages, and prompt how many messages are currently displayed. When the dots exceed the visible area, you can scroll the milestone bar with the mouse wheel while hovering over it.
Hover Metadata. When hovering over a dot, you will see the sequence number, round number, message preview (first 80 characters), relative time, elapsed time, termination reason, time to first token (TTFT), tokens per second, as well as the model used in that round and the input/output token counts. The README specifies that these fields come from the harness’s native session snapshots (turnTimings / timeline.turns / turn-tail), and the plugin does not connect to any billing or telemetry services on its own. Dots will also display badges based on the round’s health status: red ring for errors, yellow ring for reaching limits, orange ring for retries, and blue/yellow pulsing for running/waiting for input.
Search, Bookmarks, and Prompt List. The search box filters dots by the full message content (not the 80-character summary), displays the hit count N/M in real time, press Enter to jump to the next match, and Esc to clear the search. The top can expand the “All Prompts” panel to see the sequence number, round number, and preview at a glance. You can click the star to bookmark a prompt while hovering, and bookmarks will persist after refresh; the top “★” button only shows bookmarked items. There is also cross-conversation search, which uses the harness’s native session.search index, and clicking results will open the corresponding conversation.
Copy, Fork, and Deep Links. Hovering allows you to copy the full text of that prompt, or “fork from here” to start a branched conversation. When jumping, the URL will include the #msg= anchor, so you can return to that message after refreshing or sharing the link with yourself. The interface text switches between Chinese and English following the harness’s language settings. Focus mode will dim the AI’s thinking blocks, and restore them when hovering or expanding.
Keyboard Controls. The milestone bar is a focusable component: use ↑↓ to move, Enter to jump, Home/End to go to the first/last entry. The README also notes that there are currently no global keyboard shortcuts to directly focus this track, and you need to switch to it using Tab.
Installation and Activation¶
The installation command given on the community directory page is:
dsh plugin add github:SnowCrescenter-tech/dsh-milestone
The directory page also reminds users: the plugin runs with the permissions of the current dsh process, and may execute code during installation. Please check the source repository and license before installing; if you need reproducible installations, pin the commit hash. The current main branch version 0.6.0 corresponds to commit c238f8c5d4afe153ede8559e5f7e3d1a652b6327, which can be written as:
dsh plugin add github:SnowCrescenter-tech/dsh-milestone#c238f8c5d4afe153ede8559e5f7e3d1a652b6327
The repository README additionally recommends installing from npm into a specified profile (the package name is dsh-milestone, same as the GitHub repository):
# Install from npm (recommended in README)
dsh plugin --profile demo add dsh-milestone
# Or install from GitHub source code
dsh plugin --profile demo add "github:SnowCrescenter-tech/dsh-milestone#main"
# Launch the Web UI
npx @deepseek-ai/dsh web # → http://127.0.0.1:3080
The README requires Node.js >= 24, noting that this is an official requirement from the harness. After installation, open a multi-turn conversation with at least two prompts for the milestone bar to appear on the right side of the conversation view; if there is only one prompt, the bar will not be drawn according to the repository instructions.
Typical Usage¶
After installing and opening the Web UI, follow the workflow from the README:
- Enter a multi-turn conversation (at least 2 user prompts).
- Look at the right-side dot track: top to bottom corresponds to the chronological order of prompts; when scrolling the main content, the white ring will follow the current viewport.
- Hover over a dot to check the preview, round number, elapsed time, model, and token usage; click the star to bookmark if you need to revisit it repeatedly.
- Click a dot to scroll the page to that message. To share or return later, check if the address bar includes the
#msg=anchor. - Use the search box to filter by keywords; after hitting matches, press Enter to jump sequentially. For earlier history not loaded in the current window, first click the “···” at the top to load more before searching.
- To see all prompts at once, open the top list panel; to focus only on the conversation text, enable focus mode to dim thinking blocks.
- To start a new branch from a specific round, use the fork option in the hover menu; after forking, you will need to manually open the sub-conversation from the conversation list.
The information structure of the hover card is drawn by the repository README as follows (fields appear depending on whether the round snapshot is complete):
3 / 5 · Round 2 ☆ Copy ✂
Help me optimize the performance of this code
5 minutes ago · Elapsed 1m30s · First token 1.2s · 12.4 tok/s
v4 · continue · 1280 / 2560 tok
Applicable Scenarios and Notes¶
It is suitable for users who run long conversations in the DeepSeek Harness web interface: coding agents that have made dozens of iterative changes, research tasks with a large amount of tool output, and scenarios where you need to later review “what was asked at the time / which model was used / how many tokens were spent”. It does not provide workspace rollback, does not modify model behavior, and only provides navigation and read-only metadata display.
There are several boundary cases to be aware of before use, all from the repository’s “Known Limitations”:
- In-site search only covers currently loaded message windows (initial 50 items). Earlier history must be loaded by clicking “···” before it can be searched.
- TTFT and tokens/second depend on turn position data; turns outside the window or unfinished will automatically hide these two items.
- The pulsing badge for running/waiting for input only lights up the latest visible prompt; if that round’s prompt has scrolled out of the loaded window, the pulse will not appear.
- Bookmarks are isolated per conversation and not shared across sessions; storage uses harness’s
store.persist(per-session localStorage). - Model name and token usage depend on the metadata of that round’s assistant node, and this line will not display if the data is missing.
- Forking branches from the selected message’s round will not automatically open the sub-conversation.
- If the deep link target is earlier than the currently loaded window, the plugin will first attempt to load earlier history before positioning; constrained by loading limits, extremely old history may fail to locate.
- Cross-conversation search relies on
session.search, with results being snippets (≤240 characters) and up to 20 items. - Focus mode only affects the thinking blocks in the current conversation view, and does not affect other plugins or tool cards.
Regarding security, the directory page clearly states: the plugin runs with the permissions of the current dsh process, and may execute code during installation. Before installing, you should open the GitHub repository to review the source code and MIT license. For reproducible environments, do not long-track the floating main branch, instead use the commit hash mentioned above.
Summary¶
dsh-milestone condenses every prompt in a long conversation into a dot track on the right side: hover to see time, round number, elapsed time, and usage, click to jump, and use search, bookmarks, and #msg= deep links to revisit repeatedly. It mounts onto the official shell.overlay without modifying harness source code, but only serves the web interface, and capabilities like search, badges, and usage metrics are constrained by the loaded message window.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-milestone/
GitHub: https://github.com/SnowCrescenter-tech/dsh-milestone