100% Hook คืออะไร ใช้ทำอะไรได้บ้าง
ใช้เวลาประมาณ 16 นาที
Hook คืออะไร
Hook คือสคริปต์ (shell command) ที่ทำงานอัตโนมัติแบบ deterministic ณ จุดที่กำหนดไว้ล่วงหน้าใน lifecycle ของ Claude Code เช่น ก่อนเรียก tool, หลังเรียก tool เสร็จ, หรือตอน session จบ ต่างจากการสั่งผ่าน prompt หรือ CLAUDE.md ที่เป็นแค่ "คำแนะนำ" ที่โมเดลอาจทำตามหรือไม่ก็ได้ — hook คือโค้ดที่รันแน่นอนทุกครั้ง ไม่ขึ้นกับดุลยพินิจของโมเดล
จุดที่ hook ทำงานได้ (เหตุการณ์หลักๆ)
Claude Code มี hook event ให้เกาะหลายจุดตลอด lifecycle ของ session ที่ใช้งานบ่อยที่สุดคือ:
- PreToolUse — ทำงานก่อน tool จะถูกเรียกจริง ใช้ บล็อก การกระทำที่ไม่ต้องการได้ เช่น ห้ามแก้ไฟล์ที่สำคัญ หรือห้ามรันคำสั่งอันตราย
- PostToolUse — ทำงานหลัง tool เรียกสำเร็จ ใช้ตรวจสอบ, format, หรือ lint โค้ดที่เพิ่งแก้ แต่
.env และการเก็บ API key อย่างปลอดภัย
15 นาที
Hook คืออะไร ใช้ทำอะไรได้บ้าง
16 นาที
ย้อนกลับการกระทำที่เกิดไปแล้วไม่ได้
Stop — ทำงานตอน Claude ตอบจบ ใช้เช็คเงื่อนไข เช่น บังคับให้ test ต้องผ่านก่อนถือว่าจบงานSubagentStop — ทำงานตอน subagent ทำงานเสร็จSessionStart / SessionEnd — ทำงานตอนเริ่ม/จบ session ใช้ฉีด context เพิ่มเติมหรือทำความสะอาดHook บล็อกหรือแก้ไข action ได้ยังไง
วิธีที่ hook ใช้สื่อสารกลับไปหา Claude Code มีสองแบบหลักๆ:
#!/bin/bash
if [[ "$command" == "rm -rf"* ]]; then
echo "Blocked: dangerous command" >&2
exit 2 # exit code 2 = บล็อก action นี้
fi
exit 0 # อนุญาตให้ทำต่อ
2. JSON output พร้อม permissionDecision (สำหรับ PreToolUse)
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "ห้ามเขียนลง database production โดยตรง"
}
}
นอกจากบล็อกแล้ว hook บางจุดยังแก้ไข input ก่อนส่งให้ tool ทำงานได้ (เช่นเปลี่ยนคำสั่ง Bash ที่กำลังจะรัน) หรือฉีด context เพิ่มเติมเข้าไปในบทสนทนาได้เช่นกัน
ตัวอย่างการใช้งานจริง
ทีมพัฒนาต้องการห้าม Claude แก้ไฟล์ .env หรือไฟล์ config ที่ผลิตจริงโดยเด็ดขาด จึงเขียน PreToolUse hook ที่เช็คว่า tool ที่กำลังจะเรียกคือ Edit หรือ Write และ path ที่จะแก้ตรงกับ pattern .env หรือไม่ ถ้าตรง ให้ exit code 2 เพื่อบล็อกทันที ไม่ว่าโมเดลจะพยายามแก้กี่ครั้งก็ตาม
ความสัมพันธ์กับ permission rule
Hook กับ permission rule ทำงานร่วมกันแบบ layer ซ้อนกัน: deny rule ยังคงมีผลเสมอ ต่อให้ PreToolUse hook จะส่งค่า "allow" กลับมาก็ตาม การ deny จาก rule จะชนะเสมอ ส่วน hook ที่ block ด้วย exit code 2 ก็จะชนะ allow rule เช่นกัน กล่าวคือ ทั้งสองระบบทำหน้าที่เป็น safety layer ที่เสริมกัน ไม่ใช่แทนที่กัน
Hook จึงเหมาะกับงานที่ต้องการความแน่นอน 100% เช่น การป้องกันไฟล์สำคัญ, การบังคับ workflow, หรือการ integrate กับระบบ CI/CD ภายในองค์กร ในขณะที่ skill หรือ CLAUDE.md เหมาะกับการ "แนะแนวทาง" ให้โมเดลทำตามมากกว่า