Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
獨立知識媒體
與任何項目無關聯
學會用 Claude,每件事都做得更好
claudeskill-me.com
最新
執行 /compact 之後,Claude 突然不會用 Skill 了?不是故障,官方設計就是不會自動補回來  ·  Claude Code 現在支援 AGENTS.md 了,但網路上一半文章說的規則是過時的——CLAUDE.local.md 會讓它悄悄失效  ·  Hook 明明顯示「blocking error」,檔案卻還是被改了?PostToolUse 跟 PreToolUse 的「阻擋」根本不是同一件事  ·  設了 Auto Mode 就以為安全了?權限模式跟沙盒邊界是兩道完全不同的防線,混為一談會出事  ·  Messages API 新增「隨選壓縮」Beta 功能:由開發者自己決定何時把對話濃縮,而不是被動等系統觸發  ·  Claude Cowork 與 Chat 正式合併,同步推出 Claude Docs 與 Claude Slides 兩項新工具
beginners

執行 /compact 之後,Claude 突然不會用 Skill 了?不是故障,官方設計就是不會自動補回來

30 秒速讀
Skill 清單本身壓縮後不會重新注入——不是因為它消失了,而是官方權衡下的刻意決定。

完整解析 +
01 · 為什麼發生?

我在 CLAUDE.md 裡寫了「壓縮後請重新讀取 Skill」的指示,為什麼還是沒用?

Issue #13919 回報的正是這個現象:連寫在 ~/.claude/CLAUDE.md 裡明確的「壓縮後重新讀取」指示,也會在壓縮後被忽略。原因在於,壓縮這個動作本身是在「清空並重建 context」,而 CLAUDE.md 這類啟動時載入的內容確實會重新讀進去,但 Claude 讀到這個指示的時候,並不代表它會主動去執行「重新讀取某個特定 Skill 檔案」這個額外動作——除非你另外設定 hook 把這個動作自動化,單靠寫在說明文件裡的一句話,不保證真的會被執行。

02 · 運作原理是什麼?

為什麼官方不乾脆讓 Skill 清單每次壓縮都自動重新注入,省得大家踩坑?

Anthropic 工程師 @bcherny 在 issue #74990 裡給出的理由是成本考量:重新發送整份 Skill 清單,每次壓縮都要多花幾千 token,當初評估「已呼叫過的 Skill 內容會被保留,應該就足夠了」。這個判斷在「使用者只會持續用同一個 Skill」的情境下是合理的,但沒有覆蓋到「使用者想換用另一個還沒呼叫過的 Skill」這種常見情境——這正是目前這個行為被回報為 bug、而不只是單純的設計取捨的原因。

03 · 如何應用

除了手動跑 /reload-skills,有沒有辦法一開始就避免觸發這個問題?

