Free

คู่มือสมบูรณ์สำหรับ Claude Code Hooks: ควบคุมทุกการกระทำของ Claude

การวิเคราะห์ครบถ้วนของกลไก Claude Code Hooks: ห้าประเภทเหตุการณ์, การควบคุมรหัสออก และสี่การกำหนดค่าจริงสำหรับการดำเนินการ AI ที่ตรวจสอบ ขัดขวาง และอัตโนมัติได้


ทุกครั้งที่ Claude Code อ่านไฟล์ เขียนโค้ด หรือรันคำสั่ง จะมีระบบ event ทำงานอยู่เบื้องหลัง Hooks คือส่วนเชื่อมต่อเข้าสู่ระบบนั้น — คุณสามารถแทรกตรรกะของตัวเองได้ทุกเวลา: รัน linter อัตโนมัติ บันทึก log ขัดขวางการกระทำอันตราย หรือเรียกคำสั่ง shell ใดก็ได้

บทความนี้อธิบายกลไก Hooks การตั้งค่า และการใช้งานจริงอย่างครบถ้วน


Hooks คืออะไร

Hooks คือคำสั่ง shell ที่ตั้งค่าใน settings.json ซึ่ง Claude Code รันอัตโนมัติเมื่อเกิด event ที่กำหนด

การเปรียบเปรยที่ตรงที่สุด: git hooks ที่ git สามารถเรียกสคริปต์ก่อนหลัง commit และ push Claude Code Hooks ทำงานแบบเดียวกันทุกประการ ต่างกันที่จุดเรียกใช้คือการเรียกเครื่องมือของ AI

ทำไมถึงสำคัญ?

ยิ่ง Claude Code มีความสามารถมากขึ้น ยิ่งต้องการชั้นควบคุมที่แน่นอน Hooks ให้:
- การรันที่ไม่ขึ้นกับ prompt (Claude อาจเพิกเฉยคำสั่ง แต่ hook รันเสมอ)
- บันทึกการดำเนินการที่ตรวจสอบได้
- การตรวจสอบคุณภาพอัตโนมัติ


Hook 5 ประเภท

ประเภท ตัวเรียก การใช้งานทั่วไป
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

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 vs. ระดับโปรเจกต์

Global (~/.claude/settings.json): กฎสำหรับทุกโปรเจกต์ ระดับโปรเจกต์ (.claude/settings.json): การตรวจสอบเฉพาะโปรเจกต์ ทั้งสองชุด รวมกันและทำงานร่วมกัน แนะนำ commit settings.json ลง git


การดีบัก

  1. ตรวจสอบตัวพิมพ์ใน matcher — Write ไม่ใช่ write
  2. รันคำสั่งแยกต่างหากในเทอร์มินัล
  3. ตรวจสอบ stderr ในผลลัพธ์ Claude Code
  4. เริ่มด้วย echo "triggered" >> /tmp/hook.log

สรุป

คุณค่าหลักของ Hooks คือ การเชื่อมพฤติกรรม AI ที่คาดเดาไม่ได้กับมาตรฐานวิศวกรรมที่แน่นอน เริ่มด้วย hook เดียว: auto-lint หลังเขียนไฟล์