生活分享
Claude Code|建立第一個 Hook
設定事件與條件,確認 Hook 實際觸發。本篇會建立第一個 Hook:Claude 使用檔案編輯工具後,將事件名稱與工具名稱寫入練習專案的本機紀錄。你會先人工測試腳本,再接上 PostToolUse,最後用真實編輯確認觸發。這個起點能分清楚「程式可跑」與「Claude 真的呼叫過它」。
閱讀時間約 5 分鐘

實作 · CLI / Desktop / Web
本篇會建立第一個 Hook:Claude 使用檔案編輯工具後,將事件名稱與工具名稱寫入練習專案的本機紀錄。你會先人工測試腳本,再接上 PostToolUse,最後用真實編輯確認觸發。這個起點能分清楚「程式可跑」與「Claude 真的呼叫過它」。
先準備練習專案Claude Code|準備第一個練習專案取得待辦清單材料,認識檔案及啟動方法。本系列共用一個小型待辦清單網站,讓你在不同功能教學裡看到熟悉的檔案與行為。它使用 HTML、CSS、JavaScript,不需要資料庫、API 金鑰或另外安裝 npm 套件。起始版已能新增、勾選與刪除待辦;後面的練習會加入篩選、儲存和測試,讓你逐步理解 Claude Code 如何協助改動專案。閱讀全文、Node.js 22 以上與可正常啟動的 CLI。設定使用settings.jsonClaude Code|settings.json 設定教學修改 JSON、理解設定範圍並驗證生效。settings.json 用來設定 Claude Code 的行為,例如個人偏好、權限與 Hooks。本篇會先教你讀懂最少必要的 JSON,再用一個可逆的小設定示範作用範圍、載入確認與恢復方式。你會知道「檔案存好了」和「設定真的生效」之間,還需要哪些檢查。閱讀全文;以下 args 執行形式依查證時官方文件撰寫,舊版若不支援,先更新並核對當前 Hooks 參考文件,不要直接改成未加引號的 shell 字串。
先定義事件與輸出
閱讀完整文字說明
建立第一個 Hook,以流程和文件圖形呈現教學重點。
| 檢查階段 | 輸入 | 成功證據 |
|---|---|---|
| 人工測試 | 自建 JSON 事件 | 程式正常退出且新增紀錄 |
| 真實觸發 | Claude 的 Write 或 Edit | 編輯差異與新的事件時間 |
| 停用測試 | 移除 handler 後再編輯 | 紀錄行數不再增加 |
PostToolUse 表示工具已執行完畢。matcher 用來比對工具名稱,本例只關心 Write 與 Edit;讀檔、一般聊天及手動在編輯器改檔不會因此觸發。Hook 不是檔案監控服務,也無法在事後撤銷已完成的工具操作。
輸出選擇專案內的 .claude/hook-events.jsonl,每行是一個 JSON 物件,只保存時間、事件與工具。刻意不記錄完整提示、檔案內容或工具參數模型參數(Model Parameters)是什麼模型參數是訓練時調整、用來把輸入轉成輸出的數值,例如權重與偏差。本文用簡單算式示例說明參數如何影響預測,區分模型參數、訓練超參數、提示詞與生成設定,並解釋參數量、數值精度和啟用參數為何是不同指標。讀完能更準確閱讀模型規格,理解參數增加不等於知識逐條增加,也不代表每次聊天都在重新訓練模型。閱讀全文,讓新手能查看觸發證據而不累積不必要資料。請把此紀錄加入專案的 Git 忽略清單。
建立接收事件的程式
在專案建立 scripts/log-edit.mjs。Hook 將 JSON 事件透過標準輸入交給程式,腳本讀取完再解析。cwd 來自事件,輸出位置固定在該專案的 .claude 資料夾;若缺少必要欄位,程式會清楚失敗。
import { readFileSync, mkdirSync, appendFileSync } from 'node:fs';
import { join } from 'node:path';
try {
const event = JSON.parse(readFileSync(0, 'utf8'));
if (typeof event.cwd !== 'string') throw new Error('missing cwd');
const directory = join(event.cwd, '.claude');
mkdirSync(directory, { recursive: true });
const record = {
at: new Date().toISOString(),
event: event.hook_event_name,
tool: event.tool_name,
};
appendFileSync(join(directory, 'hook-events.jsonl'), JSON.stringify(record) + '\n');
} catch (error) {
console.error(String(error));
process.exitCode = 1;
}
這段程式只負責最小事件紀錄,不保證其他同時寫入程式的完整排序。第一個練習保持單一 session,先學會追蹤一次事件。需要大量並行紀錄時,再使用適合的儲存與輪替機制。
人工測試標準輸入
在專案根目錄建立 hook-input.json,cwd 請換成你實際的絕對路徑。Windows JSON 中的反斜線要寫成兩個,或使用正斜線。這份檔案是人工測試材料,不能當作真實 Claude 觸發證據。
{"cwd":"C:/practice/todo","hook_event_name":"PostToolUse","tool_name":"Edit"}
Get-Content -Raw hook-input.json | node scripts/log-edit.mjs
Get-Content .claude/hook-events.jsonl
node scripts/log-edit.mjs < hook-input.json
cat .claude/hook-events.jsonl
看到一行合法 JSON 後,記下目前行數與時間。接下來要確認真實事件會新增另一行,而不是把這一行誤認成設定已生效。若這一步失敗,先解決 Node、路徑或 JSON 格式問題。
接上專案 Hook 設定
把以下 hooks 欄位合併到 .claude/settings.local.json。若已有其他設定,保留原欄位並正確合併 JSON,不要整份覆蓋。local 檔適合先做個人練習,驗證後才考慮是否成為團隊共享設定。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "node",
"args": ["${CLAUDE_PROJECT_DIR}/scripts/log-edit.mjs"],
"timeout": 10
}
]
}
]
}
}
args 會直接傳遞參數,不經 shell 解讀,路徑中的空白不需要另行拆分。Windows 要能找到真正的 node.exe;npm.cmd 等包裝檔不能直接套用同一規則。新增後確認設定已載入,必要時重啟 session,並依產品提示檢視新增 Hook。
不要讓 Hook 程式在成功時任意輸出除錯文字。本例只寫本機紀錄,因此成功可以沒有 stdout;需要向 Claude 回饋時,改用官方定義的 JSON 欄位。一般診斷文字放在 stderr,才能避免與協定輸出混在一起。
接上設定前,另用一份缺少 cwd 的人工輸入測試失敗分支。預期退出碼為非零,且不新增紀錄。這能證明腳本不只在正常情況有效,也能在事件資料不完整時留下可辨認的錯誤。分享錯誤前仍要檢查其中是否包含私人路徑。
真實觸發測試可以連續做兩次不同主標題修改,每次都記錄差異與新增行數。若一個工具呼叫產生多個事件或重試,應查看實際紀錄,不能先假設一次提示只會對應一行。這份紀錄是工具事件清單,不是完整任務清單。
準備團隊共享時,把腳本與設定一併審查,附上 Node 前提、輸出位置與停用方法。只提交 JSON 卻漏掉腳本,會讓其他人的每次編輯都遇到找不到檔案的錯誤。
用真正編輯驗證觸發
要求 Claude 透過檔案編輯工具,把 index.html 的主標題改為「Hook 練習」,只改這一段文字。完成後看差異與紀錄,新行的時間應晚於人工測試,工具名稱應對應實際工具。若 Claude 用 shell 改檔,Write|Edit matcher 不會因此匹配。
請使用檔案編輯工具,只把 index.html 的主標題改成「Hook 練習」。
完成後列出差異;先不要執行其他修改或提交。
成功判準同時需要檔案差異與新增事件紀錄。只有設定檔存在、腳本退出碼為零,或 Claude 說「已設定」都不足以證明 Hook 已觸發。若沒有新行,查看 /hooks 與偵錯紀錄,核對事件名稱、matcher 大小寫及腳本路徑。
停用時從 settings.local.json 移除這一個 Hook handler,保留其他設定;重新載入後再做一次小編輯,紀錄行數應不再增加。移除腳本卻留下 handler 只會造成每次觸發都報錯,不是完整停用。
小練習是記錄人工測試、真實觸發與停用後測試三個結果。完成後可前往實用 Hook 案例Claude Code|Hooks 實用案例建立格式檢查、測試提示及通知流程。Hook 的價值來自可預測的觸發與可辨認的結果。本篇提供三個漸進用途:檔案編輯後檢查 JavaScript 語法、提醒完成前執行測試,以及在需要注意時留下本機通知紀錄。每個用途都有停止方式,並把檢查失敗與程式故障分開處理。閱讀全文,在同樣可觀察的基礎上加入檢查與提醒。
準備好練習完整流程時,接著閱讀Hook 事件實驗Claude Code|讀懂 Hook 事件:輸入、輸出與退出碼建立可重播事件的本機測試工具。Hook 教學最容易卡住的地方,常常不是腳本語法,而是沒有分清楚誰送入事件、腳本讀到什麼,以及輸出會由誰解讀。本篇建立一個能重播事件的小實驗室,先用固定 JSON 驗證腳本,再接到 Claude 的實際事件。最後你會有正常、拒絕、輸入錯誤及診斷訊息四種可辨認結果。閱讀全文,使用獨立材料進行故障重現與成果驗證。
回 Claude Code 教學總目錄Claude Code 完整教學目錄:從入門到自動化依平台、程度與功能找到需要的教學,從 96 篇文章與共用練習專案逐步完成操作。這個教學中心把 Claude Code 分成 96 個可以獨立閱讀的小題目,從桌面、CLI、網頁與手機開始,再學 MD 規則、常用指令、Skills、MCP 與自動化。你可以依推薦路線循序學習,也可以直接搜尋正在遇到的功能、命令或檔名。目錄依目前公開狀態顯示可閱讀文章。閱讀全文
同主題延伸閱讀
生活分享
Claude Code|建立第一個 mod:在 Claude Code 行程內數工具呼叫
寫一個三檔案的 mod,用驗證器與測試確認它掛上的事件。文件把 mod 定義成多了入口檔的 plugin:入口檔叫 hooks module,Claude Code 在事件發生時呼叫裡面的函式,函式可以觀察、改寫或接手事件。
生活分享
Claude Code|Git Worktree 平行工作
隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。
生活分享
Claude Code|雙 Worktree 實作與衝突整合
隔離兩項功能,最後完成整合與回歸。兩個 Claude 工作階段同時編輯專案,最容易出現的問題是互相改到同一份檔案,或各自測試通過、整合後卻失敗。本篇用兩個 Worktree 分別處理篩選預設值與介面文字,故意製造一次小衝突,再完成整合、驗證與清理。你不需要先啟用 Agent Teams。
生活分享
Claude Code|比較流程品質、用量與執行時間
以同一資料集比較兩種工作方法。比較兩種 Claude 工作方法時,不能只挑成功那一次,也不能只看第一個答案有多快。本篇用固定案例、原始紀錄和一致判準,比較品質、重試、等待與人工整合時間,最後寫出有樣本數與限制的報告,而不是保證某個方法一定省錢。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Automate actions with hooks · 查證日期:
- Hooks reference · 查證日期: