我用Obsidian 給 Coding Agent裝了一塊硬盤!它終於不再失憶了

作者:字節筆記本
日期:2026年5月8日 上午9:41
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

ObsidianCoding Agent 嘅長期記憶,解決跨會話失憶問題

整理版摘要

呢篇文章係作者分享佢用 ObsidianCoding Agent(如 Claude CodeCodex)一齊用嘅實戰方法。佢發現 Agent 每次開新對話都要重新交代背景,因為上下文窗口一清就乜都唔記得,造成重複勞動同浪費時間。作者想解決嘅問題係:點樣俾 Agent 一個持久化嘅長期記憶庫,等佢唔會失憶。

作者參考人類記憶模型(工作記憶 vs 長期記憶),將上下文窗口當作工作記憶,用 Obsidian 做長期記憶庫。佢提出三層記憶架構:AGENTS.md/CLAUDE.md 做入口指示,Obsidian 項目筆記儲存決策、錯誤同待辦,session 日誌記錄每次會話完成嘅內容。具體實施要用 Obsidian CLI 俾 Agent 直接操控筆記。

整體結論係:呢套方案可以大幅降低開新對話嘅心智成本,Agent 讀完記憶後自己總結嘅狀態比作者自己描述仲要清晰。作者強調呢個係最小化結構,用家可以按自己需要調整。

  • 跨會話失憶係所有 Coding Agent 嘅共同問題,分三層:跨會話失憶、上下文壓縮失真、重複勞動成本。
  • 解決方法:用 Obsidian 做長期記憶庫,配合 AGENTS.md/CLAUDE.md 做入口,三層架構(入口、筆記、日誌)缺一不可。
  • 具體實施:用 Obsidian CLI 俾 Agent 直接控制筆記,文件結構包括 overview.md、decisions.md、errors.md、todo.md 同 sessions/YYYY-MM-DD.md
  • 可封裝成 Claude Code 自定義命令:/init-memory 讀取記憶,/save-memory 寫入會話總結,每條命令自動完成整套工作流。
  • 使用時要 Agent 先讀記憶再報告現狀,工作期間自動更新筆記,結束時生成五點 session 總結(尤其係「邊啲模塊唔好重複修改」)。
值得記低
Prompt

CLAUDE.md(Claude Code 用)

放喺項目根目錄,指示 Claude Code 讀取 Obsidian 記憶庫嘅文件,包括 overview.md、decisions.md、errors.md、todo.md,同埋行為要求(開始編碼前輸出理解、唔好重做已完成模塊、追加錯誤同決策、更新 todo、寫 session 摘要)。

Prompt

AGENTS.md(Codex 等用)

類似 CLAUDE.md,但更簡潔,包括 Memory Protocol:編碼前讀記憶、編碼中唔好重複已完成工作、編碼後更新 todo 同寫 session 總結。

流程

Claude Code 自定義命令

.claude/commands/ 下嘅 /init-memory 命令:讀 CLAUDE.md 同 Obsidian 記憶文件,產出項目狀態摘要;/save-memory 命令:寫 session 總結到 sessions/YYYY-MM-DD.md,包括完成內容、改嘅文件、決定、錯誤、下一步同唔好再改嘅模塊。

整理重點

Coding Agent 失憶嘅煩惱

每日用 Coding Agent 寫 code 嘅場景大家都好熟:早上開 Claude Code 重構一個 Go 後端,花 40 分鐘交代背景——項目結構、用咩數據庫、技術決策、踩過嘅坑。點知第二日 /compact 一下或者開新對話,所有 context 就冇曬,又要重新交代。

上下文窗口就係 Agent 嘅全部記憶,窗口一清,佢就失憶成陌生人。

呢個唔係特定模型嘅 bug,而係所有 Coding Agent 嘅共同問題。問題本質分三層:跨會話失憶、上下文壓縮失真、重複勞動成本。

整理重點

三層記憶架構:Obsidian 做長期記憶

參考人類記憶模型,上下文窗口係工作記憶,容量有限;我哋需要幫 Agent 建立長期記憶庫。作者揀咗 Obsidian,因為佢係純文字 markdown,易俾 Agent 讀寫,而且可以用 CLI 控制。

  1. 1 第一層AGENTS.md / CLAUDE.md —— 工作手冊嘅目錄頁
  2. 2 第二層Obsidian 項目筆記(overview.md、decisions.md、errors.md、todo.md)—— 工作手冊正文
  3. 3 第三層:sessions/YYYY-MM-DD.md —— 會話工作日誌
