Agent Application with core DSH.
A native cross-platform app plus a pack of standard dsh bundles. The plugins are plain JavaScript with zero npm dependencies; the launchers run on Windows, macOS and Linux (PowerShell on one side, plain POSIX shell on the other, and the Unix half never needs PowerShell).
run-desktop.bat: the splash while npx works, and the same window once the harness is listening.
A release archive is the app - there is no installer and nothing to compile.
Node.js 22 or newer is the only prerequisite; the pinned harness is fetched by
npx on the first run. (Windows also wants the WebView2 runtime, which Windows 10
and 11 already have.)
| Windows | macOS / Linux | |
|---|---|---|
| One file | double-click vn-harness-<version>-win-x64.exe |
./vn-harness-<version>-<rid>.run (add the executable bit if the download lost it) |
| From a release | extract the zip, then double-click START-HERE.bat |
extract, then ./START-HERE.sh |
| From a clone | install.bat |
./install.sh |
| Remove | uninstall.bat |
./uninstall.sh |
| Direct, no script | powershell -File scripts/install-all.ps1 -Force |
sh scripts/install-all.sh -Force |
The one-file column is the same distribution with the folder inside it: it unpacks
itself into your user data folder, then does exactly what START-HERE does from an
extracted folder.
START-HERE and install add every bundle under packages/ to the harness web
profile (~/.dsh/profiles/web), copy the skills a bundle ships into
~/.dsh/skills, and print what to do next; re-running either is safe.
START-HERE then opens the app, install.bat never does, and vn-harness.exe
only runs. Bundles are added as live links into this folder, so a code edit
applies on restart and the folder is not a copy. -Plugin, -DshHome,
-ProfileName, -DshVersion and -Force are in docs/INSTALL.md.
| Windows | macOS / Linux | |
|---|---|---|
| Native window | run-desktop.bat |
cargo build --release in app/src-tauri |
| Browser tab | run-web.bat |
./run-web.sh |
Both start npx @deepseek-ai/dsh@<pin> web and open the URL it prints: the native
window loads it in a WebView2 / WKWebView / WebKitGTK window, the other in Chrome,
falling back to your default browser. The URL is opened only when it names a
loopback address, and the launch token is never written to a file - both rules
are in SECURITY.md.
Flags: -Port <n> when 3080 is taken, -NoBrowser to start the server alone,
-DefaultBrowser to skip Chrome, -Help anywhere.
The desktop shell answers the two questions worth asking while it starts: whether
a DeepSeek key was found and which layer supplied it (the environment,
$DSH_HOME/.credentials.yaml, or a .env), and which harness home this run
will use. That is why installing a newer release over an older one is a non-event:
sessions, settings and the key live in ~/.dsh, not in the folder you replaced.
The key's value never leaves the shell. Details: app/README.md.
Every package's own README is the reference for what it does, why it is built that
way and what it touches. The exact versions are in
.dsh-version.json.
| Package | What it adds |
|---|---|
dsh-vn-master |
the blank master, installed last - the slot pack-wide patches go in |
dsh-rightbar |
the pack's own right bar: tab strip, docking panel and the sidebarRight registry (a fork of the shipped bar) |
dsh-rightbar-files |
the Files tab type on top of that bar |
dsh-editor |
text and code tabs (vendored CodeMirror 6), with a Markdown preview and Save/Create |
dsh-gittree |
read-only History tab: the workspace's commits, and the files each one touched |
dsh-image |
an image viewer that fits, zooms, pans, and reads the source pixel under the pointer |
dsh-audio |
a waveform surface: WAV/AIFF/FLAC, one track per channel, dBFS, selection and playback |
dsh-media |
media the agent can work with: media_probe / media_run / media_frames over a pinned, SHA-256-verified ffmpeg copy, plus the routes the video tab streams through |
dsh-video |
a player tab that streams and seeks any video container, with an ffprobe facts panel, chapter jumps and a one-click remux when the browser cannot decode it |
dsh-diagrams |
Mermaid and TikZ as tabs and six agent tools, every write validated before it is stored |
dsh-pdf |
PDF as a surface the agent can read and scan, plus a reader tab with thumbnails and bookmarks |
dsh-terminal |
a real shell in a bottom dock (vendored xterm.js over the harness's own node-pty) |
dsh-themes |
header controls (themes incl. Nord/Monokai/Hacker, screenshot, page zoom), the Markdown paper, VN branding |
dsh-ui-state |
the pack's own UI state (zoom, theme, dock, column widths) remembered host-side |
dsh-modal |
the shared dialog surface (modals) the pack's controls use |
dsh-open-in-app |
Open In… patched to open the OS file browser directly |
The pack used to ship its own Files panel (dsh-files, earlier dsh-focus); that
was retired when the harness grew a real right Sidebar, and the installer prunes
the old names so an upgrade cannot double-mount.
- MIT - see LICENSE. Plugins are authored by vecnode.
- SECURITY.md: the threat model, the launch token, what the pack
deliberately does not do, and how
check-no-secrets.mjskeeps a credential out of a commit. Report a vulnerability privately, as described there. - ARCHITECTURE.md is the deep dive; docs/ holds install, distribute, compatibility and per-host notes.
