陈景帅1k downloadsChat with a DeepSeek Harness agent inside your vault: it runs bash, edits files, and searches the web to work on your notes.
中文版 · English
A Claudian-style AI assistant plugin for Obsidian: it calls DeepSeek Harness directly from the side panel. Send a task to the chat window and the DSH agent works in your vault as its working directory, using its full toolset (bash, file read/write, web search, subagents, …) autonomously.
Feature showcase — send a task in the side panel, and the DeepSeek Harness agent works in your vault.
Design document:
DESIGN.md. This repo was designed based on an analysis of Enigmora/claudian; the key difference is that execution is pushed down to the DSH runtime — the plugin only bridges the process and renders the UI.
Obsidian plugin ──spawn──▶ dsh --profile headless --patch <vault.yml> "<task>"
│ cwd = vault root
│ DSH_HOME = ~/.dsh (reuses your credentials/model config)
▼
DeepSeek Harness agent
bash │ file tools │ web_search │ subagents …
Verified locally: dsh --profile headless "use bash to run pwd and ls…" works end-to-end.
Install the DSH CLI:
npm i -g @deepseek-ai/dsh
Configure model credentials (either one):
~/.dsh/.credentials.yamlDEEPSEEK_API_KEY environment variableClick "Run check" on the plugin settings page to confirm dsh is detected.
dsh is detected.npm install
npm run build
# Copy into your vault:
cp -r dist /path/to/vault/.obsidian/plugins/deepharness/
After enabling the plugin, click the bot icon in the left ribbon to open the chat panel.
deepseek-flash (DeepSeek's rolling alias on the official API)dsh-home/ directory) via the agent-default-model config; credentials are symlinked from ~/.dsh — the global DSH settings are never polluted@ in the input box to search and reference any note in the vault — live title/path matching, inserted as [[path]] (scoped by the "Working directory" setting).obsidian/plugins/deepharness/generated/vault.yml)
instructs the agent to use wikilinks and ask before destructive operations; freely editabledsh, Node.js and the three paths the plugin must write, and gives a concrete remedy for each failure (install command, which path to fix, or the usual sync-folder / permission causes). A failing check can produce a copyable report you can hand to any assistant to diagnose| Setting | Default | Description |
|---|---|---|
| dsh binary path | auto-detect | Empty = PATH |
| Node.js path | auto-detect | The plugin runs the dsh script with node directly (bypasses the shebang issue under Obsidian's restricted PATH) |
| DSH_HOME | ~/.dsh |
Credentials/config root |
| Plugin API key | empty | DeepSeek API key used ONLY by this plugin (separate from the desktop app); empty = reuse desktop credentials |
| Model provider | DeepSeek official API | deepseek-official = DeepSeek official API; opencode-go = OpenCode Go subscription (OpenAI-compatible, https://opencode.ai/zen/go/v1) |
| Working directory | vault root | Relative subfolder to scope the agent |
| Task timeout | 600s | Auto-stops the run when exceeded |
| Conversation memory | on | Context refill |
| Tool execution mode | default (native) | native / code / both (tool backend, not a file sandbox) |
| Model | deepseek-flash |
Selected from the editable Model list below it; add any model id to use a model newer than this plugin release |
| Model list | 4 built-in ids | The models offered in the dropdowns. Add or delete any id; Import from DSH appends the ids your own DSH settings declare, only when pressed |
| Reasoning effort | high | off / high / max; switchable from the toolbar |
| Security mode | workspace write | read-only / workspace write / full access |
| Show thinking | on | Collapsible thinking block before the answer |
| Show tool calls | on | Shows tool invocations (bash, file ops) as they run |
| History entries | 50 | Max sessions kept in the history panel; oldest removed first |
| Custom persona | empty | Extra instructions appended to the agent system prompt |
Harness/memory.md), run historySee DESIGN.md section 8.
MIT