dsh-obsidian:把 Agent 記憶落到本機 Obsidian vault

前言

用 DeepSeek Harness(DSH)跑 Agent 時,「長期記憶、項目上下文、整理過的知識」往往只留在單次會話或進程內存裏。會話結束或換任務後,模型側難以穩定複用,你也缺少一份可檢索、可 diff、可用 Obsidian 打開的本地歸檔。

常見做法是手寫 Markdown、或讓模型把內容吐進聊天窗口再複製粘貼——步驟碎、查重靠人、索引要自己維護。dsh-obsidian 是 DSH 社區插件(維護者 Auiowu,SkillHub 分類:記憶),在 Agent 側提供結構化記憶與原始筆記兩套工具,把內容寫到本機 Obsidian vault,並在系統提示裏注入使用規則,讓寫入與檢索有固定語義。

下面按「是什麼 → 能做什麼 → 怎麼裝 → vault 與記憶規則 → 注意點」說明。

這是什麼

dsh-obsidian(npm 包名 dsh-obsidian,當前資料中版本 0.1.0,MIT 許可證)把 DSH Agent 的長期記憶接到本機 Obsidian vault。插件向模型提供兩個工具,並可選地在系統提示裏說明 vault 路徑、分區職責、何時該寫、寫之前如何查重。

生態上 DSH 是「一切皆插件」的運行方式;社區目錄在 SkillHub,與 DeepSeek / 幻方無官方從屬關係,本文僅依據倉庫 README 與 package.json 說明事實。

核心功能

兩個 Agent 工具

工具 用途
obsidian_memory 結構化記憶:save / recall / search / list / forget / reindex,按 scope 分到 global、project、longterm、knowledge、workflow、daily 六個分區
obsidian_note 原始筆記文件:read / write / append / search / list / recent / info / tree

配套行爲

  1. 自動目錄結構:首次加載時創建 00-Inbox、10-Memory/{Global,Projects,LongTerm}、20-Knowledge、30-Workflows、40-Daily、90-Meta/templates,並補齊各分區 _index.md。
  2. 索引維護:每次 save / forget 後重寫該分區 _index.md 的表格(標題、更新時間、狀態、標籤),在 Obsidian 裏可直接點擊瀏覽。
  3. 系統提示注入(promptSection: true 時):說明 vault 路徑、分區職責、寫入前先查重等規則,並附帶各分區當前條目摘要(按 digestRefreshMs 低頻刷新,不阻塞提示詞組裝)。
  4. 安全邊界:所有相對路徑必須落在 vault 內;寫入永遠拒絕 .obsidian/ 與 .trash/。

安裝與啓用

插件以當前 DSH 進程權限訪問本機文件系統;安裝前建議閱讀 GitHub 源碼 與許可證。README 要求 danger-full-access 權限。

在 DSH 中安裝 bundle(將 target 換成本機克隆或解壓後的插件目錄絕對路徑;資料給出的是 bundle 安裝方式,而非 dsh plugin add github:... 拼接命令):

# 在 DSH 裏(需要 danger-full-access 權限)
plugin_manager install_bundle target="<插件目錄的絕對路徑>"

install_bundle 會處理 profile 的依賴與 bundle 選擇,無需手工改 package.json / cordis.patch.yml。

配置

在 profile 的 cordis.patch.yml 裏覆蓋插件配置即可(install_bundle 首次寫入的默認值已指向本機 vault,可按需修改):

- id: obsidian-memory
  name: dsh-obsidian
  config:
    vaultPath: 'D:\Notes\MyVault'
    promptSection: true
    maxSearchResults: 40
    maxReadChars: 40000
    digestRefreshMs: 120000
字段 默認 說明
vaultPath 空 vault 絕對路徑;留空時從 %APPDATA%\obsidian\obsidian.json 裏取最近打開的 vault
promptSection true 是否注入系統提示段
maxSearchResults 40 單次檢索返回的匹配行上限
maxReadChars 40000 單次讀取/回顯的字符上限
digestRefreshMs 120000 系統提示裏條目摘要的刷新間隔(毫秒)

運行環境要求 Node.js >= 20(見 package.json engines)。

vault 結構與記憶語義

默認目錄

首次加載會在 vault 下建立如下結構(README 中根目錄名爲 DeepSeek/,實際落點以 vaultPath 與插件邏輯爲準):

DeepSeek/
├─ 00-Inbox/                 隨手收集,定期整理
├─ 10-Memory/
│  ├─ Global/                身份、用戶偏好、環境事實
│  ├─ Projects/              一個項目一篇
│  └─ LongTerm/              跨項目可複用的經驗
├─ 20-Knowledge/             從網絡與文檔整理的知識
├─ 30-Workflows/             可複用流程、腳本、提示詞
├─ 40-Daily/                 每日日誌 YYYY-MM-DD.md
└─ 90-Meta/
   ├─ README.md
   ├─ MEMORY-PROTOCOL.md     記憶協議(寫入與歸類規則)
   ├─ INDEX.md
   └─ templates/             五個模板

筆記 frontmatter 固定字段順序:type / scope / project / title / created / updated / tags / source / status,插件按此順序序列化,便於穩定 diff。

obsidian_memory 寫入與歸檔

  • save 時先按 文件名 → frontmatter title → 項目名 查重;命中則追加一節(### YYYY-MM-DD HH:mm),不命中才新建文件。
  • 僅當 mode: replace 時整篇替換正文。
  • forget 只把 status 改爲 superseded 並追加歸檔備註,不刪文件,歷史可追溯。
  • daily 分區固定寫 40-Daily/<今天>.md,同一天多次保存會追加。

典型工作流可以是:Agent 在任務中用 search / recall 查是否已有同類記憶 → save 寫入對應 scope → 你在 Obsidian 中打開 _index.md 或具體筆記覈對;需要讀任意 Markdown 時用 obsidian_note 的 read / tree 等操作。

適用場景與已知邊界

適合誰:本機已用 Obsidian 管理筆記、希望 DSH Agent 把全局偏好、項目狀態、長期經驗、知識摘錄落到同一 vault,並能在對話裏檢索與增量更新的開發者。

邊界與注意(來自 README「已知邊界」):

  1. 系統提示裏的條目摘要按 digestRefreshMs 刷新,剛寫入的條目最多延遲一個週期出現在摘要裏;obsidian_memory recall 讀的是實時文件,不受影響。
  2. forget 不刪除物理文件;需要清理時請自行判斷後手動處理。
  3. 純文件系統讀寫:Obsidian 開着一般無衝突,但同一文件不要同時手改與 Agent 寫入。

經過上面的步驟,Agent 側記憶與項目知識有了本地落盤與分區語義;細節以 vault 內 90-Meta/MEMORY-PROTOCOL.md 與倉庫文檔爲準。

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

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

小夜