dsh-obsidian-vault:让 DeepSeek Harness 直接操作 Obsidian 笔记库

前言

在 DeepSeek Harness(DSH)里跑 Agent 时,个人知识库往往落在 Obsidian:一堆 Markdown、YAML frontmatter 和 [[wikilink]]。若只能靠「把全文塞进上下文」或手写脚本读写目录,检索、按行编辑、改 frontmatter、重命名还要自己维护双链,既慢也易出错。

dsh-obsidian-vault 把上述能力做成一组注册到 Harness 的工具:针对 vault 文件夹列出、读取、搜索、新建与编辑笔记,管理 frontmatter,按标签查询,并在移动或重命名时默认修复指向该笔记的 wikilink。不需要启动 Obsidian,也不依赖 Obsidian 插件。

这是什么

维护者 jinferth 在 GitHub 开源的 DSH 插件,npm 包名为 @jinferth/dsh-obsidian-vault(版本 1.0.0,MIT),社区目录分类为「记忆」。定位一句话:Obsidian vault tools for DeepSeek Harness——在纯 Markdown 层面操作笔记库。

核心功能

插件向 Agent 暴露多类工具,README 中的能力如下。

库信息与列举

  • obsidian_info:返回 vault 绝对路径、是否存在、笔记数量;不确定当前连的是哪个库时,应先调用。
  • obsidian_list:列出笔记,可按文件夹或 glob(如 Projects/**、*.md)过滤;结果数量受 maxResults 限制(默认 200)。

读与搜

  • obsidian_read:按 vault 相对路径读单篇;.md 可省略;行号与 obsidian_edit 对齐。
  • obsidian_search:在标题与正文中搜索,支持字面量或 regex。

写与改

  • obsidian_new:新建笔记,可带 frontmatter;已有文件则拒绝覆盖。
  • obsidian_append:在文末追加 Markdown;文件不存在则创建。
  • obsidian_edit:四种模式——replace(字面替换,须唯一除非 replaceAll)、replaceLines、insertLines、deleteLines。
  • obsidian_frontmatter:对单个 frontmatter 键执行 get / set / delete,不改动正文。

查询、移动与删除

  • obsidian_query:按 frontmatter 属性、标签和路径查找;多个标签为 AND。
  • obsidian_move:移动或重命名笔记,默认重写全库中指向它的 wikilink。
  • obsidian_delete:将笔记移入 vault 内 .trash,而非直接删除文件。
  • obsidian_insert_image:把图片复制进 vault 并在笔记中引用。
  • obsidian_batch:将上述多个操作作为同一事务执行;任一步失败则回滚先前步骤。

安全与编码

路径必须留在 vault 内,绝对路径与 .. 穿越会触发 VaultPathError。.obsidian/、.trash/、.git/ 不参与列举、搜索或写入。写入先写临时文件再 rename,避免中断导致截断。保留 CRLF 与 BOM。删除进 .trash 便于恢复。

安装与启用

包未发布到 npm,且 npm 上裸名 dsh-obsidian-vault 属于另一位作者;须用 GitHub 路径安装。

dsh plugin --profile web add github:jinferth/dsh-obsidian-vault

重启 profile 后确认工具已加载:

dsh --profile web --dump-config

运行环境要求 Node.js >= 20(见 package.json 的 engines)。

配置 vault 路径

插件按以下顺序解析 vault:

  1. cordis.patch.yml 中的 config.vaultPath
  2. 环境变量 OBSIDIAN_VAULT
  3. Obsidian 上次打开的库(Windows:%APPDATA%\obsidian\obsidian.json;macOS:~/Library/Application Support/obsidian/obsidian.json;Linux:$XDG_CONFIG_HOME/obsidian/obsidian.json)

若要固定某一库,可在 patch 中插入如下块:

- insert:
    - id: obsidian-vault
      name: '@jinferth/dsh-obsidian-vault'
      config:
        vaultPath: '/home/me/Obsidian'
        maxResults: 200

maxResults 限制 obsidian_list 与 obsidian_search 单次返回条数。装好后若提示未配置库,可在 Obsidian 中打开一次目标库、设置 OBSIDIAN_VAULT,或在 patch 中写明 vaultPath。

典型用法思路

下面是一套可与 README 对照的协作顺序,而非虚构对话案例。

  1. 调用 obsidian_info 确认当前 vault 路径与笔记数。
  2. 用 obsidian_search 或 obsidian_query 定位目标笔记。
  3. 用 obsidian_read 加载内容;小改动可用 obsidian_edit 的 replaceLines / insertLines;元数据用 obsidian_frontmatter。
  4. 整理结构时用 obsidian_move,依赖默认 wikilink 修复,避免全库断链。
  5. 多篇联动变更可打包进 obsidian_batch,降低半途而废留下脏状态的风险。

Harness 处于开发者预览,插件为兼容宿主动态:不导入 @deepseek-ai/*,仅通过 ctx.tools.register 注册工具;注册失败时写日志而不拖垮 profile 启动。上游仓库说明可用 npm test 对临时 vault 跑 25 项检查(无网络、无真实 Obsidian)。

适用场景与注意

适合已在 Obsidian 沉淀 Markdown、又希望在 DSH Agent 中做检索、增量编辑、frontmatter 与双链维护的开发者。vault 即普通文件夹,与 Obsidian 桌面端可并行使用,但 Agent 写入会直接改磁盘上的文件,操作前宜有版本管理或备份习惯。

插件在 当前 dsh 进程的用户权限 下读写 vault;安装与启用前应自行查看 GitHub 仓库 源码与 MIT 许可证。社区插件目录由 SkillHub 等站点维护,与 DeepSeek / 幻方无官方从属关系,安装来源以 README 与目录页为准。

结尾

dsh-obsidian-vault 把 Obsidian 笔记库变成 Harness 可调用的工具面:列举、搜索、编辑、frontmatter、标签查询与带 wikilink 修复的移动,并在路径、原子写入与软删除上做了约束。需要了解分类与简介时,可打开 SkillHub 目录页;安装命令与工具说明以 GitHub README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye