余航126 downloadsEmbed DSH (DeepSeek Harness) as the single AI agent in your vault: chat panel, session history, per-session model/reasoning-effort/permission switching, live thinking process, and model discovery.
Embed DSH (DeepSeek Harness) as the single AI agent inside your Obsidian vault. Chat with your notes, have DSH read, search, and edit files directly in the vault — no copy-paste.
Your request
│
▼
DSH (dsh --profile headless, vault as working directory)
│ reads files / searches your knowledge base / produces Markdown
▼
<vault>/.dsh/sessions/conv-*.json (session history, travels with your vault)
dsh --profile headless <task> in the vault root. No other agents, no extra setup.<vault>/.dsh/sessions/; browse, search, reopen or delete them from the history modal, or manage everything in the dedicated Session Manager view.@ to fuzzy-search your vault and insert @[[Note Name]]; the note's content is attached to the request. The active note is auto-attached as @[[...]] (toggle it off with one click).```agent-client code block in any note to embed a live chat right there.~/.dsh/settings.yaml) to populate the model list and defaults, with status feedback and a 10s timeout..obsidian/plugins/ and enable.dsh command or the @deepseek-ai/dsh package in the npx cache).~/.dsh/.credentials.yaml with DEEPSEEK_API_KEY (or the DSH credentials service configured).isDesktopOnly: true).Copy the dsh-plugin/ folder to your vault's plugin directory:
<your-vault>/.obsidian/plugins/dsh/
In Obsidian: Settings → Community plugins → enable DSH.
Click the robot icon in the ribbon, or run the command "Open DSH chat".
@[[Note]]); mention more notes with @. The mention chip in the input box shows what will be attached; click it to toggle.workspace-write (default) lets DSH read and write vault files; use read-only for questions only, or danger-full-access with care (maps to DSH's DSH_PERMISSION_MODE).| Setting | Description |
|---|---|
| Show thinking | Stream reasoning + tool calls live (default on); off falls back to a status line |
| Discover models | Scan ~/.dsh/settings.yaml for the model catalog, fill the model list and defaults |
| Model list | Comma-separated options for the model selector |
| Default model / effort | New sessions start with these (provider is always deepseek-official) |
| DSH command / entry | Leave empty for auto-detect; or set a node entry (…/lib/bin.js), .cmd wrapper, or custom command |
| Node.js path | Leave empty for auto-detect (Obsidian's built-in Electron is not node) |
| DSH_HOME override | Leave empty to use ~/.dsh (where .credentials.yaml lives) |
| Permission mode | Default for the chat selector: read-only / workspace-write / danger-full-access |
| Extra launcher args | Extra args passed to dsh, e.g. --patch C:/path/extra.yml |
| Custom prompt | Appended after the built-in system prompt |
| Timeout (seconds) | Per-task limit, default 600 |
node <dsh entry> --profile headless <assembled task> with the vault root as the working directory.<linked_note>, <note_content>).conv-<timestamp>-<random>.json with title / createdAt / lastActivityAt / messages[].node scripts/build-plugin.js # rebuild the single-file main.js after editing the template/provider
node test/load-test.js # mock-Obsidian load tests
node test/provider-test.js # provider chain tests
node --check dsh-plugin/main.js # syntax check
If Obsidian reports "plugin failed to load":
Apache-2.0. The visual design is adapted from RAIT-09/obsidian-agent-client (Apache-2.0); the DSH backend integration and DSH-specific additions are original.