Hooks — גבולות דטרמיניסטיים
Hooks הם סקריפטים (shell, Python, TypeScript, או כל שפה אחרת) שרצים אוטומטית על אירועים ספציפיים ב-Claude Code. בניגוד ל-AI שהוא סטטיסטי (לא בטוח שיקרה), Hooks הם דטרמיניסטיים — הם תמיד יפעלו כפי שהגדרתם.
מה זה Hook?
Hook הוא סקריפט בכל שפה (Python, TypeScript, Bash ועוד) שמוגדר לרוץ על אירוע מסוים. לדוגמה: לפני שClaude משתמש בכלי כלשהו, Hook יכול לבדוק את הקלט ולחסום גישה לקבצים רגישים.
האירועים הנתמכים
אירועי סשן:
| אירוע | מתי מופעל |
|---|---|
SessionStart | כשסשן מתחיל או חוזר |
SessionEnd | כשסשן מסתיים |
UserPromptSubmit | כששולחים prompt, לפני שClaude מעבד |
Stop | כשClaude מסיים לענות |
אירועי כלים:
| אירוע | מתי מופעל |
|---|---|
PreToolUse | לפני הפעלת כלי — יכול לחסום |
PostToolUse | אחרי הפעלת כלי (הצלחה) |
PostToolUseFailure | אחרי כשל בהפעלת כלי |
PermissionRequest | כשמופיע דיאלוג הרשאות |
אירועי context:
| אירוע | מתי מופעל |
|---|---|
PreCompact | לפני דחיסת context |
PostCompact | אחרי סיום דחיסת context |
InstructionsLoaded | כש-CLAUDE.md או rules נטענים ל-context |
ConfigChange | כשקובץ הגדרות משתנה תוך כדי סשן |
אירועי agents:
| אירוע | מתי מופעל |
|---|---|
SubagentStart | כש-sub-agent מופעל |
SubagentStop | כש-sub-agent מסיים |
TeammateIdle | כש-agent בצוות עומד לעבור למצב המתנה |
TaskCompleted | כשמשימה מסומנת כהושלמה |
אירועי worktree ואחרים:
| אירוע | מתי מופעל |
|---|---|
WorktreeCreate | כש-worktree נוצר |
WorktreeRemove | כש-worktree נמחק |
Notification | כשClaude Code שולח התראה |
Elicitation | כש-MCP server מבקש input מהמשתמש |
הגדרת Hook — קובץ JSON
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "python /path/to/block-env.py"
}
]
}
]
}
}
דוגמה: חסימת גישה לקובץ .env
# block-env.py
import json
import sys
input_data = json.load(sys.stdin)
file_path = input_data.get('tool_input', {}).get('file_path', '')
if '.env' in file_path:
print(json.dumps({
"decision": "block",
"reason": "גישה לקובץ .env חסומה מטעמי אבטחה"
}))
sys.exit(0)
print(json.dumps({"decision": "approve"}))
AI סטטיסטי (לא בטוח שיקרה) vs Hooks דטרמיניסטיים
AI יכול לשכוח, לפרש בצורה שונה, או להתבלבל. Hook לעולם לא ישכח — הוא רץ כל פעם, בדיוק כפי שהגדרתם.
| גישה | אמינות | דוגמה |
|---|---|---|
| ”אל תיגע ב-.env” בפרומפט | סטטיסטי (לא בטוח שיקרה) — יכול להתעלם | 95% מהפעמים יעבוד |
| Hook שחוסם .env | דטרמיניסטי — תמיד יחסום | 100% תמיד |
מקרי שימוש נפוצים
- חסימת .env — מניעת חשיפת secrets
- בדיקת לוגינג — רישום כל פעולה לביקורת
- גיבוי אוטומטי — snapshot לפני שינויים גדולים
- הודעות Slack — התראה כאשר Claude מסיים משימה
- בדיקת תאימות — וידוא שקוד עוקב אחרי conventions
עיקרון המפתח
| רכיב | סוג | התנהגות |
|---|---|---|
| AI (Claude) | סטטיסטי (לא בטוח שיקרה) | מקבל החלטות לא וודאיות |
| Hooks | דטרמיניסטי | רצים תמיד, בצורה קבועה |
| שילוב השניים | גמישות + ביטחון |
צפייה ב-hooks מוגדרים — /hooks
הפקודה /hooks מציגה רשימה של כל ה-hooks בפרויקט — פעילים ולא פעילים. לכל hook מוצג האירוע שהוא מאזין לו, ה-matcher, ומאיזה קובץ הגדרות הוא נטען. שימושי לדיבוג כשhook לא מתנהג כמצופה.
לתיעוד הרשמי המלא: Hooks Guide — Claude Code Docs