Skip to main content

לומדים

העמוד בתהליך תרגום. בינתיים מוצג המקור באנגלית לאחר בדיקה.

Hooks של Claude Code: הגבול הנתכנת סביב המודל

התשובה הקצרה

CLAUDE.md יכול להגיד ל-Claude איך להתנהג, אבל האם Claude יעקוב אחרי ההוראות תלוי בשיקול הדעת של המודל. Hooks הם תשובה שונה: מנגנון בקרה ניתן־תכנות שרץ בתוך זרימת הביצוע של Claude Code.

כאשר Claude עומד לקרוא לכלי, לכתוב קובץ או להריץ פקודה, ה-hooks מתערבים לפני הפעולה ומחליטים האם לאפשר אותה, לחסום אותה או לבקש אישור אנושי. השיפוט לא תלוי בזה שהמודל זוכר כלל — הוא תלוי בקוד שכתבת מראש. זו ההבטחה המרכזית.

מבנה ה-Hooks

Hooks שוכנים ב־settings.json, מאורגנים בשלוש שכבות מקוננות:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          { "type": "command", "command": "echo 'a write happened'" }
        ]
      }
    ]
  }
}
  • EventPreToolUse, PostToolUse, Notification, וכו'. הרישום של הנקודות בהן רוצים להתערב.
  • Matcher — מתי הקבוצה הזו תופעל. Write מתאים רק לכתיבות לקובץ; השמטה תתאים לכל הפעולות.
  • Hook — הלוגיקה בפועל, למשל פקודה או קריאת HTTP.

המערכת הרשמית מצטטת כיום 28 אירועים ו־5 סוגי hooks רשמיים (command, http, mcp_tool, prompt, agent). ניתן להגדיר hooks בשש מיקומים: הגדרות משתמש, פרויקט, פרויקט מקומי, מדיניות מנוהלת, hooks של פלאגין, ו־frontmatter של skill/agent.

חוסם מול לא חוסם, והסכנה של קוד היציאה

אירועים נופלים לשני מסלולים:

  • אירועים בזרימה הראשית (SessionStart, PreToolUse, PermissionRequest, PostToolUse, Stop) יכולים להיות חוסמים — הם עוצרים את הזרימה ותוצאתם מחליטה מה יקרה הלאה.
  • אירועים בצד המשני (Notification, ConfigChange) הם לא חוסמים — הם עוקבים ומודיעים בלי ליירט את הזרימה.

לאירועים חוסמים יש שתי דרכים לחסום, והן שונות במהותן:

  • exit 2 — שגיאה ברמת המערכת (כלי חסר, סביבה שבורה). המודל מרגיש שהפעולה נכשלה ועלול לנסות מסלול חלופי.
  • exit 0 + JSON עם החלטת מדיניות כמו {"decision": "deny"} — דחיית חוק עסקי. המודל מקבל את ההחלטה ומתאים את עצמו. ה־JSON יכול גם לצרף reason ולשנות את קלט הכלי באמצעות updatedInput.

> המלכודת הנסתרת: exit 1 הוא לא חוסם במערכת ה-hooks של Claude Code. רק exit 2 חוסם באמת את הזרימה.

מנגנון מיזוג והחלטה

כאשר hooks משכבות שונות (משתמש, פרויקט, פלאגין, skill) תואמות לאותו אירוע, Claude Code:

  • מריץ אותן במקביל.
  • מבטל כפילויות (deduplicates) של hooks זהים — אותה מחרוזת פקודה, או אותו URL עבור HTTP.
  • מחליט לפי התוצאה המחמירה ביותר: deny > ask > allow.

דווקא דחייה אחת (deny) מכל שכבה חוסמת. אישור (allow) דורש הסכמה של כולם; דחייה דורשת רק וטו אחד. לכן אין צורך לשכפל כל הגבלה בכל שכבה — התוצאה המחמירה מנצחת ללא תלות במקור.

טווח חיים וסקופ

ל-hooks יש מחזורי חיים שונים בהתאם למיקום ההגדרה שלהם:

  • Hooks בהגדרות הראשיות שוהים פעילים — פעילים לכל אורך המושב.
  • Hooks של פלאגין מזוהים כשהפלאגין נטען.
  • Hooks של skill ותתי־סוכנים הם זמניים — נרשמים בעת קריאתם ומנוקים כשהם מסתיימים. זה מונע ש־hooks של מיומנות אחת יזהמו עבודה אחרת.

תת־סוכן יכול לרשום hooks בחזית ה־frontmatter שלו: למשל, מבקר קוד רשמי מאמת כל פקודת Bash לפני הריצה ומריץ lint אחרי כל עריכה. אם תרשום Stop hook בתת־סוכן, הוא יומר אוטומטית ל־SubagentStop בזמן ריצה.

הערה אבטחה אחת: תתי־סוכני פלאגין אינם תומכים ב-hooks — השדות hooks, mcpServers, ו־permissionMode ב־frontmatter של פלאגין־תת־סוכן מתעלמים, כך שתפקיד נמוך־הרשאה לא יוכל לשכתב כללי זרימה.

שימושים מעשיים

Hooks לא רק חוסמים. המקרים המעשיים המעניינים ביותר משתמשים בהם להוספת הקשר וגשר:

  • superpowers רושם Hook יחיד מסוג SessionStart שמזריק את הוראות המתודולוגיה שלו אל תוך ההקשר של המושב, כך שכל מושב מתחיל נכון — שימוש קל של "להביא את המידע הנכון בזמן הנכון".
  • claude-code-warp רושם כמה hooks (SessionStart, Stop, Notification, PermissionRequest, UserPromptSubmit, PostToolUse) כדי לתרגם אירועי מחזור חיים של Claude Code לאירועי מצב סופי בממשק הטרמינל — מה שהופך את הפרוטוקול לחוויה של השלמה/הודעת אישורים.

התבנית השנייה היא דפוס נפוץ: hooks כגשר אירועים, מסנכרנים את ביצועי Claude Code למערכת חיצונית.

מסקנה

Hooks תופסים מיקום שאי־אפשר להחליפו במערכת Claude Code: CLAUDE.md עוזר למודל להבין את הפרויקט, skill מארגן משימות מורכבות, ו‑hooks שומרים על הגבול בנקודות מפתח. הם מחליפים את ה"נקווה שהמודל יזכור" ב"ריצה דטרמיניסטית של קוד ברגע הנכון."

תנהגו בהם כמו בקוד פרודקשן, כי זה מה שהם למעשה: סקריפט עם קוד יציאה לא נכון יכול לקטוע את הזרימה, ו־Stop hook מטופל באורח לקוי עלול ללכוד את המושב בלולאה. תכננו את מסלולי השגיאה ברצינות כמו כל קוד שאתם משחררים.


מקור ראשי: A Complete Guide to Claude Code: Hooks (zhaozhiming), שמשלב את התיעוד הרשמי של ה‑hooks. ספירת האירועים (28), סוגי ה‑hook (5), וסמנטיקת קודי היציאה/מיזוג אומתו מול המדריך והוכחו מול התיעוד הרשמי בתאריך 2026-08-08.