🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

库自动打开 NOOBnoob163/dsh-open-obsidian

DeepSeek 客户端
NOOBnoob16324 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

会话开始时自动打开 Obsidian 库,让同步插件跑起来

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/NOOBnoob163/dsh-open-obsidian.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/04·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 24 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 40 处,展示前 25 条)
  • 写入本地文件
    lib/index.js:195
    mkdirSync(dirname(DECISION_LOG_FILE), { recursive: true });
  • 读取本地文件
    lib/index.js:196
    const stat = existsSync(DECISION_LOG_FILE)
  • 读取本地文件
    lib/index.js:197
    ? statSync(DECISION_LOG_FILE)
  • 写入本地文件
    lib/index.js:200
    writeFileSync(DECISION_LOG_FILE, "", "utf8");
  • 写入本地文件
    lib/index.js:202
    appendFileSync(
  • 读取本地文件
    lib/index.js:219
    if (!existsSync(DECISION_LOG_FILE)) return null;
  • 读取本地文件
    lib/index.js:220
    const lines = readFileSync(DECISION_LOG_FILE, "utf8").split(/ ? /);
  • 读取本地文件
    lib/index.js:298
    if (!existsSync(SETTINGS_FILE)) return null;
  • 读取本地文件
    lib/index.js:299
    const raw = JSON.parse(readFileSync(SETTINGS_FILE, "utf8"));
  • 写入本地文件
    lib/index.js:314
    mkdirSync(dirname(SETTINGS_FILE), { recursive: true });
  • 写入本地文件
    lib/index.js:315
    writeFileSync(SETTINGS_FILE, JSON.stringify(value, null, 2) + "\n", "utf8");
  • 执行外部命令固定命令
    lib/index.js:432
    const result = spawnSync(
  • 执行外部命令来自配置/变量
    lib/index.js:545
    child = spawn(helper, ["list", outFile], {
  • 执行外部命令固定命令
    lib/index.js:602
    child = spawn(
  • 写入本地文件
    lib/index.js:1740
    writeFileSync(stateFile, JSON.stringify({ phase: "starting" }), "utf8");
  • 执行外部命令来自配置/变量
    lib/index.js:1745
    const child = spawn(
  • 执行外部命令来自配置/变量
    lib/index.js:1948
    const child = spawn(custom.replaceAll("{vault}", vaultDir), {
  • 执行外部命令来自配置/变量
    lib/index.js:1975
    const child = spawn(exe, [uri], {
  • 写入剪贴板
    lib/client.js:185
    navigator.clipboard.writeText(text).then(
  • 发起网络请求
    lib/client.js:240
    fetch("/dsh-open-obsidian/settings", { headers: { accept: "application/json" } })
  • 发起网络请求
    lib/client.js:257
    fetch("/dsh-open-obsidian/settings", { headers: { accept: "application/json" } })
  • 发起网络请求
    lib/client.js:283
    fetch("/dsh-open-obsidian/settings", { headers: { accept: "application/json" } })
  • 发起网络请求
    lib/client.js:307
    fetch("/dsh-open-obsidian/settings", {
  • 发起网络请求
    lib/client.js:331
    fetch("/dsh-open-obsidian/settings", { headers: { accept: "application/json" } })
  • 发起网络请求
    lib/client.js:369
    fetch("/dsh-open-obsidian/reveal-log", {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 会话开始自动打开库
  • 触发同步插件运行
  • 已开库跳过不抢焦点

DSH 插件:会话在 Obsidian 库里工作时自动把库打开——这样你装的同步插件(坚果云同步等)就会开始跑,AI 改的东西才能真正同步出去。已开着的库跳过,新窗口不抢焦点。(是 DSH 插件,不是 Obsidian 插件)

README

由 DeepSeek 最新模型翻译生成
dsh-open-obsidian 这是给 DeepSeek Harness(简称 DSH)用的插件,不是 Obsidian 插件。 装进 Obsidian 里没有任何作用,Obsidian 也不会加载它。 English speakers: jump to the English version. 它做什么 当一个 DSH 会话的工作目录位于某个 Obsidian 库文件夹内时,你在那个会话里发出第一条消息 的那一刻,插件会帮你在 Obsidian 里打开这个库——这样你装的同步插件(例如坚果云同步、 Obsidian Sync、Git 插件)就会开始工作,AI 在库里改的东西才能真正同步出去。 这是它解决的实际问题:AI 在库里写了东西,可 Obsidian 没开着,同步就不会跑——等到你哪天自己打开 Obsidian,改动才姗姗来迟。现在库会在对话开始时就打开,同步从那一刻起就在走。 它尽可能不打扰你: - 库已经开着 → 什么都不做(不新开窗口,也不抢焦点); - Obsidian 已经在运行 → 新窗口压到后面,焦点立刻还给你; - Obsidian 没在运行 → 正常启动(这时候窗口弹出来正是你要的)。 全程在 DSH 进程内完成、不经过模型:零 token、零轮询。 这个插件的设置面板是中文界面(本来就是给中文用户做的),所以这份说明也以中文为主。
展开完整文档(README 剩余 1 节)
dsh-open-obsidian

这是给 DeepSeek Harness(简称 DSH)用的插件,不是 Obsidian 插件。
装进 Obsidian 里没有任何作用,Obsidian 也不会加载它。

English speakers: jump to the English version.

它做什么

当一个 DSH 会话的工作目录位于某个 Obsidian 库文件夹内时,你在那个会话里发出第一条消息 的那一刻,插件会帮你在 Obsidian 里打开这个库——这样你装的同步插件(例如坚果云同步、 Obsidian Sync、Git 插件)就会开始工作,AI 在库里改的东西才能真正同步出去。

这是它解决的实际问题:AI 在库里写了东西,可 Obsidian 没开着,同步就不会跑——等到你哪天自己打开 Obsidian,改动才姗姗来迟。现在库会在对话开始时就打开,同步从那一刻起就在走。

它尽可能不打扰你:

- 库已经开着 → 什么都不做(不新开窗口,也不抢焦点);
- Obsidian 已经在运行 → 新窗口压到后面,焦点立刻还给你;
- Obsidian 没在运行 → 正常启动(这时候窗口弹出来正是你要的)。

全程在 DSH 进程内完成、不经过模型:零 token、零轮询。

这个插件的设置面板是中文界面(本来就是给中文用户做的),所以这份说明也以中文为主。

关于作者:本插件的作者没有编程背景,代码是在 DSH 的 AI 助手协助下完成的。

运行要求

| 系统 | 仅支持 Windows。 它依赖 Windows 的进程/窗口接口、%APPDATA%\obsidian 注册表,以及 Obsidian 注册的 URL 协议;在 macOS / Linux 上无法工作。 |
| DSH | 需要暴露了本插件所用内部接口的 DSH 版本(见下面「已知限制」)。 |
| Obsidian | 桌面版 1.x。开发与实测用的是 1.14.4。 |

安装

一条命令装好:

dsh plugin add github:NOOBnoob163/dsh-open-obsidian

本包声明了 dsh.bundle,所以 DSH 装完会自动启用它,不需要手工改任何配置。
装好后冷启动一次 DSH(刷新页面不够),然后到 设置 → Obsidian 助手 里勾选你要管的库。

也可以手工装(不进 bundle 机制)

把仓库放进 profile 的插件目录:

如果你用的不是默认的 "desktop" profile,把 <profile> 换成你自己的
git clone https://github.com/NOOBnoob163/dsh-open-obsidian.git \
"%USERPROFILE%\.dsh\profiles\<profile>\plugins\dsh-open-obsidian"

然后二选一:

- 走标准方式:把 dsh-open-obsidian 加进 profile package.json 的 dsh.profile.bundles 列表,由它自带的 cordis.patch.yml 负责挂载;或者
- 手工挂载:在 %USERPROFILE%\.dsh\profiles\<profile>\cordis.patch.yml 里加一段:

Obsidian 助手(本地插件 plugins/dsh-open-obsidian)
- insert:
- id: obsidian-launch
name: 'dsh-open-obsidian'

(config 段可以省略——实际设置存在 %USERPROFILE%\.dsh\storages\dsh-open-obsidian.json,面板上改的就是它。)

配置

打开 设置 → Obsidian 助手,勾选你想让它管的库。
一个都不勾 = 完全不触发。

长这样

设置面板(浅色)设置面板(深色)

设置项

所有开关改一下就立即保存,没有"保存"按钮。

| 设置项 | 默认 | 作用 |
| 自动打开 Obsidian | 开 | 总开关。关掉 = 插件永远不打开任何东西。 |
| 检测到的知识库(逐个库) | 全不勾 | 勾选要管的库。每个库的「已打开」状态都会拿正在运行的 Obsidian 核实,所以关着的库不会被显示成开着。 |
| 目标库已打开时跳过 | 开 | 已经在屏幕上的库,完全不碰。 |
| 静默打开新窗口 | 开 | 新开的窗口压到后面,而不是让它抢走焦点。 |
| 高级选项 | — | 可选的自定义启动命令。{vault} 会替换成解析出的库文件夹路径。留空 = 用 Obsidian 自己的 obsidian:// 协议。 |

每一次"打开"和"跳过"都会记进 %USERPROFILE%\.dsh\logs\dsh-open-obsidian\decisions.log (有大小上限),所以插件但凡动过手,事后都能查是哪次触发的。面板上有按钮直接打开它。

触发时机

插件只在两种时机打开 Obsidian,且都带去重和节流:

1. 会话的第一条真人消息(工作目录在已启用的库内)。每个会话只判定一次。
2. 写入时兜底 —— 已启用的库里有文件变动,但必须满足"代理(AI)最近确实在这个库里干活" 且"Obsidian 没在运行"。

DSH 的生命周期事件故意不作为触发条件。0.7.0 之前的版本会在 session/created 时也尝试打开,而这个事件在每次会话发布时都会触发(界面加载、断线重连、宿主启动恢复上次工作区),结果就是你什么都没干、Obsidian 自己弹出来了。0.7.0 已移除。无关的文件变动(同步客户端、编辑器、git 维护)同样不会触发。

已知限制

1.「打开一个没开的库、同时完全不打扰你」做不到。 Obsidian 自己没实现这个能力:它新建窗口用的是会抢焦点的 show(),而不是不抢焦点的
showInactive(),并且全程序没有任何跟焦点相关的开关(这是读它自己的 app.asar 确认的,
showInactive 出现 0 次)。

插件的做法是「新窗口压到后面 + 把焦点抢回来」。所以当被打开的库原本没开着时,大约三次里有两次会闪一下,约 0.1 秒。没有第三条路——外部程序拦不住 Obsidian 自己激活窗口,只能事后纠正。

接受不了可以关掉「静默打开」,就变回「正常打开、会跳到前台」。

2. 插件用了 DSH 的内部接口(Web 路由注册、会话事件、设置页插槽、__ModuleLoader__)。
DSH 迭代很快,它一升级,插件有可能失效,需要跟着更新。欢迎提 issue。

目录说明

package.json 插件清单(简介保持一句话,版本历史在 CHANGELOG.md) lib/index.js 宿主半 —— 库识别、触发判定、启动 lib/client.js 浏览器半 —— 设置页的「Obsidian 助手」面板 bin/dsh-open-obsidian-silent.exe 编译好的助手程序:枚举窗口 + 静默打开 src/silent-open-helper.cs 上面那个 exe 的 C# 源码 test/behaviour.mjs 行为回归测试(12 项) test/panel.mjs 设置面板测试(28 项)

bin\.exe 是故意一起提交的——多数人没有 C# 编译器,而「静默打开」和「枚举 Obsidian 窗口」都离不开它。源码一并在库里,方便审计和自行重新编译。

重新编译那个助手程序(Windows,用 .NET Framework 自带的 csc.exe):

& "$env:WINDIR\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /nologo /optimize+ /target:winexe
/out:bin\dsh-open-obsidian-silent.exe src\silent-open-helper.cs

测试

node test/behaviour.mjs # 12 项
node test/panel.mjs # 28 项

两套测试都用假的宿主和假的 Obsidian,不需要真的开 Obsidian,也不联网。但需要先 npm install(宿主那半要 @deepseek-ai/schemastery 来定义配置项)。

许可证

MIT —— 见 LICENSE。

设计上的一点说明:插件的设置面板只有中文界面,没有做多语言支持。这个插件主要是为中文用户做的,说明文档因此也以中文为主。

这是一个 DeepSeek Harness(DSH)插件——不是 Obsidian 插件。
装进 Obsidian 里没有任何作用,Obsidian 也不会加载它。

注意:插件自己的设置面板只有中文(它优先为中文用户而做)。下面的英文文档保持完整,但你安装后看到的界面会是中文。*

它做什么

当 DSH 会话的工作目录位于某个 Obsidian 库文件夹里时,这个插件会替你在 Obsidian 中打开那个库——自动打开,每个会话一次,在你发出第一条消息时。

为什么这很重要: 打开库,你的同步插件(坚果云同步、Obsidian Sync、某个 Git 插件……)才会开始运行,智能体编辑的文件才真正同步出去。没有它,智能体往库里写东西时 Obsidian 是关着的,什么都不会同步,改动只能等你下次碰巧自己打开 Obsidian 时才传出去。

它做这件事时刻意保持安静:

- 如果库已经开着,什么都不做——不开新窗口,不跳焦点。
- 如果 Obsidian 已经在运行,新窗口压到后面,焦点立刻交还给你原本在做的事。
- 如果 Obsidian 没在运行,就正常启动(窗口出现本来就是目的)。

一切都在 DSH 进程内运行,在模型循环之外:零 token,零轮询。

关于作者: 作者没有编程背景;代码是用 DSH 自带 AI 助手的帮助。

环境要求

| 操作系统 | 仅限 Windows。 它依赖 Windows 的进程/窗口 API、%APPDATA%\obsidian,以及 Obsidian 注册的 URL 协议。在 macOS 或 Linux 上无法运行。 |
| DSH | 一个对外暴露本插件所用内部 API 的 DSH 构建版本(见 已知限制)。 |
| Obsidian | 桌面版 1.x。开发和测试基于 1.14.4。 |

安装

一条命令:

dsh plugin add github:NOOBnoob163/dsh-open-obsidian

这个包声明了 dsh.bundle,所以 DSH 会自动激活它 —— 不用手动改配置。装完冷启动 DSH 一次(重载窗口不够),然后在 Settings → Obsidian 助手 里勾选你的知识库。

手动安装(绕过 bundle 机制)

把仓库放进你配置档的 plugins 文件夹:

adjust <profile> if you are not on the default "desktop" profile
git clone https://github.com/NOOBnoob163/dsh-open-obsidian.git \
"%USERPROFILE%\.dsh\profiles\<profile>\plugins\dsh-open-obsidian"

然后二选一:在配置档的 package.json 里把 dsh-open-obsidian 加进 dsh.profile.bundles(它自带的 cordis.patch.yml 会挂载它),或者在 %USERPROFILE%\.dsh\profiles\<profile>\cordis.patch.yml 里手动挂载:

Obsidian launcher (local plugin plugins/dsh-open-obsidian)
- insert:
- id: obsidian-launch
name: 'dsh-open-obsidian'

(config: 块可以省略 —— 真正的设置存在 %USERPROFILE%\.dsh\storages\dsh-open-obsidian.json,面板改的就是这个文件。)

配置

打开 Settings → Obsidian 助手,勾选你想让本插件管理的知识库。在你至少勾选一个知识库之前,插件永远不会触发。

界面长什么样

设置面板(浅色)设置面板(深色)

设置

所有控件都是改完立即保存 —— 没有保存按钮。

| 设置项(中文界面里显示的名称) | 默认值 | 作用 |
| 自动打开 Obsidian | 开 | 总开关。关掉 = 插件什么都不打开。 |
| 检测到的知识库(每个知识库一项) | 全部关闭 | 勾选要管理的知识库。每个知识库的 open 状态都会跟正在运行的 Obsidian 核对,所以已关闭的知识库绝不会显示为已打开。 |
| 目标库已打开时跳过 | 开 | 已经在屏幕上的知识库完全不碰。 |
| 静默打开新窗口 | 开 | 把新建的知识库窗口压到后面,不让它抢焦点。 |
| 高级选项 | — | 可选的自定义启动命令。{vault} 会替换成解析出的知识库文件夹路径。留空 = 用 Obsidian 自己的 obsidian:// URI。 |

每次启动、每次跳过都会追加写入 %USERPROFILE%\.dsh\logs\dsh-open-obsidian\decisions.log(有大小上限),所以意外的启动总能追溯到触发源。面板上有个按钮可以直接打开这个日志。

触发规则

插件只在恰好两种情况下打开 Obsidian,两者都做了限流和去重:
1. 会话的第一条直接人类消息,且会话的工作目录位于已启用的 vault 内。每个会话只判定一次。
2. 写入时确保 —— 已启用的 vault 内发生文件变更,但仅当智能体最近一直在该 vault 内活跃工作,且仅当 Obsidian 未在运行时。

DSH 生命周期事件刻意不作为触发条件。早期版本还会在 session/created 时触发,而该事件在每次会话发布时都会触发 —— GUI 加载、重连、harness 启动恢复上次工作区 —— 于是用户什么都没碰,Obsidian 也会打开。已在 0.7.0 中移除。无关的文件变动(同步客户端、编辑器、git 维护)也绝不会自行打开 Obsidian。

已知限制

1.「打开已关闭的 vault 又不打扰我」无法完全做到。 Obsidian 本身不支持:它创建新 vault 窗口时用的是 Electron 的 show()(会激活窗口),而不是 showInactive(),并且任何地方都没有提供与焦点相关的标志(已通过阅读其自带的 app.asar 验证;showInactive 出现次数为零)。

本插件的做法是把新窗口压到后台,再把前台抢回来。实际使用中,打开一个原本未打开的 vault 时,大约三次里有两次会看到约 0.1 秒的闪烁。没有第三种选择 —— 外部进程无法阻止 Obsidian 自己的窗口激活,只能在事后纠正。

如果你更希望窗口正常来到前台,请关闭 静默打开。

2. 它使用了 DSH 内部 API —— web 服务器路由注册、会话事件、设置槽位,以及 __ModuleLoader__。DSH 迭代很快;一次 DSH 升级就可能让本插件失效,直到它跟进更新。欢迎提 issue。

仓库结构

package.json plugin manifest (short description; history in CHANGELOG.md)
lib/index.js host half — vault detection, triggers, launching lib/client.js browser half — the Settings → Obsidian 助手 panel bin/dsh-open-obsidian-silent.exe compiled helper: window listing + silent open src/silent-open-helper.cs C# source of the helper above test/behaviour.mjs behaviour regression suite (12 assertions) test/panel.mjs settings-panel suite (28 assertions)

bin\*.exe 是刻意提交的 —— 大多数用户没有 C# 编译器,而静默打开 vault 和枚举 Obsidian 窗口都需要这个辅助程序。它的源码与它一起提交,便于审计和重新构建。

重新构建辅助程序(Windows,.NET Framework 的 csc.exe):

& "$env:WINDIR\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /nologo /optimize+ /target:winexe
/out:bin\dsh-open-obsidian-silent.exe src\silent-open-helper.cs

测试

node test/behaviour.mjs # 12 assertions
node test/panel.mjs # 28 assertions
两套测试都跑在模拟的 DSH 主机和模拟的 Obsidian 上,不需要启动 Obsidian,也不需要访问 DSH 网络。但它们需要安装包依赖(npm install),因为主机那一半会导入 @deepseek-ai/schemastery 来定义配置 schema。

许可证

MIT —— 见 LICENSE。
预览分享卡片长什么样 ↓NOOBnoob163/dsh-open-obsidian
分享 · DeepSeek Harness Hub
NOOBnoob163/dsh-open-obsidian

会话开始时自动打开 Obsidian 库,让同步插件跑起来

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部