整理重點

具體點樣搭?用 Obsidian CLI 自動化

Obsidian CLI 可以令 Agent 直接從終端控制 Obsidian,唔使手動開 app。

先喺 Obsidian 啟用 Command line interface 並註冊 CLI 工具。然後建立記憶目錄,以 Demo Todo App 為例:

程式內容 markdown
decisions.md ── 已確定嘅技術決策
errors.md ── 踩過嘅坑,每次追加
todo.md ── 下一步要做嘅任務
overview.md ── 項目當前狀態
sessions/YYYY-MM-DD.md ── 每日會話總結

跟住喺項目根目錄放 CLAUDE.mdAGENTS.md,內容見 resources。最後封裝 Claude Code 自定義命令,例如 /init-memory 同 /save-memory。

/init-memory 命令:讀 CLAUDE.mdObsidian 記憶文件,產出項目狀態摘要

/save-memory 命令:寫 session 總結,包括完成咩、改咗咩、決定、錯誤、下一步、唔好再改嘅模塊

整理重點

日常使用工作流

搭好之後,每次開新對話就俾 Agent 呢啲指示:先讀 CLAUDE.md,再讀 Obsidian 記憶文件,輸出佢理解嘅當前狀態同修改計劃。

讓 Agent 先報告現狀,係確認佢真係讀到記憶,而唔係直接開幹。

工作期間遵守三條規則:發現新坑追加到 errors.md;做咗設計決策追加到 decisions.md;完成一個模塊更新 todo.md。結束時生成 session 總結,尤其係「邊啲模塊唔好重複修改」。

  • 完成咗咩?
  • 修改咗邊啲文件?
  • 仍然有咩問題?
  • 下次繼續應從邊度開始?
  • 邊啲模塊唔好重複修改?(呢條最關鍵)

邊啲模塊唔好重複修改」呢條冇紀錄,Agent 下次好可能將你已打磨好嘅 code 重構掉。

整理重點

用後感:心智成本大減

作者用咗呢套方案一段時間,最直接感受係開新對話嘅心唔再咁重。以前怕交代麻煩,成日將一個對話拖到好長,結果上下文膨脹 compact 失真。

而家開新對話,兩句話叫 Agent 讀記憶,佢自己總結嘅狀態比作者自己描述仲清晰。

作者認為呢個先係 Coding Agent 應有嘅工作節奏:上下文窗口只係工作記憶,Obsidian 做長期記憶。每日用 Obsidian CLI 整理項目 markdown 已經變成習慣,幾分鐘嘅功夫,收益長期。

我哋每日用Coding Agent寫code嘅情形大概係咁:

朝早打開Codex/Claude Code重構一個Go後端。

花咗40分鐘同佢交代背景,項目結構係點、用咗邊個數據庫、有邊啲已經定好嘅技術決策、有邊啲坑踩過唔好再踩。

呢段時間,無論係國產模型定係官方訂閲,佢哋都做得幾好。

第二日,/compact 一下,或者開個新會話,上下文本信息全部冇曬或者壓縮到冇咗。

又要花20分鐘重新交代過。

第三日,同樣嘅事再做一次。

其實呢個唔係Claude Code嘅bug,亦都唔係Codex嘅缺陷,而係而家所有Coding Agent共同嘅問題:

上下文視窗就係佢嘅全部記憶,視窗一清,佢就失憶變成陌生人。

點樣解決呢?

先搞清楚問題嘅本質

Agent到底喺邊個層面唔記得呢?

其實包含咗三層:

第一層,跨會話失憶。

今日嘅對話同尋日嘅對話之間冇連接,Agent唔知尋日發生咗乜嘢。

第二層,上下文壓縮失真。

當對話變長,/compact 會將早期內容壓縮成摘要,細節會丟失,但細節往往藏咗魔鬼。

第三層,重複勞動成本。

Agent會重新做已經做過嘅事,因為佢唔知嗰件事已經做完。

