Nonead-DSH-Desktop:基于 DeepSeek Harness 生态的插件化智能体桌面应用项目

一键安装即可在桌面使用 DeepSeek Harness 智能体,支持 Windows、macOS 和 Linux。项目将 DSH 封装为 Electron 桌面应用,提供窗口、托盘、终端和自动更新,采用'一切皆插件'架构,桌面壳本身也是 DSH 插件。

Branch2Tags22

Nonead DSH Desktop, an open-source desktop client built on DeepSeek Harness

Nonead DSH Desktop

CI latest tag stars license: MIT

Windows, macOS, Linux Electron 44 DSH runtime 0.2.2-rc.1 Node.js

An open-source desktop client for Windows, macOS and Linux, built on DeepSeek Harness.

Product 2.2.8 · DSH runtime 0.2.2-rc.1 · Electron 44 · MIT License

One-click download, ready to use out of the box.

Everything is a plugin — including the desktop itself.

An independent community open-source project. It is not affiliated with, partnered with, licensed by, or endorsed by DeepSeek.
No DeepSeek employees or DeepSeek Harness upstream team members currently take part in this repository; upstream contributors shown on GitHub Contributors come from forked and synchronized commit history.
中文 · English · 日本語 · Español · Français · Deutsch · Русский · Português

Table of contents

Section Content
What this is Product positioning and process model
Versions and runtime Versions, upstream pin, dependency baseline
Download and install Installation on three platforms
Capabilities Desktop shell, profiles, market, updates
Security boundaries Renderer credential, LAN, update verification
Documentation User and developer entry points
Repository layout Directories and the four workspaces
Building from source Environment, commands, gates
Release and updates Channel protocol and release flow
Plugin ecosystem Why everything is a plugin
Relationship to upstream Boundaries and division of work
Changelog Version history
Known limitations Behaviour worth knowing in advance
Community Discussion channels
Links Ecosystem projects
License Licence and notices

What this is

Nonead DSH Desktop brings the local Web UI, Host service and plugin system of DeepSeek Harness into a native desktop application. The upstream source runs unmodified and is pinned to a specific release; the desktop shell owns windows, tray, terminal, auto-update, multiple working profiles and packaging, and is itself mounted as a DSH plugin through the same composition mechanism third-party plugins use.

The product is not a reimplementation of the client — it is a thin Electron host plus a complete DSH runtime:

Layer Location Responsibility
2.2.8 2026-11-04 Runtime upgraded to DSH 0.2.2-rc.1 (upstream 66491b05) with the vendored runtime repacked (373 packages); bundled market dshmarket raised to 1.73.10; all 24 desktop customisation patches renamed and re-applied
2.2.7 2026-11-03 Runtime upgraded to DSH 0.2.2-alpha.3 (upstream 05b1cae8), bundled market dshmarket raised to 1.73.9, and all 24 desktop customization patches regenerated against the new build output
2.2.6 2026-11-02 Stability and gate maintenance: lifecycle evidence no longer stops after a day of uptime, the launcher no longer exits silently from an npm/pnpm global bin, private files and the data-operation lock bind to the validated inode, factory reset cannot leave the installation without a data directory, the LAN dialog gains focus management, and the market page limit matches its published schema; new gates cover release pins, eight-language version parity and third-party notices
Desktop shell Electron main process Single-instance lock, windows and materials, tray and menus, permissions, terminal, updates, data directory, profile state
Host Node-mode child process Loads the profile patch layer, starts the upstream profile boot, serves the Web carrier, hosts third-party Host plugins
Web carrier Loopback HTTP + WebSocket Serves the official Web UI (ephemeral port by default)
Renderer Sandboxed BrowserWindow Loads the official Web UI and is identified by a native credential header

Shell and Host communicate over exactly one child-process IPC channel. Switching a profile or mode disposes the whole Host generation and spawns a new child process; no state is cached across a generation. The renderer never receives Electron APIs — it receives the official Web UI plus an access credential generated by the shell.

Versions and runtime

