寫了 Skill 卻死都不觸發?拆解 CLAUDE.md、Skill 與 MCP 的分工
把所有規則塞進 CLAUDE.md 會讓每輪對話都在燒 Token;把規則搬去 SKILL.md 卻常常不會觸發。這篇從 Claude 預設的 untriggering 機制出發,拆解 CLAUDE.md、Skill 與 MCP 各自該放什麼,以及怎麼寫出百發百中的觸發條件。
這篇的段落(5)
用 Claude Code 一段時間之後,幾乎每個人都會踩進同一個坑:每次 AI 犯了一個錯,你就在 CLAUDE.md 加一條規定。
過了兩個月,整份檔案塞滿了寫作排版、API 錯誤處理、Git 格式與資料庫命名,膨脹到好幾千字。這時兩件事會同時發生:第一,就算你只是請它把按鈕間距調大 4px,額度也掉得特別快;第二,規則明明寫在裡面,它卻越來越常漏看。
於是你聽說可以把不同任務的 SOP 拆進 .claude/skills/ 底下的 SKILL.md。你花了一個下午把規則分門別類搬進五個資料夾,結果打開新對話怎麼問,Claude 從頭到尾連一次都沒有主動載入過你的 Skill。
明明把規則寫進 SKILL.md 了,為什麼 Claude 當作沒看到?
因為 Claude 在決定要不要載入 Skill 時,根本看不到 SKILL.md 的正文,只看得到頂部短短幾行的 description。
如果把每一次對話想像成一個固定容量的 Context 預算籃,CLAUDE.md 是每輪對話無條件整包倒進籃子的常駐底線;而 Skill 為了幫你省額度,中間設了三道載入閘門。
直接看下面這張比例圖,就能一眼看出「把規則全塞進 CLAUDE.md」跟「用三道閘門漸進載入」在每一輪對話裡的空間差距:
問題就出在圖中 L1 跳 L2 的那道虛線門。Claude 預設有「能不觸發就不觸發(untriggering)」的省成本門檻:只要你的 description 寫得像「協助檢查程式碼品質」或「處理文件整理」這種籠統介紹,模型會覺得靠它內建能力就能應付,特地讀 SKILL.md 反而浪費額度,於是直接略過。
那 CLAUDE.md、Skill 跟 MCP 到底怎麼分工?
回到同一個 Context 預算籃,這三樣東西管的是完全不同的層次,收費方式也截然不同:
| 機制 | 在預算籃裡的角色 | 何時扣額度 | 只放什麼 |
|---|---|---|---|
CLAUDE.md | 每輪必守的全域底線 | 每一輪對話固定全量扣除 | 專案目錄結構、常用測試指令、不可違反的安全紅線 |
AgentSkill | 抽屜裡的任務手冊 | 平時只扣 ~100 tokens 索引;命中才讀正文 | 特定任務的 SOP、檢查清單與 references/ 範例 |
MCP Server | 接外部系統的硬體插座 | 啟動時將整排工具與 JSON 參數一次塞入 | 真正需要連線的外部服務(如查資料庫、讀行事曆) |
看懂這張表,就能順手避開兩個最常見的錢坑:
第一是一口氣掛了十幾個 MCP Server。多數 MCP 工具沒有像 Skill 那樣的三層漸進載入,每多開一個包含二、三十支 API 的 MCP,啟動時就會把整串工具定義全塞進預算籃(底層計算方式見〈逆向 Claude Agent SDK:找出每則訊息 2-3% 額度消耗的根因與解法〉),工具一多還會讓模型亂呼叫。
第二是以為 Skill 平時只佔 100 tokens 就狂裝五、六十支。我們實測裝入 63 支 Skill 的大型套件時發現,所有 Skill 的 L1 索引共用約 15,000 字元的系統上限;一旦超標,排在後面的 18 支 Skill 連 L1 description 都會被靜默截斷,永遠不會自動觸發。
怎麼在十秒內決定:一條規則該放哪裡?
不要問這件事「每天用不用得到」,要問:「下次再遇到這件事,我還想不想重講一遍?」 順著下面三個問題走,十秒鐘就能分流:
決定寫成 Skill 之後,description 怎麼寫才會準確觸發?
戒掉「產品說明書」寫法,直接寫出你平常開口會講的那幾句原話,以及什麼情況不要觸發。
直接對比下面兩種寫法,就知道為什麼上面那種永遠打不開 L2 的門:
# ❌ 功能介紹寫法(太模糊,Claude 預設 untriggering 直接跳過)
---
name: article-helper
description: 用於處理部落格文章撰寫、排版優化與品質檢查相關的任務。
---
# ✅ 情境暗號寫法(一句話產出 + 開口原話 + 不處理邊界)
---
name: cablate-article-writer
description: |
撰寫或改寫 cablate.com 技術文章,套用疑問鏈節奏、SVG 圖解色票與去 AI 味檢查。
觸發情境:「幫我寫一篇新文章」「把這份筆記改成官網文章」「幫這段加一張 SVG 圖解」。
不處理:Threads 短貼文、純課程操作手冊(交給 social-post 處理)。
---寫完不用盲猜,開一個新對話花 30 秒測三句話就能驗收:講一句 觸發情境 原話看它讀不讀、換句白話描述問題看語義通不通、再講一句 不處理 的任務確認它不會亂載入。
現在就能拿去幫 CLAUDE.md 減肥的體檢指令
如果你手上的 CLAUDE.md 已經塞了好幾百行,直接把下面這段話貼給 Claude Code,讓它先幫你列出一份拆分清單:
請讀取專案裡的 CLAUDE.md 以及 .claude/skills/ 底下的所有 SKILL.md(先不要修改檔案),幫我分成三類列出:
1. 每輪對話都必須遵守的全域底線(留在 CLAUDE.md,並壓縮成精簡指令)。
2. 只有特定任務(如寫測試、寫文章、發 PR、DB 操作)才用到的 SOP,建議拆成哪幾個 AgentSkill?
3. 檢查現有 SKILL.md 的 description:哪幾支寫得太籠統容易被略過?請直接改寫成「一句話產出+觸發原話+不處理邊界」版本。等它列出清單,你花五分鐘看過點頭再讓它動手拆。如果你想進一步把日常讀檔與子代理雜活分流給 Gemini、GLM 或 DeepSeek 等不同模型,可以接著看〈想在 Claude Code 混用 Gemini 與 GLM,為什麼一改設定檔就全亂套?〉與〈Claude Code 實戰:我怎麼用 AI 寫完一整個網站〉;完整的 Skill 拆解範例與 18 章 Claude Code 配置實務都在 AgentSkill 實戰課程與工程手冊裡,也可以先用免費的 AI 工作流五層健檢測測看你手上的流程現在卡在哪一層。
