昨天結尾我埋了一個問題:CLAUDE.md 管得很好,但它只管「一個專案內」的事。可是我手上不只一個專案——同一套系統佈署給不同單位,還有一堆共用模組在專案之間搬來搬去。這時候會冒出一種 CLAUDE.md 裝不下的判斷:這個共用模組,上禮拜到底搬到哪幾個專案了?來源專案那個還沒補的 bug,別的專案是不是也中招? 這些不屬於任何單一專案,塞進哪一份專案憲法都不對,因為別的專案的 session 根本讀不到。
而這背後其實是 AI 一個更根本的限制:它每一次都是一張白紙。 每開一個新的工作階段、每換一個專案,它對「別的地方發生過什麼」一無所知。它不會記得昨天在另一個專案裡搬過什麼、補過什麼。CLAUDE.md 解決了「單一專案的背景」,但「跨專案、跨時間的狀態」它接不住。
我的解法,是給它一塊所有專案、所有對話都能讀寫的共用記憶——我把它放在 HackMD 上,透過 MCP 接進 Claude Code。
具體來說是兩份「登錄檔」,都是活的、會被持續更新的文件:
這兩份文件的共同點是:它們裝的都是跨專案的狀態——哪些做完了、哪些還欠著——這種東西天生就不屬於任何一個專案的 CLAUDE.md。
如果只是一份 wiki,那沒什麼好談的。真正讓它有用的,是我把「什麼時候該讀它、什麼時候該寫它」寫進了全域 CLAUDE.md,讓每一個 session 動到相關工作時,都會自動去碰這塊白板:
看出這裡的分工了嗎——這正好接上前兩天講的:CLAUDE.md 負責「指路」(動這類事之前,先去讀那塊白板),HackMD 負責「存狀態」(那塊白板上記著跨專案的真實進度)。 憲法是規則,知識庫是被規則指向的、持續變動的事實。
其實不用舉遠的,你正在讀的這系列鐵人賽文章,就是這樣寫出來的。
寫長期連載,有個很現實的問題:對話會越拖越長。 同一個對話裡塞了十幾天的稿子、來回修改、一大堆素材,我每多問一句,模型就得把前面那一整坨重讀一遍,token 消耗大得驚人。現在的介面雖然有「自動壓縮對話」的功能,把前面的內容摘要成精簡版、好讓對話能繼續——但壓縮是有損的,早期的細節會被摘掉、甚至遺失。到某個程度,另開一個乾淨的 session 幾乎是唯一解。
可是新開的 session 又是一張白紙——它不知道前面二十幾天定了什麼調性、每篇用過哪些素材、哪些規則絕對不能違反(例如去識別化那條鐵律)。那怎麼讓新舊 session 接得上?答案還是同一招:把該延續的東西,寫進一塊兩邊都讀得到的持久文件。 這系列就有幾份放在 HackMD 上的交接文件——總目錄、素材地圖、交接筆記——舊 session 把進度和決定寫進去,新 session 一開場先讀它,就能接著上一棒往下寫,而不是從頭再摸索一遍。這篇稿子的某幾天,其實就是不同的 session 接力寫的,讀者大概看不太出接縫在哪——靠的就是那幾份文件在中間對齊。
中間有段小插曲值得記。Claude Code 後來出了一個「跨 session 訊息」的功能,可以讓一個工作階段丟一句話給另一個。我一度以為,這不就能取代我那塊白板了嗎?
查清楚之後發現:完全不行,因為兩者性質相反。 跨 session 訊息是即時、一次性的——它需要兩個 session 同時活著,訊息傳過去就結束了,沒有地方回頭看、也帶不了結構。而我要的那塊白板剛好相反:它得是持久的,我關掉電腦、明天再開,那份「哪些搬完、哪些沒補」的清單還在;它得不依賴任何 session 活著,不同時間、甚至不同人打開,看到的都是同一份最新進度;它還得有結構,能放勾選狀態、能放一條條待辦。訊息像「拍一下對方肩膀說句話」,白板像「一份大家共用的檔案」。跨專案的狀態要的是後者。
這個判斷本身不難,但它是個提醒:面對一個看起來很炫的新功能,該先問的是「我要解的到底是什麼」——是持久共用,還是即時通知——而不是看到新工具就想拿它套上去。 這也是一種判斷,只是判斷的對象從程式碼換成了工具選擇。
寫到這裡,可以把前面幾天串起來看。AI 其實有兩種健忘,而我一直在用不同的外部記憶去補:
一種是單一對話裡的健忘:對話一長就被壓縮、早期細節遺失。輕微時靠把東西寫進檔案、寫進 CLAUDE.md;嚴重到得換一個 session 時,就升級成第二種。另一種是跨對話、跨專案的健忘:新 session、新專案都是一張白紙,不記得別處發生過什麼。而今天這塊 HackMD 白板,正是專門補第二種的——換 session 靠交接文件接上一棒,換專案靠登錄檔查跨專案的狀態,兩種邊界它都跨得過去。
說到底,一個語言模型天生就沒有連續的記憶。是這些外部的、持久的、共用的文件,才讓一個「每次都是白紙」的 AI,在跨專案、跨時間的工作裡,還接得上前面的結論。 記憶不在模型裡,在我替它搭好的那些檔案裡。
這塊知識庫的分工很清楚。AI 是它的使用者兼維護執行者:照著規則去讀清單、按流程把狀態寫回去,這些機械性的讀寫,交給它又快又不會忘。
但人的角色是更上游的那一層:這塊白板該長什麼樣,是我設計的——要有哪幾份登錄檔、每份記哪些欄位、什麼時機該讀該寫。而且我是那個守著它「就是事實」的人——AI 會照著寫,但「登錄檔上寫著已上線,是不是真的已上線」這種最終正確性,還是我在把關。工具(跨 session 訊息能不能取代它)要不要換,也是我判斷。
所以今天這篇,其實是 Day 24 那句話的延伸:判斷不能外包,但判斷可以沉澱。Day 24 沉澱進一個專案的憲法,今天沉澱進一塊跨專案的共用記憶。差別只在範圍——一個管「這個專案怎麼做事」,一個管「所有專案之間,現在到哪了」。 兩者都是人搭好的外部記憶,讓一個沒有連續記憶的 AI,能在我的判斷之上持續地工作。
明天談另一種沉澱:把我反覆在做、每次都得重講一遍的固定流程——像「合併分支」「發佈」「把資料表轉成 ORM 定義」——打包成一鍵就能跑的 skill,讓判斷不只是被記住,還能被直接執行。