Session Ritual + Hooks: ทำให้ Claude Code ทำตามกระบวนการ ไม่ใช่แค่หวังว่ามันจะจำ
วิธีครอบ ‘พิธีเปิด-ปิด session’ ให้ Claude Code ด้วย hooks ที่บังคับใช้จริง — โหลดบริบทก่อนเริ่ม คุมระหว่างทาง สรุปก่อนจบ กันงานหลุดกรอบตอนไม่มีคนดู
ปัญหาที่ผมเจอซ้ำ ๆ กับ agent ไม่ใช่ว่ามันไม่เก่ง แต่คือมัน ลืมหรือข้ามขั้นตอนสำคัญ โดยเฉพาะตอนรันแบบไม่มีคนดู เขียนกฎไว้ใน prompt อย่างเดียวไม่พอ เพราะนั่นคือ “ความตั้งใจ” ไม่ใช่ “การบังคับ” บทความนี้ผมจะเล่าวิธีที่ผมใช้จริง — ครอบ session ด้วยพิธีเปิด-ปิดที่บังคับด้วย hooks เพื่อให้ Claude Code เดินตามกระบวนการเสมอ ไม่ว่าจะมีคนนั่งเฝ้าหรือไม่

ทำไม prompt อย่างเดียวถึงไม่พอ
เวลาเราคุยกับ Claude สด ๆ เราเป็น guardrail ที่ดีที่สุดโดยไม่รู้ตัว — มันหลงทางเมื่อไหร่เราเบรกทันที มันลืมเช็คอะไรเราก็ทักได้ แต่พอปล่อยให้มันทำงานเองตอนตีสาม guardrail ตัวนั้นหายไป
ความจริงที่ต้องยอมรับคือ กฎที่เขียนไว้ใน prompt เป็น soft constraint — model จะทำตามเมื่อมัน “เลือก” จะทำตาม ในงานยาว ๆ ที่ context เริ่มเต็ม ขั้นตอนที่อยู่ต้น ๆ ของ prompt มักเป็นอย่างแรกที่ถูกลืม ยิ่งสั่งหนักด้วยคำว่า “สำคัญมาก ต้องทำเสมอ” ยิ่งได้ผลตรงข้าม เพราะมัน trigger พร่ำเพรื่อจนกลายเป็น noise
สิ่งที่ผมเรียนรู้คือ ต้องแยกของสองอย่างนี้ออกจากกัน:
- สิ่งที่อยากให้ทำ — เขียนไว้ใน prompt ได้ เป็นทิศทาง
- สิ่งที่ต้องทำเสมอ ห้ามพลาด — ต้องบังคับด้วยกลไกนอก model ไม่ใช่ฝากความหวังไว้กับความจำของมัน
กลไกตัวนั้นใน Claude Code คือ hooks — จุดที่เราแทรกโค้ดของเราเองเข้าไปใน lifecycle ของ session แล้ว runner จะรันให้จริง ไม่ใช่ model เป็นคนตัดสินใจว่าจะรันหรือไม่
พิธีเปิด session: โหลดบริบทก่อนลงมือ
ขั้นเปิดคือด่านแรกที่กันงานเพี้ยนได้มากที่สุด เพราะ agent ที่เริ่มงานโดยไม่รู้กฎของบ้าน มักเดาเอาเอง แล้วเดาผิด ผมเลยใช้ hook ตอนเริ่ม session บังคับให้มันโหลดสิ่งที่ต้องรู้ก่อน ไม่ใช่ปล่อยให้มันกระโดดเข้างานเลย
สิ่งที่ผมให้มันดึงเข้ามาตอนเปิด:
- กฎและ convention ของ workspace ที่งานนี้ต้องเคารพ
- บริบทล่าสุดจาก second brain (วิกิ Markdown ของผม) ที่เกี่ยวกับงานตรงหน้า
- ข้อจำกัดที่ห้ามแตะ เช่น ไฟล์ที่ frozen หรือพื้นที่ที่ต้องขออนุญาตก่อน
หัวใจอยู่ที่ว่า การโหลดบริบทนี้ ไม่ใช่ทางเลือก ถ้า hook ขั้นเปิดไม่ผ่าน งานก็ไม่เริ่ม วิธีนี้เปลี่ยนจาก “หวังว่ามันจะอ่านกฎก่อน” เป็น “มันต้องอ่านกฎก่อน” ซึ่งต่างกันคนละโลกเมื่อไม่มีคนคอยดู
คุมระหว่างทางด้วย gate: ไม่ให้หลุดกรอบ
เปิดดีแล้วก็ยังหลุดกลางทางได้ ระหว่างที่ agent ทำงาน มันมีจังหวะที่จะ “ออกนอกเส้น” — แก้ไฟล์ที่ไม่ควรแตะ รันคำสั่งที่อันตราย หรือทำสิ่งที่ย้อนกลับยากโดยไม่ถามก่อน
ตรงนี้ผมใช้ hooks เป็น gate คือด่านที่ดักก่อนการกระทำบางอย่างจะเกิด แล้วตัดสินว่าให้ผ่าน ให้หยุด หรือให้ขออนุญาตมนุษย์ก่อน หลักที่ผมยึดคือ gate ควรเข้มเฉพาะกับสิ่งที่ ย้อนกลับยาก ไม่ใช่ขวางทุกอย่างจนงานเดินไม่ได้
ตัวอย่างที่ผมวางด่านไว้:
- การกระทำที่ลบหรือเขียนทับของถาวร — ต้องผ่าน gate ก่อน
- การแตะพื้นที่ที่ผมตั้งใจ freeze ไว้ — ปิดตายไว้เลย
- งานที่มีผลข้างนอก เช่น ส่งของออกไปจริง — ให้หยุดรอ human ยืนยัน
ข้อดีของการทำเป็น gate จริง ๆ แทนคำเตือนใน prompt คือ มันทำงานเหมือนกันทุกครั้ง ไม่ขึ้นกับว่า model วันนั้นจะ “จำได้” ไหม และมันบังคับใช้กับงาน headless ตอนที่ไม่มีคนเฝ้าเหมือนกับตอนนั่งคุยสดทุกประการ
พิธีปิด session: สรุปและตรวจตัวเองก่อนจบ
หลายคนใส่ใจแค่ตอนเปิด แต่ผมว่าตอนปิดสำคัญพอกัน เพราะนี่คือจังหวะที่ความรู้จากงานจะหายไปถ้าไม่จับไว้ และเป็นโอกาสสุดท้ายที่จะจับงานพังก่อนปิดประตู
hook ขั้นปิดของผมบังคับสองอย่าง: ให้ agent สรุปสิ่งที่ทำ และ ตรวจตัวเองตาม checklist ก่อนจะประกาศว่างานเสร็จ
- สรุปสั้น ๆ ว่าทำอะไรไป ผลเป็นอย่างไร แตะไฟล์ไหนบ้าง
- ตรวจว่าทำครบตามที่รับงานมาจริงไหม ไม่ใช่ทำไปครึ่งเดียวแล้วบอกว่าเสร็จ
- บันทึกบทเรียนหรือ error ที่เจอกลับเข้า second brain เพื่อให้ session หน้าฉลาดขึ้น
จุดที่ผมเคยพลาดเอง: ถ้าพิธีปิดถูกออกแบบมาสำหรับ session สด แล้วเอาไปใช้กับงาน headless ตรง ๆ บางทีชื่อด่านไม่ตรงกัน ทำให้ระบบนึกว่างานพังทั้งที่มันเสร็จเรียบร้อย บทเรียนคือพิธีเปิด-ปิดต้องออกแบบให้รองรับทั้งสองโหมดตั้งแต่แรก ไม่ใช่ยกของจากโหมดหนึ่งไปอีกโหมดแล้วหวังว่าจะรอด
แก่นของเรื่อง: บังคับใช้ ชนะ ความตั้งใจ
ถ้าจะให้สรุปทั้งหมดเป็นประโยคเดียว: อย่าฝากกระบวนการสำคัญไว้กับความจำของ model ให้ฝากไว้กับกลไกที่บังคับใช้จริง
prompt เหมาะกับการบอกทิศทางและบริบท แต่สิ่งที่ “ห้ามพลาด” ควรอยู่ใน hooks ที่ runner รันให้เสมอ — เปิดด้วยการโหลดบริบท คุมระหว่างทางด้วย gate ปิดด้วยการสรุปและตรวจตัวเอง พอครอบครบสามชั้นแบบนี้ ผมถึงกล้าปล่อยให้ Claude Code ทำงานเองตอนที่ผมหลับ โดยรู้ว่ามันจะไม่หลุดกรอบ นี่คือส่วนหนึ่งของระบบที่ผมสอนในคอร์ส — ไม่ใช่แค่ก็อป workspace ผมไปใช้ แต่เข้าใจว่าทำไมแต่ละด่านถึงต้องมี และจะออกแบบให้เข้ากับงานของคุณเองได้อย่างไร