Engrim 1.3.0:適用於多模型 AI CLI 的本地優先 SQLite 記憶引擎
簡要說明
Engrim 1.3.0 為 AI 開發助手(Google Antigravity、Claude Code、Cursor、Windsurf)提供了一個以 SQLite 為後端的本地優先情景記憶層,支援無縫切換模型與持續保留上下文,同時確保所有資料離線且私密。
核心價值主張
Engrim 以 4 KB 精選的工作記憶 取代日益嚴重的「注意力稀釋」問題(大型 token 窗口變得雜亂且昂貴),該記憶儲存在 SQLite 中。主要優勢包括:
- 廠商無關的連續性 – 在專案中從 Gemini 3.8 切換至 Claude 3.7 Sonnet 再到 GPT‑4o,仍能保留決策、限制與架構,無需重新解釋。
- 明確的儲存按鈕語意 – 開發者可清除代理的會話(
/clear),而 Engrim 會自動重新載入精選的記憶套件。 - 混合式檢索 – 結合 FTS5 BM25 語彙搜尋與靜態
model2vec嵌入,透過零延遲的互惠排序融合引擎實現高效檢索。
「為什麼要在每回合都為 200,000 個 token 的遺忘雜訊付費?模型只是可棄的工具;你的專案決策卻不是。」 – Engrim README
實證證據(105 會話案例研究)
在一個 50 k 行的演算法交易程式碼庫上進行的生產測試顯示:
- 153 000 個 token 的工作被壓縮至 < 1 000 個 token 的活躍記憶(約 99 % 減少)。
- 在切換 Antigravity、Claude Code 與 Cursor 後,186 個單元測試 無一出現回歸錯誤。
- 在專案中間切換代理時,未觀察到記憶遺忘現象。
作者指出,測試涉及連續會話,但 Hacker News 上的討論提出了關於基準可比性與非正常結束處理的疑問。
架構概覽
代理(Antigravity、Claude Code、Cursor/Windsurf) → 适配器與鉤子 →
來源追蹤引擎(origin_agent 追蹤) →
混合式檢索(bm25 + 向量) →
SQLite 儲存空間(~/.engrim/memory.db)
- Memories table – 儲存精選的記錄(決策、事實、回饋)。
- FTS5 – 支援 Porter 演算法的全文搜尋與觸發器。
- 向量欄位 – 用於語意回憶的靜態
model2vec嵌入。 - 飛行紀錄器日誌 – 原始的逐回合對話記錄,供審計與檢閱。
多代理環境快速入門
pip install engrim
engrim setup # 自動偵測 Antigravity、Claude、Cursor、Windsurf
# 或逐代理明確設定
engrim setup --agy # Antigravity 鉤子
engrim setup --claude # Claude Code 鉤子
engrim setup --cursor # Cursor MCP 註冊
engrim setup --all # 設定所有支援的代理
- 使用
--dry-run可預覽檔案變更而不寫入。
來源追蹤
每個記憶項目皆記錄 origin_agent 欄位(antigravity、claude-code、cursor、cli、user)。engrim list 的範例輸出如下:
[DECISION]
- #961 (via Antigravity): 高波動性下反轉停損矩陣
- #942 (via Claude Code): 將主要資料庫從 MongoDB 改為 PostgreSQL
- #910 (via Cursor): 標準化使用 Pydantic v2 資料結構
現有的資料庫會自動遷移,透過 ALTER TABLE 新增來源欄位。
模型上下文協定(MCP)伺服器
執行一個零依賴的 JSON‑RPC 2.0 標準輸入輸出伺服器:
engrim serve --mcp # 或僅 `engrim mcp`
伺服器保留 stdout 用於 JSON‑RPC 訊息,並將診斷資訊發送到 stderr。
核心 MCP 方法
| 方法 | 簽名 | 目的 |
|---|---|---|
engrim_recall |
(query: str, project: str = "auto", k: int = 5, type: str = None) |
混合關鍵字 + 語意搜尋。 |
engrim_add |
(type: str, summary: str, detail: str = None, tags: list[str] = []) |
持久化記憶記錄。 |
engrim_context |
(project: str = "auto", budget: int = 4000) |
回傳預算限制的記憶套件,供會話啟動使用。 |
engrim_review |
(project: str = "auto") |
在清除前掃描日誌,尋找未捕捉的決策。 |
CLI 參考(選用指令)
| 指令 | 範例 | 說明 |
|---|---|---|
engrim add |
engrim add -t decision -s "..." |
插入記憶記錄(類型:decision、fact、feedback、state、user、reference)。 |
engrim recall |
engrim recall -q "database" |
為目前專案執行混合排序回憶。 |
engrim context |
engrim context -b 4000 |
取得優先順序排序、字元預算限制的啟動套件。 |
engrim hook |
engrim hook --agent agy --event boot |
執行 Antigravity 或 Claude Code 的生命週期鉤子。 |
engrim serve |
engrim serve --mcp |
啟動 MCP 伺服器以整合代理。 |
engrim review |
engrim review |
在清除前確認所有近期決策均已記錄。 |
engrim list |
engrim list -k 20 |
顯示目前專案的近期記憶。 |
「繼續如清空」工作流程
- 捕捉 – 每當做出決策或規則時,使用
engrim add(或 MCP 的engrim_add)。 - 設定恢復指標 – 新增標記為
resume-pointer的記錄,描述下一個立即任務;最新指標會以[▶ RESUME HERE]的形式出現在下次啟動時。 - 審查 – 執行
engrim review,確保無重要決策遺漏。 - 清空 – 在代理中輸入
/clear;Engrim 會在下一個提示中自動注入精選的記憶套件。
安全與隱私保證
- 100 % 本地且離線 – 所有資料儲存在
~/.engrim/memory.db;無遙測或雲端同步。 - 檔案權限 – SQLite 檔案以
0600(僅所有者)權限建立。 - Git 安全性 –
*.db預設被 git 忽略,防止意外提交。 - 可選嵌入 – 設定
ENGRIM_EMBED=off可僅使用語彙搜尋,無需model2vec套件。
社群反饋(Hacker News 精選)
@thih9: 「不帶參數執行
engrim setup……它會附帶解除安裝腳本嗎?」 – 使用者要求提供清理工具;目前倉儲尚未提供此功能。
@aidiveyt: 「停止鉤子也能阻斷回合:以訊息退出 2,會話會持續運作直到檢查通過。」 – 表示鉤子失敗會正確傳播,確保會話穩定性。
@corv: 「我正在使用 gbrain 作為廠商無關的記憶,但很欣賞 SQLite 實際上的輕量級表現,所以這很有趣!」 – 強調 SQLite 相較於其他記憶後端的極小佔用優勢。
@dsemakin: 「實際上是什麼觸發記憶寫入?要靠我記得執行 engrim add 嗎?」 – 明確指出記憶建立是明確的;開發者必須主動呼叫
engrim add(或 MCP 的engrim_add)來記錄事實。
@flippant: 「我一直在使用另一個記憶外掛……決策摘要看起來真的很棒——雖然代理/模型資訊對我來說可能沒用,因為我從不讓代理自主提交程式碼。」 – 對現有工具的正面比較,指出來源資訊對某些工作流程可能是可選的。
@esafak: 「能否擴展說明一下 105 會話的案例研究?……目前尚無生命週期管理或衝突解決機制,且模型自行決定何時使用它。」 – 呼籲進行更嚴謹的基準測試並釐清衝突處理方式。
@quietraster: 「當兩個代理寫入同一個 SQLite 儲存區時,你如何處理衝突?」 – 目前設計依賴 SQLite 的交易保證;並發寫入會序列化,但尚未實作更高層級的衝突解決機制。
局限與開放問題
- 基準測試 – 發布的案例研究缺乏與競爭性記憶外掛(例如
ctx.rs)的直接比較;獨立基準測試將有助於量化 99 % token 減少的聲稱。 - 衝突解決 – 雖然 SQLite 可防止損壞,但倉儲尚未提供 reconciling 多個代理的分歧編輯策略。
- 解除安裝支援 – 無內建腳本用於移除鉤子或刪除記憶資料庫;使用者必須手動清理。
- 跨裝置同步 – 此工具刻意採用本地優先設計;在機器間同步 SQLite 檔案需外部解決方案(例如 rsync、雲端掛載磁碟)。
授權條款
Engrim 以 MIT 授權條款發布(© 2026 Tim Gordon)。
Sources
相關
- 專案
- 專案
- Dispatch
- 專案
- 專案