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.