Engramory:給 DeepSeek Harness 智能體一套可移植的 Markdown 記憶協議

前言

用 DeepSeek Harness(DSH)跑長任務時,上下文窗口再大也裝不下所有歷史:上一週定下的編碼規範、用戶偏好的縮進風格、進行中的重構目標,換一條會話或換一個 Agent 就常常「失憶」。向量數據庫和 MCP 記憶服務能緩解,但部署成本高,還多出一條模型未必會主動調用的召回通道。

社區插件 Engramorytinqiao-oss/engramory)走另一條路:零基礎設施,用一小撮人類可讀的 Markdown 文件加一個每次會話加載的索引,把「寫什麼、怎麼寫、何時刪改」寫成一套可移植的策展紀律。在 GitHub 上已有 171 星、11 forks,SkillHub 插件庫將其歸類爲「記憶」,安裝狀態爲已驗證(verified)。本文基於 SkillHub 目錄頁與 GitHub 倉庫 README 覈實後整理,供 DSH 用戶快速上手。

這是什麼

Engramory 不是數據庫,也不是按相關性加載的 Skill 框架。維護者 tinqiao-oss 將其定位爲:面向小規模、本地、文件式智能體記憶的協議——一套強約束的策展紀律、一份參考規範(SKILL.md)、一個可選的索引上限 Hook,以常駐規則形式加載(DSH 下即 $DSH_HOME/AGENTS.md 中的標記塊)。

記憶庫就是一個目錄:每條事實一個 Markdown 文件,外加一份始終加載的 MEMORY.md 索引。沒有向量、沒有服務端,純文本可直接打開、編輯、diff;若放在 Git 倉庫內,記憶目錄本身應加入 .gitignore

詞名來自 engram(記憶在大腦中的物理痕跡)+ memory,項目強調「一文件一事實」。npm 包名 dsh-engramory(當前 0.2.3)是 DSH 側的確定性索引上限插件;協議本體當前標記爲 0.10.0 — 實驗性,使用前請了解其能力邊界。

核心功能與亮點

1. 四類角色 ontology,以 feedback 爲脊樑

筆記 frontmatter 使用四種類型:user(用戶偏好)、feedback(程序性記憶,須含 Why: / How to apply:)、project(進行中的任務狀態,至多一條活躍筆記)、reference(穩定引用指針)。Engramory 不聲稱發明了語義/情景/程序性三分法,而是把 feedback 做成手寫、可審計的程序性記憶集合。

2. 顯式策展契約

協議要求模型在寫入前查重、更新而非重複、發現錯誤就刪除,並遵守負向範圍規則——不把 Git、代碼或規則文件裏已有的信息再記一遍。調研中常被忽視的「修改 / 刪除 / 遺忘」操作,在這裏被寫進紀律本身(模型盡力遵守,非硬門禁)。

3. 有界索引,防止靜默腐爛

索引每次會話加載;Claude Code 官方文檔寫明只讀前 200 行 / 25 KB,超出部分會被靜默截斷。Engramory 在 150 行 / 20 KB 提醒,逼近 200 行 / 25 KB 時先壓縮再詢問,並提供 Hook 兜底——只攔「變大」的編輯,壓縮類編輯放行。行數與字節雙維度,誰先超限誰觸發。

4. DSH 插件:把上限從「請求」變成「拒絕」

僅靠 AGENTS.md 裏的規則塊,模型仍可能忘記跑檢查腳本。dsh-engramory 插件通過 DSH 的 ctx.tools.guard() 做同步、單調的寫前拒絕:一旦 guard 返回理由,後續 listener 不能把決策改回 allow。這是 Engramory 在 DSH 上相對「只貼規則」的差異化能力。

插件還通過運行時 skill 註冊注入完整協議,不依賴手動把文件拷進五個 skill 掃描根目錄之一(拷錯位置會靜默失敗)。

5. 跨宿主可移植

同一套紀律可接線 Claude Code、Codex、Cursor、OpenClaw 等;DSH 側提供 python tools/engramory_init.py dsh --install-skill 初始化助手,以及 dsh-reader 只讀模式讀取其他 Agent 擁有的記憶庫。Engramory 明確走 MCP 作爲主路線——在已有文件讀寫與常駐規則的宿主上,MCP 會引入第二條寫入通道並繞過寫前 Hook。

安裝與啓用

