סקיל שאף פעם לא הופעל עדיין יושב בקונטקסט בכל תור
מאת ירון דויטשר עודכן לאחרונה:
כמעט כל הסבר על סקילים — כולל כזה שהיה עד היום בעמוד הסקילים של האתר הזה — מסתמך על אותו משפט מרגיע: הסקיל נטען רק כשצריך אותו, ולכן אפשר להחזיק עשרות סקילים בלי לשלם על זה.
החצי הראשון נכון. החצי השני לא.
הכלל: הגוף של הסקיל באמת נטען רק בהפעלה, אבל השם והתיאור של כל סקיל מותקן נשלחים בכל תור — גם של סקילים שמעולם לא הופעלו. וכשהרשימה הזאת מתארכת מדי, קלוד קוד מתחיל למחוק ממנה תיאורים.
מה בדיוק נשלח בכל תור
התיעוד מנסח את זה בלי לרכך: כל סקיל ברשימה מוסיף לקונטקסט בכל תור, בין אם קלוד משתמש בו ובין אם לא.
הרשימה בנויה משתי שכבות, ורק אחת מהן מובטחת:
- השם של כל סקיל תמיד שם. אין לזה תקציב ואין לזה קיצור
- התיאור נכנס רק אם יש מקום. לרשימה יש תקציב תווים, והוא אחוז אחד מחלון הקונטקסט של המודל. כלומר הוא לא מספר קבוע: הוא גדל עם המודל, ומצטמצם ביחד איתו
השורה Skills בפקודה /context מציגה את הגודל אחרי שהתקציב הופעל, כלומר את
מה שהמודל באמת מקבל.
הנזק האמיתי אינו הטוקנים
אם התקציב היה פשוט מקצץ טוקנים, זו הייתה בעיה קטנה. הוא עושה משהו גרוע יותר.
כשהרשימה גולשת מהתקציב, קלוד קוד מוחק תיאורים לפי סדר השימוש — הסקילים שמפעילים הכי מעט מאבדים את התיאור שלהם ראשונים, כדי שהסקילים השחוקים ישמרו על הטקסט המלא.
התיאור הוא בדיוק המנגנון שלפיו קלוד מחליט מתי להפעיל סקיל. כשהוא נמחק או נחתך, נעלמות איתו מילות המפתח שהיו אמורות להתאים בין הבקשה לסקיל — והסקיל פשוט מפסיק להיתפס.
שווה לעצור על ההיגיון הזה, כי הוא הפוך מהאינטואיציה: הסקיל שהתקנתם לרגע נדיר וחשוב הוא בדיוק זה שיאבד את התיאור ראשון. סקיל שמריצים כל יום ישרוד; סקיל שנועד למקרה שקורה פעם בחודש ייעלם בשקט בדיוק כשיצטרכו אותו.
וזה נכשל בשקט מוחלט. אין שגיאה, אין אזהרה, ואין שום דבר במסך שאומר שקלוד לא הפעיל סקיל כי הוא כבר לא רואה למה הוא נועד.
הפקודה שמראה מי אשם
כאן נכנס החידוש: פקודה בשם /skill-doctor מציגה כמה כל סקיל עולה וכמה פעמים באמת השתמשו בו.
מה שהדוח עושה, לפי התיעוד:
- מסמן סקילים שמעולם לא הופעלו מתוך הרשימה, ואומר איפה לכבות אותם
- מציג את העלות מול השימוש לכל סקיל, כדי שההחלטה מה למחוק תהיה מבוססת
- מונה גם תוספים שלא היו בשימוש לאחרונה, לא רק סקילים
- מדלג על סקילים מובנים ועל סקילים ארגוניים — הדוח עוסק במה שבשליטתכם
בסשן רגיל הדוח נפתח בלשונית Stats במנהל /plugin. בהרצה לא-אינטראקטיבית עם -p הוא פשוט מודפס כטקסט, מה שהופך אותו לשמיש בסקריפט.
שני סייגים שכדאי לדעת מראש:
- זה לא עובד מרחוק. הרצה דרך Remote Control מהטלפון או מהדפדפן מחזירה הודעה שדוחות שימוש אינם זמינים בחיבור הזה. צריך להקליד את הפקודה בטרמינל על המכונה שהסשן רץ עליה
- צריך גרסה מספיק חדשה. התיעוד דורש 2.1.252 ומעלה, בעוד יומן השינויים רושם את הפקודה בגרסה 2.1.261 מ-4 בספטמבר. שני המקורות אינם מיישבים את הפער ביניהם, והמסקנה המעשית זהה בשני המקרים: לעדכן
מה לעשות היום
- להריץ את הפקודה על פרויקט אמיתי, לא על תיקייה ריקה. הרשימה נבנית מהסקילים של הסשן, ולכן פרויקט עם מרקטפלייס ותוספים ייתן תמונה אחרת לגמרי מפרויקט נקי
- לכבות את מה שמעולם לא הופעל. זה לא ניקיון לשם ניקיון: כל סקיל שיוצא מהרשימה מחזיר מקום לתיאורים של הסקילים שכן משמשים
- לבדוק את שורת
Skillsב-/context אחרי הניקוי. אם היא נשארה גדולה, הבעיה אינה סקיל בודד אלא כמות - לשמור תיאורים קצרים וספציפיים. תיאור ארוך אוכל מהתקציב המשותף ומקרב את הרגע שבו תיאורים אחרים נמחקים
שורה תחתונה
סקילים באמת חוסכים קונטקסט לעומת CLAUDE.md, וזה עדיין הנימוק הנכון להשתמש בהם. מה שהתחדד הוא שהחיסכון אינו אינסופי: הגוף נטען לפי דרישה, אבל כרטיס הביקור של כל סקיל משלם דמי כניסה בכל תור.
ההשלכה המעשית פשוטה. ספריית סקילים גדולה אינה חינם — היא נגבית מהיכולת של קלוד למצוא את הסקיל הנכון. מי שאסף עשרות סקילים “ליתר ביטחון” משלם על זה בדיוק במקום שהכי קשה לשים לב אליו.
התמונה המלאה על סקילים: סקילים בקלוד קוד. ומה עוד יושב בחלון בכל תור, ואיך מנקים אותו: ניהול קונטקסט בקלוד קוד.