Item Value
Product version 2.2.8 (nonead-dsh-desktop and dsh-plugin-desktop-beta in lockstep)
Stable-channel workspace nonead-dsh-desktop (root scripts use the :stable suffix)
Beta-channel workspace dsh-plugin-desktop-beta (root scripts use the :beta suffix)
DSH runtime 0.2.2-alpha.2, every @deepseek-ai/dsh* dependency pinned exactly, runtime vendored
Vendored runtime vendor/dsh-runtime/0.2.2-rc.1/ (several historical version directories are kept)
Upstream pin f3803c96974ad4a94195fb97e5c637e9c2a3afe3fc48fa190a683e469daa699857e9afe8 (channels.beta in upstream.json, mirrored in nonead-dsh-desktop/upstream-reference.json)
Electron / packager Electron 44.0.0 / electron-builder 26.15.7 (patched app-builder-lib)
Node / Yarn Node ^22.19.0 or >=24.0.0; Yarn 4.18.0 via Corepack (nodeLinker: node-modules)
Plugin market dshmarket 1.70.1, plus this repository's dsh-community-market 0.1.0-dev.0
Remote-control bridge @agents-anywhere/dsh-bridge-next 2.1.0-desktop (upstream commit 39b82d4)
Brand skin dsh-nonead-client-skin (shipped in the installer, mounted per profile)

upstream.json records two vendored runtime lines: stable maps to upstream 0.2.0-rc.2 and beta to upstream 0.2.2-alpha.2. What actually ships inside an installer is the line a workspace pins exactly — currently both desktop workspaces pin 0.2.2-alpha.2. Channel names describe runtime lines, not the release channel a workspace queries.

Download and install

Official installers cover Windows x64, macOS (Universal, Intel and Apple Silicon) and Linux x64 (AppImage). No extra environment is required. The Linux x64 AppImage and deb are built by the Beta channel; the stable channel only produces a runnable directory on Linux, not an installer.

Platform Download Installation
Windows x64 Download installer Run the NSIS installer and follow the prompts
macOS Universal Download DMG Open the DMG and drag Nonead DSH Desktop into Applications
Linux x64 Download AppImage Make it executable and run: chmod +x Nonead-DSH-Desktop-*.AppImage && ./Nonead-DSH-Desktop-*.AppImage

Linux notes: some distributions need FUSE installed, or you can run with --appimage-extract-and-run. In-app update on Linux only checks the version and never downloads an installer; upgrade by downloading a fresh AppImage. Use the Beta channel when you need a Linux installer — the stable channel only produces a runnable directory on Linux.

Windows ARM64 is available as an experimental build only and is not served by the download links or in-app updates above: the shell is native arm64, but the bundled Python / Node / Office runtime is still the x64 payload (executed through Windows emulation), and the artifact has not been run on ARM hardware yet. Build it yourself with the command under Common commands.

Step-by-step usage, profiles and plugin commands are in the user guide; platform and scope questions are answered in the FAQ.

Capabilities

Capability Description
Native desktop shell Single-instance lock, native windows and menus, system tray, Dock icon; window materials are capability-gated (macOS accepts off/transparent and defaults to transparent, Linux accepts both but always resolves to off, Windows only off)
Local Host management The shell spawns the Host child process and owns its lifecycle: graceful shutdown first, SIGTERM after 10 s, SIGKILL after 5 more; installer updates require a graceful shutdown and are refused otherwise
Official Web UI Binds 127.0.0.1 only, ephemeral port by default; the shell generates a 32-byte random credential per Host generation and delivers it via x-dsh-desktop-renderer
Profiles and first-run setup Profile directories live at $DSH_HOME/profiles/<name>; an uninitialised profile first shows the Desktop Setup Wizard (window mode and material, plugin market, notifications, default-browser launch, web access scope) before Host starts
Browser and LAN access "Open in browser" only controls whether the system browser is launched and does not change exposure; LAN access is a separate opt-in that also shows the current LAN URL
Built-in plugin market DSH Community Market provides discovery / installable / installed / sources views with extensible catalog sources and reviewed adapters
Brand skin dsh-nonead-client-skin ships with the installer and is mounted by the Profile for every profile, with no separate installation
Auto-update Fixed version check against https://www.nonead.com/software/ndsh-desktop/version with current version, channel and a random installation id; Windows and macOS download and install, Linux only checks
Update experience The update card shows release notes supplied by the version response, and the Beta channel's tray menu and native dialogs add a "view full release notes" entry; "skip this version" persists so an unattended scheduled check does not offer it again; a failed install can be retried and rolled back to any saved snapshot
Window and session state Remembers window position and size; a saved position is restored only while it still overlaps a mounted display, so unplugging a monitor cannot restore the window offscreen
Deep links and login item dsh-desktop:// links are supported, for example dsh-desktop://settings/general opens settings directly; the launch-at-login switch reads the effective OS state
Environment file Strict layered .env support fills in missing variables for the Host child process and never overrides the existing environment
Market improvements The plugin market previews non-image media and can install a plugin by name
Terminal and working directory The shell exposes terminal and working-directory capabilities as Desktop services for plugins
Experimental capabilities Onboarding enables the plugin market and Computer Use by default; speech, translation, Agent Team and Ralph ship with the runtime

