bzlir145 downloadsHost DeepSeek Harness (dsh) inside Obsidian — unified surface, vault-aware agent, persistent memory.
English | 简体中文
Host DeepSeek Harness (dsh) inside Obsidian — let the dsh agent read and write your Vault files, and maintain agent working memory directly inside the Vault.
dsh web subprocess bound to the current Vault's root directory.Obsidian 1.13.0 or later (desktop only).
Node.js 22.20 or later (dsh 0.1.5+ uses import.meta.main, which requires Node 22.20+; Node 22.17 silently fails to start dsh).
dsh installed globally:
npm install -g @deepseek-ai/dsh
The plugin scans nvm, Homebrew, Volta, asdf, fnm, ~/.local/bin, and ~/bin directories to locate dsh and a compatible node, so it works even though Obsidian's bundled Electron ships an older Node. You can also add custom paths in the settings panel or use the Search for dsh button to auto-detect.
The plugin supports both old and new dsh protocol versions:
| dsh version | Protocol | Notes |
|---|---|---|
| 0.1.5+ | BrowserAuth (token → cookie → proxy) | Recommended. Full auth proxy for cross-site iframe. |
| 0.1.1–0.1.4 | Legacy (no auth) | Supported. Direct HTTP access, no token/cookie/proxy. |
The plugin auto-detects which protocol the running dsh uses — no configuration needed.
git clone https://github.com/bzlir/obsidian-dsh-plugin.git
cd obsidian-dsh-plugin
npm install
npm run build
Then copy main.js, manifest.json, and styles.css into your Vault's .obsidian/plugins/dsh-embedded/ directory.
Tip: This repo ships helper scripts (
scripts/install.sh,scripts/rollback.sh,scripts/uninstall.sh) that automate building, installing with rollback support, and cleanup. Runbash scripts/install.shafternpm install.
When dsh is missing, the plugin opens a one-click install wizard (nvm → Node.js 22 → dsh). The wizard also presents a recommended plugin list:
Toggle off any item you don't want before clicking Install; your choice is remembered for future runs. Recommended plugins are installed into the dsh web profile (~/.dsh/profiles/web) — via pnpm when available, otherwise npm — and registered as dsh bundle layers, the same way dsh plugin --profile web add would. Future recommended plugins will be offered through this same mechanism.
Cmd+P).node/dsh install locations (nvm, Homebrew, Volta, asdf, fnm, ~/.local/bin, ~/bin, plus any user-added custom paths) to find a Node ≥ 22 and the dsh CLI, bypassing Obsidian's bundled Electron Node.?token=) on stdout, token→cookie exchange, then POST /api/session/list returning a valid RPC response — so the iframe loads only after the dsh API gateway is live.POST /api/workspace/create with the Vault path so dsh treats the Vault as its working directory.The plugin has a settings panel (Settings → DSH Embedded) where you can add custom search paths for the dsh binary, or click Search for dsh to automatically scan your machine.
dsh configuration lives in ~/.dsh/ — see the dsh documentation for profile and credential setup.
This plugin spawns a local dsh web subprocess and embeds its UI via an iframe. The following disclosures apply per the Obsidian developer policies:
Network use: The plugin starts a dsh web HTTP server on 127.0.0.1 (loopback only). The dsh subprocess itself may make outbound network calls to LLM provider APIs (e.g. DeepSeek, NIO, OpenAI-compatible endpoints) as configured in ~/.dsh/. The plugin itself does not make any network requests directly, with one opt-in exception: when you accept a recommended plugin (e.g. dsh-market) during dsh setup, the plugin runs npm/pnpm inside the dsh profile directory, which downloads packages from the npm registry.
Files outside the Vault: To locate the dsh and node binaries, the plugin reads the following locations outside the Vault:
~/.nvm/, ~/.volta/, ~/.asdf/, ~/.fnm/, ~/.local/bin/, ~/bin//opt/homebrew/bin, /usr/local/binmdfind) or a bounded find over common install roots~/.dsh/profiles/web/ (writes the profile manifest, patch/workspace files, and node_modules)The plugin also reads ~/.dsh/.credentials.yaml indirectly (dsh reads its own credentials file at startup). The plugin itself does not read, modify, or transmit credential files.
No telemetry: The plugin collects no data and sends no analytics.