
หลังจากที่ไปแบ่งปันความรู้แบบลองผิดเยอะ ๆ และ ลองถูกบ้างเล็กน้อย
เรื่องการใช้งาน Claude Code ในการพัฒนาระบบงาน
หรือพูดกลาง ๆ คือ AI Agent for coding นั่นเอง
ไม่ว่าจะเป็น Claude Code, Codex, Pi และ GitHub Copilot Chat
ล้วนมี feature หนึ่งที่น่าสนใจ และ ถูกมองข้ามไปก็คือ Hooks
โดยจะ reference ด้วย Hooks ใน Claude Code เพื่อให้เห็นภาพ
ปกติเรามักจะเขียน prompt, instruction และ workflow ในรูปแบบต่าง ๆ
ซึ่งแน่นอนว่า มันอาจจะทำตาม หรือ ไม่ทำตามสิ่งที่เราเขียนไว้ทั้งหมด
เนื่องจากมีปัจจัยเยอะมาก ๆ
ไม่ว่าจะเป็นเรื่องของ AI Agent เอง
ไม่ว่าจะเป็นเรื่องของขนาดของ context
ไม่ว่าจะเป็น LLM model ที่ใช้งาน
หรือ tool/mcp/skills ต่าง ๆ ที่ติดตั้งอีก
ทำให้ผลที่ได้ไม่เหมือนเดิม
ซึ่งหลาย ๆ คนอาจจะบอกว่ามันทำงานแบบ Non-deterministic นั่นเอง
ทั้ง ๆ ที่กำหนดค่า terperature=0 แล้วนะ !!
แต่เราก็พยายามทำให้มันทำงานได้ในลักษณะเดิมให้มากที่สุด
เช่น code และ test ที่ได้มาอาจจะไม่เหมือนเดิม
แต่ผลการทำงานยังตามที่เรากำหนดไว้เหมือนเดิม
ไม่ว่าจะเป็นการเขียน workflow, command, skills ต่าง ๆ
ต้องทำการทดสอบกับสิ่งที่เราใช้งานเสมอ
เพราะว่า ถ้ามีอะไรเปลี่ยนไปแล้วการทำงานอาจจะแตกต่างก็ได้
แต่สิ่งที่เราต้องการมาก ๆ คือ ให้ทำงานแบบเดิมเสมอ หรือ Deterministic
หนึ่งในแนวทางที่เราสามารถกำหนดให้ AI Agent for coding ทำงานซ้ำ ๆ เหมือนเดิม
เราสามารถกำหนดใน Hooks ได้เลย
ซึ่งใน Claude Code เองก็มีการกำหนด Life cycle ต่าง ๆ ไว้ให้เรา
หรือบางครั้งอาจจะเรียกว่า Event นั่นเอง
นั่นคือ ก่อนและหลังการทำอะไรบางอย่างจะต้องทำอะไรบ้าง ?
มาดูรูปของ Hooks Life Cycle กัน
จะเห็นว่ามีเยอะจนงงกันเลยดีเดียว

มาดู use case และสิ่งที่น่าสนใจ สำหรับการใช้งาน Hooks กัน
ตัวอย่าง case ที่ 1 ก่อนจบการทำงานในแต่ละ session ต้องทำการทดสอบ หรือทำพวก static code analysis
เราสามารถทำการ config hooks ได้ใน SessionEnd ได้เลย
ซึ่งกำหนดในไฟล์ ~/.claude/settings.json นั่นเอง
ตัวอย่าง case ที่ 2 ในแต่ละ turn ของการทำงานในแต่ละ session
ต้องการการตรวจสอบ context หรือ tools ต่าง ๆ ที่ใช้งานว่าเป็นอย่างไร
ใน context ซ้ำ ๆ กันไหม อยากลบไหม อยาก compact/compress ไหม
สามารถกำหนดใน PreToolUse/PostToolUse ได้
หรือถ้าต้องการทำครั้งเดียวก่อนเริ่ม ก็กำหนดใน SessionStart ได้เลย
ตัวอย่าง case ที่ 3 เมื่อจบการทำงานใน loop แล้ว ให้แจ้ง notify
สามารถกำหนดใน Stop ได้
ยกตัวอย่างของการ config hooks แบบง่าย ๆ ในไฟล์ settings.json
เป็นการตรวจสอบ context ว่ามีอะไรซ้ำกันไหม ?
ถ้าซ้ำก็ลบทิ้งไปบ้าง
ลองลองใช้งานกันดูครับ
จะได้ควบคุมได้ดียิ่งขึ้น
Automated actions with Hooks