
還搞不清楚 CLAUDE.md、Skills、Hooks 差在哪?這篇用白話比喻 + 對比表格,讓你 5 分鐘建立完整心智模型,馬上知道什麼情境用哪個工具。
Claude Code 是什麼?為什麼它不只是「AI 聊天框」
很多人第一次聽到 Claude Code,會以為它就是「比較會寫程式的 Claude」,打開網頁、輸入問題、得到程式碼。但這個理解只說對了一半。
Claude Code 的真正定位是 Agentic CLI(代理型命令列工具)。它不只是回答你的問題,而是能夠理解你的整個專案、自己規劃要做什麼、然後直接在你的電腦終端機上執行: 讀取檔案、修改程式碼、跑測試、與 Git 互動,甚至可以在多個步驟之間自主判斷下一步該做什麼。
換句話說,它更像是一位「AI 工程夥伴」,而不是一個聰明的聊天機器人。
Claude Code 的核心運作邏輯
Claude Code 在你的本地終端機環境中運作。你打開它之後,它會掃描目前的專案目錄,理解你的檔案結構,然後開始接受你的指令。它可以:
- 直接讀取和修改專案裡的任何檔案
- 執行 shell 指令(如
npm run build、pytest) - 透過 Git 管理版本
- 在多個步驟之間自主推進,不需要你每步都說「然後呢」

三大核心機制預覽:記憶、能力、紀律
問題來了,如果 Claude Code 這麼聰明,為什麼每次打開都要重新解釋一遍你的專案規範?為什麼它有時候會忘記你說過「不要用 var」?
這就是 Claude Code 三大核心機制要解決的問題:
- CLAUDE.md:給 Claude 長期記憶,讓它永遠記住你的專案規範
- Skills:給 Claude 專屬技能包,讓它能按需執行複雜的多步驟任務
- Hooks:給 Claude 自動紀律,讓某些事情「一定會發生」,不靠模型記不記得
這三個工具分工明確,合在一起才是 Claude Code 的完整體。接下來我們一個一個拆開來講。
什麼是 CLAUDE.md?如何設定「專案長期記憶」規範?
CLAUDE.md 的白話定義
CLAUDE.md 就是你家的家規。
想像你搬進一棟新家,門口貼了一張清單:「進門要脫鞋、不要開太大聲、垃圾要分類」。不管是誰第一次進這個家,都得先看這張清單。Claude Code 的 CLAUDE.md 就是這個功能——它放在你的專案裡,每次 Claude 開始一個新對話,都會先把它讀一遍,然後依照裡面的規則行動。
技術上來說,CLAUDE.md 是一個普通的文字檔(.md 格式),放在你的專案根目錄下。Claude Code 啟動時會自動偵測並讀取它。你也可以在子目錄放不同的 CLAUDE.md,讓特定資料夾套用不同規則(這叫做 path-scoped CLAUDE.md)。
CLAUDE.md 裡該放什麼?
CLAUDE.md 應該放的是「每次對話都需要遵守」的核心規則。以下是一個典型的範本結構:
# 專案說明
這是一個 Next.js 14 的電商專案,使用 TypeScript + Tailwind CSS。
## 技術堆疊
- Framework: Next.js 14 (App Router)
- Language: TypeScript(嚴格模式)
- Styling: Tailwind CSS
- Database: PostgreSQL + Prisma
## 程式碼風格
- 永遠使用 `const`,不用 `var` 或 `let`(除非必要)
- 元件名稱用 PascalCase,函式用 camelCase
- 所有 API 函式必須有錯誤處理
## 建置與測試指令
- Build: `npm run build`
- Test: `npm run test`
- Lint: `npm run lint`
## 禁止行為
- 不要直接修改 `production` 分支
- 不要刪除 `migrations/` 資料夾內的任何檔案
重點原則:只放每次任務都需要知道的事。風格規範、技術堆疊 (Tech Stack) 說明、禁止行為——這些都適合放。至於「下週五要Release」這種一次性資訊,不要放在這裡。
CLAUDE.md 的使用限制與費用提醒
這裡有個很多新手不知道的關鍵:CLAUDE.md 的每一個字,都會在每次對話開始時被讀進去。
這代表 CLAUDE.md 越長,每次對話消耗的資源越多。不管你用哪種方案都會有影響:
- 訂閱制用戶(Pro / Max):Claude Code 和你平常的 Claude 對話共用同一個使用額度,CLAUDE.md 越長,每次任務「佔走」的比例越高,跑幾個任務就可能提早觸到當日限制。
- API Credits 用戶:直接按 Token 計費,CLAUDE.md 等於每次對話都多一筆固定開銷,哪怕那次任務只是改一個按鈕顏色。
建議原則:CLAUDE.md 控制在 200 行以內(官方建議上限),只留真正每次都需要的核心規則。如果你的規則越來越多,接下來我們會介紹的 Skills 就是答案。
Claude Code Skills 是什麼?手動與自動觸發技能的完整教學
Skills 的白話定義
Skills 是你的食譜書。
家規(CLAUDE.md)貼在門口,每天都要看。但食譜不一樣——你不會每天早上起來就把所有食譜從頭到尾讀一遍,而是等到「今天想做紅燒肉」的時候,才把那本食譜拿出來翻。
Skills 的邏輯完全一樣。它是一份描述特定任務步驟的文件,只有在你需要執行那個任務的時候才會被讀取和啟動。不執行就不消耗資源,完全按需求載入。
技術上,每個 Skill 是一個獨立的子目錄,project skill 通常放在專案的 .claude/skills/ 下,並以 SKILL.md 作為進入點;此外也可以放在個人的 ~/.claude/skills/,做成跨專案可重複使用的 personal skill:
.claude/skills/
└── weekly-notes/
└── SKILL.md
Skills 的觸發方式:自動 vs. 手動
Skills 有兩種觸發方式:
手動觸發:你直接輸入 /skill-name 指令。例如建立了一個叫 weekly-report 的 Skill,就輸入 /weekly-report 來啟動它。
自動觸發:Claude 根據你的任務描述,自行判斷需要載入哪個 Skill。例如你說「幫我整理本週的 Notion 筆記」,Claude 可能會自動載入你預先設定好的 note-organizer Skill。
對新手來說,建議從手動觸發開始——先確認 Skill 的行為符合預期,之後再開放自動觸發。

