Hooks הם פקודות shell שמריצות אוטומטית בנקודות ספציפיות במחזור החיים של Claude Code. הם מספקים שליטה דטרמיניסטית על ההתנהגות — כלומר פעולות מסוימות תמיד יקרו, ללא תלות בשיקול דעת המודל.

מה זה עושה / למה זה שימושי

Hooks מאפשרים לאכוף כללי פרויקט, לאוטומט משימות חוזרות, ולשלב את Claude Code עם כלים קיימים. לדוגמה: עיצוב קוד אוטומטי אחרי כל עריכה, חסימת גישה לקבצים רגישים, שליחת התראות כשהמודל מחכה לקלט.

איך משתמשים

Hooks מוגדרים ב-settings.json. כל hook כולל event, matcher לסינון שם הכלי, ופקודה להרצה.

התאמת matchers: matcher שמכיל רק אותיות, ספרות, _, רווחות, , ו-| משמש כהתאמה מדויקת של מחרוזת (לא ביטוי רגולרי). Edit|Write מתאים בדיוק לכלים בשם Edit ו-Write. לכיסוי כל הכלים של MCP server, הוסף .* לסיומת prefix השרת — לדוגמה mcp__memory__.*. ה-.* הכרחי: mcp__memory לבד מתאים רק לכלי ששמו בדיוק mcp__memory.

דוגמה: התראת desktop כשהמודל מחכה לקלט (macOS)

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

דוגמה: עיצוב אוטומטי עם Prettier אחרי כל עריכה

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ]
  }
}

דוגמה: חסימת עריכה לקבצים מוגנים

צור קובץ .claude/hooks/protect-files.sh:

#!/bin/bash
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

PROTECTED_PATTERNS=(".env" "package-lock.json" ".git/")

for pattern in "${PROTECTED_PATTERNS[@]}"; do
  if [[ "$FILE_PATH" == *"$pattern"* ]]; then
    echo "Blocked: $FILE_PATH matches protected pattern '$pattern'" >&2
    exit 2
  fi
done

exit 0

ורשום אותו ב-settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"
          }
        ]
      }
    ]
  }
}

Hook Events עיקריים

| Event | מתי מופעל |

| :---- | :--------- |

| PreToolUse | לפני שהמודל מריץ כלי |

| PostToolUse | אחרי שהמודל מריץ כלי |

| Notification | כשהמודל מחכה לקלט או אישור |

| SessionStart | בתחילת session (ניתן לסנן לפי compact) |

| CwdChanged | כשהתיקייה הנוכחית משתנה |

| FileChanged | כשקובץ ספציפי משתנה |

| ConfigChange | כשקובץ הגדרות משתנה |

| PermissionRequest | לפני הצגת דיאלוג אישור |

קודי יציאה ושליטה בהתנהגות

| קוד יציאה | משמעות |

| :--------- | :------- |

| 0 | הצלחה — הפעולה ממשיכה כרגיל |

| 2 | חסימה — הפעולה מבוטלת וה-stderr מוחזר למודל |

| כל קוד אחר | שגיאה לא-חוסמת — הפעולה ממשיכה, ה-stderr נרשם ל-debug log ומוצגת התראה בתמלול |

מיקום קבצי ה-Hooks

| מיקום | השפעה |

| :----- | :----- |

| ~/.claude/settings.json | כל הפרויקטים |

| .claude/settings.json | פרויקט ספציפי |

| .claude/settings.local.json | מקומי, לא מועלה ל-git |

הגדרת אישור אוטומטי

Hooks יכולים לאשר אוטומטית בקשות הרשאה ספציפיות — בלי דיאלוג:

{
  "hooks": {
    "PermissionRequest": [
      {
        "matcher": "ExitPlanMode",
        "hooks": [
          {
            "type": "command",
            "command": "echo '{\"hookSpecificOutput\": {\"hookEventName\": \"PermissionRequest\", \"decision\": {\"behavior\": \"allow\"}}}'"
          }
        ]
      }
    ]
  }
}

לתיעוד מלא של schemas, פורמטי JSON, ו-hooks מתקדמים (async, MCP), ראו את Hooks Reference.