Claude Code מוחק היסטוריה אחרי 30 יום: איך לשמור אותה
Markdownהיכן נשמרות הפעלות Claude Code, כיצד להגדיר את cleanupPeriodDays, וכיצד לארגן ארכיון חיצוני באמצעות rsync, launchd או cron.
קריאת המאמר המלא
לעזרה בשימוש בשירות, עיינו בתיעוד של Ailoot.
האם Claude Code באמת מוחק את היסטוריית ההפעלות שלכם?
הנקודות המרכזיות
כן. בכל פעם ש-Claude Code מופעל, הוא מוחק קובצי הפעלות שגילם עולה על 30 יום. ההגדרה cleanupPeriodDays בקובץ ~/.claude/settings.json אחראית לכך; ערך ברירת המחדל שלה הוא 30. המחיקה מתבצעת בלי אזהרה, בלי בקשת הסכמה ובלי דרך לשחזר את הקבצים.
אתם פותחים את Claude Code כדי לחזור להפעלה מלפני חודשיים — והיא איננה. הקובץ נמחק לחלוטין מהדיסק. זו אינה תקלה או באג נדיר: כך פועל מנגנון הניקוי כברירת מחדל.
הגדרה אחת שולטת בניקוי: cleanupPeriodDays. ערך ברירת המחדל שלה הוא 30. בכל פעם ש-Claude Code מופעל, הוא סורק את תיקיית ההיסטוריה ומוחק את כל מה שגילו עולה על התקופה הזאת. ההגדרה הזאת כלל לא הופיעה אצלי בקובץ ~/.claude/settings.json, ולכן חל ערך ברירת המחדל, וכמה מההפעלות הישנות שלי כבר נמחקו.
כמה דיווחי באגים בנושא פתוחים במאגר של Anthropic, ואף אחד מהם לא תוקן.
היכן Claude Code שומר את היסטוריית ההפעלות?
הנקודות המרכזיות
ההיסטוריה של כל הפעלה נשמרת ב-~/.claude/projects/<project-path>/<session-id>.jsonl. שם התיקייה הוא הנתיב המוחלט של ספריית העבודה שממנה הפעלתם את Claude Code, כשהלוכסנים מוחלפים במקפים. קובץ ה-.jsonl מכיל את השיחה כולה, שורה אחר שורה: ההנחיות שלכם, תגובות המודל, קריאות לכלים ועריכות קבצים. זהו בדיוק הזיכרון שהניקוי מוחק.
קל למצוא את ההיסטוריה. פתחו מסוף והציגו את תוכן התיקייה:
ls ~/.claude/projects/
כל תיקיית משנה היא פרויקט נפרד. השם שלה מקודד את הנתיב: למשל, פרויקט ב-/Users/alex/dev/shop הופך לתיקייה -Users-alex-dev-shop. בתוכה נמצאים קובצי ההפעלות:
ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl ← הפעלה אחת = קובץ אחד
# a91b7d40-....jsonl
כל קובץ .jsonl הוא יומן שורה אחר שורה: שורה אחת שווה לאירוע אחד בהפעלה. הוא מכיל יותר מטקסט השיחה. הוא שומר את ההיגיון מאחורי ההחלטות שלכם: למה בחרתם מבנה מסוים למסד הנתונים, אילו אפשרויות דחיתם, היכן Claude טעה ואיך תיקנתם את הטעות.
למעשה, זהו יומן הפיתוח של הפרויקט. לכן האובדן כואב: אתם מאבדים לא ״צ׳אט״, אלא הקשר שבניתם במשך שבועות. הסברתי כיצד ההקשר הזה בנוי במדריך ״Claude Memory לעומת CLAUDE.md״.
למה Anthropic מוחקת תמלילים אחרי 30 יום?
הנקודות המרכזיות
העמדה של Anthropic נוגעת לפרטיות ולאבטחה. קובצי ההפעלות נשמרים בדיסק כטקסט פשוט וייתכן שהם מכילים קוד מקור, סיסמאות ומפתחות API. שמירתם לתמיד היא סיכון: אם מחשב נייד נגנב או מישהו מקבל גישה לדיסק, הוא מקבל גישה לכל המידע הרגיש הזה. תקופת 30 הימים היא האיזון שלהם בין ״המשך עבודה שנעשתה לאחרונה״ לבין ״אי-שמירת סודות בדיסק מעבר לנדרש״.
יש היגיון מאחורי המחיקה, וכדאי להבין אותו לפני שמכבים אותה לחלוטין. תמליל הוא טקסט פשוט. אם Claude קרא קובץ .env במהלך הפעלה, הכניס מפתח לפקודה, או שהדבקתם סיסמה בהנחיה, כל אלה נשמרו בקובץ .jsonl כטקסט פשוט. ככל שקובץ כזה נשאר זמן רב יותר בדיסק, כך גדל הסיכוי שיום אחד ידלוף.
Anthropic אומרת זאת בפשטות: תמלילים עשויים להכיל קוד מקור, פרטי גישה וחומרים רגישים אחרים, והשארתם בדיסק מעבר לנדרש יוצרת סיכון ממשי לפרטיות. תקופת 30 הימים נבחרה כפשרה.
ההתנגדויות של הקהילה נוגעות לשלושה דברים: המחיקה שקטה (אין אזהרה במהלך ההגדרה או בעת ההפעלה), אין הסכמה (לא שואלים אתכם), ואין שחזור (הקבצים לא מועברים לסל האשפה ואין אפשרות לחזור לאחור). בבעיה #59248, מפתחים מבקשים דבר אחד: להפוך את הניקוי להוגן — לספק אזהרה, תקופת שחזור ותקופת ברירת מחדל פחות אגרסיבית.
למה סקריפט גיבוי עלול בעצמו לגרום למחיקה?
הנקודות המרכזיות
הניקוי קובע מה למחוק לפי זמן שינוי הקובץ (mtime). הוא אינו בודק מתי הייתה הפעילות האחרונה בפועל בהפעלה. כל תהליך שנוגע בקובץ .jsonl — סנכרון בענן, rsync, עורך או סקריפט — יכול לשנות את ה-mtime שלו כך שהפעלה חדשה תיראה מיושנת. בהפעלה הבאה של Claude Code, הוא יחשיב את ההפעלה לישנה וימחק אותה. הפרדוקס: ניסיון פזיז לגבות את ההיסטוריה בתוך התיקייה המנוהלת מאיץ את אובדנה.
זה החלק המסובך ביותר, והוא מכשיל אנשים שמנסים להגן בעצמם על הנתונים שלהם. הניקוי בודק את mtime, חותמת הזמן של השינוי האחרון בקובץ. הוא מניח שה-mtime משקף מתי עבדתם לאחרונה בהפעלה. בפועל, כל דבר יכול לשנות את ה-mtime: לקוח סנכרון של Dropbox או iCloud, הפקודה rsync, תוכנת אנטי-וירוס, תוכנת אינדוקס או סקריפט הגיבוי שלכם.
הנה המלכודת. אתם מחליטים לשמור את ההיסטוריה ומגדירים סנכרון בענן עבור ~/.claude/projects/. בשלב מסוים שירות הסנכרון כותב מחדש קובץ וקובע לו mtime של תאריך מוקדם יותר (זה יכול לקרות בשחזור מעותק בענן). Claude Code רואה קובץ ״ישן״ בעת ההפעלה ומוחק אותו. רציתם לשמור אותו, אבל האצתם את מחיקתו.
יש רק מסקנה אחת: הגיבוי חייב להישמר מחוץ ל-~/.claude/projects/. הניקוי פועל רק בתוך התיקייה הזאת. עותק שנשמר מחוץ לה נמצא מעבר להישג ידו של הניקוי. אבנה את הפתרון סביב העיקרון הזה.
איך אפשר לעצור את מחיקת ההיסטוריה עכשיו?
הנקודות המרכזיות
הגדרה אחת. פתחו את ~/.claude/settings.json והגדירו את cleanupPeriodDays למספר גדול — למשל, 3650 (עשר שנים). בפועל, כך מבטלים את המחיקה האוטומטית: שום דבר לא יהיה ישן יותר מהמגבלה. חשוב: ההגדרה מגינה רק על מה שעדיין לא נמחק. אי אפשר לשחזר היסטוריה שכבר נמחקה בניקוי. לכן הצעד הראשון הוא לפעול לפני שתאבדו הפעלה נוספת.
עוצרים את המחיקה בשלושה שלבים:
- פתחו את קובץ ההגדרות:
~/.claude/settings.json(אם הקובץ אינו קיים, צרו אותו). - הוסיפו את ההגדרה
cleanupPeriodDaysעם ערך גדול:
{
"cleanupPeriodDays": 3650
}
- שמרו את הקובץ. ההגדרה תיכנס לתוקף בפעם הבאה ש-Claude Code יופעל.
הערך 3650 פירושו עשר שנים: בפועל, המחיקה תיפסק. אם אתם רוצים להשאיר את הניקוי פעיל אבל לתת יותר זמן, הגדירו 365 (שנה אחת); אז יימחקו רק הפעלות שגילן עולה על שנה. אפשר לבדוק אם ההגדרה נקלטה באמצעות הפקודה הזאת:
grep cleanupPeriodDays ~/.claude/settings.json
הסתייגות שקל לפספס: הארכת התקופה אינה משחזרת את מה שכבר נמחק. הניקוי פועל בעת ההפעלה, וכל מה שנמחק בהרצות קודמות אבד לתמיד. לכן כדאי להגדיר זאת תחילה — כך תמנעו אובדנים עתידיים, אבל לא תחזירו את מה שכבר נמחק. אם אתם רוצים להימנע מאובדן היסטוריית Claude Code, וגם להגן על הפרויקט שלכם מפני פקודה מקרית, עיינו במדריך ״איך להגדיר את Claude Code כך שלא יפגע בפרויקט שלכם״.
היסטוריית ההפעלות שלכם היא חלק מהמוח השני של הפרויקט: היא מכילה היגיון של החלטות שלא תיעדתם בשום מקום אחר. cleanupPeriodDays שומר על הקבצים, אבל אינו הופך אותם למערכת שמאפשרת לכם למצוא את מה שאתם צריכים בעוד שישה חודשים.
איך לארכב היסטוריה אוטומטית מחוץ לתיקיית הניקוי?
הנקודות המרכזיות
העתיקו הפעלות לארכיון שמחוץ ל-~/.claude/projects/, שם הניקוי לא חל. rsync -a פשוט לתיקייה נפרדת פעם ביום עושה את העבודה: קבצים חדשים מתווספים והישנים נשארים. מכיוון שהארכיון נמצא בחוץ, לא cleanupPeriodDays ולא באג ה-mtime משפיעים עליו. בצעו אוטומציה להפעלה באמצעות launchd (ב-macOS) או cron (ב-Linux), וההיסטוריה תצטבר מעצמה.
הרעיון פשוט: תנו ל-Claude Code לעשות כרצונו בתיקייה שלו, ובמקביל שמרו ארכיון נפרד מחוץ לה. הארכיון מוגן ממנגנון הניקוי הזה, אך עדיין עלול ללכת לאיבוד בגלל כשל דיסק, מחיקה מקרית או העתקה שנכשלה. הגדירו זאת כך:
- צרו תיקיית ארכיון מחוץ לתיקייה המנוהלת:
mkdir -p ~/claude-history-archive
- העתיקו אליה את ההיסטוריה הנוכחית. הדגל
-aמשמר את המבנה ואת חותמות הזמן;--ignore-existingמשאיר קבצים שכבר הועתקו ללא שינוי:
rsync -a ~/.claude/projects/ ~/claude-history-archive/
- בצעו אוטומציה להפעלה פעם ביום. ב-macOS השתמשו ב-launchd. צרו את הקובץ
~/Library/LaunchAgents/com.example.claudearchive.plist:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.claudearchive</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/rsync</string>
<string>-a</string>
<string>/Users/YOUR_NAME/.claude/projects/</string>
<string>/Users/YOUR_NAME/claude-history-archive/</string>
</array>
<key>StartInterval</key>
<integer>86400</integer>
</dict>
</plist>
- טענו את הסוכן כדי שירוץ ברקע:
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist
ב-Linux עושים זאת באותה דרך עם שורה אחת ב-crontab (crontab -e):
0 3 * * * rsync -a ~/.claude/projects/ ~/claude-history-archive/
למה זה עובד, בשעה שסנכרון מהסעיף הקודם נכשל? הארכיון נמצא מחוץ ל-~/.claude/projects/, ולכן הניקוי כלל אינו יכול לראות אותו. ההעתקה מתבצעת בכיוון אחד (מהתיקייה הפעילה לארכיון), ואיננו נוגעים ב-mtime של הקבצים הפעילים — כך נמנע באג ה-mtime. גם אם Claude Code ימחק מחר הפעלה מהתיקייה שלו, העותק שלה יישאר בארכיון.
איך להפוך את ארכיון ההפעלות שלכם למוח שני שאפשר לחפש בו?
הנקודות המרכזיות
הכניסו את הארכיון תחת git, ותקבלו מסד נתונים עם ניהול גרסאות ויכולת חיפוש מלאה של כל ההפעלות שלכם. הפעילו git init בתיקיית הארכיון, ואז הריצו מדי יום git add -A && git commit כדי לקבל היסטוריית שינויים והגנה מפני דריסות מקריות. תוכלו לחפש בהפעלות קודמות באמצעות grep רגיל ולחלץ תוכן מובנה באמצעות jq, מכיוון ש-.jsonl הוא JSON מופרד בשורות. כך הארכיון הופך לכלי מעשי.
לא מספיק רק לצבור קבצים — צריך גם לגשת אליהם. שני שלבים יהפכו את הארכיון לכלי פעיל.
ראשית, נהלו גרסאות באמצעות git. אתחלו מאגר בתיקיית הארכיון:
cd ~/claude-history-archive
git init
git add -A && git commit -m "First snapshot of Claude Code history"
הוסיפו git add -A && git commit לאותה הפעלה יומית של rsync. עכשיו יש לכם היסטוריית גרסאות: תוכלו לראות מה נוסף ומתי, ולבטל דריסה מקרית באמצעות פקודה אחת.
שנית, חפשו. קובצי .jsonl הם JSON מופרד בשורות, ולכן אפשר להשתמש בהם בכלים מוכרים. מצאו באיזו הפעלה נדון נושא מסוים:
grep -rl "database migration" ~/claude-history-archive/
חלצו רק את הטקסט של ההנחיות שלכם מתוך הפעלה (באמצעות jq, מכיוון שמדובר ב-JSON):
jq -r 'select(.type=="user") | .message.content' session.jsonl
בשלב הזה היסטוריית ההפעלות מתחילה לשמש כמוח השני של הפרויקט: מסד נתונים שבו אפשר למצוא בתוך שניות ״איך החלטנו על זה במרץ״. לפירוט נפרד על המקום שבו ההקשר נמצא בהפעלה וכיצד לנהל אותו, עיינו במדריך ״לאן נעלמים הטוקנים ב-Claude Code״.
האם אפשר לשחזר הפעלות שכבר נמחקו?
הנקודות המרכזיות
אין שיטה מובנית. Claude Code אינו מעביר קבצים שנמחקו לסל האשפה ואינו שומר אפשרות לחזור לאחור; הקובץ נמחק לתמיד. הסיכוי היחיד הוא עותקים חיצוניים שנוצרו לפני המחיקה: תמונת Time Machine ב-macOS, היסטוריית גרסאות של OneDrive או Dropbox, או גיבוי ידני. אם אף אחד מאלה אינו קיים, ההפעלה אבודה. לכן צריך להגדיר הגנה מראש — לפני שיש משהו לאבד.
התשובה הכנה: כנראה שלא. ל-Claude Code אין תכונת שחזור, סל אשפה או יומן ביטול לתמלילים שנמחקו. הקובץ פשוט נעלם מהדיסק.
יש אפשרות אחת: גיבויי מערכת, אם הופעלו מראש:
- Time Machine ב-macOS — אם תמונת מצב תפסה את
~/.claude/projects/לפני המחיקה, תוכלו לאחזר את הקובץ מהגיבוי של התאריך הרצוי. - היסטוריית גרסאות של OneDrive / Dropbox — אם התיקייה סונכרנה כשניהול גרסאות מופעל, חפשו את הקובץ בהיסטוריית הגרסאות בענן (אבל זכרו את מלכודת ה-mtime: ייתכן שהסנכרון עצמו גרם למחיקה).
- עותקים ידניים — כל פקודת
rsync/cpשהרצתם ידנית למיקום כלשהו מחוץ לתיקייה המנוהלת.
אם אף אחת מהאפשרויות האלה לא הייתה זמינה, ההפעלה אבודה. וזה לא נדיר: למפתח שדיווח על באג במאגר של Anthropic נפגמו 26 מתוך 38 רשומות, והן ייצגו חודשים של עבודה. ההגנה האמינה היחידה היא זו שהוגדרה לפני האובדן. הגדירו היום את cleanupPeriodDays ואת הארכוב האוטומטי, כל עוד יש עדיין משהו לשמור.
איזה ערך כדאי לבחור עבור cleanupPeriodDays?
הנקודות המרכזיות
לרוב האנשים כדאי להשתמש ב-3650 (עשר שנים, מה שמבטל למעשה את המחיקה) ובארכיון חיצוני אוטומטי. השאירו את ערך ברירת המחדל 30 רק אם אינכם זקוקים להיסטוריה וחשוב לכם יותר לא לשמור סודות בדיסק. הערך 365 הוא דרך ביניים סבירה, עם ניקוי שנתי. אפשרות נוספת היא לא לכתוב היסטוריה כלל: השתמשו במשתנה הסביבה CLAUDE_CODE_SKIP_PROMPT_HISTORY או בדגל --no-session-persistence, אבל הם משרתים את המטרה ההפוכה.
יש הגדרה אחת, אבל היא עשויה לשמש לכמה מטרות. השוו בין האפשרויות ובחרו את המתאימה לשימוש שלכם:
| ערך | מה הוא עושה | למי הוא מתאים |
|---|---|---|
30 (ברירת מחדל) | מוחק הפעלות שגילן עולה על 30 יום בעת ההפעלה | אינכם זקוקים להיסטוריה; חשוב לכם יותר להימנע מאחסון מידע רגיש בדיסק |
365 | שומר היסטוריה של שנה, ואז מנקה אותה פעם בשנה | אתם זקוקים להיסטוריה עדכנית, אך לא לארכיון ללא הגבלת זמן |
3650 | מבטל למעשה את המחיקה | אתם רוצים לשמור הכול + ארכיון חיצוני (מומלץ) |
CLAUDE_CODE_SKIP_PROMPT_HISTORY | אינו כותב היסטוריה לדיסק כלל | פרטיות מרבית; אינכם זקוקים להיסטוריה כלל |
הסתייגות חשובה בנושא אבטחה: אם תגדירו 3650 ותשמרו הכול, אתם מסכימים לאחסן בדיסק תמלילים שעשויים להכיל מפתחות וקוד. זוהי פשרה מכוונת: נוחות הארכיון לעומת סיכון. צמצמו את הסיכון: שמרו את הארכיון בדיסק מוצפן (FileVault ב-macOS), אל תעלו אותו לענן ציבורי ואל תכניסו אותו למאגר git ציבורי. הכנתי מדריך נפרד על מידע שעלול לדלוף דרך Claude Code: ״אבטחת נתונים ב-Claude Code״.
מה לעשות היום: רשימת בדיקה
הנקודות המרכזיות
הצעדים האלה מצמצמים אובדן היסטוריה: האריכו שמירה באמצעות cleanupPeriodDays: 3650, העתיקו הפעלות מחוץ ל-~/.claude/projects/ ונהלו גרסאות לארכיון. רק קבצים שהועתקו בהצלחה מוגנים מהניקוי של Claude Code. תזמון יומי משאיר עד יום של שינויים אחרונים ללא ארכוב כשההרצות מצליחות; הרצות כושלות או חסרות מאריכות את הפער. עותק באותו דיסק אינו הגנה מכשל דיסק.
הגדירו הגנה שלב אחר שלב:
- הגדירו
cleanupPeriodDays: 3650בקובץ~/.claude/settings.json— עצרתם את המחיקה. - צרו את
~/claude-history-archiveמחוץ לתיקייה המנוהלת והריצו אתrsync -aהראשון. - תזמנו הפעלה יומית באמצעות launchd (ב-macOS) או cron (ב-Linux).
- אתחלו את git בארכיון והוסיפו
git add -A && git commitלאותה הפעלה. - בדקו שהארכיון נמצא בדיסק מוצפן ושאינו מסונכרן לענן ציבורי.
- בדקו שכל הרצה מתוזמנת העתיקה בהצלחה, בחנו הפעלה אחרונה שאורכבה ושחזרו מעת לעת דוגמה לתיקייה זמנית נפרדת כדי לאמת שהיא קריאה.
- אם צריך להגן גם מפני אובדן המכשיר או הדיסק, שמרו גיבוי באחסון עצמאי עם בקרות גישה מתאימות ובדקו גם את שחזורו. היסטוריית Git באותו דיסק אינה גיבוי עצמאי.
היסטוריית ההפעלות היא רק שכבה אחת של ההקשר שהופך את Claude לאמין.
הכירו את Ailoot.
פרטים נוספים
שאלות ותשובות: Claude Code מוחק היסטוריה אחרי 30 יום: איך לשמור אותה
האם ארכיון יומי מבטיח שאף הפעלה לא תלך לאיבוד?
לא. הוא מגן על קבצים שהועתקו בהצלחה מהניקוי בתיקייה המנוהלת. בהרצות יומיות מוצלחות, עד יום של שינויים אחרונים עדיין עשוי להיות חסר; הרצות כושלות מרחיבות את הפער, ועותק באותו דיסק עלול להיכשל יחד עם המקור.
איך לבדוק שהארכיון שימושי?
אשרו שהעתקות מתוזמנות מצליחות, בדקו הפעלה אחרונה שאורכבה ושחזרו מעת לעת דוגמה לתיקייה זמנית נפרדת. להגנה מפני אובדן מכשיר או דיסק בדקו גם גיבוי שמאוחסן בנפרד מהמקור.