如何建立你的第一個 Skill
建立一個 Skill 不需要會寫程式,只需要用白話描述「這個任務的步驟是什麼」。以下是一個實際範例:
情境:每週五需要把本週的採訪筆記整理成摘要,輸出為 Markdown 格式。
在 .claude/skills/weekly-notes/ 目錄下,建立 SKILL.md,並加入 YAML frontmatter;其中 description 對 Claude 自動判斷何時載入這個 Skill 特別重要:
---
name: weekly-notes
description: 整理本週採訪筆記,輸出標準化摘要報告。當使用者要求整理本週筆記時使用。
---
## 步驟
1. 掃描 `notes/` 資料夾,找出本週(週一到週五)新增或修改的 .md 檔案
2. 對每個檔案,提取:受訪者名稱、核心主題、3 個關鍵觀點
3. 將所有內容合併,按主題分類,輸出為 `reports/weekly-YYYY-MM-DD.md`
4. 在文件開頭加上本週摘要(100 字以內)
## 輸出格式
- 標題:`# 週報:YYYY 年第 N 週`
- 每則筆記:`## [受訪者] — [主題]`
- 關鍵觀點用無序清單列出
完成後,輸入 /weekly-notes 就能啟動這個流程。
建立步驟總結:
- 在
.claude/skills/建立新的子目錄(例如weekly-notes/) - 在目錄內建立
SKILL.md - 開頭可加 YAML frontmatter:
description建議填,幫助 Claude 判斷是否自動載入;name可省略,省略時通常會使用資料夾名稱 - 用清單描述任務步驟
- 用
/skill-name測試
什麼時候該從 CLAUDE.md 升級到 Skills?
這是新手最常問的問題。有一個簡單的判斷標準:
如果一件事超過 3 個步驟,或只對部分情況有用,就應該拆成 Skill。
更具體的升級時機:
- 你的 CLAUDE.md 規則超過 5 條,其中有些規則只在「特定任務」才用到
- 某個任務涉及多個步驟,且你希望 Claude 按固定順序執行
- 某個操作只跟特定資料夾或特定類型的檔案有關
把這些情境轉成 Skill,你的 CLAUDE.md 就能保持精簡,費用也跟著降低。
Hooks 是什麼?如何利用自動化機制建立 AI 執行紀律?
Hooks 的白話定義
Hooks 是「進門要洗手」的那種規則。
你媽媽不需要每次提醒你——從小養成的習慣,進門就自動洗手,不是因為有人叫你,而是這個動作被綁定在「進門」這個事件上了。
Hooks 的邏輯一模一樣。它不是提示詞,也不是建議,而是在 Claude Code 執行特定動作的時候,自動觸發的規則。
這裡有個關鍵差異值得強調:CLAUDE.md 和 Skills 都依賴 Claude「記住」你的規則;但 Hooks 是 deterministic(確定性)的——它不靠模型記不記得,而是系統層面保證「這個時間點,一定會執行這件事」。
Hooks 的生命週期時間點一覽
Hooks 綁定在 Claude Code 的特定生命週期事件上。以下是主要的時間點:
| 生命週期事件 | 觸發時機 | 典型用途 |
|---|---|---|
PreToolUse | 工具執行前;當 matcher / if 符合時觸發 | 攔截危險操作、記錄審計日誌 |
PostToolUse | 工具成功執行後 | 自動格式化、驗證輸出、補充上下文 |
PostToolUseFailure | 工具執行失敗後 | 記錄錯誤、發送告警 |
Notification | Claude 需要你注意時(例如權限提示、等待輸入等) | 發送桌面通知、Slack、Email 通知 |
Stop | Claude 完成一輪回應後 | 自動備份、收尾檢查、觸發後續任務 |
Hooks 的實戰用途:3 個最常見場景
Hooks 的設定統一寫在 .claude/settings.json(專案層級)或 ~/.claude/settings.json(個人層級,套用到所有專案)。
場景一:自動格式化(PostToolUse)
每次 Claude 寫入或修改檔案之後,自動跑 lint 修正格式。不管 Claude 輸出的程式碼風格如何,存檔後一定是符合規範的。
// 放在 .claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "npm run lint -- --fix"
}
]
}
]
}
}
matcher 的值 Write|Edit 代表「寫入檔案」或「編輯檔案」這兩個工具執行完後才觸發,不會每個工具都跑一遍。
場景二:阻擋危險操作 (PreToolUse)
禁止 Claude 執行包含 rm -rf 的指令。原理是:Hook 偵測到指令內容後,用 exit 2 通知 Claude Code 取消這次操作——exit 2 是官方規定的「阻擋」信號。
先建立這個腳本檔案,存在 .claude/hooks/block-rm-rf.sh:
#!/bin/bash
# 從環境變數取得 Claude 要執行的指令內容
COMMAND="$HOOK_TOOL_INPUT_COMMAND"
if echo "$COMMAND" | grep -q 'rm -rf'; then
echo "❌ 已阻擋:偵測到 rm -rf 指令"
echo "請改用 rm -i 或手動確認後再執行。"
exit 2 # exit 2 = 告訴 Claude Code 取消這次操作
fi
exit 0 # 其他指令正常放行
然後在 .claude/settings.json 裡註冊這個 Hook:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/block-rm-rf.sh"
}
]
}
]
}
}
matcher: "Bash" 讓這個 Hook 只在 Claude 要執行 shell 指令時才觸發,不影響其他工具。阻擋規則寫在腳本裡,之後想擴充(例如再加禁止刪除 production/)只需改腳本,不用動 settings.json。
場景三:任務完成通知(Stop)
每次 Claude 完成一輪回應後,自動發 Slack 通知。 Stop 是「Claude 結束這輪對話、等待下一個指令」時觸發的事件。
// 放在 .claude/settings.json
// 先在終端機設定:export SLACK_WEBHOOK="https://hooks.slack.com/services/你的webhook網址"
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "curl -s -X POST $SLACK_WEBHOOK -H 'Content-type: application/json' -d '{\"text\": \"Claude Code 任務完成!\"}'"
}
]
}
]
}
}
💡 Stop vs TaskCompleted 怎麼選?
Stop是每次 Claude 結束回應都會觸發,適合一般對話流程。
TaskCompleted是使用 Tasks 子任務功能時,某個 Task 被標記完成才觸發,適合複雜的多任務工作流程。
一般新手從 Stop 開始就夠用了。
Hooks 失敗怎麼辦?小白自救指南
Hook 最常見的失敗原因有三個:
原因一:指令路徑錯誤。Hook 執行的指令是在你的專案根目錄跑的,如果你的工具不在 PATH 裡,就會找不到。解法:把指令改成絕對路徑,例如 /usr/local/bin/eslint 而不是 eslint ;如果要穩定引用專案內腳本,也可以搭配 $CLAUDE_PROJECT_DIR。
原因二:Hook 執行超時。如果你的 Hook 指令需要很長時間(例如跑全套測試),Claude Code 可能在等待時看起來像卡住了。解法:在 Hook 設定裡加上 timeout 參數,或把耗時任務改為非同步通知型 Hook。
原因三:環境變數未設定。Hook 的 shell 環境和你的終端機環境不完全一樣,某些環境變數可能不存在。解法:在 Hook 指令裡明確設定需要的變數,或用 .env 檔載入。
如果不確定 Hook 是否在正確的時機觸發,可以先加一個最簡單的測試 Hook——讓它在觸發時把時間戳記寫入一個 log 檔案,確認觸發邏輯正確後再加真正的操作。
CLAUDE.md vs. Skills vs. Hooks:三者差異一次看清楚
這一節是整篇文章的核心。看完這裡,你就有完整的決策框架了。
三者核心差異對比表
| 比較維度 | CLAUDE.md | Skills | Hooks |
|---|---|---|---|
| 白話定義 | 專案家規 | 任務食譜 | 自動習慣 |
| 載入時機 | 每次對話自動讀取 | 任務需要時才載入 | 特定生命週期事件觸發 |
| 執行方式 | 提供背景知識與限制 | 執行多步驟工作流程 | 確定性自動執行(不靠模型記憶) |
| 適合放什麼 | 風格規範、禁止行為、技術堆疊說明 | 發布流程、測試腳本、報告生成 | 自動格式化、危險操作攔截、通知 |
| 影響費用 | 是(每次都讀) | 低(按需載入) | 低(事件觸發) |
| 新手難度 | ⭐(最易上手) | ⭐⭐(需定義步驟) | ⭐⭐⭐(需了解生命週期) |
| 建議使用時機 | 一開始就建立 | 有重複性任務時 | 有「一定要發生」的規則時 |
決策框架:用「如果…就用…」快速判斷
面對任何需求,用以下三個問句依序判斷:
1. 這件事 Claude 每次都需要知道嗎? → 是 → 放 CLAUDE.md
2. 這是一個有多個步驟的任務,而且我可能重複執行? → 是 → 建一個 Skill
3. 這件事不管如何都必須發生,不能靠 Claude 記憶? → 是 → 設一個 Hook
實際例子:
- 「我希望 Claude 永遠知道這個專案用 TypeScript」→ CLAUDE.md
- 「我每次發版都要跑同樣 8 個步驟」→ Skills
- 「我要確保每次改完程式碼都會自動跑 lint」→ Hooks
實戰案例:3 種工作情境怎麼搭配使用?