基於以上幾點,我哋好有必要喺Agent工作記憶之外,幫佢建立一個持久化嘅長期記憶庫。

認知科學入面有一個經典模型,人類記憶分工作記憶同長期記憶。工作記憶容量有限,處理當前任務;長期記憶容量大,儲存經驗同知識。

兩者協作,先至令人可以應付複雜問題。

上下文視窗就係Agent嘅工作記憶。而Obsidian就係我哋要幫佢建立嘅長期記憶。

而家嘅問題係,點樣組織同使用Obsidian嚟建立長期記憶,可以按下面嘅架構同方式進行?

三層記憶架構

我將成個系統分成咗三層,每層職責唔同:

第一層:AGENTS.md / CLAUDE.md

話畀Agent知去邊度讀記憶,遵守乜嘢規則。佢係工作手冊嘅目錄頁。

第二層:Obsidian 項目筆記

用嚟保存長期狀態、技術決策、踩坑記錄、下一步任務,係成個工作手冊嘅正文。

第三層:sessions/YYYY-MM-DD.md

記錄每次Agent完成咗乜嘢工作,防止第二日重複,相當於你嘅會話工作日誌。

三層缺一不可。

得第一層,Agent知道規則但冇記憶。
得第二層,Agent冇入口讀到記憶。
冇第三層,今日做咗乜嘢聽日又要點樣重新交代。

AGENTS.md係啟動式,Obsidian係長期記憶庫,Coding Agent係執行工人。

具體點樣搭建?

呢度建議用Obsidian CLI,而唔係靠手動去維護。

透過官方Obsidian CLI,我哋可以令Coding Agent直接由終端控制Obsidian,實現腳本、自動化、插件開發、搜索、打開/建立筆記。

開啟方法好簡單,下載或者更新Obsidian之後,啟用Command line interface並註冊CLI工具。

8c47010c-0067-4c3b-a1b6-38cd05f20091.png

我呢度用一個真實項目嚟示範成個工作流程點樣用。

假設項目叫Demo Todo App,擺喺 ~/development/demo-todoapp

一個非常簡單嘅任務,用Go標準庫 net/http + SQLite實現一個Todo REST API,唔用框架,唔用ORM。

項目本身夠曬精簡,集中睇記憶工作流程點樣運作。

第一步:建立Obsidian記憶目錄

Obsidian Vault 最終嘅文件結構如下:

4958c403-d98b-42a4-be8b-f5f307d63d6d.png

decisions.md 寫已經定好嘅技術決策。呢個係最關鍵嘅文件,防止Agent不斷質疑已經做完嘅選擇:

b547d61a-6c87-442f-be16-9f14f0fa2ee4.png

errors.md 寫踩過嘅坑。每次踩坑就加落去,等Agent下次唔好重蹈覆轍。

99785586-f219-414f-b11f-9017e7773e1d.png

todo.md 寫下一步要做乜嘢。每次任務完成之後更新:

fb53fe33-6a18-468f-9a6e-1cf680adbc0e.png

第二步:喺項目根目錄放CLAUDE.md同AGENTS.md

呢兩個文件係Agent嘅入口,話畀佢知開始工作前要讀記憶,佢係透過Obsidian CLI嚟自動更新流程嘅關鍵,上面文件結構嘅內容就係靠佢嚟自動維護建立嘅。

CLAUDE.md,畀Claude Code用:

# CLAUDE.md

## 長期記憶

本項目使用 Obsidian 作為長期記憶庫。

記憶路徑:~/Obsidian/AI-Dev-Memory/Projects/demo-todoapp/

開始重要工作前,必須先讀取:
1. overview.md - 瞭解項目當前狀態
2. decisions.md - 瞭解已確定的技術決策
3. errors.md - 瞭解踩過的坑,避免重複
4. todo.md - 瞭解下一步任務

## 行為要求

- 開始編碼前,先輸出你對當前項目狀態的理解。
- 不要重做已完成的模塊,除非被明確要求。
- 發現重複出現的 bug,追加到 errors.md。
- 做了架構選擇,追加到 decisions.md。
- 完成一個模塊,更新 todo.md。
- 每次會話結束後,寫 session 摘要到 sessions/YYYY-MM-DD.md。

AGENTS.md,畀Codex或者其他Agent用:

