Introduction¶
After running DSH (DeepSeek Harness) for a while, the conversation windows keep piling up: topics within the same workspace are interrelated, while cross-workspace comparisons are completely different. The original interface lists conversations chronologically; you have to rely on titles and memory to recall “which conversation this thread followed.” The dsh-talk-pages introduced in this article solves this: it renders existing conversations into a visual whiteboard where cards can be freely placed, connections represent relationships, and frames group sections of conversations.
First, it is not an official component. It is a community plugin. The repository is at github.com/HanYu-me/dsh-talk-pages, maintained by HanYu-me, and categorized as a “Client” in the SkillHub directory. It is not an alternative wrapper for another visualization plugin dsh-talk-map—they use different storage and interfaces, which will be explained below. The content below is all from the repository README and package.json and can be verified directly.
What is it¶
In a nutshell: dsh-talk-pages adds a “workspace-separated conversation canvas” layer to DeepSeek Harness. It lays out existing conversations as cards on the page, supporting free placement, frame grouping, and connections between cards.
The conversations themselves still belong to DSH. The plugin only reads conversation content and creates new conversations via the official interface when you fork. The position, frames, connections, and summaries on the canvas are data stored separately by the plugin.
Core Capabilities¶
Pagination¶
The top tab bar lists each workspace and the number of conversations in that workspace; clicking switches to it. Each page remembers its camera position, and when reopening the last active page, it stays there.
Free Placement¶
Cards stay where they land; the plugin does not rearrange them for you. The “Snap” switch in the top right controls whether cards align to a 16px grid when dropped.
Frames¶
Click + New Frame or right-click on empty space to create one. Double-click the label to rename, right-click to change color, it can be dragged, and resized from the four corners and edges. Dragging a card into a frame (center must be inside) puts it in the frame; dragging it out restores freedom. Deleting a frame only disbands the members; it does not delete any conversations.
By default, members are freely placed within the frame (your position determines their location; they move when you drag the frame). Right-click the frame to switch to a grid layout; members that don’t fit will stack in a single cell.
Connections¶
Drag from a card handle to another card to establish a link; dragging to empty space forks a new conversation with context. Connections are only drawn between cards on the same page.
Card Front and Status Lights¶
The card front displays the title, your last message, relative time, and a status light. The status light covers four states: Running, Waiting, Unread, and Interrupted. The left status bar only lists cards with lights.
Show / Hide, Archive, and Selection¶
- Right-click on empty canvas → “Show/Hide Conversations…” lists all conversations on the current page (workspace), including archived ones, with ✓ indicating those on the map. The list stays open, allowing continuous clicking to toggle.
- Archived conversations are marked “Archived” on the card; clicking the card first unarchives it before jumping to the conversation (it does not jump to a new one). Clicking an archived conversation in search results behaves the same way.
- The top “Select Conversations” popup lists all conversations (including archived). Check which ones to show on the map; applying automatically adds or removes them. New conversations do not appear automatically by default, but you can enable “Auto-add new conversations” in the popup.
Priority¶
Right-click a card to mark it High/Medium/Low; a colored bar and label appear on the left side. The left “Key Conversations” sidebar lists all marked cards by priority; clicking locates it. Pinning in the sidebar does not affect the map.
Let Conversations Organize the Map¶
The plugin provides a file interface, allowing Agents to read and write canvas data directly. Open a new conversation and say something like “Organize individual stock research by industry,” and the Agent can follow the conventions in ~/.dsh/talk-pages/ to manipulate the layout. See docs/AGENT.md and skills/talk-pages-layout/SKILL.md in the repository for specific interfaces.
Installation and Enablement¶
Official installation command, run directly:
dsh plugin add github:HanYu-me/dsh-talk-pages
The build artifacts have been committed to the repository, so you don’t need to build them yourself. After running, restart dsh, and a button will appear at the bottom of the sidebar.
package.json declares runtime requirements: Node >=22.19.0, dsh >=0.2.1-rc.1 <0.3.0-0. Current version 0.2.3, license MIT.
Typical Usage¶
Here are some reproducible operations:
- Create a new conversation card. Double-click on empty canvas to generate a new card at the clicked location; double-click an existing card to open that conversation.
- Establish a link or fork. Drag from a card handle to another card to link them; drag to empty space to fork a new conversation with context.
- Group related conversations with a frame. Right-click empty space to create a frame, name and color it, and drag several cards into it. When you need to add or remove members one by one, use the “Show/Hide Conversations…” list from right-clicking empty space instead.
- Mark priorities. Right-click a card to set High/Medium/Low, then click the corresponding entry in the left “Key Conversations” sidebar to locate it directly.
- Let the Agent organize for you. Open a new conversation and ask the Agent to organize the page according to the
~/.dsh/talk-pages/interface, for example, “Organize individual stock research by industry.”
Data and Boundaries¶
Canvas data is stored at:
$DSH_HOME/storages/talk_pages.json
It contains position, frames, connections, and summaries. Conversation content is not copied into the plugin; the plugin is read-only; new conversations are only created via the official interface when forking.
It uses different storage and interfaces than dsh-talk-map. They can coexist, but both occupy a button in the sidebar, so it is recommended to enable only one. Existing talk-map data can be migrated in one go using node scripts/migrate-from-talk-map.mjs; after migration, the old folder becomes a frame with the same name.
Applicable Scenarios and Notes¶
Suitable for DSH users with a large number of conversations and reference relationships between branches: cross-topic comparison, grouping a set of related conversations, and prioritizing important conversations. If you only occasionally open a few conversations, the list interface is sufficient.
Two reminders:
- The plugin runs within the permissions of the current dsh process. Therefore, you should read the source code (the repository is MIT, source code and
cordis.patch.ymlare both in the repo) before installing third-party plugins, and confirm that you accept it reading and writing canvas data under$DSH_HOME. - This is a third-party plugin. There is no official affiliation between the SkillHub directory and DeepSeek/Huansuan, and this article does not constitute any endorsement.
Summary¶
dsh-talk-pages does one thing: it takes the existing conversations in DSH and moves them onto a canvas that can be freely placed, connected, and grouped by frames, paginated by workspace, and remembers its own camera position on each page. It reads conversations, saves canvas data itself, and leaves a file interface for Agents to participate in organization. If you can no longer find the context of the last discussion in the conversation list, you can try installing this.
Directory page: https://www.skillhub.cn/plugins/HanYu-me/dsh-talk-pages
Repository: https://github.com/HanYu-me/dsh-talk-pages