← 返回部落格
Ai預計閱讀 9 分鐘

你的下一個寫程式的 Agent,不該從零開始

發布於 2026年10月23日
你的下一個寫程式的 Agent,不該從零開始

換寫程式的 Agent,最貴的地方不是訂閱費,而是你又花了一小時,把專案從頭講一遍。

哪些檔案重要,哪個做法已經試過而且掛了,測試為什麼是這種結構,那個做到一半的分支在幹嘛。Claude Code 一概不知。Codex、Cursor、Gemini CLI 也一樣。每個都是從空的上下文視窗開始,再加上一句客氣的「我很樂意幫忙」。

ai-memory 是一個想解決這件事的 Rust 二進位程式,而它的設計取捨比功能清單更有意思。

一份記憶,多個 harness

它的賣點是:二十來個 agent harness——Claude Code、Codex、Cursor、Gemini CLI、OpenCode、Grok、Devin、Kimi、Kiro 等等——都從同一個共用記憶庫裡讀。你在其中一個裡幹活,任務做到一半停下來,在同一個目錄裡打開另一個,它接著上一個的進度往下走。

機制是「有歸屬的交接」。不是讓 agent 自己生成一段摘要、然後祈禱它準確,而是一筆明確的紀錄,帶一個只能被認領一次的 owner。最後這條約束才是關鍵:它意味著兩個 Agent 不可能同時以為自己是在接手,也意味著一個被放棄的交接是看得見的,而不是悄悄消失。

還有一層是跨專案的。你的工作偏好——套件管理器、測試配置、你喜歡怎麼組織模組——會跟著你進新儲存庫,所以剛 clone 下來的專案,在那些「到哪都成立」的事情上不必從零開始。

A half-open wooden card catalogue drawer packed with index cards under warm side light

拿 Markdown 當真相來源

這裡有個設計決策,值得好好吵一吵。

Agent 的記憶系統通常就是 embedding。把歷史切塊、向量化、塞進向量資料庫、按相似度檢索。這套能跑,但有三個問題:你讀不了它,你 diff 不了它,而且檢索夠不透明——當它回傳錯的東西時,你根本不知道為什麼。

ai-memory 把它倒過來了。真相來源是一份普通的 Markdown wiki,用 git 做版本控管。SQLite 索引——全文檢索、實體、embedding——是衍生的,可以重建。把資料庫刪了,你什麼都沒損失。

這一個選擇換來很多東西。你可以 grep 這份 wiki。可以在 Obsidian 裡打開它。可以手動改掉一筆錯的紀錄。可以 rsync 它。可以看一個 diff,然後發現 Agent 對你架構的理解在星期二變了。而且沒有向量庫把你鎖死。

這也意味著記憶是可稽核的,而這對團隊很重要。「Agent 為什麼認為我們用 pnpm」這個問題,答案是一個檔案。

會變舊,但不會被刪

專案裡描述了一套記憶老化機制:分層衰減、按存取加權保留、去重、矛盾標記。不用的筆記優先度會下降,但不會消失;互相衝突的條目會被標出來,而不是被悄悄覆蓋。

重要的細節是:沒有硬刪除。舊頁面留在 git 裡,一條 restore 指令就能找回來。想想 Agent 那條「過時」的筆記,有多常是某個決定為何做出的唯一紀錄,這個預設值就是對的。

還有個選用功能叫 dreaming,在閒置時間用 LLM 重寫一批冷筆記。預設關閉,README 也寫得很明確:它從不刪除原始素材。任何用模型改寫你筆記的東西,預設關掉都是對的。

安裝確實很短

Linux 或 macOS 上兩條指令:一個 curl 到 shell 的安裝腳本(會驗證 SHA-256),然後 ai-memory setup,它會建好資料目錄、啟動一個使用者層級的服務,再把它偵測到的 Agent 都接上。Windows 有對應的 PowerShell 版本,另外還有 AUR、RPM、Nix、Docker,以及 Claude Code 和 Codex 的外掛市集項目。

日常使用圍繞一個 wrapper:用 ai-memory run claude 代替 claude。首次執行會裝好對應的 hooks 和 MCP server,並把工作階段限定在目前專案。之後 ai-memory continue 恢復最近一次受管理的 checkout,resume --search auth 則按名字從你的工作流程裡挑一個。

還有個 bootstrap 指令,一次匯入既有的專案歷史——這就是「你會真的用起來的工具」和「你一直打算用起來的工具」之間的差別。

讓人有點不舒服的部分

透過生命週期 hooks 無聲抓取,意味著系統會在你幹活的時候記錄 prompt、工具呼叫和工作階段邊界。這是它唯一能運作的方式——你不可能手動寫日誌——但這一點值得看清楚。你對著客戶程式碼庫敲過的每一條 prompt,其紀錄都是敏感素材,而現在它就躺在一個被 git 版本控管的目錄裡。

緩解措施算是合理:預設只綁 loopback,setup 會產生一個 bearer token,寫進只有 owner 能讀的檔案,而不是寫進你的 Agent 設定裡。但 Docker 的快速啟動是不帶驗證跑的,README 也標了僅限本機使用。如果你在沒有 TLS 反向代理的情況下把那個埠暴露出去,等於把你的工作歷史公開了。

團隊那部分比我預想的成熟,考慮到這專案還這麼年輕:共用伺服器、按專案共用、私有交接、多使用者驗證、歸屬和稽核日誌,全在付費層之外。這套功能集才決定它能不能扛住和一個真實工程組織的接觸。

如果你不想跑伺服器

一個合理的反對意見:「我自己的伺服器」這句話,一出口就勸退一半讀者。

它不一定非得是台伺服器。setup 指令會在同一台機器上起一個使用者層級的服務,綁在 loopback 上,這就是預設路徑——不用 homelab,不用 VPS,不用 DNS。跨機器和團隊功能只有在你想要的時候才重要,而且它們和核心迴圈是可分開的。

還有個從儲存庫裡建置的 macOS 選單列應用程式,以及一個唯讀的網頁檢視——如果你更想在瀏覽器裡而不是編輯器裡翻你的 wiki。Docker 那條路,主要是給本來就習慣用容器思考的人準備的。

所以老實的上手階梯是:裝到你的筆電上,讓它記錄一個專案,然後看看它產出的 wiki 是不是你真的會去讀的東西。如果是,剩下的自然跟上。如果 wiki 就是一堆噪音,再多的團隊功能也救不了它。

為什麼這件事比聽起來更重要

Agent 市場現在是按廠商劃分的,而廠商沒有動機讓你輕鬆離開。你的上下文就是鎖定本身。這就是為什麼切換成本感覺比訂閱價格所暗示的更高。

一個坐在所有廠商下面、用你自己擁有的格式保存記憶的工具,是一次小規模但實在的使用者側標準化。ai-memory 是不是最後贏的那個,其實幾乎不重要——這個解法的形狀,可攜的純文字加上可重建的索引,明顯是對的,而且每一個專有的記憶功能,早晚都得和這個形狀競爭。

另外,它就是個單一二進位檔,核心迴圈不需要 API key。在一個「記憶」通常意味著「再訂一個服務」的品類裡,這挺少見。

相關文章