前言¶
用 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 |
配套行爲¶
- 自動目錄結構:首次加載時創建
00-Inbox、10-Memory/{Global,Projects,LongTerm}、20-Knowledge、30-Workflows、40-Daily、90-Meta/templates,並補齊各分區_index.md。 - 索引維護:每次
save/forget後重寫該分區_index.md的表格(標題、更新時間、狀態、標籤),在 Obsidian 裏可直接點擊瀏覽。 - 系統提示注入(
promptSection: true時):說明 vault 路徑、分區職責、寫入前先查重等規則,並附帶各分區當前條目摘要(按digestRefreshMs低頻刷新,不阻塞提示詞組裝)。 - 安全邊界:所有相對路徑必須落在 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「已知邊界」):
- 系統提示裏的條目摘要按
digestRefreshMs刷新,剛寫入的條目最多延遲一個週期出現在摘要裏;obsidian_memory recall讀的是實時文件,不受影響。 forget不刪除物理文件;需要清理時請自行判斷後手動處理。- 純文件系統讀寫:Obsidian 開着一般無衝突,但同一文件不要同時手改與 Agent 寫入。
經過上面的步驟,Agent 側記憶與項目知識有了本地落盤與分區語義;細節以 vault 內 90-Meta/MEMORY-PROTOCOL.md 與倉庫文檔爲準。