Hooks (ฮุก)
มันคืออะไร
ลองนึกถึงไฟที่มีเซ็นเซอร์ตรวจจับความเคลื่อนไหว มันจะสว่างขึ้นเองทันทีที่มีใครเดินผ่าน โดยไม่ต้องมีใครคอยจำว่าต้องกดสวิตช์ hook ก็ทำงานแบบเดียวกัน hook คือคำสั่งของคุณเองที่รันโดยอัตโนมัติ ณ จุดใดจุดหนึ่งในวงจรชีวิตของเอเจนต์ () — ก่อนที่มันจะรันคำสั่ง , หลังจากที่มันแก้ไขไฟล์, ตอนที่เซสชันเริ่มต้น และอื่น ๆ hook ช่วยให้คุณสังเกตและควบคุมสิ่งที่เอเจนต์ทำได้ด้วยสคริปต์ธรรมดา ๆ แทนที่จะไว้ใจให้มันจำกฎด้วยตัวเอง มันคือชั้นบังคับใช้กฎ (enforcement layer) ของ coding harness
จุดแข็ง
- แน่นอนตายตัว (deterministic): hook จะรันทุกครั้ง ดังนั้นกฎจะไม่มีวันถูกลืมหรือถูกโต้แย้งได้
- เขียนเป็น shell หรือสคริปต์ธรรมดา คุณจึงทำอะไรก็ได้เท่าที่เครื่องของคุณทำได้
- สามารถ "บล็อก" การกระทำได้ ไม่ใช่แค่บันทึกไว้เฉย ๆ — pre-command hook สามารถปฏิเสธคำสั่งที่อันตรายได้
- เหมาะมากสำหรับตั้งราวกันตก (guardrail): จัดฟอร์แมตตอนบันทึกไฟล์ รันเทสต์หลังแก้โค้ด สแกนหาความลับ (secrets) ก่อน
ข้อแลกเปลี่ยน
- hook คือโค้ดจริงที่รันโดยอัตโนมัติ ดังนั้นถ้ามีบั๊ก มันก็สามารถทำให้เวิร์กโฟลว์พังได้
- hook ที่ทำงานช้าจะเพิ่มความหน่วง (latency) ให้กับทุกเหตุการณ์ที่มันถูกกระตุ้น
- มันทำงานตามรูปแบบ (pattern) ที่กำหนด ดังนั้น hook ที่กว้างเกินไปอาจไปรบกวนการกระทำที่ถูกต้องได้
- ต้องตั้งค่าเพิ่มขึ้น และเป็นอีกจุดหนึ่งที่ต้องไปตรวจดูเมื่อมีอะไรทำงานผิดปกติ
เมื่อไหร่ควรใช้
ใช้ hooks เมื่อคุณต้องการการรับประกันที่แน่นอนเกี่ยวกับพฤติกรรมของเอเจนต์ — การจัดฟอร์แมตอัตโนมัติ การบังคับให้รันเทสต์ การบล็อกคำสั่งที่ทำลายข้อมูล หรือการบันทึกทุกการกระทำ — แทนที่จะพึ่งพาให้เอเจนต์ทำตามด้วยความสมัครใจ
เข้ากับ vibe coding อย่างไร
Hooks คือวิธีที่คุณจะรักษาความปลอดภัยของเอเจนต์ไว้ได้ ในขณะที่ยังปล่อยให้มันทำงานได้อย่างรวดเร็ว เอเจนต์เสนอ (propose); hook บังคับใช้ (enforce) hook แบบ "before run" ที่บล็อกคำสั่ง rm -rf หรือ hook แบบ "after edit" ที่รัน type checker จะเปลี่ยนผู้ช่วยที่ทำงานอย่างอิสระให้กลายเป็นผู้ช่วยที่ไม่มีทางข้ามราวกันตกของคุณไปได้เลยในทางเทคนิค
// run the formatter after every file edit
{
"hooks": {
"PostToolUse": [
{ "matcher": "Edit", "command": "npx prettier --write $FILE" }
]
}
}