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

Obsidian 知识库桥 spark-ai-boy/dsh-obsidian-bridge

DeepSeek Harness
spark-ai-boy2 天前有提交已提供中文文档扫描:含敏感能力

让模型检索本地笔记并按提案安全写入

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add spark-ai-boy/dsh-obsidian-bridge
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · other
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 39 处,展示前 34 条)
  • 写入剪贴板
    client.js:1416
    await navigator.clipboard.writeText(`# Obsidian context\n\n${body}`);
  • 写入本地文件
    src/host/vault.js:156
    await mkdir(this.dataDir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    src/host/vault.js:186
    this.realVaultPath = await realpath(this.vaultPath);
  • 读取本地文件
    src/host/vault.js:222
    const info = await stat(this.vaultPath);
  • 读取本地文件
    src/host/vault.js:252
    entries = await readdir(directory, { withFileTypes: true });
  • 读取本地文件
    src/host/vault.js:265
    const info = await stat(full);
  • 读取本地文件
    src/host/vault.js:292
    this.realVaultPath = await realpath(this.vaultPath);
  • 读取本地文件
    src/host/vault.js:309
    const raw = await readFile(full, "utf8");
  • 写入本地文件
    src/host/vault.js:970
    await mkdir(this.dataDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/host/vault.js:992
    await writeFile(join(this.dataDir, "index.json"), JSON.stringify(index), { mode: 0o600 });
  • 写入本地文件
    src/host/vault.js:1006
    await writeFile(join(this.dataDir, "vectors.bin"), buffer, { mode: 0o600 });
  • 写入本地文件
    src/host/vault.js:1008
    await writeFile(join(this.dataDir, "vectors.bin"), Buffer.alloc(0), { mode: 0o600 });
  • 发起网络请求
    src/host/embeddings.js:52
    response = await fetch(url, {
  • 写入本地文件
    src/host/settings.js:48
    await mkdir(this.dataDir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    src/host/settings.js:50
    const raw = await readFile(this.path, "utf8");
  • 写入本地文件
    src/host/settings.js:88
    await mkdir(dirname(this.path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/host/settings.js:89
    await writeFile(this.path, `${JSON.stringify(this.settings, null, 2)}\n`, {
  • 写入本地文件
    src/host/settings.js:92
    await chmod(this.path, 0o600).catch(() => {});
  • 写入本地文件
    src/host/usage.js:40
    await mkdir(this.dataDir, { recursive: true, mode: 0o700 });
  • 读取本地文件
    src/host/usage.js:42
    const parsed = JSON.parse(await readFile(this.path, "utf8"));
  • 写入本地文件
    src/host/usage.js:80
    await writeFile(temporary, `${JSON.stringify(this.data, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    src/host/usage.js:81
    await rename(temporary, this.path);
  • 读取本地文件
    src/host/writes.js:43
    await access(path);
  • 读取本地文件
    src/host/writes.js:75
    const canonical = await realpath(cursor);
  • 读取本地文件
    src/host/writes.js:107
    const beforeContent = hasFile ? await readFile(fullPath, "utf8") : "";
  • 读取本地文件
    src/host/writes.js:168
    const current = currentExists ? await readFile(proposal.fullPath, "utf8") : "";
  • 写入本地文件
    src/host/writes.js:177
    await mkdir(dirname(proposal.fullPath), { recursive: true });
  • 写入本地文件
    src/host/writes.js:179
    await mkdir(this.backupsDir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/host/writes.js:182
    await writeFile(backupPath, JSON.stringify({
  • 写入本地文件
    src/host/writes.js:194
    await writeFile(proposal.fullPath, proposal.afterContent, { flag: "wx", mode: 0o644 });
  • 写入本地文件
    src/host/writes.js:196
    await writeFile(proposal.fullPath, proposal.afterContent, { mode: 0o644 });
  • 读取本地文件
    src/host/writes.js:224
    const current = await readFile(fullPath, "utf8");
  • 删除本地文件
    src/host/writes.js:227
    await unlink(fullPath);
  • 写入本地文件
    src/host/writes.js:229
    await writeFile(fullPath, record.beforeContent, { mode: 0o644 });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

一个把本地 Obsidian 知识库接入 DeepSeek Harness 的插件:数据大盘、按标题切片的混合检索、带引用的 Agent 工具,以及「先提案、后写入」的安全笔记操作。

README

由 DeepSeek 最新模型翻译生成
Obsidian Vault Studio Obsidian Vault Studio 概览 把本地 Obsidian 知识库接入 DeepSeek Harness。模型经你授权后可以检索笔记、读取片段、组装上下文,并以“先提案、后写入”的方式创建或追加笔记。索引、向量和统计都留在本机。 能做什么 - 本地索引:解析 Markdown、frontmatter、标签、标题与修改时间,不把整个 Vault 上传到远端。 - 可用的检索:默认关键词检索,支持英文前缀和输入时自动更新结果;可选 OpenAI 兼容或 Ollama Embedding,启用混合/语义检索。 - 会话访问开关:默认禁止模型访问 Vault。关闭时所有 obsidian_ Agent 工具都会被拒绝,你自己的检索和笔记浏览不受影响。 - 安全写入:模型只能提出新建或追加提案;你确认后才落盘。每次写入有备份,可撤销;不提供删除、移动、重命名或覆盖工具。 - 数据大盘:笔记/字数/标签/片段统计、每日热度、活动曲线、Agent 调用次数、最近编辑和标签分布。 - 完全本地:索引、向量、设置和调用统计都保存在本机。
展开完整文档(README 剩余 1 节)
Obsidian Vault Studio

Obsidian Vault Studio 概览

把本地 Obsidian 知识库接入 DeepSeek Harness。模型经你授权后可以检索笔记、读取片段、组装上下文,并以“先提案、后写入”的方式创建或追加笔记。索引、向量和统计都留在本机。

能做什么

- 本地索引:解析 Markdown、frontmatter、标签、标题与修改时间,不把整个 Vault 上传到远端。
- 可用的检索:默认关键词检索,支持英文前缀和输入时自动更新结果;可选 OpenAI 兼容或 Ollama Embedding,启用混合/语义检索。
- 会话访问开关:默认禁止模型访问 Vault。关闭时所有 obsidian_ Agent 工具都会被拒绝,你自己的检索和笔记浏览不受影响。
- 安全写入:模型只能提出新建或追加提案;你确认后才落盘。每次写入有备份,可撤销;不提供删除、移动、重命名或覆盖工具。
- 数据大盘:笔记/字数/标签/片段统计、每日热度、活动曲线、Agent 调用次数、最近编辑和标签分布。
- 完全本地:索引、向量、设置和调用统计都保存在本机。

安装

要求

- DeepSeek Harness 0.2.x 桌面版,支持安装第三方插件
- 一个本地 Obsidian Vault

安装方式

DeepSeek Harness 支持从 GitHub 仓库或 npm 包安装,二选一:

- GitHub 仓库:https://github.com/spark-ai-boy/dsh-obsidian-bridge
- npm 包:dsh-obsidian-bridge

步骤

1. 在 DeepSeek Harness 左侧栏打开 插件。
2. 点击 添加插件 → 安装第三方插件。
3. 在输入框中填写上面的 GitHub 仓库地址 或 npm 包名,然后点击安装;安装完成后点击启用。
4. 在左侧栏打开 Obsidian 知识库。

Obsidian Vault Studio 安装

首次配置

1. 在 设置 里选择 Vault 路径,点击 保存。
2. 点击 重建索引。第一次索引完成后,概览和检索就可以用了。
3. 检索模式默认是 关键词,不需要额外配置。
4. 如果要使用语义或混合检索,在设置里填写 OpenAI 兼容或 Ollama 的 Embedding 地址、模型和维度,先点 测试连接,保存后再重建索引。
5. 首页右侧的 允许 Obsidian 内容参与会话 默认关闭。需要 Agent 使用 Vault 时再打开;关闭后所有 obsidian_ 工具调用会被直接拒绝。

设置页

使用

概览

首页集中展示知识库状态:笔记数量、字数、标签、近 7 天更新、片段数、每日热度、14 天活动曲线、Agent 调用次数和最近编辑。

检索

在 检索 页输入关键词或前缀,结果会随输入自动更新。可以按文件夹、标签筛选,把需要的片段加入右侧 上下文,再复制为带来源的上下文包,或直接让 Agent 通过工具检索。

检索页

笔记

在 笔记 页浏览和阅读笔记。模型写入走提案流程:

1. 模型提出新建或追加内容。
2. 页面展示目标路径和 diff。
3. 你确认后才会写入。
4. 写入后可以撤销,插件会保留备份。

在会话中使用

1. 打开首页右侧的 允许 Obsidian 内容参与会话。
2. 在 DeepSeek Harness 会话里让模型检索你的笔记,例如:
- “从我的 Obsidian 里找 RAG 相关的笔记,并给出处。”
- “把今天的会议记录追加到项目笔记里。”
3. 只有实际检索到或读取的片段会进入会话,不会自动把整个 Vault 塞进 prompt。
4. 不需要时关闭访问开关,后续工具调用会被拒绝。

Agent 工具

| 工具 | 用途 |
| obsidian_search | 检索笔记片段,支持模式、文件夹、标签筛选 |
| obsidian_read_note | 读取某篇笔记的完整内容 |
| obsidian_list_notes | 列出笔记或按条件筛选 |
| obsidian_stats | 读取索引、统计和工作区状态 |
| obsidian_propose_write | 生成新建/追加提案,不直接写入 |
| obsidian_apply_write | 在你确认后应用提案 |
| obsidian_undo_write | 撤销本次会话中的写入 |
| obsidian_index_status | 查看索引和向量化进度 |

插件不提供删除、移动、重命名或覆盖笔记的工具。

隐私与安全

- 索引、向量、设置、调用统计都在本机。插件不包含遥测,也不会上传 Vault。
- 允许 Obsidian 内容参与会话关闭时,所有 obsidian_ Agent 工具在执行前被拒绝;Vault Studio 自己的检索和浏览仍然可用。
- 系统提示要求模型在 Obsidian 工具失败时报告错误,不得通过通用文件工具绕过 Vault Studio 或访问开关。
- 访问开关只限制 obsidian_ 工具;如果你需要更严格的隔离,请同时检查 DeepSeek Harness 的 workspace/sandbox 权限,避免通用 read、grep、bash 直接访问 Vault 路径。
- 写入操作需要确认,带备份,可撤销;插件不会自动删除或覆盖笔记。

License

MIT
预览分享卡片长什么样 ↓spark-ai-boy/dsh-obsidian-bridge
分享 · DeepSeek Harness Hub
spark-ai-boy/dsh-obsidian-bridge

让模型检索本地笔记并按提案安全写入

这是你的仓库?认领条目

回到顶部