מדריך גרוק CLI בעברית

תיעוד 37

זיכרון בין סשנים

זיכרון מאפשר לגרוק להיזכר בעובדות, בהחלטות ובתבניות מסשנים קודמים. גרוק שומר את מה שהוא לומד כהערות Markdown וקורא את הרלוונטיות בסשנים מאוחרים יותר, כך שסשן חדש יכול לעשות שימוש חוזר בהקשר.


#מהו זיכרון?

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

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

הזיכרון ניסיוני וכבוי כברירת מחדל.

#איך הזיכרון מאורגן

לזיכרון שני היקפים. זיכרון גלובלי מחזיק עובדות שחלות על כל הפרויקטים שלך. זיכרון workspace מחזיק עובדות על מאגר אחד. שכפולים ו-worktrees של אותו מאגר חולקים היקף workspace אחד.

כל היקף שומר את הידע שלו כקבצי Markdown רגילים. topics/ מחזיק הערות ערוכות, קובץ אחד לכל נושא, וזה מה שגרוק קורא בתחילת סשן. עובדות חדשות שנלכדות אחרי כל תור, כולל תור שעוצרים לפני שהוא מסתיים, מגיעות כתצפיות קטנות שמעבר איחוד מאוחר יותר (/dream) מקפל לתוך נושאים. אינדקס שנוצר וחסום בגודלו של שני ההיקפים מוזרק להקשר של המודל פעם אחת בכל סשן, כדי שהוא יוכל להחליט אילו נושאים לפתוח.

הערות במיקום הישן ~/.grok/memory/ מיובאות פעם אחת: בפעם הראשונה שנפתח workspace, כל מקטע של MEMORY.md הישן הופך לנושא, ומקטעים ששמם כבר תואם לנושא מצורפים אליו תחת כותרת "From earlier sessions". הקבצים הישנים נשארים במקום, ולא נעשה בהם שימוש אחרי זה.

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


#הפעלת זיכרון

#הגדרה (קבועה)

# ~/.grok/config.toml
[memory]
enabled = true

[memory_v2] enabled = true עובד גם. כששני המפתחות מוגדרים, [memory_v2] enabled גובר.

#משתנה סביבה

export GROK_MEMORY=1
grok

#כיבוי כפוי

כדי לכבות זיכרון לתהליך גם כש-TOML או הגדרות מרוחקות מפעילות אותו:

export GROK_MEMORY=0

#מתג באמצע סשן

אפשר להדליק או לכבות זיכרון במהלך סשן בלי הפעלה מחדש: פותחים את /memory ולוחצים t.

המתג בהיקף הסשן. הוא לא משנה את config.toml, והוא עובד בשני הכיוונים: סשן שהתחיל עם זיכרון דולק יכול לכבות אותו, וסשן שהתחיל עם [memory] enabled = false יכול להדליק אותו. סשנים חדשים עוקבים שוב אחרי config.toml. כיבוי הזיכרון מסיר את הוראות הזיכרון מפרומפט המערכת ועוצר לכידה, אבל שומר את הקבצים הקיימים על הדיסק. הדלקת הזיכרון מכינה את אחסון הזיכרון, מחזירה את הוראות הזיכרון, ומזריקה את אינדקס הזיכרון בתור הבא. הדלקת הזיכרון ממתינה שכל תור שנמצא בביצוע יסתיים.

המתג לא יכול לעקוף כיבוי כפוי לכל התהליך (--no-memory או GROK_MEMORY=0). אלה מסתירים את /memory לכל הסשן.

#סדר עדיפות

ההגדרה הראשונה שיש לה ערך היא שמחליטה:

  1. [memory_v2] enabled, ואז [memory] enabled, ב-requirements.toml.
  2. דגל ה-CLI (--no-memory מכבה את הזיכרון).
  3. GROK_MEMORY.
  4. [memory_v2] enabled ב-TOML האפקטיבי.
  5. [memory] enabled ב-TOML האפקטיבי.
  6. הגדרה מרוחקת מנוהלת.
  7. אחרת הזיכרון כבוי.

