לכוון את קלוד קוד: hooks, כללים ומנגנוני השליטה
מאת ירון דויטשר עודכן לאחרונה:
קלוד שוכח הוראות? עושה דברים שביקשתם שלא?
מי שעובד עם קלוד קוד יומיום מכיר את שתי התסכולים: הנחיה שכתבתם ב-CLAUDE.md שקלוד מתעלם ממנה בדיוק כשזה חשוב, ופעולה שביקשתם שלא תקרה — והיא קרתה. שני התסכולים נובעים מאותה טעות: ניסינו לכוון בכלי הלא-נכון.
לקלוד קוד יש שבעה מנגנוני שליטה, וההבדל ביניהם הוא לא טעם אלא תפקיד. חלקם מספקים הקשר (מעצבים את מה שקלוד יודע ונוטה לעשות), וחלקם מספקים אכיפה (מבטיחים שמשהו יקרה או לא יקרה, בלי קשר לשיקול הדעת של המודל). כל התסכולים למעלה הם ניסיון לאכוף עם כלי של הקשר. נתחיל מהמפה.
שבעת המנגנונים במבט אחד
| מנגנון | איפה מוגדר | מתי נכנס להקשר | סמכות |
|---|---|---|---|
| CLAUDE.md | קובץ בשורש הפרויקט | בתחילת כל סשן, במלואו | הקשר |
| כללים (rules) | .claude/rules/ | תמיד, או רק בנגיעה בקבצים תואמים | הקשר |
| סקילים | .claude/skills/ | השם תמיד, הגוף רק בהפעלה | הקשר, לפי צורך |
| סוכני-משנה | .claude/agents/ | בהקשר נפרד, בהפעלה | הקשר מבודד |
| hooks | settings.json | באירוע מחזור-חיים | אכיפה |
| סגנונות פלט | .claude/output-styles/ | נטען בתחילת סשן, כחלק מהנחיות המערכת | הקשר |
| append-system-prompt | דגל בשורת הפקודה | סשן בודד, מוסף | הקשר |
שתי עמודות עושות את כל ההבדל. “מתי נכנס להקשר” הוא עלות: מה שנטען תמיד עולה טוקנים בכל שיחה, ומה שנטען לפי צורך זול. “סמכות” היא השאלה האמיתית: רק ל-hooks יש אכיפה. כל השאר מעצבים את ההתנהגות, אבל לא מבטיחים אותה.
שלושה מנגנונים שכבר יש להם בית
לשלושה מהמנגנונים כבר הקדשנו מדריך שלם, אז כאן רק המשפט שממקם כל אחד:
- CLAUDE.md: ההקשר הקבוע — פקודות, מוסכמות וגבולות שנטענים בכל שיחה. היעד הוא מתחת ל-200 שורות, כי כל שורה עולה טוקנים ומטשטשת את החשוב. הכול במדריך CLAUDE.md
- סקילים: תהליך רב-שלבי שנטען רק כשצריך אותו — נוהל פריסה, רשימת בדיקות לסקירת אבטחה. הגוף לא יושב בהקשר עד שקוראים לו. הכול במדריך הסקילים
- סוכני-משנה: עוזר שרץ בהקשר נפרד ומחזיר רק סיכום — טוב לעבודה מקבילית ולבידוד רעש. הכול במדריך סוכני-המשנה
שני המנגנונים האחרונים עובדים על הנחיות המערכת עצמן. סגנונות פלט קובעים את הטון והפורמט של כל תשובה, ויש חמישה מובנים לבחירה בפקודה /config — כולל Concise, שנוסף באוגוסט 2026 ומוריד את הקריינות שלפני העבודה. סגנון מובנה שומר על הוראות ההנדסה של קלוד קוד; סגנון שכותבים לבד מוותר עליהן כברירת מחדל, וזו המלכודת ששווה להכיר לפני שבונים אחד. append-system-prompt הוא דגל חד-פעמי בשורת הפקודה. את שני המנגנונים שבאמת חסרים באתר — כללים ו-hooks — נפרק לעומק.
כללים (rules): הקשר ממוקד-נתיב
כלל הוא קובץ markdown שיושב ב-.claude/rules/, קובץ אחד לנושא (testing.md, api-design.md). הוא נטען לצד CLAUDE.md, אבל עם יתרון אחד גדול: אפשר למקד אותו לנתיבים מסוימים דרך שדה paths ב-frontmatter, וכך הוא נכנס להקשר רק כשקלוד נוגע בקבצים תואמים.
הנה כלל שחל רק על קוד ה-API:
---
paths:
- "src/api/**/*.ts"
---
# כללי פיתוח API
- כל endpoint מאמת קלט עם Zod לפני עיבוד
- שגיאות מוחזרות בפורמט האחיד של הפרויקט
- אין קריאות ישירות ל-DB מתוך handler — דרך שכבת השירות בלבד
בלי paths, הכלל נטען תמיד — בדיוק כמו CLAUDE.md. עם paths, הוא נכנס להקשר רק כשעובדים על קבצים שתואמים לתבנית. זו הסיבה שכללים עדיפים על CLAUDE.md מקונן (nested) לאילוצים חוצי-קוד: “כל handler מאמת עם Zod” רלוונטי רק לתיקיית ה-API, אז אין צורך שיתפוס מקום בכל שיחה על ה-CSS.
שתי נקודות מהתיעוד הרשמי ששווה להכיר, נכון ליולי 2026: תבניות glob שמתחילות בכוכבית או בסוגר מסולסל חייבות מרכאות (דרישת YAML); וכלל ממוקד-נתיב נטען כשקוראים קובץ תואם, כך שאחרי דחיסת הקשר הוא עלול לרדת עד שקלוד קורא שוב קובץ כזה. לאילוץ שחייב לשרוד תמיד — עדיף CLAUDE.md בשורש.
hooks: המנגנון היחיד שאוכף
כאן מגיע ההבדל האמיתי. hook הוא קוד שרץ אוטומטית באירוע קבוע במחזור החיים של קלוד קוד — והוא רץ בלי קשר למה שהמודל החליט. זה הופך אותו למנגנון האכיפה היחיד ברשימה.
מגדירים hooks ב-settings.json (ברמת הפרויקט או המשתמש), וגם במדיניות ארגונית, ב-hooks.json של תוסף, או ב-frontmatter של סקיל או סוכן. האירועים הנפוצים: PreToolUse (לפני קריאה לכלי), PostToolUse (אחרי), UserPromptSubmit (בשליחת הודעה), SessionStart ו-Stop.
ל-hook יש חמישה סוגים, ושתי משפחות. הדטרמיניסטיים — command (מריץ פקודת מעטפת), http (שולח את אירוע ה-JSON ל-endpoint), ו-mcp_tool (קורא לכלי בשרת MCP) — עושים דבר קבוע. השיפוטיים — prompt (מודל מהיר מכריע כן/לא) ו-agent (סוכן בודק תנאי לפני החלטה, ועדיין ניסיוני) — נותנים לקלוד לשפוט. לאכיפה אמיתית רוצים דטרמיניסטי.
הנה hook מינימלי שחוסם פקודות מסוכנות לפני שהן רצות:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh"
}
]
}
]
}
}
השדה matcher מסנן לפי שם הכלי ותומך בביטויים רגולריים, למשל "Edit|Write" לתפיסת עריכה וכתיבה יחד. הסקריפט מקבל את פרטי האירוע, בודק, ומחזיר החלטה — לאשר או לחסום. התוצאה: כלל שרץ תמיד, לא כלל שקלוד מקווים שיזכור.
שימוש אחד ברשימת האירועים ראוי להדגשה נפרדת, כי הוא הופך hook ממנגנון איסור למנגנון איכות: hook על האירוע Stop מריץ את חבילת הבדיקות שלכם כסקריפט וחוסם את סיום התור עד שהיא עוברת. במקום לבקש מקלוד לבדוק את עצמו, השער פשוט לא נפתח לפני שהבדיקה ירוקה. כדי שסשן לא ייתקע לנצח, קלוד קוד גובר על ה-hook ומסיים את התור אחרי שמונה חסימות רצופות. זו הדרגה הדטרמיניסטית מתוך ארבע דרגות האימות. אפשר גם לצמצם hook כזה לסוכן יחיד דרך ה-frontmatter שלו; אצל סוכן משנה האירוע Stop מומר אוטומטית ל-SubagentStop.
האנטי-דפוסים: איפה אנשים טועים
זו הנקודה שהופכת את המדריך הזה משימושי לחיוני. שלושה דפוסים נפוצים, וכולם אותה טעות — כלי הקשר במקום כלי אכיפה:
- “תמיד תעשה X” ב-CLAUDE.md הוא באג: אם משהו צריך לקרות באופן אמין — פורמט אחרי כל עריכה, הודעה ל-Slack בסיום — הנחיה בטקסט תיכשל בדיוק תחת לחץ, כשהמודל עסוק במשהו אחר. Anthropic אומרת את זה חד: התנהגות שחייבת לקרות שייכת ל-hook, לא להנחיה
- איסור מוחלט דורש אכיפה, לא ניסוח: “אף פעם אל תמחק את התיקייה הזאת” הוא בקשה, לא מנעול. גבול אמיתי חייב להיות דטרמיניסטי, ודרכי האכיפה הן hooks, כללי הרשאות וסביבה מבודדת שנאכפת ברמת מערכת ההפעלה — לא פרומפט מנוסח היטב
- נוהל בן 30 שורות שייך לסקיל: אם דחסתם רשימת בדיקות שלמה או runbook לתוך CLAUDE.md, הוא תופח וגוזל הקשר בכל שיחה. המקום שלו הוא סקיל, שהגוף שלו נטען רק כשקוראים לו
הכלל שמאחורי שלושתם: הנחיה מעצבת נטייה, hook אוכף מציאות. כשאתם כותבים כלל והיד מתחילה להקליד “תמיד” או “אף פעם” — עצרו. זה בדיוק הרגע לעבור ממנגנון הקשר למנגנון אכיפה.
ושווה לדעת שגם מנגנוני האכיפה עצמם אינם זהים: כללי ההרשאות נבדקים לפי טקסט הפקודה לפני שהיא רצה, ואילו הבידוד נאכף על התהליך בזמן ריצה. ההבדל בין השניים הוא שקובע על מה אפשר להישען כשאף אחד אינו מסתכל.
איך יודעים שהכיוונון עצמו לא תפח?
ככל שמוסיפים מנגנונים, ההקשר מתמלא — ודווקא זה מוריד ציות. נכון ליולי 2026, הפקודה /doctor (עם הכינוי /checkup) הפכה לבדיקת בריאות שגם מתקנת: היא מוצאת סקילים, שרתי MCP ותוספים שלא בשימוש מול עלות ההקשר שלהם, מנקה כפילויות בין קובצי CLAUDE.md מקומיים למשותפים, מציעה לקצץ תוכן שקלוד יכול להסיק מהקוד לבד, ומסמנת hooks איטיים — ומבקשת אישור לפני שהיא משנה משהו. שווה להריץ אותה אחת לחודש, כדי שהכלים שנועדו לכוון לא יהפכו בעצמם לרעש.
שורה תחתונה
לכוון את קלוד קוד זה לא לכתוב הנחיות טובות יותר — זה לבחור את המנגנון הנכון למשימה. הקשר קבוע שחל על הכול? CLAUDE.md. אילוץ שרלוונטי רק לחלק מהקוד? כלל ממוקד-נתיב. נוהל רב-שלבי? סקיל. ומשהו שחייב לקרות או לא לקרות, תמיד? זה hook — ואף ניסוח יפה לא יחליף אותו.
מתחילים מהבסיס: CLAUDE.md כתוב היטב פותר את רוב הצרכים, וכשמגיעים לגבול שלו — כאן יודעים לאן לפנות. רוצים ללמוד לבנות סביבת עבודה שלמה עם קלוד קוד? הקורס עובר על הכול צעד-צעד.
שאלות נפוצות
מה זה hooks בקלוד קוד?
מנגנון שמריץ קוד משלכם אוטומטית באירועים קבועים במחזור החיים — לפני קריאה לכלי, אחרי עריכת קובץ, בתחילת סשן. בניגוד ל-CLAUDE.md שהוא הנחיה שקלוד עשוי לציית לה, hook רץ תמיד, בלי תלות בשיקול הדעת של המודל. מגדירים אותו ב-settings.json. זה הכלי לאכיפה דטרמיניסטית.
מה ההבדל בין CLAUDE.md לכללים (rules)?
שניהם הקשר, לא אכיפה — אבל נטענים אחרת. CLAUDE.md נטען במלואו בתחילת כל שיחה, תמיד. כלל (rule) יושב ב-.claude/rules/ ואפשר לצמצם אותו לנתיבים מסוימים בשדה paths, כך שהוא נכנס להקשר רק כשנוגעים בקבצים תואמים. לאילוץ שרלוונטי רק לחלק מהקוד, כלל ממוקד חוסך הקשר לעומת שורה קבועה ב-CLAUDE.md.
איך גורמים לקלוד קוד תמיד להריץ בדיקה או פורמט אחרי עריכה?
לא כותבים את זה ב-CLAUDE.md — כותבים hook. הנחיה בסגנון 'תמיד תריץ prettier אחרי עריכה' תעבוד רוב הזמן ותיכשל בדיוק כשהמודל עסוק. hook על אירוע PostToolUse רץ בכל פעם, דטרמיניסטית. הכלל: כל 'תמיד תעשה X' ששמתם ב-CLAUDE.md הוא סימן שהמקום שלו ב-hook.
איך אוסרים על קלוד קוד לעשות משהו לגמרי?
איסור מוחלט דורש אכיפה טכנית, לא ניסוח. 'אף פעם אל תמחק' בטקסט הוא בקשה שאפשר לפספס תחת לחץ. גבול אמיתי נבנה משכבות דטרמיניסטיות: מדיניות הרשאות שחוסמת פעולה, hook על PreToolUse שבודק ומונע אותה לפני שהיא קורית, ומעליהם סביבה מבודדת שמערכת ההפעלה אוכפת על התהליך עצמו.
מדריכים קשורים
- המדריך המלא לכתיבת CLAUDE.md — מסמך הנחיות לקלוד טוב, יעיל וחסכונימה זה CLAUDE.md ואיך כותבים אחד טוב בקלוד קוד (Claude Code): מדריך שלב אחר שלב, שלוש דוגמאות מלאות, ואיך בודקים שהקובץ באמת נטען.
- סקילים בקלוד קוד: ללמד את הסוכן לעבוד כמוכםמה זה סקיל (Skill) בקלוד קוד (Claude Code), במה הוא שונה מ-CLAUDE.md, איך בנוי SKILL.md, מתי סקיל עדיף על חזרה על הוראות, ואיך משתפים עם הצוות.
- ניהול הקשר בקלוד קוד: הפקודות ששומרות על שיחה חדה וזולהקלוד קוד שוכח? חוזר על טעויות? זה ההקשר, לא המודל. מדריך לניהול חלון ההקשר (Context) בקלוד קוד (Claude Code): אבחון, ניקוי, דחיסה — ומה שורד אותה.
- סוכני משנה בקלוד קוד: מתי, ואיך מגדיריםמדריך בעברית לסוכני משנה (sub-agents) בקלוד קוד: מה הם, מתי לפצל אליהם עבודה, איך מגדירים אחד בקובץ, ואיך מריצים אותם על מודל זול יותר כדי לחסוך.