Claude Code ส่งโค้ดพังตลอด จนผมเพิ่ม automation ตัวเดียว, วิธีใช้ hooks บังคับให้ AI เทสก่อนเสร็จ
โดย Nokka (นก-กา) | 27 สิงหาคม 2026
บทความนี้เขียนโดย AI (deepseek-v4-pro via ollama-cloud) ผ่าน Hermes Agent ภายใต้การควบคุมและตรวจสอบคุณภาพโดยมนุษย์, Nokka (นก-กา)
ก่อนอื่น, ทำความเข้าใจศัพท์
ก่อนเข้าเรื่อง ขอปูศัพท์ 3 คำที่คนอ่านบทความนี้ต้องรู้ก่อน:
- Claude Code: AI coding agent ของ Anthropic ที่เขียนโค้ดใน terminal
- Hooks: "ตัวดักเหตุการณ์" ที่รันคำสั่งอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่างใน agent loop (คล้าย automation ใน n8n หรือ Home Assistant)
- TaskCompleted: เหตุการณ์ที่ยิงเมื่อ Claude "คิดว่า" ทำงานเสร็จแล้ว
ถ้าให้อุปมา: Claude Code เดิมคือ "ลูกจ้างที่บอกว่างานเสร็จโดยไม่ตรวจ", hooks คือ "หัวหน้าที่บังคับให้ตรวจงานก่อนเซ็นรับ"
ปัญหาเดิม: Claude "คิดว่าเสร็จ" แต่โค้ดพัง
ผู้เขียนบทความ (Anurag Singh จาก XDA) เจอปัญหาเดิมซ้ำๆ กับ Claude Code [1]:
ถ้าคุณบอกใน prompt ว่า "สร้างแล้วเทสด้วย" Claude ก็จะเทส แต่ถ้าไม่บอก มันจะ "ถือว่างานเสร็จ" โดยไม่เทส, แล้วคุณต้องมานั่งไล่ถามให้มันเทสทีหลัง
รากของปัญหา: Claude ทำตาม "สิ่งที่ prompt บอก" ไม่ใช่ "สิ่งที่ควรทำ", ถ้าไม่สั่งเทส มันก็ไม่เทส
วิธีแก้: Hooks ที่ "บังคับ" ให้เทส
ผู้เขียนค้นพบ Claude hooks, lifecycle callbacks ที่รัน shell command อัตโนมัติ [1]
ทำไม hooks ดีกว่า "เขียนใน CLAUDE.md"
| วิธี | ข้อจำกัด |
|---|---|
| เขียน "ให้เทสก่อนเสร็จ" ใน CLAUDE.md | เป็นแค่ "คำสั่ง" ที่ Claude อาจตีความต่างกันตาม context |
| Hooks | เป็น "โค้ด" ที่รันโดยไม่มีข้อยกเว้น |
หัวใจ: prompt instruction "อาจถูกเพิกเฉย" แต่ hooks "รันเสมอ", เพราะมันคือโค้ด ไม่ใช่คำขอ
วิธีตั้งค่า (3 ขั้นตอน)
1. สร้าง Bash script
วางใน .claude/hooks/test-before-complete.sh:
#!/usr/bin/env bash
cat >/dev/null
cd "$CLAUDE_PROJECT_DIR" || exit 2
OUTPUT_FILE="$(mktemp)"
trap 'rm -f "$OUTPUT_FILE"' EXIT
npm test >"$OUTPUT_FILE" 2>&1
TEST_STATUS=$?
if [ "$TEST_STATUS" -eq 0 ]; then
exit 0
fi
echo "Tests failed. Fix the failures before marking this task complete." >&2
tail -n 200 "$OUTPUT_FILE" >&2
exit 2
2. ทำให้รันได้
chmod +x .claude/hooks/test-before-complete.sh
3. ลงทะเบียนใน settings.json
ผูก script กับเหตุการณ์ TaskCompleted:
{
"hooks": {
"TaskCompleted": [
{
"hooks": [
{
"type": "command",
"command": ".claude/hooks/test-before-complete.sh"
}
]
}
]
}
}
หลักการทำงาน
| ขั้นตอน | เกิดอะไร |
|---|---|
| Claude ทำงานเสร็จ | ยิงเหตุการณ์ TaskCompleted |
Hook รัน npm test
|
เทสอัตโนมัติ |
| เทสผ่าน (exit 0) | Claude ทำเครื่องหมาย "เสร็จ" ได้ |
| เทสพัง (exit 2) | บล็อกการเสร็จ + ส่ง error กลับให้ Claude แก้ |
ผลลัพธ์: Claude "ตรวจงานตัวเอง" และแก้ bug โดยที่คุณไม่ต้องชี้, เพราะ hook บังคับให้เทสก่อนจะ "เสร็จ" ได้
ข้อควรระวัง: มุมที่ต้องสมดุล
ก่อนสรุป ขอวางมุมให้ตรง:
| ข้อดี | ข้อควรระวัง |
|---|---|
| บังคับเทสได้จริง (ไม่ได้มีเพียงขอ) | ต้องเขียน script เอง (ไม่ใช่ทุกคนถนัด bash) |
| ลดเวลานั่งไล่ถามให้เทส | ใช้กับทุกงานไม่ได้ (บางงานไม่ใช่โค้ด) |
| ใช้ TaskCompleted ไม่ใช่ Stop | ต้องเข้าใจ event lifecycle ก่อน |
จุดสำคัญ: ผู้เขียนเลือก TaskCompleted ไม่ใช่ Stop, เพราะไม่อยากให้เทสทุก response (บางทีแค่ถามคำถาม/คุยไอเดีย), เทสเฉพาะตอน "ทำงานเสร็จ" เท่านั้น
สรุปมุมมองของผม
ผมมองว่า hooks คือ "ฟีเจอร์ที่ถูกมองข้ามที่สุด" ของ Claude Code, เพราะมันเปลี่ยน Claude จาก "ทำตามคำขอ" เป็น "ทำตามกฎ"
และมันสอดคล้องกับสิ่งที่ผมเขียนเรื่อง Harness Engineering มาตลอด: AI agent ที่ดี ไม่ได้มีเพียง "ฉลาด" แต่ต้องมี "กลไกบังคับ" ที่ทำให้มันไม่พลาด, hooks คือกลไกนั้น
บทเรียนสำคัญ: อย่าพึ่ง "prompt" อย่างเดียว, เพราะ prompt คือ "คำขอ" ที่ AI อาจตีความต่าง แต่ hooks คือ "กฎ" ที่รันเสมอ
คุณเคยใช้ Claude hooks บ้างไหมครับ? แล้วมี automation อะไรที่ช่วยให้ AI ทำงานดีขึ้นอีก? คอมเมนต์แลกเปลี่ยนกันได้ครับ
ถ้าชอบบทความแนว AI coding แบบนี้ ติดตาม Nokka ได้ที่ dev.to/sarantoon
แหล่งอ้างอิง
[1] XDA Developers. "Claude Code kept shipping broken code until I added this one automation". 2026. https://www.xda-developers.com/claude-code-shipping-broken-code-added-automation/
บทความนี้วิเคราะห์จากบทความของ XDA Developers ข้อมูล ณ 27 สิงหาคม 2026 Nokka

Top comments (0)