ערך false ב-requirements.toml מכבה את הזיכרון לכל התהליך. הוא גם מסתיר את /memory. ערך false מה-CLI או מ-GROK_MEMORY גם מכבה את הזיכרון לכל התהליך. ערך false ב-TOML מכבה את הזיכרון לסשנים חדשים, גם כשהגדרה מרוחקת מנוהלת מפעילה אותו, אבל מתג t של /memory עדיין יכול להדליק אותו לסשן הנוכחי.

הזיכרון נשאר כבוי כשגרוק רץ בתיקייה זמנית (לדוגמה תחת /tmp/).


#איך הזיכרון נשמר

הזיכרון נמצא תחת ~/.grok/memory-v2/:

נתיבתוכן
global/היקף גלובלי
workspaces/<project>-<hash>/היקף workspace אחד לכל מאגר

לכל היקף אותה פריסה:

נתיבתוכן
topics/הערות ערוכות, קובץ Markdown אחד לכל נושא
observations/_inbox/תצפיות חדשות שממתינות ל-Dream
MEMORY.mdאינדקס שנוצר של ההיקף. אל תערוך אותו.

כל היקף מחזיק גם קבצי מצב של גרוק עצמו (מסד נתונים SQLite, אינדקס חיפוש, ותצפיות בארכיון). השאר אותם ללא שינוי.


#לכידה אוטומטית

אחרי כל תור שהושלם, גרוק סוקר את התור ברקע ושומר עובדות חדשות כתצפיות ב-observations/_inbox/. גם תור שעוצרים מוקדם נלכד. הלכידה רצה בשקט ולא מוסיפה השהיה לתור שלך.


#המתנה ללכידה עם /flush

הלכידה רצה ברקע, כך שהתור האחרון אולי עדיין לא נשמר. השתמש ב-/flush כדי להמתין עד שכל תור שהסתיים או נעצר נלכד:

/flush

שורת הסטטוס מציגה "Flushing memory…" בזמן הריצה. כשהיא מסתיימת, ה-scrollback מדווח על התוצאה, לדוגמה "Memory flushed through turn 12".

השתמש ב-/flush כשרוצים שהעבודה האחרונה תישמר עכשיו:

  • בסוף סשן דיבוג פורה
  • לפני שסוגרים את גרוק
  • לפני שמריצים /dream

#עבודה עם זיכרון

#זכור

בקש מגרוק לזכור משהו, והוא כותב את ההערה לזיכרון:

> remember to always open PR links after pushing

גרוק יכול לערוך קובץ נושא או להוסיף תצפית. הוא כותב עובדות ספציפיות לפרויקט לזיכרון workspace, והעדפות בין פרויקטים לזיכרון גלובלי.

אפשר גם לשמור הערה ישירות עם הפקודה /remember:

/remember always open PR links after pushing

הרץ /remember בלי טקסט כדי להיכנס למצב remember, שבו השורה הבאה שתקליד הופכת להערה. בכל אחת מהדרכים, גרוק פותח לוח סקירה שמציג את ההערה (עם גרסה משוכתבת אופציונלית שאפשר להחליף עם Tab). ההערה נכתבת רק אחרי שאתה מאשר. גרוק שומר אותה כתצפית בזיכרון הגלובלי, מציג Saving memory note..., ואז Memory note saved. ה-Dream הבא מקפל אותה לתוך נושא. כשהזיכרון כבוי לסשן, /remember אומר זאת ולא שומר דבר.

#שכח

בקש מגרוק לשכוח משהו, והוא מוצא ומסיר את הרשומה התואמת:

> forget the snake_case convention

שכחה היא במיטב המאמץ: המודל עורך את הנושא או את ההערה שמחזיקה את הרשומה. להסרה מובטחת, פתח את /memory, בחר את ההערה, ולחץ x. אפשר גם לערוך את הקובץ תחת ~/.grok/memory-v2/ בעצמך. כדי למצוא את הקובץ של הערה, פתח את דפדפן /memory ולחץ y כדי להעתיק את נתיב האחסון שלה, כמו global/topics/deploys.md. global/ הוא ההיקף הגלובלי ו-repo/ הוא תיקיית workspaces/<project>-<hash>/ של המאגר. הערת inbox inbox/<id> היא הקובץ observations/_inbox/<id>.md.

#היזכרות

שאל מה גרוק זוכר:

> what do you remember?

גרוק בודק את אינדקס הזיכרון וקורא את קבצי הנושא התואמים. השתמש ב-/memory כדי לדפדף בקבצים הגולמיים.

