Plugin directory / Desktop / Deepseek-Harness-as-Desktop
Deepseek-Harness-as-Desktop
Verified · install-tested on dsh KhanZou
What it does
Turn DeepSeek Harness into a Codex-style desktop app: native WebView2 shell, system tray, auto-start, Windows toasts, and a Desktop settings tab with a one-of-N skin center.
Works — verified, early-stage project
Turn DeepSeek Harness into a Codex-style desktop app: native WebView2 shell, system tray, auto-start, Windows toasts, and a Desktop settings tab with a one-of-N skin center. It installs cleanly and boots without issues in our testing. It's early-stage but functional.
“Verified” means our automated CI actually ran dsh plugin add in a clean profile and it booted — nothing more. Feature descriptions and version compatibility are the author’s claims. This is not a security audit and not an endorsement of third-party code.
README
DeepSeek Harness as Desktop
Turn DeepSeek Harness into a Codex-style desktop app: a native WebView2 shell, system-tray residency, auto-start on logon, real Windows toasts, and a set of DSH plugins that add a desktop settings tab, a standalone card-based skin center, reusable right/bottom panels, a Git graph, file/SCM browsing, a mini terminal, and per-turn token statistics.
Features
- 🖥️ Native WebView2 shell (
DshDesktop.exe, C# WinForms + WebView2, x64) — embeds the DSH Web UI in a standalone app window. - 🚀 One-click launch — the exe detects the backend (
127.0.0.1:3080); if it is not running, it startscorepack pnpm dsh webin the background automatically. - 🧭 System tray residency — closing/minimizing hides to tray and keeps running in the background; tray menu Open / Exit. Exit stops the backend only if this exe started it.
- 🔁 Launch at logon — optional HKCU
Runkey registration. - 🔔 Real Windows toasts — task-completion notifications appear in the Action Center (AUMID-registered unpackaged toast), with tray-balloon fallback.
- ✨ Interactive toasts
- 🧩
dsh-skill-managerplugin — per-workspace skill manager (enable/disable project & global skills, copy/apply skill config between projects); ships as an external plugin depending on the published@deepseek-ai/dsh-*workspace packages.
— completion notifications show a bounded answer preview (title maps the turn-end reason, tools are listed); a quick-reply input + Reply button sends typed text back to the same session via the official DSHsession.promptchannel; sandbox permission escalations show Allow once / Reject buttons answered through the official DSHrespondchannel. A COM activator (INotificationActivationCallback) reads in-toast text input. - ⚙️ Desktop settings tab — a Desktop section in Settings manages close-button behavior, auto-start, and notifications. Localized (zh/en), follows the DSH language switcher.
- 🧩 Unified desktop framework — one plugin (
dsh-desktop-framework) merges the former settings/panels frameworks and the right-panel tabs: any plugin can add Settings tabs/items declaratively (registerTab/registerItem/get/set/subscribe) and register right/bottom panel tabs (registerPanel), with persistence and cross-plugin sync (see docs/settings-framework.md and docs/panels-framework.md). - 🎨 Standalone skin center — a separate Skin Center Settings tab (its own plugin,
dsh-skin-gallery) shows modern preview cards: each card paints a mini app-window mockup with the real theme tokens (plus the skin'saccentwhen provided), shows name/author/description, marks the current skin with a ✓ badge, and supports filter chips (All / Built-in / Skins). Click a card to apply; the choice persists (activeSkin) and the UI auto-refreshes. - 📐 Right/bottom panels framework — part of
dsh-desktop-framework: renders a right column and a bottom bar with tabs, one-click collapse/expand rails, drag-to-resize, and persisted state. Any plugin can register tabs (see docs/panels-framework.md). - 📁 Files & SCM panel — a Files tab (file tree + text/image preview) and a Changes tab (git status with stage/unstage/discard) in the right panel.
- 💻 Mini terminal — a Terminal tab in the bottom panel: run commands in the harness directory (
cdsupported), backed by the desktop client. - 🖼️ Multi-type viewers — the right panel is a multi-tab workspace: open Markdown (GitHub-style), code/text, images (zoom), videos (seeking), PDFs, web pages and 3D models (WebGL STL/OBJ) in closable tabs; drag the left edge to resize.
- 🔗 Conversation links — URLs and file paths in chat output become clickable links: left-click to choose how to open, right-click for Open in desktop / Open with system default / Copy link.
- ⚙️ Per-type open preference — an Open files settings tab chooses per file type whether to open in the desktop client, the system default app, or ask each time.
- 🌿 Git Graph view — a fourth conversation view tab (beside Chat / Trajectory) with a branch selector, checkout, and a commit-history swimlane graph.
- ⚡ Live token stats — a compact per-turn line under each completed answer showing TPS, LLM wall time, input/output tokens and cache-hit tokens (when the provider reports them).
- 🔌 Plugin-only architecture — everything is distributed as DSH plugins (
dsh-plugin).
Repository layout
Deepseek-Harness-as-Desktop/
├── dsh-desktop-window/ # Host plugin + desktop client
│ ├── lib/index.js # DSH host plugin: window launch, turn/end toast, skin manifest
│ └── shell/ # DshDesktop.exe + source + WebView2 SDK + toast scripts + whale.ico
├── dsh-desktop-settings/ # Client plugin: Desktop settings tab (close behavior, auto-start, notify)
├── dsh-desktop-framework/ # Unified desktop framework: settings + panels + Files/Changes/Terminal
├── dsh-skin-gallery/ # Standalone card-based skin center (own Settings tab)
├── dsh-git-graph/ # Git Graph conversation view (branch selector + commit swimlanes)
├── dsh-live-stats/ # Per-turn token statistics line
└── docs/ # skin-compatibility, settings-framework, panels-framework
Requirements
- Windows 10/11 (x64)
- Node.js 22.19+ or 24+ and corepack-enabled pnpm
- Microsoft Edge WebView2 Runtime (preinstalled on most systems)
- A DeepSeek Harness checkout
Path assumptions: the desktop app and plugins are relocatable — they
derive config, data, and script paths from their own location. The only
machine-specific path is the DeepSeek Harness checkout, which defaults toD:\deepseek harnessand can be changed per-install via theserverWorkDir
key inconfig.json, or per-launch with--workdir.
Quick start
Prepare the harness (one time):
git clone https://github.com/deepseek-ai/deepseek-harness.git "D:\deepseek harness" cd /d "D:\deepseek harness" corepack pnpm install corepack pnpm run buildPlace the app anywhere — copy the
dsh-desktop-windowfolder anywhere
(e.g.D:\dsh-desktop-window) and double-clickdsh-desktop-window\shell\DshDesktop.exe(or build it fromProgram.cs— see
below). It starts the backend if needed and opens the DSH UI in a native window.Install the plugins into the web profile. All six plugins ship in
this repository ? each one is a folder under the repo root
(dsh-desktop-window/,dsh-desktop-settings/,dsh-desktop-framework/,dsh-skin-gallery/,dsh-git-graph/,dsh-live-stats/). Point eachaddat its folder (copy the folder anywhere, or use the paths inside
this repo):cd /d "D:\deepseek harness" corepack pnpm dsh plugin --profile web add D:\dsh-desktop-window corepack pnpm dsh plugin --profile web add D:\dsh-desktop-settings corepack pnpm dsh plugin --profile web add D:\dsh-desktop-framework corepack pnpm dsh plugin --profile web add D:\dsh-skin-gallery corepack pnpm dsh plugin --profile web add D:\dsh-git-graph corepack pnpm dsh plugin --profile web add D:\dsh-live-statsRestart the desktop app. Then:
- Settings → Desktop — close behavior, auto-start, notifications.
- Settings → Skin Center — pick a skin from modern preview cards (mini app-window mockups painted with the real theme); the UI refreshes.
- Session header ◧ ◨ ▤ buttons — collapse/expand the right panel and the bottom terminal.
- Conversation tabs — Chat / Trajectory / Git Graph.
- After each answer, a live token stats line appears under the turn.
The host plugin (
dsh-desktop-window) is optional but recommended: it sendsturn/endtoasts and keepsskins.jsonfresh for the skin center. The
desktop app disables its own auto-open viaDSH_DESKTOP_AUTO=0when it
starts the backend itself.
Configuration
Stored in D:\dsh-desktop-window\config.json:
| Key | Values | Description |
|---|---|---|
closeBehavior |
tray (default) / exit |
Close-button behavior |
autoStart |
true / false |
Launch at logon (HKCU Run) |
notifyOnComplete |
true / false |
Toast on task (turn) completion |
activeSkin |
skin id or "" |
Persisted skin-center selection ("" = DSH default) |
apiPort |
3980 |
Local config API port |
serverWorkDir |
D:\deepseek harness |
Harness checkout to start as the backend; overrides the compiled default (--workdir arg wins) |
panelRightOpen / panelBottomOpen |
true / false |
Persisted panel open state (panels framework) |
panelRightWidth / panelBottomHeight |
px | Persisted panel sizes (panels framework) |
The Desktop settings tab writes these through the exe's local HTTP API
(127.0.0.1:3980, CORS-open):
| Endpoint | Description |
|---|---|
GET /api/config |
Read config |
POST /api/config {key,value} |
Update config |
GET /api/skins |
Skin manifest (default + installed skins) |
POST /api/notify {title,message} |
Send a real Windows toast |
GET/POST /api/settings {key,value} |
Generic key-value settings (framework backend) |
GET /api/fs/list?dir= |
List a directory (files + folders, sizes) |
GET /api/fs/read?path= |
Read a text file (or image preview as data URL) |
GET /api/git/branches?dir= |
List branches + current |
GET /api/git/log?dir=&branch=&limit= |
Commit log (hash, parents, author, date, subject) |
GET /api/git/status?dir= |
Porcelain status (branch + changes) |
POST /api/git/checkout {dir,branch} |
Checkout a branch |
| `POST /api/git/stage | unstage |
GET /api/shell/cwd |
Current terminal working directory |
POST /api/shell/exec {dir,command} |
Run a command (cmd.exe); cd updates the cwd |
Skin center & skin compatibility
The Skin Center (its own Settings tab, dsh-skin-gallery, ordered after
all native settings tabs) is a one-of-N card picker: the DSH built-in default
plus every installed skin plugin. Each card paints a mini app-window mockup
with the actual theme tokens (no hardcoded colors) — sidebar, chat bubbles,
input bar and a brand-colored send button — using the skin's accent color
when the manifest provides one, and falls back to the current theme otherwise.
The current skin is marked with a ✓ badge, cards lift on hover, and the grid
supports filter chips (All / Built-in / Skins). Picking a skin persistsactiveSkin and reloads the UI; on every boot only the selected skin stays
mounted.
Third-party skins are not bundled. To make a skin appear in the picker it
must provide a skin.json next to its package and be registered withdsh plugin --profile web add. See
docs/skin-compatibility.md for the full
convention.
Recommended skins
- 深海女仆工坊 / Abyssal Maid Atelier by Small-tailqwq — dual-maid backdrop, navy lace UI, chibi sidebar (CC BY-NC-SA 4.0). Install:
git clone https://github.com/Small-tailqwq/dsh-deep-whale "D:\dsh-deep-whale" corepack pnpm dsh plugin --profile web add D:\dsh-deep-whale\maid-atelier
Panels (right column + bottom terminal)
dsh-desktop-framework renders the panel shells and registers the
Files/Changes/Terminal tabs and the header toggle buttons. The right panel
shares the left sidebar's fill (--dsw-specific-sidebar-fill), and panel
buttons/tabs reuse the app's native button tokens, so they follow the theme. Use the ◧ / ◨ and ▤ buttons in
the session header (next to the mode selector) to one-click collapse/expand
the right panel and the bottom terminal. Collapsed panels become slim rails on
the right/bottom edges — click them to expand again. Drag the panel edges to
resize; widths/heights and open state persist. Other plugins can add their own
tabs (see docs/panels-framework.md).
Viewers & file opening
The right panel is a multi-tab workspace (dsh-desktop-framework). Files opened
from the Files tab or from conversation links render in closable tabs:
| Type | Viewer |
|---|---|
| Markdown | GitHub-style rendered document |
| Code / text | monospace with word wrap |
| Image | image viewer with zoom (wheel / +/- buttons) |
| Video | HTML5 player (seeking via byte-range) |
| built-in Chromium PDF viewer | |
| HTML | rendered web page in an iframe (relative css/js/img served by the desktop client) |
| Web | iframe |
| 3D (STL/OBJ) | WebGL viewer — drag to rotate, wheel to zoom |
Web pages come in three forms and all render in an iframe: local .html files
(served by DshDesktop.exe via /serve/ so relative assets resolve next to
the file), pages on a local port (http://127.0.0.1:<port>), and public
internet URLs. HTML files default to opening in the desktop viewer; change it
per type in the Open files settings tab.
Left-click a conversation link to pick Open in desktop / Open with system
default / Copy link; right-click shows the same actions as a context menu. The
Open files settings tab controls the default per type (ask / desktop /system). Opening with the system default app or browser is handled by the
desktop client (DshDesktop.exe) through its local API.
CLI (testing)
dsh-desktop-framework ships a dependency-free Node CLI for exercising the
plugin and the desktop client API without the UI:
cd D:\dsh-desktop\dsh-desktop-framework
node cli.js check # health-check web (3080) + desktop api (3980)
node cli.js raw <path> [range] # fetch /api/fs/raw (byte-range aware)
node cli.js open <path> # open with the system default app
node cli.js open-url <url> # open in the default browser
node cli.js settings [k [v]] # read/update the desktop settings store
node cli.js type <path> # viewer kind for a file name
node cli.js samples [dir] # write sample md/stl/pdf test files
Build the shell from source
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo /target:winexe /platform:x64 ^
/win32icon:dsh-desktop-window\shell\whale.ico ^
/resource:dsh-desktop-window\shell\whale.ico,DshDesktop.whale.ico ^
/out:dsh-desktop-window\shell\DshDesktop.exe ^
/r:dsh-desktop-window\shell\Microsoft.Web.WebView2.Core.dll ^
/r:dsh-desktop-window\shell\Microsoft.Web.WebView2.WinForms.dll ^
/r:System.dll /r:System.Core.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll /r:System.Web.Extensions.dll ^
dsh-desktop-window\shell\Program.cs
Localization
All UI plugins register zh/en dictionaries through the DSH client locale
service and follow the language switcher of the harness. Toast messages are
bilingual.
Changelog
See CHANGELOG.md.
License & third-party notices
- Our code: MIT (LICENSE).
Microsoft.Web.WebView2.Core.dll/WinForms.dll/WebView2Loader.dll:
the Microsoft Edge WebView2 SDK (MIT), redistributed per its license.whale.ico: DeepSeek's official whale logo (derived from the harness repoapps/web/public/favicon.svg); used here only to identify the DeepSeek
Harness app.- Third-party skins (e.g., Abyssal Maid Atelier) keep their own licenses and
are not bundled.
Install
Install the catalog once, then DeepSeek Harness can find and install any plugin from this site automatically:
dsh plugin add dshbase-catalog Then say "install Deepseek-Harness-as-Desktop for me" — your agent finds it in the directory and installs it. Docs: dshbase-catalog · verified packs.
This plugin is GitHub source (not published to npm) — install it straight from the repo:
Web profile:
dsh plugin --profile web add github:KhanZou/Deepseek-Harness-as-Desktop Headless (CLI) profile:
dsh plugin --profile headless add github:KhanZou/Deepseek-Harness-as-Desktop Test report
Verified: L1 install + L2 load + L3 runtime from GitHub source on dsh 0.1.0-rc.6.
When to use it
Run dsh as a native desktop app — its own window, tray icon, and shortcuts — instead of a browser tab.
Who it's for
Users who want an installed-app feel and system integration (tray, global hotkeys, auto-launch) on their OS.
For developers — extending it
The native shell is the seam — add global shortcuts, notifications, single-instance locking, or OS-specific behaviors.