Boom Leverage
บทความทั้งหมด
claude-codehooksworkflow

Session Ritual + Hooks: ทำให้ Claude Code ทำตามกระบวนการ ไม่ใช่แค่หวังว่ามันจะจำ

วิธีครอบ ‘พิธีเปิด-ปิด session’ ให้ Claude Code ด้วย hooks ที่บังคับใช้จริง — โหลดบริบทก่อนเริ่ม คุมระหว่างทาง สรุปก่อนจบ กันงานหลุดกรอบตอนไม่มีคนดู

Varanchai Yingkhamnueng·

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

พิธี session ที่บังคับด้วย hooks: เปิด–ทำงาน–ปิด

ทำไม 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 ผมไปใช้ แต่เข้าใจว่าทำไมแต่ละด่านถึงต้องมี และจะออกแบบให้เข้ากับงานของคุณเองได้อย่างไร