mingzeng21/dsh-obsidian

插件Plugin 原生Native ⭐ 10 MIT 其他Other

将DeepSeek Harness(dsh)连接到本地Obsidian仓库:搜索、读取、写入、移动和删除笔记。

项目介绍Project Overview

dsh-obsidian 是面向 DeepSeek Harness(dsh)的插件,将本地 Obsidian vault 以纯文件系统方式暴露给 agent,自动注册 12 个 obsidian_* 工具,覆盖列出、全文搜索、读取、frontmatter、写入、追加、移动、反链、属性增删、标签统计及回收站式删除等操作。适用于让 dsh agent 直接在 Markdown vault 中做整理、改写、检索与维护,无需启动 Local REST API 或 MCP server。注意:vaultPath 解析后所有操作均限制在 vault 根目录内,删除仅移入 .trash/ 且不会触及 .obsidian/,路径越界会被拒绝。

dsh-obsidian is a DeepSeek Harness (dsh) plugin that exposes a local Obsidian vault to a dsh agent via the file system, registering 12 obsidian_* tools: list, search, read, frontmatter, backlinks, write, append, move, delete, set/delete property, and tags. It is designed for letting a dsh agent search, read, edit, reorganize, and tag Markdown notes in an Obsidian vault without running the Local REST API community plugin or an MCP server. Use it when you want dsh to manage an Obsidian vault directly. Note: delete only moves notes into .trash/, paths outside the vault root are rejected, and .obsidian/ is never modified.

或使用命令行安装(适合开发者)Or use CLI install (for developers)

命令行安装CLI Install

dsh plugin --profile web add dsh-obsidian

mingzeng21/dsh-obsidian 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-obsidian

DeepSeek Harnessdsh)连接到本地 Obsidian vault。因为一个 Obsidian vault 本质上就是磁盘上的一堆 Markdown 文件,所以你的 dsh agent 可以直接搜索、读取、写入、移动和删除(移入回收站)笔记——不需要 MCP server,也不需要 OAuth

Awesome DSH Plugin License: MIT Node: >=22.12.0

中文 | English

它能帮你做什么

装上 dsh-obsidian 后,你的 dsh agent 就能直接读写本地 Obsidian vault。插件会在启动时自动探测你的 vault(或读取你显式配置的路径),然后把 12 个 obsidian_* 工具挂载给 agent,覆盖搜索、读取、写入、追加、移动、删除和反链查询等日常操作。

特性

  • 零依赖服务器 —— 直接读写 vault 文件系统,无需 Local REST API 社区插件,也无需常驻 MCP server。
  • 默认安全 —— 删除只把笔记移入 .trash/(可逆)、路径无法越出 vault 根目录、绝不触碰 .obsidian/

工作原理

dsh agent 调用 obsidian_* 工具
   │
   ▼
VaultAccess 接口
   └─ FsAccess —— node:fs + 自研 frontmatter/wikilink 解析(默认,纯文件系统)

启动时插件按「显式 vaultPath 优先,否则从 obsidian.json 自动探测」解析 vault 根目录;useCli 开启且检测到 CLI 时,property:set/property:remove 委托给 CLI,其余操作始终走 FsAccess,任何 CLI 失败都会静默回退到 FsAccess

安装

dsh plugin --profile web add dsh-obsidian

web 换成你运行 agent 所用的 profile(webheadlesstui 等)。

更新

重跑 add 即会拉取最新版(latest):

dsh plugin --profile web add dsh-obsidian

或锁定具体版本:

dsh plugin --profile web add dsh-obsidian@0.2.2

更新后重启 harness(dsh web)或刷新 Web UI;用 dsh plugin --profile web list 确认版本。

卸载

dsh plugin --profile web remove dsh-obsidian

配置

默认值 说明
vaultPath (自动探测) vault 的绝对路径;留空则按平台从 obsidian.json 自动探测当前打开的 vault
useCli false 可用时把 property:set/property:remove 委托给 obsidian CLI
excludeDirs [".obsidian", ".git", ".trash"] 搜索/列出时排除的目录

工具

工具 作用
obsidian_list 列出 vault 里的笔记(可按子目录过滤、限制条数)
obsidian_search 全文检索,返回匹配行 + 上下文(大小写不敏感、只搜 .md
obsidian_read 读取一篇笔记(正文 + 解析后的 frontmatter)
obsidian_frontmatter 只读笔记的 YAML 属性
obsidian_backlinks 找出链接到某篇笔记的笔记([[wikilink]]
obsidian_write 新建或覆盖一篇笔记(父目录不存在时自动创建)
obsidian_append 向笔记末尾追加内容
obsidian_move 移动/重命名笔记(纯文件系统同步更新 [[链接]]
obsidian_delete 把笔记移入 .trash/(可逆,绝不永久删除)
obsidian_set_property 设置或更新笔记的单个 frontmatter 属性(YAML)
obsidian_delete_property 删除笔记的某个 frontmatter 属性
obsidian_tags 列出 vault 中所有标签及使用次数

所有工具的路径参数都相对于 vault 根目录(例如 Folder/Note.md)。

安全性

  • 路径越界防护 —— 所有路径参数都会解析并校验必须落在 vault 根目录内,越界(../ 或绝对路径逃逸)一律拒绝。
  • 删除可逆 —— obsidian_delete 只把笔记移入 vault 的 .trash/,绝不永久删除。
  • 不碰 .obsidian/ —— 搜索与列出默认排除 .obsidian/.git/.trash/
  • 保护 frontmatter 与 wikilink —— 读取/写入不会破坏 YAML 属性和 [[链接]](除非任务明确要求改)。

环境要求

已验证兼容至 dsh v0.1.1-rc.2(含 v0.1.0-rc.8)。

开发

npm install
npm run build      # tsdown → lib/
npm run typecheck  # tsc --noEmit
npm test           # vitest

更新日志

0.2.2

  • obsidian_tags 与内联 #标签 提取支持中文等 Unicode 字符。
  • obsidian_backlinks / obsidian_move 按 Obsidian 规则唯一解析 [[链接]]:同名笔记不再被误判,歧义链接不再被误改。
  • obsidian_set_property / obsidian_delete_property 编辑属性时保留原有 YAML 注释、锚点/别名与多行格式,不再整块重写。
  • 稳定性:obsidian_move 链接更新改为原子写;跨文件系统移动/删除自动回退;搜索在有/无 ripgrep 时结果一致。

许可证

MIT © 2026 MingZeng

上一个 Prev Vibe-Mathematics 下一个 Next dsh-kuikly-expert