תיעוד 45
תמיכה במסוף ופתרון בעיות
Grok Build רץ כ-TUI במסך מלא. הוא נשען על תמיכת המסוף בצבע, בלוח העתקה, בקלט מקלדת, בקלט עכבר ובתצוגת מסך מלא. מסופים, מרבבים, קונטיינרים והפעלות SSH יכולים לטפל בתכונות האלה בצורה שונה.
#אבחון ותיקון בעיות במסוף
הריצו /doctor בתוך Grok כדי לבדוק את ההפעלה הנוכחית ולראות תיקונים זמינים. אם Grok לא יכול להתחיל, הריצו grok doctor במעטפת. השתמשו ב-grok doctor --json לדוח קריא למכונה.
Doctor בודק את המסוף, המרבב, תמיכת הצבע, התנהגות המקלדת והשורה החדשה, נתיבי לוח ההעתקה, וזמינות המיקרופון כשלכידת שמע כלולה. הפקודה בתוך היישום יכולה גם לבדוק פרטים של הפעלה חיה, כמו מעקב אחרי מיקוד התראות והתנגשויות של פרופיל ארגז חול. grok doctor גם מדווח על קובץ תצורה, קובץ דרישות, או הגדרה שעוצרים את Grok מלהתחיל. /doctor בתוך הפעלה לא מריץ את הבדיקה הזו. grok doctor ו-/doctor שניהם מסמנים שורת [ui] vim_mode ישנה, או שורת [ui] simple_mode שיצאה משימוש, ב-config.toml.
דוח יכול להכיל בעיות או המלצות ועדיין לצאת בהצלחה. grok doctor --json מדווח על אותה יכולת צבע גם כשמעבירים אותו בצינור. בדיקות המיקרופון לא מתחילות הקלטה, ולכן Doctor לא יכול לזהות כשלי הרשאות ב-macOS שמופיעים רק כשקט במהלך הלכידה.
/terminal-setup, /terminal-check ו-/terminal-info נשארים כינויים ל-/doctor.
כש-Doctor מוצא הגדרת tmux לא תקינה ומפורשת, /doctor fix מפרט את התיקונים האוטומטיים הזמינים. החילו תיקון אחד עם שם בכל פעם, לדוגמה /doctor fix tmux-clipboard או grok doctor fix dcs-passthrough --yes. Doctor יכול לשמור את ארבע אפשרויות ה-tmux האלה:
terminal.tmux-clipboard:set -g set-clipboard onterminal.dcs-passthrough:set -wg allow-passthrough onterminal.tmux-extended-keys:set -g extended-keys onterminal.tmux-truecolor:set -as terminal-features ",*:RGB"
ב-tmux 3.3 ואילך, כשפרוטוקול המקלדת של Kitty לא פעיל, גם Shift+Enter, Ctrl+. ו-Ctrl+Enter ששולח עכשיו צריכים ש-tmux יידע שהמסוף שממנו מתחברים שולח מקשים מורחבים (extkeys ב-terminal-features). לרשומת ברירת המחדל xterm* של tmux זה חסר. הוסיפו שורה שהתבנית שלה תואמת את TERM של המסוף הזה, לדוגמה set -as terminal-features 'xterm*:extkeys'. לקוח קורא את terminal-features רק כשהוא מתחבר, לכן נתקו והתחברו מחדש (refresh-client לא מספיק), ואז tmux display -p '#{client_termfeatures}' אמור לכלול extkeys. ב-tmux 3.5 ואילך צריך גם set -s extended-keys-format csi-u. Doctor לא מגדיר לא את extkeys ולא את extended-keys-format. עד ש-tmux מעביר את המקשים האלה, Ctrl+Enter מאבד את ה-Ctrl שלו, ולכן כשאין שום דבר אחר בתור, הכותרת התחתונה מציעה שליחה עכשיו בתור Enter Enter.
Grok מבקש מ-tmux את מצב 2 של modifyOtherKeys ולא את מצב 1, כי מצב 1 עדיין שולח מקשים שיש להם צורת תו בקרה בתור הבתים האלה. זה מכסה את Ctrl+/ (חיפוש בלוח הבקרה) ואת Ctrl+[ ואת Ctrl+] (מעבר בין סוכנים. Ctrl+[ מגיע בתור Esc). Grok מכבה את המצב כשהוא יוצא, ובזמן שרץ עורך חיצוני ($EDITOR) או מציג ($PAGER, מתוך /transcript). מצב 2 גם מקודד את Ctrl+C ואת Ctrl+D, ולכן אם Grok נהרג בדרך שהוא לא יכול לתפוס (לדוגמה kill -9 או הורג חוסר הזיכרון), המעטפת שנשארת בחלונית הזו מקבלת אותם כרצפי מילוט: Ctrl+C מדפיס ^[[99;5u במקום לקטוע. הרצה של printf '\e[>4m' בחלונית הזו מכבה את המצב.
תיקון tmux עורך רק את התצורה הקבועה במחשב שמארח את שרת ה-tmux המושפע, כולל הפעלות מרוחקות. tmux רגיל משתמש ב-$HOME/.tmux.conf האמיתי. Byobu-tmux משתמש ב-BYOBU_CONFIG_DIR בפועל, ומסרב לנחש אם הספרייה הזו לא זמינה או לא בטוחה. Grok שומר על סיומי השורות ועל מצב הקובץ, יוצר גיבוי כשמשנה קובץ קיים, ומסרב להשמות ישירות מתנגשות או דו-משמעיות.
Grok בכוונה לא מריץ tmux source-file ולא משנה את שרת ה-tmux החי. טענו מחדש עם הפקודה המדויקת שמוצגת אחרי ההחלה, או נתקו והתחברו מחדש, ואז הריצו /doctor שוב. עד הטעינה מחדש, הממצא החי צפוי להישאר. סריקת התצורה השמרנית בודקת רק השמות גלובליות ישירות. בדקו בעצמכם קבצים שנטענים, תנאים, תוספים, והגדרת tmux שנוצרה.
#מסופים שמזוהים
Grok מזהה את מדמי המסוף האלה ממשתני סביבה:
- Apple Terminal
- Ghostty
- iTerm2
- Warp
- WezTerm
- Kitty
- Alacritty
- Rio
- Rex
- Herdr 2, ממשתנה
HC_TERMINAL_IDבחלוניות שלו (החלוניות שלו גם מדווחותTERM_PROGRAM=ghosttyאוherdr) - foot (ילידי Wayland, Linux)
- מסופים משולבים של VS Code, Cursor, Windsurf ו-Zed
- מסופי IDE של JetBrains
- Grok Desktop
- מסופים מבוססי VTE, כמו GNOME Terminal, GNOME Console ו-Tilix
- Windows Terminal
לזיהוי יש המגבלות האלה:
- בתוך tmux, משתנים שמזהים את המסוף החיצוני עשויים לא להגיע ל-Grok.
- דרך SSH, משתני מסוף רבים לא מועברים, כולל אלה של Rex ושל Herdr 2, ולכן הפעלת SSH שהחלה מחלונית של Rex או של Herdr 2 היא מסוף לא מזוהה. חלונית של ליבת Herdr 2 שרצה במחשב המרוחק עדיין מגדירה
HC_TERMINAL_ID, ולכן Grok שם מזהה את Herdr 2. - הסביבה הגלובלית של tmux משקפת את הלקוח הראשון שהתחבר לשרת, ולא בהכרח את המסוף הנוכחי.
- Herdr 2 שהתחיל מ-kitty, Alacritty, מסוף מבוסס VTE, IDE של JetBrains, Windows Terminal, או מסוף של VS Code, Cursor או Windsurf מעביר את המשתנים של המסוף הזה אל החלוניות שלו, ו-Grok מזהה אותן אז כמסוף הזה. סטטוס התוכנית עדיין מגיע אל Herdr 2. משתנים מ-Apple Terminal, מ-iTerm2 או מ-WezTerm לא משנים את הזיהוי. מסוף ש-Grok לא מזהה, ושלא מגדיר
TERM_PROGRAMמשלו, שהתחיל ממעטפת של Herdr 2, מזוהה כ-Herdr 2. כך גם Ghostty שהתחיל ממעטפת של Herdr 2, שהגדרתtermשלו מציינת מסוף אחר, כמוxterm-256color: הוא מאבד את ההתראות של Ghostty (OSC 777), את סרגל ההתקדמות שלו ואת צורות המצביע שלו.
#בעיות נפוצות ותיקונים
#צבעים נראים לא נכון או חסר truecolor
הריצו /doctor. הגדרה נתמכת במלואה מציגה color truecolor ו-themes all. אם לא, Doctor מציג את המגבלה שזוהתה ואת התיקון הרלוונטי.
בתוך tmux יש שתי שאלות נפרדות: איזה צבע Grok פולט, ואיזה צבע שורד את המרבב. שורת color עונה על הראשונה. לשנייה, כשהלקוח המחובר לא מסומן RGB, tmux כותב מחדש כל צבע של 24 סיביות לצבע הקרוב ביותר ש-terminfo של המסוף החיצוני מפרסם, והצבעים האלה יכולים להיות מעטים עד שמונה. ערכות הנושא נראות אז דהויות, אף על פי ש-color מציג truecolor. Doctor מדווח על זה בתור terminal.tmux-truecolor. טענו מחדש את תצורת ה-tmux ואז נתקו והתחברו מחדש: השרת קורא את האפשרות החדשה רק בטעינה מחדש, ולקוח מתקן את עומק הצבע שלו רק בחיבור, ולכן אף אחד משני הצעדים לבדו לא משנה דבר.
#בעיות לוח העתקה
Grok כותב דרך עד שלושה נתיבים, שמוצגים ב-/doctor תחת Clipboard:
- native: לוח ההעתקה של מערכת ההפעלה המקומית.
- tmux: מאגר ההדבקה של tmux, כש-Grok רץ בתוך tmux.
- OSC 52: רצף מילוט שיכול לחצות tmux, קונטיינרים או SSH.
#Wayland
קומפוזיטורים מודרניים של Wayland יכולים לעדכן את לוח ההעתקה בלי להשאיר את המסוף במוקד. קומפוזיטורים ישנים יותר עשויים לדרוש ש-Grok יישאר במוקד עד שמופיעה הודעת ההעתקה. Grok מציג אזהרת הפעלה כשזה חל. הריצו /doctor לסטטוס שזוהה ולצעדים.
GROK_CLIPBOARD_NO_DATA_CONTROL=1 הוא חלופה מתקדמת שמכבה את נתיב בקרת הנתונים. ההעתקות אז משתמשות בכלי לוח העתקה של שורת הפקודה.
#מתג כיבוי OSC 52
Grok פולט OSC 52 ב-Linux, בחלוניות Rex, ודרך tmux, SSH או קונטיינרים בלי תצוגה, כשהנתיב הזה מופעל. ב-Rex, OSC 52 הוא מה שמגיע ליישום Rex שמחובר ממחשב אחר. מסוף שלא מממש OSC 52 עשוי להציג את המטען המקודד כטקסט. הגדירו GROK_CLIPBOARD_NO_OSC52=1 לפני הפעלת Grok כדי לכבות את הנתיב הזה. /doctor מציג אז osc 52 off. נתיבי native ו-tmux נשארים ללא שינוי.
#בחירות X11 ב-Linux
PRIMARY ו-CLIPBOARD ב-X11 נפרדים:
- קליק אמצעי ללא שינוי קורא את PRIMARY רק כש-
DISPLAYמוגדר. תחת XWayland,xclipאוxselחייבים להיות ב-PATH. Ctrl+Vקורא את CLIPBOARD ולעולם לא חוזר ל-PRIMARY.Shift+Insertנשאר הדבקת הטקסט הנבחר של המסוף.
#SSH וטקסט נבחר
תהליך Grok מרוחק בדרך כלל לא יכול לקרוא את הבחירה של המסוף המקומי. השתמשו ב-Shift+Insert של המסוף עצמו, או החזיקו Shift בזמן קליק אמצעי, כשהמסוף משתמש במחווה הזו כדי לעקוף דיווח עכבר.
כש-Grok לא יכול לזהות את המסוף החיצוני דרך SSH, הוא צופה ש-OSC 52 יישלח, אבל מסמן את הנתיב כלא מאומת. הודעת ההעתקה אז מציינת את קובץ הגיבוי, כדי שאפשר יהיה לאחזר את הטקסט. הריצו /doctor לאפשרויות העתקה אחרות.
#Apple Terminal דרך SSH
Apple Terminal לא תומך ב-OSC 52, ולכן העתקה מרוחקת לא יכולה להגיע ללוח ההעתקה המקומי. כל העתקה עדיין נשמרת לקובץ גיבוי (~/.grok/last-copy.txt כברירת מחדל. דריסה באמצעות GROK_COPY_FILE). ההודעה מציינת את הנתיב כשהמסירה לא מאומתת, או כשלוח ההעתקה לא נגיש. אפשר גם להשתמש ב-/copy <file> או ב-/minimal.
להעברה ישירה של לוח ההעתקה, הריצו את פקודת ה-SSH מהמחשב המקומי דרך grok wrap, לדוגמה grok wrap ssh user@host. אותה פקודה יכולה לעטוף מעטפות של קונטיינר ושל pod. היא גם משחזרת מצבי מסוף אחרי חיבור שנותק.
תחת grok wrap, קישור אינטרנט שנפתח ב-Grok דרך SSH נפתח בדפדפן של המחשב המקומי. קישורי קבצים עדיין לא יכולים להיפתח דרך SSH. זה דורש ששרת ה-SSH יקבל משתני LC_* (AcceptEnv LC_*), וגרסת Grok עם התמיכה הזו בשני המחשבים. בתוך tmux מרוחק זה גם דורש tmux 3.3 או חדש יותר, ואת set -g allow-passthrough on. DISPLAY או BROWSER שמוגדרים במחשב Linux מרוחק, או BROWSER במחשב macOS, מקבלים קדימות, ולכן Grok פותח את הקישור שם. grok wrap לא מודיע ל-Grok אם העמוד נפתח, ולכן Grok אומר "Sent to your laptop" ועדיין מציג את ה-URL, בלי להעתיק אותו.
grok wrap פותח רק קישורי http ו-https, לכל היותר כקישור אחד בשנייה, רק כשהוא יכול לפתוח קישורים בעצמו (לא במחשב מרוחק בלי תצוגה), ורק כשהבקשה נושאת אסימון אקראי שהוא שם ב-LC_GROK_WRAP_OPEN. האסימון מונע מטקסט בקבצים, ביומנים ובפלט פקודות לפתוח קישורים. Grok לא מעביר אותו לפקודות שהוא מריץ, אבל כל תוכנית שרצה בשמכם במחשב המרוחק עדיין יכולה לקרוא אותו, לדוגמה מהמעטפת או מ-tmux, ולכתוב בקשה למסוף של Grok: אותה רמת אמון כמו כתיבות ללוח ההעתקה דרך OSC 52. הגדירו GROK_WRAP_OPEN_LINKS=0 במקום שבו מריצים את grok wrap כדי לכבות את זה.
חלונית tmux שומרת את האסימון שהתחילה איתו, ולכן אחרי שמתחברים מחדש דרך grok wrap חדש, הקישורים ש-Grok שולח בחלונית קיימת לא נפתחים. הוסיפו set -ga update-environment LC_GROK_WRAP_OPEN ל-~/.tmux.conf כדי שחלוניות שנוצרות אחרי ההתחברות מחדש יקבלו את האסימון החדש. בחלונית קיימת, הריצו eval "$(tmux show-environment -s LC_GROK_WRAP_OPEN)" לפני שמתחילים את Grok. אחרי שמתחברים מחדש בלי grok wrap, הריצו tmux set-environment -gu LC_GROK_WRAP_OPEN ו-unset LC_GROK_WRAP_OPEN בחלונית לפני שמתחילים את Grok, אחרת חלק מהמסופים מדפיסים את בקשות הקישורים שלו.
כשהפעלת SSH לא משתמשת ב-grok wrap, Grok מציג את העצה החד-פעמית "Run /doctor for details and fixes." העצה מפסיקה להופיע אחרי שההפעלה מופעלת דרך wrap. כבו אותה דרך /settings ← Show contextual hints ← SSH wrap, או הגדירו ssh_wrap = false תחת [ui.contextual_hints] ב-$GROK_HOME/config.toml. ההגדרה הזו לא מסתירה את ההמלצה של Doctor.
לשימוש חוזר ב-SSH, Doctor מציע את grok doctor fix ssh-wrap. הוא גם מציג את הפקודה החד-פעמית, את הקובץ שהיה משתנה, ואת המקרים שבהם יש לעקוף את הכינוי. המזהה terminal.ssh-wrap נשאר מקובל ומופיע ב-JSON.
אזהרה:
grok wrapניסיוני ועשוי לא לעבוד בכל הגדרה.
#iTerm2
iTerm2 יכול לדרוש הרשאה לגישת לוח העתקה של OSC 52. הריצו /doctor. ההמלצה terminal.iterm2-clipboard-permission מציגה את ההגדרה לבדיקה.
#מסך מלא או מסך חלופי לא מופעל
מצב control של Zellij ושל tmux יכול להגביל את המסך החלופי. Grok בדרך כלל משתמש במצב inline בסביבות האלה. הריצו /doctor כדי לראות את המצב שזוהה. אפשר להגדיר את [terminal] alt_screen ב-~/.grok/pager.toml, או להריץ grok --no-alt-screen כדי לוודא שמצב inline עובד.
#שורות נשארות ריקות אחרי ניקוי מסוף
ניקוי שהמסוף עצמו מבצע מוחק שורות בלי להודיע ל-Grok, ולכן הן נשארות ריקות עד שהתוכן שלהן משתנה. ב-iTerm2, Edit > Clear Buffer (Cmd+K) ו-Edit > Clear to Start of Selection (Cmd+L) עושים את זה. Clear to Start of Selection דורש בחירה ב-iTerm2, שנוצרת בגרירת Option או כשדיווח העכבר כבוי.
לחצו Ctrl+L כדי לצייר את המסך מחדש. הוא מצייר מחדש כששום דבר אחר במסך הזה לא משתמש ב-Ctrl+L, או כשאין לפעולה הזו מה לעשות, כמו הוספה לצ'אט כשאין בחירה, או שליחה עכשיו של משפחת VS Code כשאין מה לשלוח. כשפעולת Ctrl+L של המסך עצמו רצה, כמו בוחר הספריות של לוח הבקרה, או ציטוט בחירה אל תוך ההנחיה, המסך לא מצויר מחדש. מסכים שבדרך כלל קולטים כל מקש, כמו כרטיסים, מציגים, תיבות דו שיח, המדריך ובוחר ההפעלות של לוח הבקרה, מעבירים את Ctrl+L אלא אם הם משתמשים בו (השאלה הבאה בכרטיס, או קובץ שנמצא בסמן בתשובה לשאלה או במשוב התוכנית), ולכן הוא מצייר מחדש גם מעליהם. שדה התשובה של כרטיס ההרשאה תמיד מעביר אותו. הציור מחדש כותב מחדש כל תא בלי למחוק קודם, ולכן המסך לא מהבהב. במצב מינימלי (--minimal), Ctrl+L מצייר מחדש רק את החלק ש-Grok עדיין מצייר בתחתית המסך, ומנקה את השורות שמתחתיו, ופלט שהסתיים שהמסוף ניקה לא חוזר.
#צירופי מקשים של Zellij מפריעים ל-Grok
Zellij יכול ליירט מקשי Ctrl/Alt לפני שהם מגיעים ל-Grok. ב-Zellij 0.41 או חדש יותר, השתמשו בערכה Unlock-First (non-colliding):
- לחצו
Ctrl+o, ואזc. - פתחו Change Mode Behavior.
- בחרו Unlock-First (non-colliding).
- לחצו
Enterכדי להחיל.
לחצו Ctrl+g כשצריך את בקרי החלונית או ההפעלה של Zellij עצמו. במצב מינימלי, אם Ctrl+G עדיין לא מגיע ל-Grok, פתחו את לוח הפקודות ובחרו Edit Prompt in External Editor. זה שומר את הטיוטה הנוכחית. הקלדה של /edit-prompt מתחילה טיוטת עורך ריקה, כי הפקודה עצמה תופסת את המלחין.
#Ctrl+Enter לא מתערב ב-WezTerm
WezTerm מגיע עם פרוטוקול המקלדת של Kitty כבוי. הריצו /doctor ב-Grok. הממצא terminal.wezterm-kitty מציג את ההגדרה ואת צעד ההפעלה מחדש. דרך SSH, Doctor מציג רק את הפתרון החלופי שיכול לעבוד בהפעלה הנוכחית. Apple Terminal משתמש ב-Ctrl+O להתערבות, כי הוא לא יכול להבחין באקורד Enter עם המקש המשנה.
#Shift+Enter לא מכניס שורה חדשה ב-VS Code
מסופי VS Code, Cursor ו-Windsurf משתמשים ב-xterm.js, שקידד לא נכון חלק מהמקשים עם Shift תחת פרוטוקול המקלדת של Kitty לפני גרסה 6.1.0-beta.219. Grok שואל את המסוף לגרסה שלו בהפעלה, ומנהל משא ומתן על הפרוטוקול רק כשהוא מדווח על xterm.js 6.1.0-beta.219 או חדש יותר ומאשר שהפרוטוקול פעיל (terminal.integrated.enableKittyKeyboardProtocol, פעיל כברירת מחדל ב-VS Code הנוכחי). Shift+Enter מכניס אז שורה חדשה. Grok לא שואל ב-Windows, ולא בתוך tmux, GNU screen, Zellij או herdr (המרבב שקדם ל-Herdr 2), שמיירטים את השאילתה.
אחרת Shift+Enter יכול להגיע כאותו CR כמו Enter: עם xterm.js ישן יותר, עם ההגדרה הזו כבויה, ב-Windows או בתוך המרבבים האלה, ב-Zed, וב-VS Code שמגיעים אליו דרך SSH כש-TERM_PROGRAM לא מועבר. השתמשו ב-Alt+Enter כדי להכניס שורה חדשה. הכותרת התחתונה מציגה את זה, ו-/doctor מדווח על terminal.newline-fallback עם ההסבר שזוהה והפתרון החלופי.
#Shift+Enter לא מכניס שורה חדשה במסוף ש-Grok לא יכול לזהות
Grok מזהה את המסוף ממשתני סביבה כמו TERM_PROGRAM ו-WT_SESSION. קונטיינרים, sudo ו-SSH לעתים קרובות משמיטים אותם, ו-/doctor מציג אז terminal: Unknown. Grok לא שואל מסוף לא מזוהה על פרוטוקול המקלדת של Kitty, כי xterm.js ישן יותר (VS Code שמגיעים אליו דרך SSH) עונה כן ואז מקודד לא נכון מקשים עם Shift. השתמשו ב-Alt+Enter לשורה חדשה, או, אם ידוע שהמסוף תומך בפרוטוקול (לדוגמה Windows Terminal 1.25 או חדש יותר, kitty, WezTerm, Ghostty), הפעילו את האפשרות והפעילו מחדש את Grok:
[ui]
kitty_keyboard = "query"GROK_KITTY_KEYBOARD=query עושה את אותו דבר להפעלה אחת. Grok שואל אז את המסוף, ומפעיל את הפרוטוקול רק אם המסוף אומר שהוא תומך בו. Shift+Enter מכניס אז שורה חדשה. Windows Terminal 1.25 ואילך עונה כן, אלא אם הגדרת Allow Kitty Keyboard Protocol של הפרופיל (compatibility.kittyKeyboardMode ב-settings.json, פעילה כברירת מחדל) כבויה. ההגדרה גם מבטלת את הדילוג על Windows Terminal, ולכן היא עוזרת ברגע ש-WT_SESSION מגיע ל-Grok. היא לא משנה את הדילוגים למסופים ש-Grok יודע שמטפלים לא נכון בפרוטוקול, או למרבבים שמשמיטים אותו. לקונסולות Windows מקוריות אין דרך לשאול, ולכן ההגדרה לא עושה שם דבר. /doctor מציג שורת kitty keyboard query עם מה שהמסוף ענה.
#Cmd+Enter אינו צירוף מקשים שמפורסם לשליחה או לשורה חדשה
Cmd+Enter אינו צירוף מקשים שמפורסם לשליחה או לשורה חדשה. Grok מפרסם רק את Shift+Enter ואת Alt+Enter כשורה חדשה. טרמינלים רבים מקשרים את Cmd+Enter למסך מלא, ולכן SUPER מוחרג ממתאם השורה החדשה, ו-SUPER+Enter שנמסר אינו תואם לקישור השליחה של Enter חשוף אצל הסוכן. כש-Kitty (או פרוטוקול אחר שיכול למסור SUPER) אכן מוסר SUPER+Enter, ה-composer עדיין מכניס שורה חדשה: המקש מחמיץ את השליחה ונוחת ב-textarea, שמתייחס לכל Enter כמעבר שורה. Apple Terminal הוא נתיב מקומי נפרד: חילוץ CoreGraphics מתייחס ל-Cmd מוחזק כ-Enter עם משנה, ומכניס שורה חדשה על מה שמגיע כ-Enter חשוף. מעל SSH משנה ה-Cmd אינו מגיע אף פעם, ולכן הצירוף נראה כ-Enter חשוף ושולח.
כותרת התחתית של ה-composer מציגה את צירוף השורה החדשה שעובד כשהטיוטה אינה ריקה. מעל SSH הוא מעדיף את Alt+Enter. אפשר גם להקליד \ ואז Enter, או /ml. אל תצפו ש-Cmd+Enter יכניס שורה חדשה בהפעלה מרוחקת.
#Cmd+Up ו-Cmd+Down לא מגיעים אל Grok
Cmd+↑ ו-Cmd+↓ עוברים לתחילת ההנחיה ולסופה רק במקום שבו הטרמינל מעביר Cmd יחד עם חץ. ב-macOS, kitty מעביר אותם בתצוגת המסך המלא. במסך הראשי שלו, שבו משתמש המצב המינימלי, הוא גולל איתם במקום זאת. Ghostty (קפיצה אל ההנחיה), iTerm2 ו-Apple Terminal (היסטוריית גלילה), וטרמינלים ממשפחת VS Code שומרים אותם לעצמם. ב-Linux וב-Windows שולחן העבודה עשוי לקחת את Super+↑/↓.
Ctrl+Home ו-Ctrl+End עושים את אותו הדבר (Ctrl+Fn+←/→ במחשב נייד של Mac), אבל חלק מהטרמינלים לוקחים גם אותם. ייתכן ש-Apple Terminal צריך מיפוי של ⌃Home ו-⌃End אל \033[1;5H ו-\033[1;5F תחת Settings → Profiles → Keyboard. Windows Terminal גולל עם Ctrl+Shift+Home/End, וכך גם kitty במסך הראשי שלו, ולכן אי אפשר לבחור שם באמצעותם. טרמינלים ממשפחת VS Code ב-Windows גוללים עם Ctrl+Home/End במסך הראשי. (המצב המינימלי משתמש במסך הראשי.)
אלה מגיעים מקישורי המקשים שבברירת המחדל של כל טרמינל, לא מבדיקה על כל טרמינל, ולכן קישור ששיניתם בהגדרות הטרמינל משנה אותם.
ב-VS Code וב-Cursor ב-macOS, כדי להשתמש ב-Cmd+↑/↓ ב-Grok, הוסיפו את זה אל keybindings.json:
[
{ "key": "cmd+up", "command": "workbench.action.terminal.sendSequence",
"args": { "text": "\u001b[1;5H" }, "when": "terminalFocus" },
{ "key": "cmd+down", "command": "workbench.action.terminal.sendSequence",
"args": { "text": "\u001b[1;5F" }, "when": "terminalFocus" }
]הטרמינל שולח אז Ctrl+Home / Ctrl+End עבור Cmd+↑/↓, ב-Grok ובכל תוכנית אחרת באותו טרמינל.
#מקש עושה את הדבר הלא נכון
כדי לראות מה Grok קיבל עבור כל מקש ומה הוא עשה איתו, הפעילו את Grok עם יומן קלט:
GROK_INPUT_LOG=/tmp/grok-keys.jsonl grokGrok פותח את הקובץ בהפעלה ומוסיף שורת JSON לכל מקש, לחצן עכבר, צעד גלגלת, הדבקה ושינוי גודל, מלבד מקשי ההכתבה הקולית. בשורה יש את המקש ואת המשנים ("key": "Char('k')", "mods": "CONTROL"), את ה-view, את ה-pane (או הכרטיס או תיבת הדו שיח שלקחו את המקש), ואת ה-outcome (Changed, Unchanged, Action, או ActionThenForward) עם שם ה-action. בהפעלה, הלחיצה הראשונה על מקש לחיצה כפולה, כמו יציאה, נרשמת כ-Changed. מקש שמריץ פעולה ואז מקליד רושם שורה שנייה. אותיות שהוקלדו נרשמות כ-Char, והדבקה נרשמת רק לפי האורך שלה. הרצה מחדש או הפעלה מחדש של מצב מסך מוסיפות אחרי שורת ה-start שלהן, אבל GROK_INPUT_LOG=1 מתחיל בכל פעם קובץ חדש ~/.grok/logs/input-log-<time>-<pid>.jsonl.
jq -c 'select(.evt == "key") | {key, mods, pane, outcome, action, prompt_len}' /tmp/grok-keys.jsonlבהפעלה, /debug log מדליק או מכבה את יומני הקלט והגלילה, ו-/debug dump שומר את המקשים האחרונים אל ~/.grok/logs/input-debug-<time>.json.
#גלילת העכבר מפסיקה לעבוד
אם Grok מפסיק לקבל קלט עכבר, הפעילו מחדש דיווח עכבר בטרמינל:
- Apple Terminal: View → Allow Mouse Reporting (
Cmd+R). - iTerm2: Settings → Profiles → Terminal → Enable mouse reporting.
#הכתבה קולית לא מקליטה כלום
אחרי כ-10 שניות בלי תמליל, Grok עוצר את הלכידה ומציג “No speech was detected. Voice stopped.” עם שלבי תיקון למיקרופון. ב-macOS, הרשאת מיקרופון שנדחתה יכולה להיראות כמו שתיקה, כי ההרשאה שייכת לטרמינל שמארח את Grok. פתחו System Settings → Privacy & Security → Microphone, הפעילו את הטרמינל, והפעילו אותו מחדש. אם הגישה כבר פועלת, בדקו את התקן הקלט ואת העוצמה תחת System Settings → Sound → Input ונסו שוב.
הריצו grok doctor, או הריצו /doctor בזמן שמצב הקול פועל. מקטע Voice מציג את המיקרופון ש-Grok היה משתמש בו. אם אין התקן קלט זמין, Doctor מציג voice.no-input-device ואת השלבים הבאים. Doctor אינו יכול לזהות באופן סביל גישת מיקרופון שנדחתה ב-macOS כש-macOS מספק שתיקה.
ב-macOS, כל הכתבה משתמשת בתהליך עזר קצר חיים ללכידה, כדי שזיכרון מחסנית השמע ישוחרר כשהלכידה מסתיימת. אם ייתכן שהעזר עצמו הוא הבעיה, הגדירו GROK_VOICE_CAPTURE=inprocess כדי להשתמש בגיבוי שבתוך התהליך להשוואה.
#Byobu עם GNU screen
ל-Byobu על GNU screen יש תמיכה מוגבלת. /doctor מדווח terminal.byobu-screen ומסביר איך לעבור אל צד השרת tmux של Byobu.
#טקסט בערבית ובפרסית (RTL)
טרמינלים רבים כבר מסדרים מחדש בעצמם טקסט מימין לשמאל (טרמינלים מבוססי VTE, Terminal.app, Konsole, mlterm, ואחרים). לכן Grok Build אינו מסדר מחדש RTL כברירת מחדל.
אם ערבית או פרסית ב-scrollback (או בתוכן רשימה) נקראות הפוך, הפעילו סידור מחדש בצד היישום ב-~/.grok/pager.toml (או בהגדרות הפרויקט):
[scrollback.display]
rtl_bidi = trueההגדרה נטענת מחדש עם הגדרות המראה (אין צורך בהפעלה מחדש מלאה). אם הטקסט נראה נכון בברירת המחדל ונעשה שגוי אחרי ההפעלה הזו, כבו אותה בחזרה. הטרמינל שלכם כבר מטפל ב-bidi.
כשההגדרה פעילה:
- מסדרת מחדש שורות תוכן מלאות ב-scrollback, בתוכן רשימה, ובמציג הבלוקים במסך מלא (ובנוסף את תצוגת ההצצה של לוח הבקרה ואת החלון הקופץ של hook, שמשקפים את ה-scrollback). ה-Chrome, התפריטים הנפתחים והחלונות המודאליים נשארים לוגיים כדי שבדיקת הפגיעה שלהם תישאר עקבית.
- משאירה את עמודות טבלאות ה-markdown ללא שינוי.
- הדגשות חיפוש, בחירה והעתקה בגרירה, בחירת מילה או URL בלחיצה כפולה, ויעדי פגיעה של קישורים, כולם ממפים בין התאים המצוירים (החזותיים) לבין הטקסט הלוגי של אותה שורה, כך שההדגשות על המסך נוחתות על הגליפים הנכונים בזמן שההדבקה מלוח הגזירים נשארת בסדר לוגי.
- כיוון הבסיס נקבע לכל שורה מצוירת. המשך בגלישה רכה שמתחיל באנגלית יכול לקבל בסיס שונה מהשורה הראשונה של הפסקה.
זה אינו ממשק RTL משוקף במלואו.
#עדיין תקועים?
הריצו /feedback כדי לדווח על כך.