Security boundaries

Boundary Actual behaviour
Renderer identity Only requests carrying the current generation credential (x-dsh-desktop-renderer) count as the Electron renderer; with browser access disabled every other request gets 403 and existing browser WebSockets are dropped
Renderer credential transport The credential lives only in main-process and Host memory; the Host receives one line over its private stdin at startup and the pipe closes immediately, so it never enters the child environment, argv or a file (the old implementation used an environment variable, which same-user processes could read from process environment or a crash dump to impersonate the renderer)
Web access gate When the Host has no credential it fails closed for browser-class requests and logs one warning instead of permitting them; the /connect login exchange and read-only requests are exempted in code, and Market routes need a connection credential even for reads
LAN access No authentication: anyone on the same network who can reach the port can open DSH and operate this machine. Enable it only on fully trusted networks
Installer verification The download path supports a server-published installerSha256 and enforces it as a hard gate, but the version endpoint does not publish that field yet; until it does, Windows verifies only ProductName and ProductVersion from the PE version resource, while macOS verifies bundle identity, embedded manifest, code signature and Team Identifier; that identity check exists only in the Stable shell, whereas the Beta shell's download path checks just the installer magic bytes and size before executing it
Plugin misconfiguration A patch id that matches nothing logs entry not found and is skipped; a mismatched name logs name mismatch ... skipping; but a wrong inject service name does not error — the plugin stays pending forever and the UI merely shows unexplained HTTP 4xx

Documentation

Ordinary users can start with the user guide; developer documentation matters only when extending or maintaining. The full index is in the documentation index.

User documentation

Goal Entry point
Install, profiles, modes, terminal, plugin commands and updates User guide
Direct answers on platforms, bundled environment, data, plugins and updates FAQ
Understand why the project exists Why Nonead DSH Desktop
Read version history Changelog

Developer and maintainer documentation

Goal Entry point
Shell, Host child process, Web carrier and packaging Architecture
Write ordinary or Desktop plugins Plugin development
Read the plugin ecosystem proposal DSH plugin ecosystem proposal
Use desktopProfiles / desktopPnpm and other Desktop services Desktop plugin services
Join the unified plugin contract discussion DSH Community Fabric Draft
Read the market's product and security design DSH Community Market
Package-level build, release and known limitations dsh-plugin-desktop-beta/README.md
The stable-channel shell workspace nonead-dsh-desktop/README.md
The brand skin plugin dsh-nonead-client-skin/README.md

Repository layout

The root is a Yarn 4.18.0 workspace (nodeLinker: node-modules) with the following members and responsibilities:

Path Responsibility
nonead-dsh-desktop/ Stable-channel desktop workspace: its own shell (profiles and recovery, window controls, onboarding), the Agents Anywhere bridge and Community Market adapters, Electron bootstrap and packaging
dsh-plugin-desktop-beta/ Beta-channel desktop workspace: dual Host/Client faces, Electron bootstrap, packaging and release tests
dsh-community-market/ Product and security design of the built-in plugin market, catalog provider contract, tests and build
dsh-community-fabric/ Community interoperability RFC: Manifest/Capability, Runtime/Presentation, service composition and provenance diagnostics
dsh-nonead-client-skin/ Brand skin shipped with the installer, pulled in via a file: dependency and not part of the root workspace list
vendor/dsh-runtime/<version>/ Vendored DSH runtime packages and manifest.json per channel
vendor/agents-anywhere/ Vendored Agents Anywhere bridge packages
patches/ Yarn patches for the Electron packager, pnpm, open, fs-ext, DSH subprocess and more
scripts/ Root gates and release scripts (bilingual docs, market dependency direction, vendored runtime, icons, layout, AA release)
docs/ Product documentation; docs/evidence/ keeps measured release and installer records
deepseek-harness/ Read-only upstream submodule, pinned to channels.beta.commit in upstream.json