實戰案例一:非工程師如何利用 Skills 自動整理筆記?
情境:Ling 是一位 Podcast 製作人,每週要採訪 3–5 位來賓,結束後需要把錄音記錄整理成文章草稿,並分類存檔。
痛點:每次都要從頭跟 Claude 解釋「輸出格式要怎樣」「標題要如何命名」,非常浪費時間。
工具組合:
- CLAUDE.md:放輸出格式規範(文章標題格式、段落結構、字數要求)
- Skills(
organize-interview):定義整理流程——讀取錄音逐字稿 → 提取關鍵觀點 → 套用文章格式 → 存入對應分類資料夾
效果:設定一次之後,每次輸入 /organize-interview 就能自動完成整個流程,輸出格式永遠一致。
案例二:前端工程師
情境:Eric 在一個 5 人團隊工作,大家用同一個 Git repo,最近常發生有人直接 push 到 main 分支,或是程式碼風格不一致。
痛點:靠提醒效果有限,需要讓規則「強制執行」。
工具組合:
- CLAUDE.md:放 code style 規範、分支命名規則、commit message 格式
- Hooks(
PreToolUse):攔截所有針對main分支的直接推送操作,強制要求透過 PR 流程 - Hooks(
PostToolUse):每次檔案修改後自動跑 ESLint
效果:Claude 改完程式碼,格式問題自動被 lint 修正;想直接推 main 的操作會被 Hook 擋下來,並顯示提示訊息。
案例三:產品經理
情境:Mia 每個月要整理用戶回饋,從 Intercom 和 App Store 評論中提煉出主要問題,輸出一份給主管看的摘要報告。
痛點:整理過程步驟繁瑣,而且常常做到一半才想起某些格式要求。
工具組合:
- Skills(
feedback-report):定義完整的報告生成流程——讀取原始資料 → 分類問題 → 統計頻率 → 輸出摘要報告(含優先級排序) - Hooks(
TaskCompleted):報告生成完成後,自動發 Slack 訊息通知主管和設計師
效果:輸入 /feedback-report 啟動流程,自動輸出完整報告,完成後主管和設計師同步收到通知。
新手起步:如何從零開始設定 Claude Code
安裝與初始化
前置條件:
- 訂閱制用戶:有 Claude Pro 方案以上的帳號即可(在 claude.ai 登入)
- API 用戶:在 console.anthropic.com 申請 API Key
依照你的作業系統,用一行指令完成安裝:
# macOS / Linux / WSL
curl -fsSL <https://claude.ai/install.sh> | bash
# Windows PowerShell
irm <https://claude.ai/install.ps1> | iex
# Windows CMD
curl -fsSL <https://claude.ai/install.cmd> -o install.cmd && install.cmd
安裝完成後,進入你的專案目錄直接啟動:
cd your-project
claude
第一次執行 claude 時,會自動開啟瀏覽器引導登入——訂閱制用戶用 Claude.ai 帳號授權即可,不需要手動設定任何 Key。API 用戶則選擇輸入 API Key。登入後 Claude Code 會自動掃描你的專案,就可以開始使用了。
建議的新手三步驟起手式
不用一開始就把三個工具全設定好。按這個順序來:
第一步(現在):啟動 Claude Code,讓它自動掃描你的專案。接著在根目錄手動建立 CLAUDE.md,填入你的核心規範(也可以輸入 /init 讓 Claude 幫你生成初稿)。先用一週,感受 Claude 有沒有按照你的規則行動。
第二步(一到兩週後):留意哪些指令你一直重複輸入,把那些整理成第一個 Skill。通常第一個 Skill 都是某個重複性的報告或整理任務。
第三步(有需要時):當你發現「這件事我一直忘記叫 Claude 做」或「這個操作我不想靠記憶控制」的時候,再加 Hook。
FAQ:最多人問的 5 個問題
Q1:CLAUDE.md 跟 Skills 到底差在哪?
CLAUDE.md 是「一直開著的背景規則」,Claude 每次對話都會讀取,適合放風格、禁止行為等長期規範。Skills 是「需要時才啟動的任務流程」,只有執行特定任務時才載入,適合放多步驟的自動化工作流程。簡單記法:長期記住的事放 CLAUDE.md,特定任務的步驟放 Skills。
Q2:Hooks 是不是比 CLAUDE.md 更強?
兩者不是等級差異,是用途不同。CLAUDE.md 管的是「Claude 應該知道什麼」,Hooks 管的是「某個時機點一定要執行什麼動作」。Hooks 的關鍵優勢是 deterministic(確定執行),不依賴模型記不記得;但它無法替代 CLAUDE.md 提供的知識背景。三個工具是互補關係,不是誰比誰高級。
Q3:新手一開始只用 CLAUDE.md 可以嗎?
完全可以,而且這是最推薦的起點。啟動 Claude Code 後手動建立 CLAUDE.md,或輸入 /init 讓 Claude 生成初稿,跑幾個任務熟悉運作方式。當你開始發現「某段指令一直重複輸入」,再整理成 Skill;當出現「這件事絕對不能忘」的規則,再加 Hook。不用一開始就把三個都設定好。
Q4:Skills 需要手動輸入指令才能觸發嗎?
不一定。Skills 支援手動觸發(輸入 /skill-name 指令)和自動觸發(Claude 根據任務性質自行判斷載入)兩種方式。對新手來說,建議先用手動觸發,確認 Skill 行為正確之後,再考慮設定自動觸發條件。
Q5:CLAUDE.md 寫太長會怎樣?會影響費用嗎?
會。CLAUDE.md 的每一行在每次對話開始時都會被讀進去,內容越長消耗的 Token 越多,等於每次對話都有固定的「底費」。建議原則:只放每次都需要的核心規則,官方建議控制在 200 行以內。其餘的情境限定規則,移到 Skills 或 path-scoped 子目錄的 CLAUDE.md,按需載入才不浪費。