# AGENTS.md

## Memory Protocol

Before coding:
- Read ~/Obsidian/AI-Dev-Memory/Projects/demo-todoapp/
- Check overview.md, decisions.md, errors.md, todo.md

During coding:
- Do not repeat completed work
- Keep changes minimal
- Run tests after modifications

After coding:
- Update todo.md
- Append session summary to sessions/YYYY-MM-DD.md

第三步:封裝成Claude Code自定義命令

如果用Claude Code,可以將常用操作整成/命令,擺喺項目的.claude/commands/目錄下。

/init-memory 命令:

Read CLAUDE.md and AGENTS.md first.

Then read these Obsidian memory files:
- overview.md
- decisions.md
- errors.md
- todo.md

Before writing any code, summarize:
1. Current project status
2. Key constraints and decisions
3. Known pitfalls to avoid
4. What should NOT be modified again

/save-memory 命令:

Append a session summary to sessions/YYYY-MM-DD.md.

Include:
- What was completed
- Files changed
- Decisions made
- Bugs encountered
- Next steps
- Modules that should not be refactored again

咁樣每次開始工作輸入/init-memory,結束時輸入/save-memory,兩條命令,成個記憶工作流程就會自動同完整咁運轉。

Coding Agent使用時嘅工作流程

搭好之後,我哋就可以咁樣開始使用。

進入項目之後,畀Agent呢個提示詞:

先讀取 CLAUDE.md,然後讀取 Obsidian 項目記憶目錄裏的
overview.md、decisions.md、errors.md、todo.md。
不要急着改代碼,先輸出你理解的當前項目狀態和本次修改計劃。

叫Agent先報告現狀,係確認佢真係讀到記憶、理解咗上下文,而唔係直接開工。

工作過程中,叫佢遵守三條規則:

  • 發現新坑,加落errors.md。
  • 做咗設計決策,加落decisions.md。
  • 完成一個模組,更新todo.md。

結束任務之後,叫佢生成session總結:

請把本次工作寫入 Obsidian 項目記憶:
1. 完成了什麼
2. 修改了哪些文件
3. 仍然存在什麼問題
4. 下次繼續時應該從哪裏開始
5. 哪些模塊不要重複修改

呢五條都係精髓,尤其係第五條,邊啲模組唔好重複修改,呢條信息如果冇明確記錄,Agent下次好可能將你花咗時間打磨好嘅代碼重構咗。

當然,呢個係我個人畀出嘅最小化結構版本,用幾日,你自然會知道邊度需要補充,邊度需要擴展,完全可以根據你自己嘅業務同使用習慣嚟改造。

我用呢套方案跑咗一段時間,最直接嘅感受係:開啟會話嘅心智成本降低咗。

以前每次開新對話,我都要諗又要重新交代一次,有時覺得麻煩就乾脆唔開新對話,將一個會話拉到好長,結果上下文膨脹compact失真。

而家唔同啦。

開新會話,兩句說話叫Agent讀記憶,佢自己總結出嚟嘅狀態仲清晰過我自己描述。

我覺得呢個先係Coding Agent應該有嘅工作節奏:上下文視窗只係工作記憶,Obsidian作為長期記憶。

每日結合Obsidian CLI或者手動整理項目嘅markdown文件都成為咗我每日嘅必做項目。

Coding Agent外掛硬碟之後,終於有咗記性,再唔使擔心會話嘅丟失,無論係上下文信息嘅管理、項目總結定係模組嘅遷移都大有裨益。

幾分鐘嘅事,收益係長期嘅。

更多AI編程嘅高級技巧可以關注我嘅專欄合集:AI編程高效開發指南

我們每天使用Coding Agent寫代碼的場景大抵如此:

早上打開Codex/Claude Code重構一個 Go 後端。

花了 40 分鐘給它交代背景,項目結構是什麼、用的什麼數據庫、有哪些已經定下來的技術決策、有哪些坑踩過了不要再踩。

這段時間不管是國產模型還是官方訂閲,它們乾得很好。

第二天,/compact 一下,或者新開一個會話,上下文本信息全部丟失或者壓縮沒了。

又是花了20分鐘重新交代。

第三天,同樣的事情再來一遍。

