Skip to Content
חלק ד׳ — תכונות מתקדמותHooks — גבולות דטרמיניסטיים

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