hook מחבר אירוע בסשן לפקודה. נבנה hook של התראה, ואחריו hook שמעצב קובץ Python שנערך. בדרך נקרא את ההגדרות ונבחן את נתוני האירוע.
לפני שמחברים משהו לסוכן, הריצו את הפקודה בעצמכם. בשולחן עבודה של Linux, הפקודה הסטנדרטית notify-send מקפיצה התראה. ב-WSL, בקשו מהסוכן לכתוב לזה סקריפט קטן. הוא יכול להריץ PowerShell מתוך WSL ולהציג חלון התראה ב-Windows. גם ב-Mac הסוכן יכול לכתוב סקריפט כזה. לא משנה מה הפקודה, קודם בדקו שהיא עובדת לבד, מחוץ ל-hook.
ה-hook הראשון שלנו יפעיל את הפקודה הזאת כש-Claude Code מציג התראה על בקשת הרשאה. כך נקבל התראה גם כשאנחנו עובדים בחלון אחר.
הנה כל ההגדרות, בקובץ .claude/settings.json. רשומת ה-hooks החיצונית מכילה את ההגדרות של ה-hook שלנו. Notification הוא האירוע. הוא אומר לרתמה איזו נקודה בסשן מעניינת אותנו.
ה-matcher בוחר את המקרים שמעניינים אותנו. כאן אנחנו בוחרים התראות הרשאה, עם ה-matcher permission_prompt. לא חייבים להגיב לכל סוג התראה רק כי הוא עובר דרך אותו אירוע.
ל-handler יש "type: command", ואחריו הפקודה שצריך להריץ. זו הפקודה שבדקנו ידנית. חשבו על הרשומה כעל שלוש החלטות. האירוע קובע מתי לשקול הרצה, ה-matcher קובע אילו מקרים מתאימים, וה-handler קובע מה להריץ.
בתפריט /hooks אפשר לראות את ה-hooks המוגדרים ואת האירועים שלהם. ודאו שה-hook של ההתראה נטען. אחר כך הפעילו פעולה לא מזיקה שדורשת הרשאה לפי ההגדרות של הסשן הזה.
כשאנחנו בחלון אחר, ההתראה בשולחן העבודה מודיעה לנו שהסשן מחכה לנו. בקשת ההרשאה המקורית עדיין ממתינה. וזהו, הדוגמה הראשונה הושלמה. אירוע התאים, הרתמה הפעילה את הפקודה, וראינו את התוצאה.
הדוגמה השנייה שלנו היא hook שמעצב קובץ Python מיד אחרי שהסוכן עורך אותו. כך הקוד שהסוכן כותב שומר על העיצוב של הפרויקט, ואף אחד לא צריך להריץ את מעצב הקוד ידנית. בשביל זה, ה-hook צריך לדעת איזה קובץ נערך. הרתמה מספרת לו. היא שולחת לקלט הסטנדרטי של התוכנית אובייקט JSON שמתאר את האירוע. באובייקט מופיעים האירוע, תיקיית העבודה, הכלי, והקלט של הכלי. אנחנו מציגים רק את השדות שנחוצים לדוגמה הזאת.
נתיב הקובץ שבתוך הקלט של הכלי אומר ל-handler שלנו איזה קובץ נערך. לאירועים שונים יש שדות ייחודיים משלהם. תמצאו אותם בתיעוד, או פשוט תשאלו עליהם את הסוכן.
עכשיו נרשום את ה-hook של העיצוב. הוא משתמש באותו מבנה הגדרות כמו דוגמת ההתראה. האירוע הוא PostToolUse, שקורה אחרי שכלי רץ בהצלחה. ה-matcher בוחר את הכלים Edit ו-Write.
הפקודה מריצה את סקריפט ה-handler שלנו עם מפרש ה-Python של הפרויקט. שני הנתיבים מוקפים במירכאות ומתחילים מתיקיית הפרויקט. המשתנה CLAUDE_PROJECT_DIR מחזיק את התיקייה הזאת, והמירכאות שומרות כל נתיב כיחידה אחת, גם אם יש בו רווח. בקובץ ההגדרות, מוסיפים לוכסן הפוך לפני המירכאות הפנימיות האלה.
ה-matcher מעביר רק אירועים של Edit ו-Write. אחר כך הסקריפט שלנו קורא את נתיב הקובץ ובודק אם זה קובץ Python. אנחנו רוצים לעצב רק קבצי Python.
עריכה של קובץ ה-Python מגיעה למעצב הקוד. עריכה של ה-README עוברת את ה-matcher, והסקריפט שלנו מתעלם ממנה. סוכנים הרבה פעמים משנים קבצים בפקודת Bash ולא בכלי Edit, למשל עם sed או עם סקריפט קטן. שינוי כזה לא מתאים ל-Edit או ל-Write, ולכן ה-hook הזה לא רץ בכלל. כדי לכסות גם את המקרה הזה, אפשר לבחור ב-matcher גם את הכלי Bash, ולתת לסקריפט לבדוק אם הפקודה שינתה קבצי Python.
יש כמה מקומות שבהם נמצא קובץ הגדרות, ואפשר להגדיר את ה-hook שלכם בכל אחד מהם. הגדרות המשתמש חלות על כל הפרויקטים שלכם. אחרי commit, הגדרות הפרויקט משותפות דרך המאגר. הגדרות פרויקט מקומיות מאפשרות לשמור שינוי רק במחשב שלכם. בחרו את המיקום לפי מי שאמור להשתמש ב-hook.
שיתוף ההגדרות הוא רק חלק משיתוף ה-hook. גם הסקריפט שהוא מפעיל והכלים שהוא צריך חייבים להיות זמינים. שמרו את ה-handler בנתיב יחסי לפרויקט, ותעדו איך מתקינים את הסביבה שלו. נתיב לתיקיית הבית האישית שלכם לא יעבוד במחשב של השותף שלכם.
hook מריץ קוד עם ההרשאות של החשבון שמריץ את הסוכן. קראו את הקוד הזה לפני שאתם מפעילים את ה-hook. התייחסו לטקסט מהאירוע כנתונים, העבירו נתיבים בצורה בטוחה, ובדקו נתיב עם רווחים. בדקו גם קובץ שה-handler אמור להתעלם ממנו. הבדיקות האלה מראות לנו אם אוטומציה קטנה מתנהגת כמתוכנן, לפני שהיא רצה שוב ושוב בלי שנשים לב.
לסיכום: hook מסוג פקודה משלב תוכנה קטנה עם אירוע שמפעיל אותה. התחילו מפקודה שעובדת, חברו אותה לאירוע המתאים, ובדקו את כל המסלול. כך יש לכם אוטומציה שרצה ברגע הנכון, בלי שתפעילו אותה ידנית.
כשיש לכם hook של התראות, תוכלו לקום ולהכין לעצמכם קפה בזמן שהסוכן עובד. אם הוא יצטרך אתכם, הוא יודיע לכם. לצערנו, אין אירוע hook שמביא את הקפה אליכם לשולחן. נתראה בסרטון הבא.