其實這也不是 Claude Code 的 bug,也不是 Codex 的缺陷,這是當前所有Coding Agent共同的問題:

上下文窗口就是它的全部記憶,窗口一清,它就失憶成陌生人。

怎麼解決呢?

先搞清楚問題的本質

Agent 到底在什麼層面不記得呢?

其實包含了三層:

第一層,跨會話失憶。

今天的對話和昨天的對話之間沒有連接,Agent 不知道昨天發生了什麼。

第二層,上下文壓縮失真。

當對話變長,/compact 會把早期內容壓縮成摘要,細節丟失,但往往細節裏藏着魔鬼。

第三層,重複勞動成本。

Agent 會重新做已經做過的事,因為它不知道那件事已經做完了。

基於以上幾點,我們非常有必要在 Agent 工作記憶之外,給它建一個持久化的長期記憶庫。

認知科學裏有一個經典模型,人類記憶分工作記憶和長期記憶。工作記憶容量有限,處理當前任務;長期記憶容量大,存儲經驗和知識。

兩者協作,才讓人能應對複雜問題。

上下文窗口就是 Agent 的工作記憶。而Obsidian 就是我們要幫它建的長期記憶。

現在的問題是,如何組織和使用Obsidian來建立長期記憶可以按下面的架構和方式來?

三層記憶架構

我把這個整套系統分成了三層,每層職責不同:

第一層:AGENTS.md / CLAUDE.md

告訴 Agent 去哪裏讀記憶,遵守什麼規則。它是工作手冊的目錄頁。

第二層:Obsidian 項目筆記

用來保存長期狀態、技術決策、踩坑記錄、下一步任務,是整個工作手冊的正文。

第三層:sessions/YYYY-MM-DD.md

記錄每次 Agent 工作完成了什麼,防止第二天重複,相當於你的會話工作日誌。

三層缺一不可。

只有第一層,Agent 知道規則但沒有記憶。
只有第二層,Agent 沒有入口讀到記憶。
沒有第三層,今天做了什麼明天又要重新交代。

AGENTS.md 是啓動式,Obsidian 是長期記憶庫,Coding Agent 是執行工人。

具體怎麼搭?

這裏要推薦使用Obsidian CLI,而不是純靠手動去維護。

藉助官方Obsidian CLI,我們可以讓Coding Agent直接從終端直接控制 Obsidian,實現腳本、自動化、插件開發、搜索、打開/創建筆記。

開啓方法很簡單,下載或者更新Obsidian後,啓用 Command line interface 並註冊 CLI工具。

8c47010c-0067-4c3b-a1b6-38cd05f20091.png

我這裏用一個真實項目來演示整套工作流怎麼用。

假設項目叫 Demo Todo App,放在 ~/development/demo-todoapp

一個非常簡單的任務,用 Go 標準庫 net/http + SQLite 實現一個 Todo REST API,不用框架,不用 ORM。

項目本身足夠精簡,專注看記憶工作流是怎麼運轉的。

第一步:建 Obsidian 記憶目錄

Obsidian Vault 最終的文件結構如下:

4958c403-d98b-42a4-be8b-f5f307d63d6d.png

decisions.md 寫已經定下來的技術決策。這是最關鍵的文件,它防止 Agent 反覆質疑已經做完的選擇:

b547d61a-6c87-442f-be16-9f14f0fa2ee4.png

errors.md 寫踩過的坑。每次踩坑就追加,讓 Agent 下次不要重蹈覆轍。

99785586-f219-414f-b11f-9017e7773e1d.png

todo.md 寫下一步要做什麼。每次任務完成後更新:

fb53fe33-6a18-468f-9a6e-1cf680adbc0e.png

第二步:在項目根目錄放 CLAUDE.md 和 AGENTS.md

這兩個文件是 Agent 的入口,告訴它開始工作前先讀記憶,它是通過Obsidian CLI來自動更新流的關鍵所在,上面的文件結構裏面的內容就是通過它來自動維護創建的。

CLAUDE.md,給 Claude Code 用:

# CLAUDE.md

## 長期記憶

本項目使用 Obsidian 作為長期記憶庫。

記憶路徑:~/Obsidian/AI-Dev-Memory/Projects/demo-todoapp/

