~/VibeHandbook
PDF ฟรี

เครื่องมือเอเจนต์

docs.claude.com

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" }
    ]
  }
}