Introduction¶
When debugging agents with DeepSeek Harness (DSH), a session often runs for dozens of turns. To revisit a past instruction, you must scroll all the way up in the conversation stream. The longer the window, the harder it is to locate the message. Claude Code and Codex desktop versions place a row of “turn marks” strips on the left edge of the session—one strip per message—allowing you to jump to it with a click. This interaction is currently missing in DSH’s Web UI.
The dsh-turn-marks plugin introduced below fills this gap: it does not modify native components, instead adding a row of message bars to the left edge of the session, providing navigation, preview, and position indication.
What is this¶
dsh-turn-marks is a DSH Web plugin maintained by magicOF2 (MIT License). Its mission is simple: to add Claude Code / Codex desktop-style turn-mark message bars to the left edge of the DeepSeek Harness Web UI. Each user message (including slash commands) gets a small bar; clicking jumps to it, hovering previews it, and the current bar turns white.
It completes all work on the browser side: no Host logic, no external dependencies, no network requests, and no API Key required.
Core Features¶
The plugin draws bars in the gap between the conversation content area and the left edge of the window, arranged vertically. Specific behaviors are as follows:
-
Every time you send a user message in the session, a new gray bar appears on the left. Input for slash commands like
/goalis counted as one bar as well. -
Clicking any bar smoothly scrolls the session so that the corresponding message aligns with the top of the viewport; the clicked bar and the bar corresponding to the message within the current viewport turn white. The white bar automatically follows when you manually scroll.
-
Hovering over a bar pops up a preview bubble showing the message ID, time, and the first 180 characters of the content.
-
The layout is dense: the maximum center distance between bars is 24px. When there are few messages, they cluster in the middle of the track; when there are many, the spacing automatically shrinks to fill the entire track.
Implementation-wise, three points are worth noting:
- Registered in the
conversation.input.dockslot; incremental mounting without replacing any native components. - Colors use DSH theme CSS variables, automatically adapting to light and dark modes.
- Automatically re-renders whenever the session snapshot changes; the plugin requires no subscription or polling.
Installation and Activation¶
Install from GitHub by running:
dsh plugin --profile web add https://github.com/magicOF2/dsh-turn-marks.git
If you want to develop locally or use it for yourself, you can clone it first and add it via a link:
git clone https://github.com/magicOF2/dsh-turn-marks.git ~/.dsh/external/dsh-turn-marks
dsh plugin --profile web add link:C:/Users/<your_username>/.dsh/external/dsh-turn-marks
After installation, you need to restart dsh web and perform a hard refresh (Ctrl+Shift+R) in the browser. The plugin will then load automatically with the GUI; no manual activation is required.
Typical Usage¶
After completing the steps above, daily usage involves four steps:
- Open any session and send a few messages; corresponding gray bars appear on the left side of the conversation.
- Click any bar; the session smoothly scrolls to that message, and the bar turns white.
- Hover over any bar to pop up a preview bubble for that message (ID + Time + First 180 chars of content).
- Manually scroll up and down; the white bar automatically follows the message currently within the viewport.
If you need to adjust the appearance, constants are left at the top of lib/client.js: GUTTER_INSET=6 (pixels from the left edge of the scroll container to the track), GUTTER_TOP=16, BAR_SPACING=24 (maximum center distance between bars), HIT_SIZE=20 (clickable area), BAR_HEIGHT=14 (visible bar height), TOP_MARGIN=8 (margin of the jumped message from the top of the viewport), and PREVIEW_MAX=180 (preview truncation length). The pure logic part is extracted into pure functions, so you can run it directly after modification:
npm test
Use Cases and Notes¶
Suitable scenarios are straightforward: long sessions, multi-turn iterations, and people who frequently mix slash commands. The longer the session, the more scrolling time saved by this row of bars.
Several usage limitations should be noted first:
- Bars only count user messages and slash commands that are loaded within the current window. If earlier history is loaded, the number of bars will automatically increase.
- Bars are automatically hidden in non-chat views (such as traces).
- When loading more history, clicking may have no effect if the message rows have not yet been rendered; it resumes after the next snapshot change.
- A single slash command counts as one bar; clicking prioritizes jumping to the input bubble, result cards do not count as independent messages. For commands without an input bubble (such as
/permission), the bar corresponds to its result card row.
Compatible with DeepSeek Harness 0.1.0-rc.6 and above, Cordis 4.x, and Chrome / Edge / Firefox / Safari’s latest two major versions.
A final reminder: plugins run with the permissions of the current dsh process. It is recommended to check the source code and license before installing. dsh-turn-marks is a pure browser-side implementation with no data upload, and the license is MIT.
Conclusion¶
dsh-turn-marks doesn’t do much, but it solves the most frequent operation in long sessions—quickly returning to a specific message. It is implemented with restraint, is non-intrusive, and uninstalls cleanly. It is a small tool that you rarely notice after installing.
- GitHub: https://github.com/magicOF2/dsh-turn-marks
- Community Plugin Directory: https://www.skillhub.cn/plugins/magicOF2/dsh-turn-marks