你有沒有遇過這種狀況:Anthropic 的 Cowork(桌面 agent 工具)用了一陣子,某天突然發現 Claude 開始漏規則 —— 上一場明明交代過的事,這場它不知道了。
我撞到這個,查了半天才搞懂:不是 Claude 健忘,是它的 auto-memory MEMORY.md 被無聲截斷了,而且 UI 完全不會警告你。
實際發生的事:MEMORY.md 在 25 KB / 200 行就會被 silent truncate(警告只埋在 system prompt 裡,Claude 看得到,人類看不到)。這在原廠 issue 有人提報過:claude-code #57574。
解法是把記憶拆成兩層。這個概念在 Claude Code(CLI 版)圈早就有人寫過 —— 但 Cowork 視角的拆法跟 Claude Code 不完全一樣,而且有 5 個原廠文件沒寫的雷,你照搬 Claude Code 的教學會撞到。這篇就是我 Cowork 上的踩雷紀錄。
每場 Claude 啟動時,會 auto-load 一堆東西進 system prompt。其中有兩種你需要關心:
MEMORY.md(auto-memory) |
CLAUDE.md / .claude/rules/*.md |
|
|---|---|---|
| 誰寫 | Claude 自己累積 | 你寫 |
| 內容性質 | Claude 學到的偏好、模式、踩雷 | 你想 Claude 記住的指示/規則 |
| 大小限制 | 25 KB / 200 行(silent truncate) | 無硬限(但越短 adherence 越好) |
| 改了立刻生效嗎 | session 啟動載入 | 下一場新 session 才生效 |
兩個都會 auto-load。分開放的好處:你保留 Claude 自己累積的能力(MEMORY.md),又有一塊不會被擠掉的空間,放「我是誰、我想 Claude 怎麼工作」的規則(CLAUDE.md / .claude/rules/)。
混在一起的下場:MEMORY.md 滿了之後,最近寫的會被砍掉 —— 而那通常正是你最重要的規則。
.claude/我照 Claude Code 文件學 .claude/rules/ 的用法,叫 Cowork 裡的 Claude 用 Write tool 寫 .claude/rules/persona.md,結果撞到:
Write on /Users/.../.claude/rules/persona.md is blocked
— it resolves to a protected location.
.claude/ 被 Cowork 列為保護位置,Edit tool 同樣也擋。
解法:改用 bash。
cat > .claude/rules/persona.md << 'EOF'
# 你的 rules 內容...
EOF
或用 sed -i 修改(注意 Mac 跟 Linux 的 sed 語法不同),或 python3 做 read-modify-write。中文內容多的時候,sed 容易踩 unicode,我推薦 python:
python3 -c "
p = '.claude/rules/voice.md'
s = open(p).read()
s = s.replace('舊字串', '新字串')
open(p, 'w').write(s)
"
附帶一提:auto-memory 那個 directory(~/.../memory/)不受此限,可以正常 Write/Edit。
MEMORY.md 超過 25 KB / 200 行不會跳任何訊息。唯一外顯的訊號 = Claude 開始漏規則 —— 而這是個延遲又不確定的訊號,你發現時通常已經漏一陣子了。
所以定期自己 wc -c -l MEMORY.md 看一下。原廠 issue 也提了這條:#57574、#25006。接近 24 KB 就該 prune 了,別等踩線。
.claude/rules/ 當場不生效文件有寫,但很容易忘:新 session 才會載入新版。你這場改了 .claude/rules/voice.md,Claude 還是會用舊規則跟你講話。
想驗證新規則 = 新開一場。
當你要 tag 一筆 handoff record、attribute 某段工作、或在文章/簽名裡持續引用某場 session 時,你需要的是穩定的 session ID。
Cowork 的 local-agent-mode-sessions 路徑有三層 UUID:
/Users/.../local-agent-mode-sessions/<workspace>/<conversation-wrapper>/local_<session>/outputs
只有最後一層 local_<UUID> 是 session ID。 外面兩層分別是 workspace 跟 conversation wrapper,跟特定 session 沒有 1:1 對應,會在不同場之間重複。
抓法直接看 CWD,或用 bash pwd:
pwd
# /Users/.../local_<這就是 session ID>/outputs
會踩的捷徑(我自己踩過): auto-memory 檔 frontmatter 那行 originSessionId:。它看起來很 official,但這欄系統填的是當前 transcript ID,不是 session ID。沒 compaction 時剛好一致,可以借用;但被 compaction 續場後,frontmatter 會飄成新的 transcript 碼,跟 local_<sid> 分岔。
所以借用 frontmatter 前,先對得上 CWD 的 local_<sid> 再採信。
你跟 Claude 講「記得 XX、以後都這樣」,它預設會塞進 MEMORY.md(auto-memory)。問題是這條會被 auto-memory 自己的 prune cycle 衝刷掉;真正穩定的位置是 .claude/rules/。
想讓它塞 .claude/rules/,要明講:
voice.md」persona.md」不講 = MEMORY.md。
英文圈現有的 guides,多半把 .claude/rules/ 按開發領域切:testing.md / api.md / security.md / frontend.md。那個適合工程專案。
但如果你的 Cowork project 是拿來做非工程的事(寫東西、跟 Claude 互動、自動化生活流程、創作工具),那個切法就不對位 —— 你不需要 testing rules,你需要的是「Claude 怎麼跟我講話、認識我、處理我給它的內容」。
我實際走過之後,試了另一條軸 —— 「身分 vs 累積」:
| 檔 | 放什麼 |
|---|---|
persona.md |
你是誰/Claude 是誰/稱呼/關係/本業 |
voice.md |
講話方式/register/節奏/被糾正後的 recovery/emoji 用法 |
sop.md |
進場/終場/流程/工具雷區/重要 commands |
conventions.md(可選) |
跟 Claude 一起寫東西時的共用 SOP:署名、字數規範、保護界線 |
身分層 = 你想 Claude 在所有場合都記得的「我是誰」。累積層 = 工作筆記,Claude 自己 prune。
切點不一樣:工程那套是「這場我在做什麼」,身分這套是「Claude 該怎麼跟我相處」。後者比較適合長期、非工程主場景的 Cowork 使用情境。
.claude/rules/ 結構在你 Cowork 連的 project folder 根目錄:
mkdir -p .claude/rules
cat > .claude/rules/persona.md << 'EOF'
# 身分層(進場全載)
## <使用者>
- 背景條目
- ⚠️ 不要 over-infer 的雷
- 關係(如有)
## Claude
- 慣用暱稱/自稱
EOF
voice.md / sop.md 比照辦理。建議每個檔控制在 100–200 行內;太長會降 adherence。
.gitignore 加一行echo ".claude/" >> .gitignore
個人 register 不該 commit 進 repo;團隊共享的話可以細到只擋 .claude/settings.local.json。
MEMORY.md 過肥就 prunewc -c -l ~/.../memory/MEMORY.md
接近 25 KB 就動。流程:
辨識可 archive 的條目:完成超過一週的 milestones/已搬到 .claude/rules/ 的規則/早期版本/POC 時代的條目。
搬到 MEMORY_archive.md(同 dir 新建,留原文供未來 grep)。
MEMORY.md 換成 rollup pointer:
- [📦 XX 群已 archive](MEMORY_archive.md) — 摘要 + 觸發詞;原文見 archive 檔
驗證有降:wc -c MEMORY.md。
不能在當前 session 驗 —— .claude/rules/ 要新 session 才載入。新場進來測:
persona.md 知道的 fact → 看 Claude 答對否。voice.md 設定。sop.md 走。沒抓到的 fallback:
.claude/rules/*.md 真的存在(ls .claude/rules/)。.claude/rules/,把規則貼到 Settings → Cowork → Global Instructions,或專案的 Folder Instructions UI 當 fallback。子分類遞迴、paths: frontmatter 的 scoped rules、@import 拉檔、hooks、skills —— 這些原廠文件有、英文圈 guide 也寫過很多,直接看原廠:https://code.claude.com/docs/en/memory
這篇是我自己在 Cowork 上實際踩雷的整理。寫作過程有 Claude 協助 —— 某種程度上算是拿這篇講的東西來 dogfooding。技術細節(25 KB 截斷、issue 編號、路徑結構)都是實測,可自行驗證。
本文同步發表於我的筆記站。