Introduction¶
When working with dsh, the Web UI is usually opened in a browser tab: mixed in with a pile of other tabs, it lacks an independent taskbar identity; switching tabs means missing the moment a task completes; parallel sessions rely on browser tabs as a makeshift solution; and title bars and icons cannot follow dsh’s theme changes. For developers who treat dsh as their main interface, these are friction points encountered every day.
dsh’s philosophy is “everything is a plugin”; the task of desktop-izing is also solved by the plugin layer—this is the DeepSeek Harness Hub (dsh-hub) introduced below. It uses a Tauri 2.x native window to host the dsh Web UI, filling in missing desktop capabilities such as a tray, notifications, session tabs, an interactive terminal, and window memory. The project itself underwent a shell upgrade: early versions (0.0.1-rc.14 / 0.0.2-rc.*) used WebView2 as the shell, and it has now been fully migrated to Tauri 2.x, with the old dev-v1 branch permanently frozen.
What is it¶
DeepSeek Harness Hub is an open-source project maintained by MarecGents. One-sentence positioning: the desktop framework for DeepSeek Harness (dsh), running the dsh Web UI via a native Tauri 2.x window, providing a system tray, theme synchronization, window memory, a right sidebar, and system notifications.
Engineering-wise, it is split in two:
- Desktop Shell: A single Tauri native application;
cargo tauri buildproduces an NSIS installer; platform is Windows. - Plugin Side: The npm package
@marecgents/dsh-hub(current 0.1.4), hosting the client UI, HTTP routes, andcordis.patch.yml, and injecting@deepseek-ai/dsh-client-runtime,@deepseek-ai/dsh-client-locale, and@deepseek-ai/dsh-client-ui-settingsviadsh.client.inject.
Version and Branch Status (2026-09-01): npm latest and rc tags both point to 0.1.4; main is the only release branch, dev-v2 is the only development branch (current = 0.1.4), and dev-v1 is permanently frozen. License MIT.
Core Features¶
Desktopization and Window Management¶
- Native desktop identity: Task Manager displays the DeepSeek Harness Hub icon and name (via NSIS installation).
- Branded Splash: Startup overlay colors follow the current skin/theme (
helpers/boot_theme.rs); the dsh SPA fades out smoothly after the first paint, leaving no white screen gap. - Window state memory: Maximized state, resolution, and theme are persisted to
$DSH_HOME/dsh-hub/config.json; when no saved size exists, it defaults to 3/4 of the screen where the cursor is located (multi-monitor aware, lower bound 480×360). - Theme follow (system): Driven by MutationObserver events; the title bar light/dark mode, webview background, and window icon follow the dsh page theme in real-time (Tauri shell Rust Dwm implementation).
- Desktop icon six-sided sync: Taskbar, title bar, Alt-Tab, tray, start menu, and desktop shortcuts all point to the fixed anchor
icons\current.ico; the settings card can optionally choose 5 whale icons (sad/happy/duo/maid/blue) or the default theme flipped whale.
System Tray and Notifications¶
The tray provides four types of operations: Show/Hide main interface (dynamically switches based on window state), Open Workspace (automatically activates and brings the file explorer to front), New Task, and Quit. New tasks follow the official ctx.workspaces.startSession flow; if the SPA is not ready, it retries with __mgShellReady 300ms × 20 rounds; before quitting, it writes quit.marker for a clean exit to avoid being misjudged as a crash restart.
The notification side consists of two parts:
- Four original synthesized sound effects (Start / Complete / Needs You / Error, no third-party assets); still audible when the window is hidden to the tray.
- Windows native Toast pops up when a task completes or errors (using notify-rust, 30s cooldown); clicking the toast returns to the window and jumps to the corresponding session (
mg:shell-commandfocus-session event +__mgShellReady300ms × 20 retry); when the currently viewed session completes, only a sound plays, no Toast pops.
Session Tabs and Pinning¶
Inside the title bar are browser-style multi-page session tabs:
- Click to switch,
+to new,×to close; status dots distinguish session status (Waiting Amber / Background Complete Green / Running Blue + Pulse). - Inline rename (IME composition input doesn’t commit accidentally); drag-and-drop to sort, persisted in
localStorage dsh-hub:session-tabs. - Right-click menu reuses the official
session-menu(Fork / Archive / Copy Path / File Explorer).
Pinned sessions: Hover on a session row to pin (safely skips if names are identical); the pinned area stays at the top of the list, persisted in $DSH_HOME/dsh-hub/pins.json (localStorage fallback).
Interactive Terminal¶
The bottom dock provides a real interactive terminal, based on xterm.js 6.0.0 + node-pty:
Ctrl+Jtoggle; one tab = one independent session, cwd = workspace where opened.- Custom Shells: PowerShell 5.1 / PowerShell 7 (pwsh) / cmd / Bash—only lists shells detected by the host, defaults to persistent selection (
terminal-prefs). - Output goes via SSE JSON envelope + process-level token auth (
Authorization: Bearer/ EventSource?token=). - On close,
taskkill /T /Fkills the whole process tree to prevent residue.
Note: Interception of dangerous commands like rm / Remove-Item / format is a UX barrier, not a security boundary.
Model Selection and Permission Policy¶
- Composer’s model entry is replaced with a provider → model two-level nested menu, plus an independent thinking-effort trigger; reuses the official
modelDirectoriesservice, consistent with/modelcommand status, and auto-degrades to the built-in seat if the service is missing, non-blocking. - Permission policy comes from the policy three levels of the dsh-permission-guard plugin: follow (follows session official preset) / strict (whitelist) / read-only, with dual-entry switching on the settings page and the session bottom-left chip.
Four Independent dsh Plugins¶
Hub comes with four independent plugins, distributed via a dual-track method (bundled with hub resources + independent npm track, see repo BUILD.md §7):
- findings-ledger: baseline snapshot + change reconciliation + coverage report.
- permission-guard: command-by-command permission whitelist + four-level capability interception (auto / give-command / confirm / never).
- project-memory: per-project persistent memory (FACT.md + JOURNAL.jsonl), auto-injects
systemPrompt.context, and providesmemory_read/memory_log/memory_facttools. - usage-stats: token usage aggregated by provider/model, visualized on the settings page (summary / model cards / daily table / trend chart / unit price cost estimation) + HTTP API.
Settings Page, Skins, and Bilingual Interface¶
- Settings page: Follows the official plugin page style: three cards (Resolution / General Settings / Appearance Settings, default collapsed) + Permission Policy single column; covers window size / theme / tray behavior / session completion notification / sound / multi-instance toggle / interface skin / background image / desktop icons.
- 15 Skins: Built-in 5 (Midnight Blue / Old Paper / Terminal Green / ZCode / Aurora Purple) + Reasonix official 8 (rx-) + opencode 2 (oc-), each set has light × 33 tokens / dark × 33 tokens, can also pair with background image.
- i18n full bilingual (zh/en): Hub interface copy and usage-stats copy go into the dictionary; language source = dsh settings General → Language; switching triggers a full refresh.
Interface Details¶
- Conversation positioning rail (rail): Vertical minimap on the left edge of the middle column, click to jump; hover previews real node kind based on turnTimings time window; colors adapt based on skin surface color × background image sampling.
- Right sidebar three pages: Overview (Token stats) / File Tree / Git Changes; retains narrow bar shortcut buttons when collapsed.
- Right-click menu full DOM takeover: Dedicated menus for session/workspace object rows; refresh menu on blank space; no interference with text editing elements.
- Shell drag-and-drop restore: Drag-and-drop sorting for list rows (workspace / session) and tabs; dragging files into the input area = official attachment upload; other areas safely ignored to prevent
file://navigation.
Security and Robustness¶
- S0 Security: POST/PUT and other state change requests verify Origin whitelist (loopback /
tauri:), missing Origin is denied; GET/HEAD are skipped (DNS-rebinding is covered by Host check). - Workspace open interface
POST /api/dsh-hub/workspace/open: Opens file/folder using OS default method, triple guard with host + origin + token. - Multi-instance protection: Detects existing dsh instance (any port) on startup; defaults to rejecting coexistence to prevent session data corruption.
- Performance: Session background warm-up (long session cold open ~2s → 0.2s) + chat stream
content-visibility.
Installation and Activation¶
Installation goes the NSIS installer route:
- Get the NSIS installer from the GitHub repository: https://github.com/MarecGents/deepseek-harness-hub. Note: The source material I based this on does not contain the direct copy-paste command, so I won’t concatenate it here. Refer to the repo README for specific installation steps.
- During installation, automatically downloads private Node + dsh + plugins to the install directory; no system pre-installation of Node required.
- First launch automatically enters the dsh UI.
Uninstall goes the fast channel and cleans up its own profile entries, keeping the .dsh core and user data. If following the npm / source code route to integrate the plugin side, @marecgents/dsh-hub current version is 0.1.4, engines require Node >= 24.0.0.
Typical Usage¶
Below are several reproducible daily workflows:
- Parallel sessions: Click
+new,×close in the title bar tabs; right-click tab to fork / archive / copy path / open file explorer; hover session row to pin, pinned area stays at top of list. - Running long tasks in background: Hide window in tray to keep working. When session completes, play sound and pop Windows Toast; click toast to return to window and auto-jump to corresponding session; when the currently viewed session completes, only sound plays, no interruption.
- Open interactive terminal:
Ctrl+Jtoggle bottom terminal dock, each tab independent session (cwd = workspace where opened); default terminal selects from detected PowerShell 5.1 / PowerShell 7 / cmd / Bash and persists in settings panel. - Tray new task: New task directly from tray menu, follows official
ctx.workspaces.startSessionflow, UI refreshes immediately.
Local persistence locations involved in the above behaviors:
$DSH_HOME/dsh-hub/config.json # Window size / theme / tray / desktop icons etc.
$DSH_HOME/dsh-hub/pins.json # Pinned sessions (localStorage fallback)
localStorage: dsh-hub:session-tabs # Session tab sorting
localStorage: terminal-prefs # Default terminal selection
Applicable Scenarios and Notes¶
Suitable for:
- Developers on Windows who use dsh as their main working interface and need parallel sessions and background notifications.
- Heavy users who need a persistent tray, native interactive terminal, per-project persistent memory, and token usage statistics.
Notes:
- Platform is only Windows (Tauri shell + NSIS installer).
- Multi-instance protection defaults to rejecting coexistence; if coexistence is required, it must be explicitly enabled in settings (with accompanying danger warning).
- Interception of dangerous commands in the interactive terminal is a UX barrier, not a security boundary, do not treat it as an isolation measure.
- Pinned sessions (pins) have an overall replacement semantics under multi-tab / multi-instance; last writer wins.
- Plugins run with the permissions of the current dsh process; suggest checking source code and license before installing (this project is MIT).
- Full feature list see repo FUNCTIONS.md (11 major categories, each with source and test status).
Conclusion¶
dsh-hub solves a very focused set of problems: making dsh no longer just a tab in a browser, but a desktop application with a tray, notifications, session tabs, and a native terminal, while maintaining the “everything is a plugin” dsh form. Current version 0.1.4, MIT license.
- GitHub Repository: https://github.com/MarecGents/deepseek-harness-hub
- Community Directory: https://www.skillhub.cn/plugins/MarecGents/deepseek-harness-hub (This directory is maintained by the community and has no official affiliation with DeepSeek / Fangqian)