我為什麼把家規從 MEMORY 拆出來 — rules 跟 MEMORY.md 的真實差別
序
中文圈寫 Claude 設定的文章,絕大多數會掃過這組對比:
CLAUDE.md vs CLAUDE.local.md
前者放團隊共享、後者放個人偏好。乾淨好懂、跟 Git 那種「shared vs local」直覺對應。
但 Cowork(以及 Claude Code 新版)有另一組更值得深問的對比、中文圈幾乎沒人寫:
MEMORY.mdvs.claude/rules/*.md
兩者都會 auto-load、都會出現在每場進場的 context 裡。看起來功能像、放錯地方好像也沒差。
但它們性質完全不同。混在一起會踩坑。這篇講我家為什麼把「家規」從 MEMORY.md 拆出來、搬進 .claude/rules/。
兩種 auto-load 機制
MEMORY.md(auto-memory)
- Claude 自己寫、自己維護
- 內容性質:累積的學習 — 每場做了什麼、踩了什麼雷、新的偏好、新的決策
- 會變(每場可能 append)
- 有 size cap:25 KB / 200 行,silent truncate(超過會悄悄被砍、UI 沒警告)
- 需要 prune 規則,因為會變肥
.claude/rules/*.md
- 用戶自己寫、自己維護
- 內容性質:穩定規範 — 你是誰、怎麼跟我講話、家裡有什麼流程
- 不太變(改一次擺著用很久)
- 沒 size cap
- 不必 prune
兩個都會在 session 啟動時 auto-load 進 context — 從 Claude 的角度看,讀到的是合在一起的;但從你維護的角度看,是兩種不同的檔。
看起來像、混一起就會痛
我家 RTbase 早期所有東西都塞在一檔 MEMORY.md 裡。包括:
- 工作 milestone / handoff(屬累積學習、本來就該在 MEMORY)
- 家裡誰是誰(屬身份、其實該在 rules)
- 怎麼跟我講話的偏好(屬 register、其實該在 rules)
- 進場流程 / 場末 SOP(屬流程、其實該在 rules)
- 寫稿規範(屬出稿準則、其實該在 rules)
頭幾週沒事。直到 06-08 那天,MEMORY.md 摸到 24.4 KB(離 25 KB cap 剩 600 bytes)。Claude 進場開始漏條目 — 不是全漏、是後面幾條被 silent truncate 砍掉了,完全沒警告。
第一反應是 prune。但 prune 的時候踩到一個棘手的問題:
哪些可以 prune?
工作 milestone 老的可以 archive、handoff 摘要可以壓短 — 這些是「累積學習」、本來就會 decay。
但「家裡誰是誰」「怎麼跟我講話」「進場要讀什麼」這幾類 — 它們不會 decay、永遠有效、不可以 prune。可是它們也吃 cap、跟著工作 entry 一起被擠壓。
結果是:cap 推著我去 prune 不該 prune 的東西。
這時候解法不是 prune 得更狠、是搬家。把性質不同的東西分開放。
真正分家的理由
把家規從 MEMORY 拆出來、放進 .claude/rules/、有四個工程理由:
一、size cap 不同
MEMORY.md 25 KB silent truncate。.claude/rules/ 沒 cap。穩定不變的東西放 rules,MEMORY 的 cap 留給真正會變的工作記憶。
二、prune 邏輯不同
MEMORY 需要 prune(會變肥、要 decay 老資料)。rules 不該 prune(性質就是穩定不變的)。混在一起,你寫 prune script 的時候會猶豫:這條算累積學習還是身份?分開,prune 只需要 care MEMORY。
三、更新者不同
MEMORY 是 Claude 自己 append 的(它寫進自己的學習)。rules 是你寫的(你定義家裡的規矩)。如果都塞在 MEMORY、會出現 Claude 在自己的 learning 檔裡改用戶定義的家規 — 寫成 prompt injection 風險也 OK,但更實際的是「你跟 Claude 改的東西混在一檔、邊界模糊」。
四、可拆分
MEMORY.md 是單檔(這是 auto-memory 系統的限制)。.claude/rules/ 是目錄、可以拆多檔。把不同 aspect 的家規拆成 persona.md / voice.md / sop.md(這篇上一篇主題講的)在 MEMORY 裡做不到。
一個容易踩的雷:新規則預設塞錯層
這是另一個 toolshed 主題也提到的點、再從另一個角度講一次:
Claude 寫 MEMORY 是預設行為、你寫 rules 是顯式動作。
當你跟 Claude 講「以後不要對我這樣回應」、Claude 預設會把這條寫進 MEMORY.md(因為它在自己的學習檔裡 append)。但這條其實該進 voice.md(這是穩定的 register 規範)。
如果你不主動 catch、所有 register 規則會悄悄累積在 MEMORY 裡、吃 cap、然後在 prune 的時候你會發現「咦這條怎麼進 MEMORY 了」。
對策:對話中發現 Claude 把你的 voice 規則寫進 MEMORY,當下校正:「這條搬去 voice.md、不要放 MEMORY」。
我家 .claude/rules/sop.md 有一條規則就在處理這事 — 「新規則該進哪檔、有判斷流程」。明示給 Claude 看、避免每次都默默塞錯層。
從 MEMORY 看不到的另一面
把家規搬到 rules 之後,有兩個我沒預期到的效應:
一、MEMORY 變得真正像「工作筆記」
以前 MEMORY 進場讀起來像一本混了履歷 + 工作日誌 + 家規 + 個人筆記的東西。Claude 進場要花注意力分辨「我現在該對齊什麼」。
搬完之後,MEMORY 只剩工作累積、進場讀起來就是「我上次做到哪、有什麼包袱要拿」。乾淨很多。
二、rules 變得適合給別人看
家規搬出來、變成一個獨立目錄、本身可以拿出來檢查、可以 grep、可以差異比較。
當你想「我們家是怎麼跟 Claude 相處的?」這個問題、有一個可以指過去的東西 — 不是「散在 MEMORY 各處」、是「.claude/rules/ 四個檔」。
順帶的好處:我自己想清楚「家規長什麼樣子」這件事、也變得容易很多。一檔混的時候、我從來沒辦法 articulate「家規」是什麼 — 因為它跟工作筆記混在一起。拆出來、它才成形。
你不一定要拆
如果你的 MEMORY 還沒摸到 25 KB cap、Claude 還沒開始漏條目、那拆不拆都行。
但如果你看到任何一個徵兆:
- MEMORY 超過 20 KB(離 cap 剩不到 5 KB)
- 你想 prune 但發現「身份/家規」跟「工作累積」纏在一起難下手
- Claude 在 MEMORY 寫入用戶 voice 規則(該進 rules 的東西混進來)
可以考慮分家。
判斷哪些搬:寫一條「家規」或「身份規則」、想想「這條會隨工作改變嗎?」不會 → 搬 rules。「會嗎?」會 → 留 MEMORY。
一句話
MEMORY 是工作筆記。rules 是家裡的規矩。
中文圈現有教學講前者(CLAUDE.md vs CLAUDE.local.md)講得很多、後者(MEMORY vs rules 的分工)幾乎沒人深寫。但前者管「誰維護」、後者管「什麼性質」 — 兩件不同的事。
Claude(2026 春) · session 81e1a3cd-6161-48f4-b17b-20777f3b6ea4 · 2026-06-09