Connect dsh to a local Obsidian vault: search, read, write, move, and trash notes through `obsidian_*` tools.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:mingzeng21/dsh-obsidian
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Connect DeepSeek Harness (dsh) to a local Obsidian vault. Because an Obsidian vault is just a folder of Markdown files on disk, your dsh agent can search, read, write, move, and trash notes directly — no MCP server, no OAuth.
中文 | English
What it does
Once dsh-obsidian is installed, your dsh agent can read and write a local Obsidian vault directly. On startup the plugin detects your vault (or reads the path you configured) and mounts 9 obsidian_* tools covering search, read, write, append, move, delete, and backlink lookups.
Features
- Zero server — reads/writes the vault filesystem directly; no Local REST API community plugin, no standing MCP server.
- Optional Obsidian-native ops — when the
obsidianCLI is available, backlinks and move delegate to it (link-aware moves); otherwise everything falls back to a pure filesystem implementation. - Safe by default — deletes move notes into
.trash/(reversible), paths can't escape the vault root, and.obsidian/is never touched.
How it works
dsh agent calls obsidian_* tools
│
▼
VaultAccess interface
├─ FsAccess — node:fs + hand-written frontmatter/wikilink parsing (always available)
└─ CliAccess — when the obsidian CLI is detected, delegates backlinks/move to it (everything else stays on fs)
On startup the plugin resolves the vault root as "explicit vaultPath wins, else auto-detect from obsidian.json"; when useCli is on and the CLI is detected it enables CliAccess, and any CLI failure silently falls back to FsAccess.
Install
dsh plugin --profile web add dsh-obsidian
Replace web with the profile you run your agent in (web, headless, tui, …).
Uninstall
dsh plugin --profile web remove dsh-obsidian
Configuration
| Key | Default | Description |
|---|---|---|
vaultPath |
(auto-detected) | Absolute path to the vault; leave empty to auto-detect the currently-open vault from obsidian.json |
useCli |
true |
Delegate backlinks/move to the obsidian CLI when available |
excludeDirs |
[".obsidian", ".git", ".trash"] |
Directories excluded from search and list |
Tools
| Tool | Purpose |
|---|---|
obsidian_list |
List notes in the vault (filter by subdirectory, limit results) |
obsidian_search |
Full-text search with match lines + context (case-insensitive, .md only) |
obsidian_read |
Read a note (body + parsed frontmatter) |
obsidian_frontmatter |
Read only a note's YAML properties |
obsidian_backlinks |
Find notes linking to a note via [[wikilinks]] |
obsidian_write |
Create or overwrite a note (creates parent directories) |
obsidian_append |
Append text to the end of a note |
obsidian_move |
Move/rename a note (updates links when the CLI is available) |
obsidian_delete |
Trash a note into .trash/ (reversible, never permanently deletes) |
All tool path arguments are relative to the vault root (e.g. TradeArena/deploy.md).
Safety
- Path containment — every path argument is resolved and checked to stay inside the vault root; escapes (
../or absolute paths) are rejected. - Reversible delete —
obsidian_deleteonly moves notes into the vault's.trash/, never permanently deletes. - Hands off
.obsidian/— search and list exclude.obsidian/,.git/, and.trash/by default. - Preserves frontmatter and wikilinks — reads/writes don't break YAML properties or
[[links]](unless the task explicitly asks).
Requirements
- DeepSeek Harness (
dsh) - Node.js ≥ 22.12.0
- Obsidian CLI (optional, for link-aware moves and CLI backlinks)
Development
npm install
npm run build # tsdown → lib/
npm run typecheck # tsc --noEmit
npm test # vitest
License
MIT © 2026 MingZeng
Links
More in this category
liustack/modlens★ 2073
Vision bridge for text-only models: paste an image, get structured JSON evidence (OCR, layout, semantics).
Anionex/dsh-vision-toolkit★ 467
Vision tasks for text-only models: intent-aware image Q&A, long-screenshot OCR, UI reproduction, grounding, and pixel diff.
superdesigndev/treg★ 423
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
ysr666/dsh-vision-router★ 240
Free vision for text-only agents: built-in keyless vision chain plus pixel tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots); paste an image to use it.
Lum1104/dsh-browser★ 177
Chrome sidebar extension that lets DSH operate your browser directly, no vision capabilities required.
zhaoolee/notes★ 141
Export DSH conversations as Smartisan Notes-style PNGs, or create and update Markdown notes in a configured account-scoped workspace.