การวิเคราะห์ครบถ้วนของกลไก Claude Code Hooks: ห้าประเภทเหตุการณ์, การควบคุมรหัสออก และสี่การกำหนดค่าจริงสำหรับการดำเนินการ AI ที่ตรวจสอบ ขัดขวาง และอัตโนมัติได้
ทุกครั้งที่ Claude Code อ่านไฟล์ เขียนโค้ด หรือรันคำสั่ง จะมีระบบ event ทำงานอยู่เบื้องหลัง Hooks คือส่วนเชื่อมต่อเข้าสู่ระบบนั้น — คุณสามารถแทรกตรรกะของตัวเองได้ทุกเวลา: รัน linter อัตโนมัติ บันทึก log ขัดขวางการกระทำอันตราย หรือเรียกคำสั่ง shell ใดก็ได้
บทความนี้อธิบายกลไก Hooks การตั้งค่า และการใช้งานจริงอย่างครบถ้วน
Hooks คือคำสั่ง shell ที่ตั้งค่าใน settings.json ซึ่ง Claude Code รันอัตโนมัติเมื่อเกิด event ที่กำหนด
การเปรียบเปรยที่ตรงที่สุด: git hooks ที่ git สามารถเรียกสคริปต์ก่อนหลัง commit และ push Claude Code Hooks ทำงานแบบเดียวกันทุกประการ ต่างกันที่จุดเรียกใช้คือการเรียกเครื่องมือของ AI
ทำไมถึงสำคัญ?
ยิ่ง Claude Code มีความสามารถมากขึ้น ยิ่งต้องการชั้นควบคุมที่แน่นอน Hooks ให้:
- การรันที่ไม่ขึ้นกับ prompt (Claude อาจเพิกเฉยคำสั่ง แต่ hook รันเสมอ)
- บันทึกการดำเนินการที่ตรวจสอบได้
- การตรวจสอบคุณภาพอัตโนมัติ
| ประเภท | ตัวเรียก | การใช้งานทั่วไป |
|---|---|---|
PreToolUse |
ก่อนเรียกเครื่องมือ | ขัดขวางการกระทำอันตราย |
PostToolUse |
หลังเรียกเครื่องมือ | Auto-lint, รัน test |
PreCompact |
ก่อนบีบอัด context | บันทึก snapshot |
Notification |
เมื่อ Claude ส่งการแจ้งเตือน | แจ้งเตือน desktop, Slack |
Stop |
เมื่อ Claude ตอบเสร็จ | สรุป log |
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{"type": "command", "command": "npm run lint --silent"}]
}
]
}
}
สามฟิลด์หลัก: matcher — regex สำหรับชื่อเครื่องมือ; type — มีแค่ "command"; command — คำสั่ง shell ใดก็ได้
| Exit Code | ความหมาย |
|---|---|
0 |
สำเร็จ ทำงานต่อ |
2 |
บล็อก: ยกเลิกการเรียกเครื่องมือ ส่ง stderr ให้ Claude |
| อื่นๆ (ไม่ใช่ศูนย์) | บันทึกข้อผิดพลาด ทำงานต่อ |
จัดรูปแบบอัตโนมัติหลังเขียนไฟล์ — PostToolUse บน Write|Edit รัน rubocop สำหรับ .rb
ป้องกันการลบไดเรกทอรี — PreToolUse บน Bash คืน exit code 2 เมื่อพบ rm .*/migrations
บันทึก audit log — PostToolUse บน Write|Edit|Bash เพิ่มลงใน ~/.claude/audit.log
แจ้งเตือนเมื่อเสร็จ — Stop hook รัน osascript หรือ notify-send
Global (~/.claude/settings.json): กฎสำหรับทุกโปรเจกต์ ระดับโปรเจกต์ (.claude/settings.json): การตรวจสอบเฉพาะโปรเจกต์ ทั้งสองชุด รวมกันและทำงานร่วมกัน แนะนำ commit settings.json ลง git
Write ไม่ใช่ writeecho "triggered" >> /tmp/hook.logคุณค่าหลักของ Hooks คือ การเชื่อมพฤติกรรม AI ที่คาดเดาไม่ได้กับมาตรฐานวิศวกรรมที่แน่นอน เริ่มด้วย hook เดียว: auto-lint หลังเขียนไฟล์