Claude Code:活用 Hooks 打造更聰明可靠的開發流程

更新於 發佈於 閱讀時間約 10 分鐘
本文整理自 Anthropic Academy

Claude Code 提供了一套 可自動化執行的 Hooks 機制,幫助我們在大型專案中避免常見錯誤、保持程式碼品質穩定。這篇文章將分享幾個實用的 Claude Code Hooks 範例與進階技巧,讓你打造更聰明、更可靠的開發流程。

Claude Code 之所以會幫忙寫程式,我簡單理解:有點像是一個中繼站把使用者跟 Claude 拉起來,而 Hooks 會插在 Claude code 跟 Claude 之間去介入,你可以再去做一些你想指定的任務。

截圖自Anthropic Academy

截圖自Anthropic Academy

Hooks 常用種類如下:

  • PreToolUse:function call 之前執行
  • PostToolUser:function call 之後執行
  • Notification:當 Claude Code 傳送通知時觸發
  • Stop:Claude 回覆結束時觸發
  • 還有一些... e.g. SubagentStop, PreCompact, ...

工具列表(Tool Names)如下:

  • Read:讀取檔案內容(如讀取原始碼、設定檔等)
  • Edit / MultiEdit:編輯現有檔案(可用於小幅度或多段編輯)
  • Write:建立新檔案並寫入內容
  • Bash:執行 Shell 指令或腳本
  • Glob:依樣式條件(如 *.ts)尋找檔案或資料夾
  • Grep:在檔案中搜尋特定字串內容
  • Task:產生 Claude 子代理任務,處理更複雜目標
  • WebFetch / WebSearch:存取或搜尋網頁資源
  • 還有:NotebookRead, NotebookEdit, TodoWrite, ...

講白了 Claude Code 作為中介,使用「工具」作為溝通邏輯,分派工作給 Claude。

Hooks 設定位置

使用 Claude Code 時,所有設定都會藏在專案(或家目錄)底下的「.claude」資料夾當中。Hooks 也會在此設定。

截圖自Anthropic Academy

截圖自Anthropic Academy

常用設定

設定 PreToolUse

PreToolUse Hook 會在 Claude 執行某個工具之前觸發,並允許你審查其即將執行的操作。你可以根據工具名稱與參數做判斷:

"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "node /home/hooks/read_hook.ts"
}
]
}
]

在這個例子中:

  • 每當 Claude 嘗試使用 Read 工具時,就會先執行指定的指令 read_hook.ts
  • 你的命令會從標準輸入(stdin)接收到工具調用的 JSON 詳細資料
  • 然後你可以根據這些資訊做出兩種決策:
    1. 允許:回傳 exit code 0,Claude 將正常繼續執行工具
    2. 阻擋:回傳 exit code 2,Claude 將中止該操作,並顯示 stderr 作為錯誤提示

設定 PostToolUse

PostToolUse Hook 會在 Claude 執行工具 之後 觸發,因此無法阻擋操作。但你可以用來進行:

  • 檔案格式化(例如剛寫入或編輯的檔案)
  • 對 Claude 回傳附加訊息或後處理結果
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "node /home/hooks/edit_hook.ts"
}
]
}
]

在這段設定中:

  • 當 Claude 執行檔案寫入或編輯後
  • 就會自動執行 edit_hook.ts
  • 這個腳本可以讀取 Claude 剛剛操作的內容,例如格式、檔名、變更差異等等,並進行額外後處理

實際可能應用場景

以下是 Claude Code hooks 官方認為在實務上常見的幾種應用方式:

  • 程式碼格式化:在 Claude 編輯完檔案後自動執行 formatter
  • 自動化測試:當檔案變動時觸發單元測試或整合測試
  • 存取控制:阻擋 Claude 讀取或編輯特定敏感檔案
  • 程式品質檢查:執行 linter 或 type checker,並將錯誤回饋給 Claude
  • 存取記錄與稽核:記錄 Claude 操作過的檔案或內容
  • 命名規則 / 結構驗證:自動檢查變數命名、檔案路徑、模組歸屬等規範

最常用的兩個 Hooks:

  • PreToolUse 給你預防與限制 Claude 行為的能力
  • PostToolUse 則提供擴充、審查、強化 Claude 行為的機會

官方範例

1. 防止 Claude 閱讀敏感檔 .env

假設使用者輸入 "read a .env file",但我們不想要 Claude 去讀取。

因此或許我們可以:

使用 PreToolUse Hook 監控 Claude 使用 ReadGrep 工具時讀取資料,如果 Claude 試圖閱讀 .envsecrets/ 等敏感目錄,則跳出 Exit Code 2 以阻擋操作。

​以下是範例 settings.local.json <- Claude Code 設定檔

{
"hooks": {
"PreToolUse": [
{
"matcher": "Read|Grep",
"hooks": [
{
"type": "command",
"command": "node ./hooks/read_hook.js"
}
]
},
]
}
...
}

read_hook.js

async function main() {
const chunks = [];
for await (const chunk of process.stdin) {
chunks.push(chunk);
}

const toolArgs = JSON.parse(Buffer.concat(chunks).toString());
// readPath is the path to the file that Claude is trying to read
const readPath = toolArgs.tool_input?.file_path || toolArgs.tool_input?.path || "";

// TODO: ensure Claude isn't trying to read the .env file

if (readPath.includes(".env")) {
console.error("you cannot read .env files");
process.exit(2);
}
}

main();

2. TypeScript 類型檢查自動修復

問題情境:當你要求 Claude 新增一個函式參數,Claude 常常會只修改函式定義,卻漏改其他呼叫處,造成類型錯誤。

解法:使用 PostToolUse Hook 在 Claude 修改任何檔案後,立即執行 tsc --noEmit,擱取類型錯誤,並將錯誤回饋給 Claude,讓 Claude 自動修正確保程式碼無類型錯誤。

3. 強者大大分享製作「語音通知系統」

強者大大分享的範例是,在任務結束時執行預先設計好的 chatgptsay.sh ,這個功能是把你給定message 用 gpt-4o-mini-tts 讀出來。

也就是說,看起來是在 Notification Hook 上做設計,加入這個機制。所以在每次任務完以後,就會有聲音告訴你 Claude 做了啥XDD

使用 Hooks 安全建議

截圖自Anthropic Academy

截圖自Anthropic Academy

  1. 驗證並清淨輸入:不能直接信任 stdin JSON 中的資料
  2. 總是加上引號:對 shell 變數用 "$VAR" 而非 $VAR
  3. 防禦路徑繞迴:檢查 file_path 是否包含 ..
  4. 使用絕對路徑:避免相對路徑被抽離環境用錯(重要)
  5. 跳過敏感檔案:如 .env.git/、ssh keys 等
留言
avatar-img
留言分享你的想法!
avatar-img
CT
75會員
88內容數
加入沙龍追蹤 CT 更多文章!
CT的其他內容
2025/06/20
自從 Anthropic 釋出 Claude Code 之後,近幾週開始有人認為可以取代、甚至超越 Cursor 等 AI 寫程式工具!以下整理我最愛、最推薦新手立即上手的功能,也分享幾個小技巧,希望幫助你快速體驗 Claude Code 的魅力。
Thumbnail
2025/06/20
自從 Anthropic 釋出 Claude Code 之後,近幾週開始有人認為可以取代、甚至超越 Cursor 等 AI 寫程式工具!以下整理我最愛、最推薦新手立即上手的功能,也分享幾個小技巧,希望幫助你快速體驗 Claude Code 的魅力。
Thumbnail
2025/06/20
此文章翻譯自 Claude 官方文件,提供使用Claude Code的進階技巧,包含設定CLAUDE.md、整合工具、常見工作流程(例如測試先行、視覺輔助)、優化工作流程技巧(例如清楚指令、提供視覺參考、及早糾正)、以及運用headless模式、平行運行多個Claude實例等進階應用。
Thumbnail
2025/06/20
此文章翻譯自 Claude 官方文件,提供使用Claude Code的進階技巧,包含設定CLAUDE.md、整合工具、常見工作流程(例如測試先行、視覺輔助)、優化工作流程技巧(例如清楚指令、提供視覺參考、及早糾正)、以及運用headless模式、平行運行多個Claude實例等進階應用。
Thumbnail
2025/06/19
本文將介紹一系列 Claude Code 安裝、初步使用與一些「你必須要知道」且「很多人不知道」的功能! 將 Claude Code 融合在 VS Code / Cursor... 中!(本文以 Cursor 為例) 安裝在 Windows 可能會遇到的問題 安裝 目前僅支援 Mac, Li
Thumbnail
2025/06/19
本文將介紹一系列 Claude Code 安裝、初步使用與一些「你必須要知道」且「很多人不知道」的功能! 將 Claude Code 融合在 VS Code / Cursor... 中!(本文以 Cursor 為例) 安裝在 Windows 可能會遇到的問題 安裝 目前僅支援 Mac, Li
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
建立自己的Module有哪些好處?
Thumbnail
建立自己的Module有哪些好處?
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
先前藉由加入提示詞控制畫面內容與品質後,發現圖像放大後細節感覺糊糊的,這篇就要來測試幾個增加細節的方法,測試使用的工作流是基於A1111算法的工作流,且使用固定種子。
Thumbnail
先前藉由加入提示詞控制畫面內容與品質後,發現圖像放大後細節感覺糊糊的,這篇就要來測試幾個增加細節的方法,測試使用的工作流是基於A1111算法的工作流,且使用固定種子。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News