The submodule is not required for everyday development. The runtime is vendored, so corepack yarn install, build, typecheck, test, dev:* and dist:* do not need it; only the upstream:* scripts (rebuild and repack the runtime) do. corepack yarn check:layout does verify the submodule commit and worktree, so it necessarily fails in an uninitialised clone — that is expected.

Building from source

Requirements

  • Node.js ^22.19.0 or >=24.0.0
  • Root Yarn 4.18.0 through Corepack (do not install root dependencies with pnpm or npm)
  • Git; only needed to initialise the upstream submodule when rebuilding the runtime
git clone https://github.com/NoneadChina/Nonead-DSH-Desktop.git
cd Nonead-DSH-Desktop
corepack yarn install
corepack yarn dev:beta     # Beta workspace
# corepack yarn dev:stable # stable-channel workspace (nonead-dsh-desktop)

When you actually need upstream source:

git submodule update --init --recursive

Common commands

Command Purpose
corepack yarn dev:beta / dev:stable Start the development flow for that workspace (verifies the pinned dshmarket, prepares AA artifacts and builds the market first)
corepack yarn build Build the market, the Beta workspace and the stable-channel workspace (also verifies the pinned dshmarket first)
corepack yarn typecheck Type-check all three workspaces
corepack yarn test Unit tests for all three workspaces
corepack yarn check Full headless gate: layout, architecture direction, vendored runtime, bilingual docs, AA connector, per-workspace checks
corepack yarn check:ci The chain CI actually runs: same as check, but the Beta workspace uses check:ci (drops the upstream-paused verify:aa) instead of rewriting the manifest inside CI
corepack yarn check:layout Workspace topology, exact pins, submodule, vendored runtime, icons and layout gates
corepack yarn check:bilingual-docs Verify that the Git blob hashes recorded in *.i18n.yaml match the documents
corepack yarn check:vendored-runtime Verify vendor/dsh-runtime/ against upstream.json
corepack yarn market:prepare / market:check market:prepare moves dshmarket to npm latest (only the two desktop workspaces' resolutions/dependencies and yarn.lock); market:check is the offline consistency check every build runs, and only --latest reaches the network
corepack yarn aa:prepare-release / aa:check Build or verify Agents Anywhere release artifacts
corepack yarn package:dir:beta Produce an unpacked application directory
corepack yarn dist:win:beta / dist:mac:beta / dist:win-portable:beta Produce platform release artifacts
DSH_PACKAGE_ARCH=arm64 corepack yarn dist:win:stable Produce an experimental Windows ARM64 installer (x64 by default; a cross-arch build skips the smokes that can only run on this host)

Conventions:

  • Root build, dev:* and dist:* run corepack yarn market:check first: it verifies offline that the committed dshmarket version, lockfile and compatibility patch agree, without reaching the network or rewriting manifests. Moving the pin requires a human to run corepack yarn market:prepare and commit the version, lockfile and patch together.
  • nonead-dsh-desktop and dsh-plugin-desktop-beta are separate workspaces: shared changes must land in both while preserving their declared differences; run corepack yarn check and each workspace check before release.
  • After editing README*.md or CHANGELOG*.md in any language, refresh the Git blob hashes in the matching *.i18n.yaml (take them with git hash-object), otherwise check:bilingual-docs fails.
  • corepack yarn check:layout needs an initialised submodule; in a purely headless environment, validate business code with typecheck / test / per-workspace check instead.
  • CI must not let the code under review decide what runs: the changes job restores scripts/ from the pull request base before running the classifier and the documentation/market gates (documents still come from the working tree); workflow_dispatch has no base, so it falls back to the head copy with a warning. CI runs corepack yarn check:ci (= local check without verify:aa) instead of rewriting dsh-plugin-desktop-beta/package.json at run time.
  • Version parity is part of the gate: scripts/verify-layout.mjs requires both workspaces' version to equal the newest ## <version> — <date> heading in CHANGELOG.md, so missing either side on a release fails.

Release and updates

  • Two product lines: produced by the two desktop workspaces. Beta and stable installers differ in bundle id, artifact prefix and update channel and must not be mixed.
  • Channel protocol: the version check requests https://www.nonead.com/software/ndsh-desktop/version, reporting the current version in X-DSH-Desktop-Version, stable / beta in X-DSH-Desktop-Channel, and a locally generated, persisted random UUID in X-DSH-Desktop-Installation-Id. Installer downloads carry channel and X-DSH-Desktop-Target-Version but never the installation id or the current version.
  • Channel enforcement: the server response must echo the channel; the stable channel accepts only plain SemVer while the Beta channel accepts only -beta.N, and the client never silently downloads across channels.
  • Version consistency: the uploaded artifact, the bare download URL's version-to-file mapping and the version reported by the endpoint must all match — a mismatch surfaces as a 404 rather than a wrong install.
  • Release prerequisites: run corepack yarn aa:prepare-release first; if this release ships a new dshmarket, a human must also run corepack yarn market:prepare and commit it. The Windows distribution commands additionally verify AA artifacts with --verify-release.

Plugin ecosystem

Plugins extend DSH — models, tools, UI and workflows are all plugins that compose like building blocks. Nonead DSH Desktop does not modify upstream source and is not a hard-coded shell: the pinned upstream runs as-is, and the desktop shell itself plugs in through the same "everything is a plugin" rule.

Plugin authors only need three things:

  1. Ordinary DSH plugins are developed exactly as in any DSH environment — see plugin development.
  2. Desktop services (desktopProfiles, desktopPnpm, …) let plugins inspect or switch profiles and install, update or remove plugins — see desktop plugin services.
  3. Composition and patches: a profile is composed by stacking patch layers, where id matches an existing row and insert appends new rows; mind the three "silently inert" failure modes in Security boundaries.

The vision and three principles are in the DSH plugin ecosystem proposal; the community proposal for a unified plugin contract is Community Fabric.

Relationship to upstream

Nonead DSH Desktop is an independent community project built on DeepSeek Harness and the Cordis plugin model, developed and maintained by Nonead Corporation.

Upstream provides the core agent capabilities, plugin system, Web UI and runtime packages. This repository owns:

  • Desktop application packaging (Electron main process, windows, tray, menus, materials)
  • Starting, stopping and recovering the local Host service, including crash fallbacks
  • Profiles and patch layers, the first-run wizard, browser and LAN access control
  • Shipping the plugin market and the brand skin inside the installer
  • Windows / macOS / Linux builds, signing and release flow, and auto-update

If you only want to use DeepSeek Harness from the command line, or want to work on its core, go to the upstream repository instead.

Changelog

The full history is in the changelog (中文). Recent releases:

Version Date Highlights
2.1.15 2026-10-22 Release notes in the update card, tray and native dialogs, skip-a-version, install retry and snapshot rollback; remembered window state, layered .env, dsh-desktop:// deep links and launch at login; market media preview and install-by-name; dshmarket 1.66.45
2.2.3 2026-10-29 The desktop shell is fully localized into eight languages (Chinese, English, Japanese, Spanish, French, German, Russian, Brazilian Portuguese): five new shell dictionaries plus settings-page dictionaries in six languages, template-based lookups for interpolated dialogs, and the client locale namespace and native menus follow the same set
2.2.2 2026-10-28 Runtime moved to DSH 0.2.2-alpha.2 (370 packages re-vendored, 24 version patches and the market patch rebased), dshmarket moves to 1.73.1, and the Agents Anywhere bridge is rebuilt for the new peer ranges
2.1.18 2026-10-24 Runtime moved to DSH 0.2.2-alpha.2 (344 packages re-vendored, 24 patches rebased), the Agents Anywhere bridge is built from source with a rebased connector patch, an experimental Windows ARM64 build lands, and the update card copy and progress placement are fixed; includes the 2.1.17 audit fix batch
2.1.17 2026-10-24 Audit fix batch: recovery refresh race, checkpoint inode re-checks and single-slot degradation, atomic settings writes, update failure-path release, plugin state and staging cleanup, tray dialog ownership, market paging and skin declaration, CI gate fixes
2.1.16 2026-10-22 Security and gate fixes: CI gates run the base-side classifier, Electron fuses tightened (NODE_OPTIONS/--inspect closed, Stable loads only from app.asar; runAsNode kept because the Host/CLI/pnpm shims need it, and now pinned by layout-derived assertions), renderer credential injected over a private pipe, web gate fails closed, deep-link action allowlist, base64url secret masking; the Stable-shell asarUnpack / files[].from coupling is now pinned by a prefix-deriving test (the existing patterns verified correct), added Stable packaging CI, and verify-layout now enforces version parity
2.1.13 2026-10-21 Runtime moved to DSH 0.2.1-rc.2, dshmarket 1.66.44, AA bridge 39b82d4, new boot wordmark and onboarding API-key guidance, AA queue overflow drops events instead of crashing

Known limitations

  • In-app update on Linux only checks the version and never downloads an installer; upgrade by downloading a fresh AppImage.
  • Windows ARM64 ships as an experimental build: dist:win:stable produces only the x64 installer by default; arm64 requires DSH_PACKAGE_ARCH=arm64 (pair it with DSH_PACKAGE_OUTPUT_DIR for a separate output directory). The shell is native arm64 while the bundled runtime stays on the x64 payload (Windows emulation), a cross-arch build skips the run-only smokes, and the update channel currently carries a single windows artifact, so it cannot serve x64 and arm64 side by side.
  • Windows installers are not cryptographically verified yet: the download path supports a server installerSha256, but the version endpoint does not publish it, so only ProductName / ProductVersion are compared for now (Stable shell only; the Beta shell checks just the installer magic bytes and size, then executes it).
  • LAN access has no authentication — it hands this machine's DSH to everyone on the same network segment.
  • A wrong plugin inject service name fails silently as a permanently pending plugin, showing up only as HTTP 4xx.
  • A local yarn install may rewrite the dsh-nonead-client-skin content fingerprint in yarn.lock (not reproducible across machines); do not commit such local lockfile changes.

Community

DeepSeek Harness ecosystem projects and developer tools:

Project Description Link
dshfind Learning and sharing community for DeepSeek Harness (DSH). GitHub · Website
DSH 1024Store Community plugin catalogue for DSH, with an open-sourced market, catalogue pipeline and public query API. GitHub
Awesome DSH Plugin Curated list of DeepSeek Harness plugins. GitHub
dsh-market Visual plugin market inside DSH with browsing, search and one-click install. GitHub
ModLens OCR, layout and semantic recognition for DSH and text-only coding agents. GitHub
DeepSeek Harness orange book Community handbook of measured DeepSeek Harness practice. GitHub
dsh-web-ui Collection of DeepSeek Harness Web UI plugins and skins. GitHub
dsh-TUI Full-screen interactive terminal UI for DeepSeek Harness. GitHub
dsh-context Context insight panel for DSH: dashboard, /context command and browser. GitHub
Agents-Anywhere Control a coding agent on your computer from your phone. GitHub
DSH-better-sidebar DSH sidebar workbench integrating files, terminal, Git and subagents. GitHub
Awesome DeepSeek Harness Curated list of DSH plugins, tools and infrastructure. GitHub

License

Copyright © 2026 Nonead Corporation. Released under the MIT License.

"DeepSeek Harness" is a registered trademark of DeepSeek. The name is used only to accurately describe compatibility, technical provenance and the relationship with upstream software.

This project is completely free and open source. If anyone sells you this software in any form, decline the transaction.

Nonead DSH Desktop is an independent community project and is not affiliated with, partnered with, licensed by, or endorsed by DeepSeek.

Introduction

一键安装即可在桌面使用 DeepSeek Harness 智能体,支持 Windows、macOS 和 Linux。项目将 DSH 封装为 Electron 桌面应用,提供窗口、托盘、终端和自动更新,采用'一切皆插件'架构,桌面壳本身也是 DSH 插件。

https://www.nonead.comCustomize your domain