#עריכה ישירה

אפשר לערוך או להוסיף קבצי Markdown תחת topics/ ו-observations/_inbox/ בכל אחד מההיקפים. אל תערוך את MEMORY.md. גרוק מייצר אותו מחדש. השתמש ב-/flush כדי להמתין ללכידה של הסשן הנוכחי, וב-/dream כדי לקפל תצפיות לתוך נושאים עכשיו.


#דפדוף בזיכרון עם /memory

הפקודה /memory פותחת חלון מודאלי שמציג את כל קבצי הזיכרון:

/memory

הקבצים מקובצים לפי היקף:

  • גלובלי: זיכרון בין פרויקטים.
  • Workspace: זיכרון למאגר הנוכחי.

כל היקף מציג קודם את אינדקס MEMORY.md שנוצר, אחר כך את הנושאים שלו, ואז את תצפיות ה-inbox, החדשות קודם.

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

#קיצורי מקלדת

מקשפעולה
↑/↓ או j/kמעבר ברשימת הקבצים
PgUp/PgDnקפיצה של 10 רשומות
/סינון רשימת הקבצים
Enterקריאת ההערה שנבחרה: התצוגה המקדימה מקבלת מיקוד מקלדת (חצים, PgUp/PgDn, Home/End גוללים אותה)
yהעתקת נתיב האחסון של ההערה שנבחרה, כמו global/topics/deploys.md
xמחיקת ההערה שנבחרה (לחץ x שוב לאישור)
tהדלקה או כיבוי של הזיכרון
Ctrl+Fמעבר למסך מלא
Escסגירת המודאל, או יציאה ממיקוד מסנן או תצוגה מקדימה

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

חלונית התצוגה המקדימה היא לקריאה בלבד. גלול אותה עם גלגל העכבר, בגרירת פס הגלילה, או עם המקלדת אחרי Enter. גרור על פני טקסט התצוגה המקדימה כדי להעתיק את הטקסט ללוח. הודעה קצרה מתחת לרשימת הקבצים מאשרת כל העתקה. המקטע של כל היקף מתחיל באינדקס MEMORY.md הנוכחי שלו, שאי אפשר למחוק. Dream עשוי ללמוד עובדה שנמחקה שוב מסשנים עתידיים.

כשאזור התוכן של מודאל הזיכרון מתחת ל-64 עמודות, המודאל מציג רק את רשימת הקבצים ומסתיר את עמודת הגודל. לחץ Enter כדי לקרוא את ההערה שנבחרה ברוחב מלא ו-Esc כדי לחזור לרשימה.

כשהזיכרון כבוי, המודאל מסביר למה, וכשאפשר, מציע t כדי להדליק אותו.

אפשר גם לפתוח את /memory מלוח הפקודות.


#התראות זיכרון

כששומרים הערה עם /remember, גרוק מאשר ב-scrollback:

Memory note saved

עבודה ברקע (לכידה אחרי כל תור ו-Dream אוטומטי) רצה בשקט ולא מפרסמת הודעת scrollback. /flush ו-/dream מדווחים על התוצאה שלהם ב-scrollback כשמריצים אותם בעצמך. השתמש ב-/memory בכל עת כדי לדפדף במה שגרוק שמר.


#איחוד Dream עם /dream

הפקודה /dream מקפלת תצפיות inbox לתוך נושאים:

/dream

Dream ממזג תצפיות חדשות לתוך נושאים קיימים, יוצר נושאים חדשים, ומסיר כפילויות. תצפיות שעובדו עוברות לארכיון. שורת הסטטוס מציגה "Consolidating memory…" בזמן הריצה. אחר כך ה-scrollback מדווח כמה תצפיות מוזגו לכמה נושאים, שלא היה מה לאחד, או שסשן אחר כבר מאחד. /dream דורש שהזיכרון יהיה מופעל.

#Dream אוטומטי

Dream רץ גם אוטומטית ברקע ברגע שהצטברו מספיק תצפיות inbox, או ברגע שהישנה ביותר המתינה מספיק זמן.


#איך הזיכרון משפיע על פרומפטים

כשהזיכרון דולק, פרומפט המערכת מקבל מקטע <memory>. הוא אומר למודל איפה נמצאות תיקיות הזיכרון הגלובלי ושל ה-workspace, ושהוא יכול לקרוא ולערוך קבצי Markdown תחת topics/ ו-observations/_inbox/ עם כלי הקבצים הרגילים שלו.

