Claude Code 教學:CLAUDE.md、Skills、Hooks 是什麼?3 大功能差異一次搞懂

【2026 最新】Claude Code 教學:CLAUDE.md、Skills、Hooks 是什麼?3 大功能差異完整指南

還搞不清楚 CLAUDE.md、Skills、Hooks 差在哪?這篇用白話比喻 + 對比表格,讓你 5 分鐘建立完整心智模型,馬上知道什麼情境用哪個工具。


Claude Code 是什麼?為什麼它不只是「AI 聊天框」

很多人第一次聽到 Claude Code,會以為它就是「比較會寫程式的 Claude」,打開網頁、輸入問題、得到程式碼。但這個理解只說對了一半。

Claude Code 的真正定位是 Agentic CLI(代理型命令列工具)。它不只是回答你的問題,而是能夠理解你的整個專案、自己規劃要做什麼、然後直接在你的電腦終端機上執行: 讀取檔案、修改程式碼、跑測試、與 Git 互動,甚至可以在多個步驟之間自主判斷下一步該做什麼。

換句話說,它更像是一位「AI 工程夥伴」,而不是一個聰明的聊天機器人。

Claude Code 的核心運作邏輯

Claude Code 在你的本地終端機環境中運作。你打開它之後,它會掃描目前的專案目錄,理解你的檔案結構,然後開始接受你的指令。它可以:

  • 直接讀取和修改專案裡的任何檔案
  • 執行 shell 指令(如 npm run buildpytest
  • 透過 Git 管理版本
  • 在多個步驟之間自主推進,不需要你每步都說「然後呢」
Claude Code 在終端機中讀取專案檔案並執行任務的運作流程示意圖

三大核心機制預覽:記憶、能力、紀律

問題來了,如果 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 的行為符合預期,之後再開放自動觸發。

Claude Code Skills 手動輸入指令與自動觸發兩種載入方式對比圖

如何建立你的第一個 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 就能啟動這個流程。

建立步驟總結

  1. .claude/skills/ 建立新的子目錄(例如 weekly-notes/
  2. 在目錄內建立 SKILL.md
  3. 開頭可加 YAML frontmatter:description 建議填,幫助 Claude 判斷是否自動載入;name 可省略,省略時通常會使用資料夾名稱
  4. 用清單描述任務步驟
  5. /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工具執行失敗後記錄錯誤、發送告警
NotificationClaude 需要你注意時(例如權限提示、等待輸入等)發送桌面通知、Slack、Email 通知
StopClaude 完成一輪回應後自動備份、收尾檢查、觸發後續任務

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.mdSkillsHooks
白話定義專案家規任務食譜自動習慣
載入時機每次對話自動讀取任務需要時才載入特定生命週期事件觸發
執行方式提供背景知識與限制執行多步驟工作流程確定性自動執行(不靠模型記憶)
適合放什麼風格規範、禁止行為、技術堆疊說明發布流程、測試腳本、報告生成自動格式化、危險操作攔截、通知
影響費用是(每次都讀)低(按需載入)低(事件觸發)
新手難度⭐(最易上手)⭐⭐(需定義步驟)⭐⭐⭐(需了解生命週期)
建議使用時機一開始就建立有重複性任務時有「一定要發生」的規則時

決策框架:用「如果…就用…」快速判斷

面對任何需求,用以下三個問句依序判斷:

1. 這件事 Claude 每次都需要知道嗎? → 是 → 放 CLAUDE.md

2. 這是一個有多個步驟的任務,而且我可能重複執行? → 是 → 建一個 Skill

3. 這件事不管如何都必須發生,不能靠 Claude 記憶? → 是 → 設一個 Hook

實際例子:

  • 「我希望 Claude 永遠知道這個專案用 TypeScript」→ CLAUDE.md
  • 「我每次發版都要跑同樣 8 個步驟」→ Skills
  • 「我要確保每次改完程式碼都會自動跑 lint」→ Hooks

實戰案例:3 種工作情境怎麼搭配使用?

三個不同身份的工作者(內容創作者、工程師、產品經理)各自使用 Claude Code 工作流程的情境

實戰案例一:非工程師如何利用 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

安裝與初始化

前置條件:

依照你的作業系統,用一行指令完成安裝:

# 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,按需載入才不浪費。