開始重要工作前,必須先讀取:
1. overview.md - 瞭解項目當前狀態
2. decisions.md - 瞭解已確定的技術決策
3. errors.md - 瞭解踩過的坑,避免重複
4. todo.md - 瞭解下一步任務

## 行為要求

- 開始編碼前,先輸出你對當前項目狀態的理解。
- 不要重做已完成的模塊,除非被明確要求。
- 發現重複出現的 bug,追加到 errors.md。
- 做了架構選擇,追加到 decisions.md。
- 完成一個模塊,更新 todo.md。
- 每次會話結束後,寫 session 摘要到 sessions/YYYY-MM-DD.md。

AGENTS.md,給 Codex 或其他 Agent 用:

# AGENTS.md

## Memory Protocol

Before coding:
- Read ~/Obsidian/AI-Dev-Memory/Projects/demo-todoapp/
- Check overview.md, decisions.md, errors.md, todo.md

During coding:
- Do not repeat completed work
- Keep changes minimal
- Run tests after modifications

After coding:
- Update todo.md
- Append session summary to sessions/YYYY-MM-DD.md

第三步:封裝成 Claude Code 自定義命令

如果用 Claude Code,可以把常用操作做成 /命令,放在項目的 .claude/commands/目錄下。

/init-memory 命令:

Read CLAUDE.md and AGENTS.md first.

Then read these Obsidian memory files:
- overview.md
- decisions.md
- errors.md
- todo.md

Before writing any code, summarize:
1. Current project status
2. Key constraints and decisions
3. Known pitfalls to avoid
4. What should NOT be modified again

/save-memory 命令:

Append a session summary to sessions/YYYY-MM-DD.md.

Include:
- What was completed
- Files changed
- Decisions made
- Bugs encountered
- Next steps
- Modules that should not be refactored again

這樣每次開始工作輸入/init-memory,結束時輸入/save-memory,兩條命令,整套的記憶工作流就會自動並完整地運轉。

Coding Agent使用時的工作流

搭好之後,我們就可以這樣開始使用。

進入項目之後,給 Agent 這樣的提示詞:

先讀取 CLAUDE.md,然後讀取 Obsidian 項目記憶目錄裏的
overview.md、decisions.md、errors.md、todo.md。
不要急着改代碼,先輸出你理解的當前項目狀態和本次修改計劃。

讓 Agent 先報告現狀,是確認它真的讀到了記憶、理解了上下文,而不是直接開幹。

工作過程中,讓它遵守三條規則:

  • 發現新坑,追加到 errors.md。
  • 做了設計決策,追加到 decisions.md。
  • 完成一個模塊,更新 todo.md。

結束任務後,讓它生成 session 總結:

請把本次工作寫入 Obsidian 項目記憶:
1. 完成了什麼
2. 修改了哪些文件
3. 仍然存在什麼問題
4. 下次繼續時應該從哪裏開始
5. 哪些模塊不要重複修改

這五條都是精華,尤其是第五條,哪些模塊不要重複修改,這條信息如果沒有顯式記錄,Agent 下次很可能把你已經花時間打磨好的代碼重構掉。

當然,這是我個人給出的最小化結構的版本,用幾天,你自然會知道哪裏需要補充,哪裏需要拓展,完全可以根據你自己的業務和使用習慣來改造。

我用這套方案跑了一段時間,最直觀的感受是:開會話的心智成本降低了。

以前每次開新對話,我都要想又要重新交代一遍,有時候嫌麻煩就乾脆不開新對話,把一個會話拉得很長,結果上下文膨脹compact 失真。

現在不一樣了。

開新會話,兩句話讓 Agent 讀記憶,它自己總結出來的狀態比我自己描述的還要清晰。

我覺得這才是 Coding Agent 應該有的工作節奏:上下文窗口只是工作記憶,Obsidian 作為長期記憶。

每天結合Obsidian CLI或者手工整理項目的markdown文件也成為了我每天的必做項目。

Coding Agent外掛硬盤之後,終於有了記性,再也不用擔心會話的丟失,不管是上下文信息的管理,項目總結或者是模塊的遷移都大有裨益。

幾分鐘的事,收益卻是長期的。

更多AI編程的高級技巧可以關注我的專欄合集:AI編程高效開發指南