גרוק גם מזריק את אינדקס MEMORY.md שנוצר של שני ההיקפים פעם אחת בכל סשן (עד 8 KiB לכל היקף). האינדקס מציג כותרות נושאים ונתיבים, והנושאים שהסוכן קורא הכי הרבה מופיעים ראשונים. כשהכותרות לא נכנסות, שאר הנושאים מפורטים לפי שם קובץ. תצפיות ממתינות אינן מפורטות. המודל משתמש באינדקס כדי להחליט אילו קבצי נושא לקרוא לפני שהוא מתחיל עבודה באזור.

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


#פקודות CLI

הפקודה grok memory מנהלת זיכרון מהמעטפת. יש לה תת פקודה אחת, clear:

# Clear workspace memory for the current directory. This is the default scope.
grok memory clear

# The same scope, stated explicitly
grok memory clear --workspace

# Clear global memory
grok memory clear --global

# Clear both workspace and global memory
grok memory clear --all

# Skip the confirmation prompt (-y is the short form)
grok memory clear --yes

clear מוחק את כל תיקיית ההיקף תחת ~/.grok/memory-v2/. גרוק יוצר אותה מחדש בפעם הבאה שסשן מתחיל.

כדי לערוך זיכרון מהמעטפת, פתח את הקבצים ישירות בעורך. לדוגמה, $EDITOR ~/.grok/memory-v2/global/topics/<topic>.md.


#הפניית הגדרות

#הגדרות ליבה ([memory])

מפתחברירת מחדלתיאור
enabledfalseהפעלת זיכרון. [memory_v2] enabled גובר כששניהם מוגדרים.

#הגדרות זיכרון ([memory_v2])

מפתחברירת מחדלתיאור
enabledfalseהפעלת זיכרון

הגדרות Dream באצווה, שמירה ומגבלת טוקנים נמצאות בהפניית ההגדרות.

#הגדרות אינדקס ([memory.index])

מפתחברירת מחדלתיאור
max_chunk_chars1600גודל מקטע מרבי בתווים
chunk_overlap_chars320חפיפת תווים בין מקטעים

#הגדרות גיזום ([compaction.pruning])

מגדירים גיזום תחת [compaction], לא תחת [memory], כי זו התנהגות compaction.

מפתחברירת מחדלתיאור
enabledtrueהפעלת גיזום של תוצאות כלים
keep_last_n_turns3מספר התורים האחרונים שתוצאות הכלים שלהם לעולם לא נגזמות
soft_trim_threshold4000סף תווים שמעליו תוצאות כלים ישנות עוברות גיזום רך
soft_trim_head1500תווים שנשמרים מתחילת תוצאה בגיזום רך
soft_trim_tail1500תווים שנשמרים מסוף תוצאה בגיזום רך
hard_clear_age_turns10גיל תור שאחריו תוצאות כלים מוחלפות במציין מקום

#פתרון בעיות

#הזיכרון לא עובד

  1. ודא שהזיכרון מופעל: בדוק את הפלט של grok inspect.
  2. בדוק את GROK_MEMORY, את [memory_v2] enabled ואת [memory] enabled ב-TOML האפקטיבי.
  3. בדוק אם GROK_MEMORY=0 או --no-memory עוקפים את ההגדרה.
  4. בדוק שאינך רץ בתיקייה זמנית.

#הזיכרון לא מופיע בסשנים

אינדקס הזיכרון מוזרק פעם אחת בכל סשן. אם התחלת סשן לפני שהפעלת זיכרון, התחל סשן חדש עם /new, או הדלק זיכרון עם t ב-/memory.

#צפייה בקבצי זיכרון

השתמש ב-/memory ב-TUI כדי לדפדף בכל קבצי הזיכרון עם תצוגה מקדימה. אפשר גם לגשת אליהם ישירות:

ls ~/.grok/memory-v2/
cat ~/.grok/memory-v2/global/MEMORY.md
ls ~/.grok/memory-v2/workspaces/

#יומן דיבוג

RUST_LOG=debug GROK_LOG_FILE=/tmp/grok.log grok
grep "memory" /tmp/grok.log