說明:SkillHub(https://www.skillhub.cn/plugins)是社區維護的 DSH 插件目錄,與 DeepSeek / 幻方無官方從屬關係;安裝命令以目錄頁生成的方案爲準。插件以當前 dsh 進程權限運行,安裝前請審閱源碼與 MIT 許可證。

第一步:通過 SkillHub 安裝 DSH 插件

SkillHub 爲 tinqiao-oss/engramory 生成的安裝計劃(profile 示例爲 web,commit 固定爲目錄同步的 head SHA):

dsh plugin --profile web add github:tinqiao-oss/engramory#39efc183a55cb3d2c56e11a42b2b5e059a193ce3

安裝後重啓 profile:

dsh --profile web

若你的環境已配置 npm 源,也可直接安裝已發佈的 npm 包(需 0.2.1 及以上;0.2.0 存在裝得上但永不激活的問題):

dsh plugin --profile <name> add dsh-engramory

第二步:初始化記憶庫與常駐規則

插件負責索引上限 guard 與協議 skill 註冊,不會自動創建記憶目錄。需在 Engramory 倉庫根目錄執行(Python 3.9+;Linux/macOS 請用 python3):

git clone https://github.com/tinqiao-oss/engramory.git
cd engramory
python3 tools/engramory_init.py dsh --install-skill

默認寫入 $DSH_HOME(環境變量優先,否則 ~/.dsh):

  • $DSH_HOME/AGENTS.md 中的 Engramory 標記塊(每會話由 @deepseek-ai/dsh-agent-instructions 加載)
  • $DSH_HOME/skills/engramory/ 完整協議(按需加載)
  • $DSH_HOME/.engramory-memory/MEMORY.md 記憶索引與筆記目錄

若只服務單個項目,加 --project-root /path/to/project,skill 會裝到 <project>/.dsh/skills/engramory/(DSH 實際掃描的項目 skill 根,不是 .agents/skills)。

可選:固定 commit 或調整 guard 配置

SkillHub 命令已 pin 到 commit 39efc183…;自行安裝 GitHub 源時也可顯式指定。Guard 默認配置可在 profile patch 層覆蓋(勿重複 insert 兩行):

- id: engramory
  config:
    indexName: MEMORY.md
    maxLines: 200
    maxBytes: 25600
    indexPath: /absolute/path/to/.engramory-memory/MEMORY.md

indexPath 建議設爲記憶索引的絕對路徑,避免誤攔其他目錄下同名的 MEMORY.md

典型用法示例

日常記憶讀寫

Agent 每會話從 AGENTS.md 看到策展紀律;需要細節時讀取 .engramory-memory/ 下單條筆記。寫入後應彙報新增 / 更新 / 歸檔 / 跳過項及索引尺寸。

編輯索引後自檢

python3 $DSH_HOME/skills/engramory/tools/engramory_check.py $DSH_HOME/.engramory-memory/MEMORY.md

若輸出 OVER,需壓縮索引後再寫。週期性全量健康檢查:

python3 $DSH_HOME/skills/engramory/tools/engramory_doctor.py $DSH_HOME/.engramory-memory

跨 Agent 只讀共享

讓 DSH 讀取 Claude Code 等項目記憶(只讀,不寫入):

python3 tools/engramory_init.py dsh-reader \
  --project-root /path/to/repo \
  --memory-root ~/.claude/projects/<project>/memory

卸載

python3 tools/engramory_init.py dsh --uninstall --dry-run   # 預覽計劃
python3 tools/engramory_init.py dsh --uninstall             # 執行

卸載只移除安裝器寫入的規則塊與 skill 副本,不會刪除 .engramory-memory/ 中的筆記。

適用場景與注意事項

適合誰:

  • 希望在 DSH 上維護可審計、可 diff 的長期工作記憶,又不想搭向量庫或 MCP 服務
  • 需要把 Claude Code / Codex 等宿主上的 Markdown 記憶紀律原樣搬到 DSH
  • 個人或小團隊、單寫者場景,記憶條目控制在索引上限(約 200 條指針)以內

務必知曉的限制:

  • 協議標記爲實驗性:Hook 對 Edit | Write | MultiEdit 類直接編輯工具有確定性攔截,但 Bash、MCP 文件工具、外部編輯器 等通道可繞過;紀律本身靠模型遵守,非每個任務 guaranteed
  • 假設單寫者 / 串行寫入,無 store 級併發鎖
  • 記憶爲明文、未加密;勿把密鑰、令牌寫入筆記,只記錄「祕密存在何處」
  • 無 schema 版本遷移與 provenance 字段;召回內容應視爲建議而非權威事實
  • dsh plugin 安裝第三方插件需本機有 pnpm 且在 PATH 中(上游 rc.7 起修復預覽版安裝問題)

dsh-xray 對本插件的靜態掃描顯示:能力等級 C2 來自 manifest.bundle.patch(生態中多數可掛載插件均聲明此項),未發現 execeval、安裝腳本或出站域名——但仍請自行審閱後再裝。

結尾

Engramory 的價值不在於 reinvent 向量檢索,而在於把「Markdown 索引 + 單文件單事實 + 四類 typed 筆記 + 寫前查重刪改」打包成可跨 Agent 複製的紀律,並在 DSH 上通過 dsh-engramory 把索引上限從軟約束升級爲寫前拒絕。若你正用 DeepSeek Harness 做長週期編碼助手,值得一試。

  • SkillHub 目錄頁:https://www.skillhub.cn/plugins/tinqiao-oss/engramory
  • GitHub 倉庫:https://github.com/tinqiao-oss/engramory
  • DSH 適配說明:https://github.com/tinqiao-oss/engramory/tree/master/adapters/dsh
羽毛球分组比赛记分
小程序二维码

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

小夜