如果任務本身不會拉得太長,單純避免讓對話長度逼近自動壓縮的門檻(issue #13919 回報的案例是在 VS Code 擴充套件裡大約 55K token 左右觸發),是最直接的做法——例如在明顯換了一個新子任務時,主動用 /clear 開新對話,而不是讓同一個對話無限拉長到被自動壓縮。

但如果任務本身就需要長時間、跨多個步驟依賴同一個 Skill,比起避免壓縮,更務實的做法還是設定 SessionStart hook,matcher 設為 "compact"、回傳 "reloadSkills": true,讓重新載入這個動作綁定在壓縮事件上自動觸發,不需要每次自己記得。

04 · 我該怎麼做?

我是剛接觸 Claude Code 的新手,完全不知道 hook 怎麼設定,有沒有最低門檻的應對方式?

有,而且不需要碰任何設定檔。只要記住一個簡單的對應關係:終端機上看到「Conversation compacted」這行字之後,如果接下來 Claude 的行為感覺跟之前不太一樣(例如重複犯之前明明已經解決的錯誤),先手動打一次 /reload-skills,看看問題是否消失。

這個指令不會對你的專案做任何改動,純粹是重新把 Skill 清單告訴 Claude,風險很低,可以當成壓縮後的習慣性檢查動作。等熟悉之後,再考慮要不要進一步設定 hook 把這個動作自動化。

完整內容 +

對話進行到一半,終端機跳出「Conversation compacted」的訊息——這是 /compact 在幫你把拉長的對話濃縮成摘要,釋放 context window 空間。但如果你之前的對話裡用了某個 Skill,壓縮完之後,Claude 很可能突然表現得像完全沒裝過這個 Skill——同樣的錯誤重新開始出現,之前靠 Skill 避開的壞習慣又回來了。這不是 bug,而是壓縮機制本來的設計取捨,只是這個取捨很少被講清楚。

壓縮後,到底保留了什麼、丟掉了什麼

官方的 context window 說明文件把壓縮後的狀態講得很具體:系統提示詞、CLAUDE.md、記憶檔案、MCP 工具清單這些啟動時就載入的內容,壓縮後會自動重新載入;Claude Code 另外會重新讀取最近修改過的最多 5 個檔案,並把你在壓縮前實際呼叫過的每個 Skill 內容重新注入,但每個 Skill 的內容上限是 5,000 token。壓縮摘要本身保留的是「你的請求與意圖、關鍵技術概念、檢查或修改過的檔案與重要程式碼片段、錯誤與修復方式、待辦事項、目前進度」,取代掉的是逐字的對話記錄——完整的工具輸出和中間推理過程會消失。

這裡最容易被忽略的一句話是:Skill 清單本身(也就是一開始列出「現在有哪些 Skill 可以用」的那份索引),不會在壓縮後重新注入。官方文件寫得很直接——除了這份清單之外,其他啟動時的內容都會重新載入,但這份清單是例外,只有你「真正呼叫過」的 Skill 內容才會被保留下來。

這在真實使用情境裡會長什麼樣子

GitHub issue #74990 完整記錄了這個行為:壓縮前,Claude 能正確回報目前有 27 到 33 個可用 Skill;壓縮後,直接問 Claude 現在有哪些 Skill 可以用,得到的答案是「找不到任何 Available skills 的系統提示區塊」——不是 Skill 變少了,是這份清單整個消失了。執行 /reload-skills 之後,Claude 立刻又能看到全部 33 個 Skill,而且指令回報的訊息是「33 skills available (no changes)」。這句「no changes」很關鍵,代表 Skill 本身從頭到尾都還在、沒有被刪除或損壞,問題純粹出在「這份清單有沒有被重新放進 context 裡」這一步。

Anthropic 工程師 @bcherny 在該 issue 底下給出的官方解釋更直接:這是刻意的設計決定——重新發送整份 Skill 清單,每次壓縮都要多花幾千 token,當初的判斷是「已經被呼叫過的 Skill 內容會被保留,這樣應該就夠用了」。問題在於,這個判斷沒有考慮到:如果使用者接下來想呼叫的是另一個「這次對話還沒用過」的 Skill,Claude 完全不知道這個 Skill 存在,因為清單已經不在 context 裡了。

另一個更嚴重的版本:連已經用過的 Skill 也會失憶

Issue #13919 描述了一個更棘手的案例:在 VS Code 擴充套件裡,大約累積到 55K token 左右觸發自動壓縮後,Claude 不只忘記有哪些 Skill 可用,連「這個 Skill 教我該怎麼做」的具體方法論也一起忘了。回報者舉的例子是,某個 Skill 原本規定「絕對不要做 ABC(常見錯誤)」,並要求 Claude 在每次回覆開頭說「SKILL ACTIVE」;壓縮之後,Claude 不再說這句話,也重新開始犯 ABC 這個被明文禁止的錯誤,即使使用者在 ~/.claude/CLAUDE.md 裡寫了明確的「壓縮後請重新讀取 Skill」的指示,這個指示本身也會在壓縮後被忽略。回報者估計,原本一小時能完成的任務,因為這種循環性的錯誤,拖到五、六個小時以上。

目前唯一可靠的應對方式

Issue #74990 底下給出的做法很直接:每次壓縮完成後,手動執行一次 /reload-skills,或者設定一個 SessionStart hook,讓 matcher 設定為 "compact"、並回傳 "reloadSkills": true,讓這個動作自動化,不需要每次手動想起來要補做這一步。如果你的工作流程本來就高度依賴某幾個 Skill,設定這個 hook 比每次事後才發現 Claude「忘記」怎麼做,成本低得多。

該怎麼判斷自己是不是踩到了這個坑

最明顯的徵兆是:壓縮前 Claude 的行為完全正常、會主動套用某個 Skill 教的做法,壓縮後卻突然開始犯同一類錯誤,或者你直接問「現在有哪些 Skill 可以用」,得到的答案跟壓縮前差了一大截。如果出現這種情況,先確認自己有沒有剛好經歷過一次 /compact 或自動壓縮(終端機上會看到「Conversation compacted」的訊息),再執行一次 /reload-skills 確認是否恢復——如果恢復了,就能確定問題出在這裡,而不是 Skill 本身設定有誤。

資料來源:[BUG] Claude Skills context completely lost after auto-compaction - Issue #13919、[BUG] /compact and auto-compaction drop entire Available skills system-reminder - Issue #74990、Scoped skills become uninvocable ("Unknown skill") after compaction - Issue #76161、Explore the context window - Claude Code Docs
圖解
壓縮後保留與丟失的內容對照Skill 清單是刻意的例外,不會在壓縮後重新注入,需要手動或用 hook 補回來What Survives /compact — and What Doesn'tReloads automaticallySystem prompt, CLAUDE.md,memory files, MCP tool listingUp to 5 most-recently-modified filesContent of Skills you actually invoked(capped at 5,000 tokens per Skill)Structured summary of intent, fixes,pending tasksDoes NOT reloadThe Available Skills listing itself(deliberate — costs tokens per compaction)Full verbatim tool outputsIntermediate reasoning stepsSkills NOT invoked before compactionClaude has no way to know they existThe fixRun /reload-skills after compaction, or bind it to aSessionStart hook with matcher "compact" → reloadSkills: trueClaude Skill Me · claudeskill-me.com
歡迎截圖分享,轉載請註明來源
提問
請至少輸入 10 個字
相關文章
Subagent 不是更聰明的小 Claude——它解決的是隔離問題,不是能力問題
advanced · 08/31
為什麼一句「hi」就吃掉 2 萬多個 Token?拆解 Claude Code 的固定啟動開銷
advanced · 09/05
為什麼裝了 Skill 卻不會觸發?15,000 字元預算爆了,Claude Code 會悄悄丟棄描述且不警告
practice · 09/02
Claude 為什麼「忘記」我剛剛說的話?搞懂 Context Window,你就懂了
beginners · 08/28
相關新聞