תיעוד 29
הגדרות
גרוק קורא הגדרות מקובצי תצורה, משתני סביבה ודגלי CLI. הדף הזה מכסה את האפשרויות הנפוצות. רשימת השדות של config.toml, managed_config.toml ו-requirements.toml נמצאת ב-26-config-reference.md (מחולצת אל ~/.grok/docs/user-guide/ בהפעלה).
#סדר עדיפויות
ההגדרות נפתרות לפי העדיפות הגבוהה קודם:
- דגלי CLI (למשל
--yolo,--model,--sandbox) - משתני סביבה (למשל
XAI_API_KEY,GROK_MEMORY) requirements.toml/ MDM (נאכף על ידי הארגון; מגביל כל שכבת תצורה שמתחתיו, כולל ה-overlay)- overlay של
GROK_CONFIG/GROK_CONFIG_PATH(מעלconfig.tomlו-managed, מתחת ל-requirements.toml/ MDM) - config.toml (
~/.grok/config.toml) managed_config.toml(ברירות מחדל שנפרסות על ידי הארגון; מתחת ל-config.toml)- ברירות מחדל מובנות
בתוך שכבת קובצי התצורה, השכבות מתמזגות מהנמוכה לגבוהה: managed_config.toml ← config.toml ← overlay של GROK_CONFIG ← requirements.toml / MDM. לכן requirements.toml ו-MDM מגבילים גם את config.toml שלכם וגם את ה-overlay.
GROK_CONFIG / GROK_CONFIG_PATH (שכבה 4) הם overlays של תצורה: שכבת תצורה ממוזגת, לא משתני סביבה שקובעים ערך ישירות כמו XAI_API_KEY (שכבה 2). הם קובעים מפתחות תצורה (בכפוף לרשימת ההיתר שלמטה), ולכן יש לקרוא אותם כחלק משכבת קובצי התצורה ולא כשכבת משתני הסביבה.
#הזרקת תצורה עם GROK_CONFIG
harness או לקוח ACP שמפעיל grok agent stdio יכול להזריק הגדרות בלי לכתוב config.toml ובלי להעביר את $GROK_HOME:
GROK_CONFIG: overlay של אובייקט JSON בתוך השורה.GROK_CONFIG_PATH: overlay נוסף מקובץ (לא מחליף אתconfig.toml), קובץ JSON או TOML שנקרא לפי הסיומת שלו (.json← JSON, אחרת TOML). אם שניהם מוגדרים,GROK_CONFIGגובר.GROK_CONFIGריק נחשב כלא מוגדר, וערך פגום רושם אזהרה ונופל אלGROK_CONFIG_PATH.
ה-overlay עובר מיזוג עמוק מעל config.toml שלכם (הוא דורס רק את המפתחות שהוא קובע), ממוקם מעל שכבות המשתמש וה-managed אבל מתחת ל-requirements.toml / MDM, כך שנעילה ארגונית עדיין גוברת. בלוק פגום מתעלמים ממנו עם אזהרה. זה משקף את CODEX_CONFIG מהמתאם codex-acp (אובייקט JSON שמתמזג לתצורת הסשן). גרוק הוא ACP-native, ולכן ה-overlay חי בתוך הסוכן עצמו. הוא משפיע רק על הגדרות שנקראות מהתצורה הממוזגת, והוא אינו נתיב להעלאת הרשאות. ה-overlay מוגבל, בגישת fail-closed, לרשימת היתר של הגדרות רכות (models, features, toolset מצומצם, ו-shell_environment_policy שמוגבל לשדות הסינון שלו, שבוחרים בין שמות משתני סביבה שהמפעיל כבר שולט בהם ואינם יכולים להזריק ערך משתנה סביבה לתהליכי משנה של כלים). כל טבלה אחרת נזרקת בנקודת החנק, ולכן ה-overlay אינו יכול להפעיל פקודות, לקבוע מדיניות אימות, להפנות תעבורת רשת, להעלות אמון, או להוסיף מקור גילוי. גם בהגדרות שברשימת ההיתר, קבוצה מסוימת של שערי אבטחה קוראת את שכבות הדיסק הגולמיות ולא את ה-overlay. ה-rustdoc של ConfigLayers::env_overlay הוא הרשימה הקנונית של מה שה-overlay יכול ולא יכול להגיע אליו, ואילו שערים קוראים אותו בלי overlay. השתמשו ב-GROK_DEFAULT_SELECTED_PERMISSION לבקרת הרשאות headless. לדוגמה, כדי לקבוע את מאמץ החשיבה ברירת המחדל:
GROK_CONFIG='{"models": {"default_reasoning_effort": "high"}}' grok agent stdio#config.toml (תצורה ראשית)
מיקום: ~/.grok/config.toml. אם הקובץ חסר, גרוק משתמש בברירות המחדל המובנות, ולכן צריך להגדיר רק את הערכים שרוצים לדרוס.
#הגדרות כלליות
[cli]
auto_update = true # check for updates on launch
# channel = "stable" # stable / alpha / enterprise / other
[agent]
# name = "grok-build" # default agent on interactive `grok` (no --plan / --agent-profile)
# definition = "/path/to/agent.md" # path wins over name if both are set
[models]
default = "grok-4.5" # model used for new sessions
web_search = "grok-4.5" # model used by the web_search tool
# Optional picker allowlist (globs on catalog key or model id). Empty = unrestricted.
# A signed policy pin replaces this list (model id only) and cannot be widened from here.
# allowed_models = ["grok-4.5", "grok-4*"]
# Defaults applied to every model; a per-model [model.<id>] value always wins.
# See "Custom Models" for the per-model overrides and full details.
extra_headers = { "X-Request-Tags" = "team=example,env=prod" }
temperature = 0.7
top_p = 0.95
max_completion_tokens = 8192
max_retries = 8
inference_idle_timeout_secs = 600
subagent_rate_limit_max_attempts = 8
stream_tool_calls = true
[keys]
vim = "off" # vim keys in the scrollback, dashboard and pickers: "off" (default) | "nav"
[ui]
max_thoughts_width = 120 # max column width for reasoning display
default_selected_permission = "allow_once" # preselected row on the FIRST approval prompt
remember_tool_approvals = true # show per-command "Always allow" options on permission prompts;
# grants are remembered per project (default: true); see 22-permissions-and-safety.md
show_thinking_blocks = true # show agent thinking blocks in the TUI (default: true)
tool_call_density = "compact-all-grouped" # how much of each tool call shows: "detailed" | "compact-shells" |
# "compact-ungrouped" | "compact-grouped" | "compact-all-grouped"
# (default); also /density. See Slash Commands → /density.
page_flip_on_send = true # pin a just-sent prompt at the top of the viewport so the
# response starts on a fresh page (default: true); set false
# so sending never moves the scroll position
multiline_default = false # start sessions and the dashboard in multiline: Enter inserts
# a newline and Shift+Enter or Alt+Enter sends (default: false)
follow_up_behavior = "queue" # mid-turn follow-ups: "queue" (wait for turn end; default) or
# "steer" (plain Enter still queues visibly, then injects at the
# next tool/model safe gap). See Keyboard Shortcuts → Mid-turn.
screen_mode = "fullscreen" # default render mode: "fullscreen" | "minimal"
# (unset → fullscreen); set via /settings → Default screen mode
[features]
telemetry = false # anonymous usage telemetry
feedback = true # feedback system (default: true)
lsp_tools = false # expose the lsp tool
codebase_indexing = true # code graph indexing (default: true)
two_pass_compaction = true # prefire two-pass compaction (default: true)
remote_fetch = true # allow optional online model-catalog fetches (default: true;
# set false for firewalled/air-gapped deployments; background
# managed-config sync has its own switch: managed_config)
[session]
auto_compact_threshold_percent = 85 # auto-compact at this % of context window (default: 85)
load_envrc = true # load .envrc environment variables
[tools]
respect_gitignore = false # default: false; set true to make every tool skip gitignored files
# Optional caps on parallel media generation in a single model step.
# Per tool name. First 2×-or-more burst: discard that step and retry once.
# Any other over-cap (including a second 2× burst) keeps the first K.
# Defaults: image 8, video 4.
# Env vars GROK_MAX_PARALLEL_IMAGE_GEN_CALLS / GROK_MAX_PARALLEL_VIDEO_GEN_CALLS
# override these values (see 26-config-reference.md).
# [tools.media_gen]
# max_parallel_image_gen_calls = 8
# max_parallel_video_gen_calls = 4#סוכן ברירת מחדל
grok אינטראקטיבי משתמש ב-[agent] ב-config.toml כשלא מעבירים --plan, --ask-user או --agent-profile:
[agent]
name = "my-custom-agent"
# definition = "/path/to/agent.md" # path wins over namedefinition הוא קובץ markdown עם YAML frontmatter. name הוא סוכן מובנה או סוכן שנתגלה (~/.grok/agents/, .grok/agents/). אם הסוכן ששמו צוין חסר, גרוק משתמש ב-GROK_AGENT, ואחר כך בברירת המחדל המובנית. --agent-profile, --plan ו---ask-user עדיין דורסים את הסשן הזה.
במסלול ה-daemon, name ושם GROK_AGENT מריצים את הפרומפט וה-hooks של הסוכן הזה, עם חיפוש משורש הסשן. mcpServers: ו-model: שלו עדיין לא חלים שם. בן Task רץ בלי ה-hooks של הסוכן, בניגוד ל-shell. daemon שלא מדווח grok_session_main_agent.v1 עשוי להריץ במקום זאת את סוכן ברירת המחדל. definition שנטען, נתיב GROK_AGENT וסוכן מובנה מריצים את סוכן ברירת המחדל. קובץ סוכן של פרויקט עם שם של סוכן מובנה עדיין רץ כסוכן הפרויקט הזה. definition שנכשל בטעינה נופל אל name. בתיקייה שלא נתתם בה אמון, סוכן משתמש מריץ את סוכן ברירת המחדל כאשר קובץ פרויקט שאי אפשר לפרס נושא את שמו. --agent-profile לא טוען קובץ ומדלג על name ועל GROK_AGENT, ולכן הסשן מריץ את סוכן ברירת המחדל אלא אם הלקוח מציין אחד. סשן במחשב אחר מריץ את סוכן ברירת המחדל המובנה. רשימת שדות: 26-config-reference.md.
#הרשאה נבחרת כברירת מחדל
כשהסוכן מבקש להריץ פקודה (או לבצע פעולת כלי אחרת), תפריט האישור מדגיש שורה אחת כברירת מחדל. [ui] default_selected_permission קובע איזו שורה זו בבקשת האישור הראשונה אחרי שגרוק מתחיל.
| ערך | שורה שנבחרת מראש |
|---|---|
always_allow_all_sessions | השורה "Always allow on all sessions". |
allow_command_always | השורה "Always allow this command". |
allow_once (ברירת מחדל) | השורה "Yes" / allow-once. |
reject | שורת הדחייה. |
[ui]
default_selected_permission = "reject"אחרי שעונים ב-allow once, או ב-always allow לאותה פקודה, כלי או דומיין, הסמן הופך לדביק: כל בקשה מאוחרת יותר בוחרת מראש את אותו סוג שורה, וזה נמשך בין בקשות edit / bash / MCP ובין סשנים עד שגרוק מופעל מחדש. "No", הפעלת מצב always-approve, אישור כל העריכות לסשן, או כניסת MCP אינם נזכרים.
הערכים תואמים בלי תלות ברישיות. ערך שלא הוגדר או שלא מזוהה נופל חזרה ל-allow_once. שורת allow_command_always תמיד מוגבלת לפעולה הספציפית שמאושרת (פקודה / כלי / דומיין / edit-session), ולעולם לא אישור גלובלי של הכל: בשביל זה קיים always_allow_all_sessions. שימו לב: שורות "Always allow" לפי פקודה מופיעות כל עוד [ui] remember_tool_approvals מופעל (ברירת המחדל; הגדירו false כדי להסתיר אותן). ראו 22-permissions-and-safety.md.
אפשר גם לדרוס את זה עם GROK_DEFAULT_SELECTED_PERMISSION, וזה נוח להרצות headless או לבדיקות סוכן שלא אמורות לשנות את config.toml. סדר עדיפויות: משתנה סביבה ← config.toml ← allow_once.
#מקשי Vim
[keys] vim קובע אם קישורי מקשים בסגנון vim פעילים בscrollback, בלוח הבקרה ובבוררים. זה לא משפיע על שורת הקלט.
| ערך | התנהגות |
|---|---|
"off" (ברירת מחדל) | קישורי האותיות של vim כבויים ב-scrollback, ותו שמקלידים שם ממקד את שורת הקלט ועובר אליה. מצבי קלט מכיל את הכלל המלא. חיצים, Tab, Space, PageUp/PageDown, וכל קיצור Ctrl+letter עדיין מנווטים. Esc אינו מקש scrollback: הוא אף פעם לא מבטל תור רץ (Ctrl+C כן), ובהמתנה הוא עוקב אחרי מדיניות הניקוי / החזרה (ראו קיצורי מקלדת). |
"nav" | כל קישורי scrollback ולוח הבקרה בסגנון vim פעילים, בדיוק כפי שמפורט ב-קיצורי מקלדת. בוררים מקבלים j/k כששדה החיפוש שלהם לא פעיל. Esc יוצא מהשדה ומנקה אותו. i או / מקלידים שוב. התנהגות Esc זהה בשאר המקרים בשתי ההגדרות. |
אפשר להחליף בזמן ריצה עם /vim-mode, לקבוע עם /vim-mode nav או /vim-mode off, או לבחור מ-/settings ← Vim keys. גרוק כותב את השינוי ל-[keys] vim מיד ומחיל אותו על כל סשן pager עתידי, כולל סוכנים חדשים ותת-סוכנים באותו תהליך. אין דריסה לפי סשן: config.toml הוא מקור האמת בהפעלה הבאה. [ui] vim_mode = true ישן עדיין נקרא כ-"nav": [keys] vim תקין גובר בתוך אותו קובץ (ערך לא מזוהה נחשב כלא מוגדר), ובין קבצים השכבה הגבוהה יותר גוברת, ולכן config.toml שלכם גובר על managed_config.toml. grok doctor ו-/doctor מסמנים שורת vim_mode ישנה או שורת simple_mode שיצאה משימוש ב-config.toml שלכם.
#מצב מסך
[ui] screen_mode הוא מצב הרינדור ברירת המחדל להפעלות grok רגילות. קובעים אותו מ-/settings ← Default screen mode (נדרשת הפעלה מחדש) או עורכים את config.toml ידנית: שניהם כותבים את הקובץ. דגלי CLI (--minimal / --fullscreen) ופקודות סלאש (/minimal / /fullscreen) מוגבלים לסשן ואינם כותבים את המפתח הזה. אחרי החלפה בפקודת סלאש, הפקודה ההפוכה מחזירה אתכם לאותו סשן בלבד.
| ערך | התנהגות |
|---|---|
| לא מוגדר | ההגדרות מציגות Fullscreen. אין העדפה דביקה בהפעלה: pager.toml ישן עם [terminal] minimal עדיין יכול לכפות minimal, ומסופים שדולפים דיווחי עכבר (JediTerm/Windows) עשויים להיפתח אוטומטית ב-minimal עד שקובעים ערך מפורש. אחרת מדיניות ה-alt-screen בוחרת בין fullscreen ל-inline. |
"fullscreen" | לא-minimal דביק. הבחירה בין fullscreen ל-inline עדיין עוקבת אחרי מדיניות ה-alt-screen (--no-alt-screen, [terminal] alt_screen, זיהוי אוטומטי של המסוף). |
"minimal" | מצב minimal דביק (מקורי ל-scrollback). |
דגל CLI תמיד גובר על ערך התצורה לאותה הפעלה.
#הצמדת הפרומפט לראש בעת שליחה
כברירת מחדל, שליחת פרומפט גוללת אותו לראש אזור התצוגה כך שהתשובה מתחילה בעמוד חדש. הגדירו [ui] page_flip_on_send = false (או החליפו את Snap prompt to top on send ב-/settings ← Appearance) כדי להשאיר את מיקום הגלילה כמו שהוא בשליחה. זה נכנס לתוקף בשליחה הבאה, בלי הפעלה מחדש.
#גלילה
ארבע הגדרות [ui] מכוונות גלילה של גלגל עכבר ומשטח מגע. כולן חלות מיד ואפשר לערוך אותן מחלונית ההגדרות (/settings ← Scroll speed / Scroll input / Scroll lines / Invert scroll).
| מפתח | ערכים (ברירת מחדל) | התנהגות |
|---|---|---|
scroll_speed | 1 עד 100 (50) | מכפיל מהירות לגלגל ולמשטח מגע. 50 = 1.0x, 1 = 0.1x, 100 = 6.0x. |
scroll_mode | auto | wheel | trackpad (auto) | זיהוי גלגל מול משטח מגע הוא היוריסטי (אירועי גלילה של המסוף לא נושאים עוצמה). כפו אחד כשהזיהוי האוטומטי קורא לא נכון את המכשיר, למשל חריץ גלגל שקופץ רחוק מדי, או משטח מגע שמרגיש מדורג. |
scroll_lines | 1 עד 10 (לא מוגדר) | שורות לכל תקתוק גלילה, חל על שניהם: גלגל ומשטח מגע. כשלא מוגדר, הפרופיל של כל מסוף חל בעצמו (למשל שורה אחת שמרנית לאירוע תחת tmux). קביעת כל ערך, גם 3, המספר שחלונית ההגדרות מציגה, עוברת לצמיתות לדריסה המפורשת הזו. |
invert_scroll | false | true (false) | היפוך כיוון הגלילה האנכית (גלילה "natural"). |
[ui]
scroll_speed = 50
scroll_mode = "auto" # auto | wheel | trackpad
invert_scroll = false
# scroll_lines is unset by default: the per-terminal profile stays in charge.
# scroll_lines = 3לכל הגדרה יש גם דריסה במשתנה סביבה, שחלה רק בטעינה הראשונה (שוב, נוח להרצות headless / בדיקות): GROK_SCROLL_SPEED, GROK_SCROLL_MODE, GROK_INVERT_SCROLL (1/true/0/false), ו-GROK_SCROLL_LINES. סדר עדיפויות: משתנה סביבה ← config.toml ← ברירת מחדל. ערכים לא מזוהים נופלים חזרה לברירת המחדל, ומספרים מחוץ לטווח נצמדים לגבול.
#הגדרת כלים
[toolset.bash]
timeout_secs = 120.0 # foreground command timeout in seconds (default: 120)
output_byte_limit = 20000 # max captured output in bytes (default: 20000)
[toolset.ask_user_question]
timeout_enabled = true # false = wait forever for answers (default: true)
timeout_secs = 1800 # seconds to wait when enabled (default: 1800 / 30 min)
[toolset.web_fetch]
proxy_endpoint = "https://proxy.example.com" # egress proxy URL
allowed_domains = ["docs.rs", "x.ai"] # override the built-in allowlist
allow_local = false # true = allow localhost / 127.0.0.0/8 / ::1 only
[toolset.web_search]
# Restrict web_search to these domains (max 5). Mutually exclusive with excluded_domains.
allowed_domains = ["docs.x.ai", "arxiv.org"]
# ...or block these domains instead (leave allowed_domains unset):
# excluded_domains = ["reddit.com", "pinterest.com"]allow_local כבוי כברירת מחדל (SSRF fail-closed). הפעילו אותו (או הגדירו GROK_WEB_FETCH_ALLOW_LOCAL=1) ו-web_fetch יוכל להגיע רק למארחי loopback מפורשים. טווחי private, link-local ו-cloud-metadata נשארים חסומים. סדר הכרעה: TOML > env > ברירת מחדל כבוי.
[toolset.web_search] מגביל את הדומיינים של הכלי web_search: רשימת ההיתר או רשימת החסימה שהחיפוש עצמו רץ תחתיה (לא סינון לאחר מעשה). allowed_domains ו-excluded_domains הם מוציאים זה את זה. אם מגדירים את שניהם, רשימת ההיתר מנצחת ורשימת החסימה נזרקת עם אזהרה. רשימה ריקה או חסרה אינה מוגבלת. זה חל גם על החיפוש שמתארח בצד השרת (מודלים עם חיפוש בצד השרת) וגם על הגיבוי בצד הלקוח. מדיניות מוגדרת היא סמכותית: המודל לא יכול לעקוף אותה. ה-allowed_domains של המודל לכל קריאה מתעלמים ממנו בכל פעם שהגדרתם כאן allowed_domains או excluded_domains (כך שרשימת חסימה היא חסימה אמיתית). רשימת ההיתר של המודל לכל קריאה חלה רק כשלא הגדרתם כלום. סדר הכרעה: requirements, ואז config.toml של המשתמש, ואז managed, ואז ברירת מחדל (לא מוגדר). התצורה נקראת בתחילת הסשן, לכן ערכו אותה לפני שמתחילים סשן. שינויים לא חלים באמצע סשן.
[toolset.ask_user_question] מכובד ב-requirements.toml, ב-managed config וב-config.toml של המשתמש. קדימות: requirements, ואז env (GROK_ASK_USER_QUESTION_TIMEOUT_ENABLED / GROK_ASK_USER_QUESTION_TIMEOUT_SECS), ואז תצורת המשתמש, ואז managed, ואז ברירות מחדל. הגדירו timeout_enabled = false בתצורת המשתמש כדי לבטל לעצמכם את פסק הזמן האוטומטי של השאלון. timeout_secs חייב להיות מספר שלם חיובי. אפשר גם להחליף את timeout_enabled מ-/settings ואז Ask-Question timeout (תחת Agent & Approval). השינויים חלים על סשנים שמתחילים מחדש.
#אימות
ראו Authentication לסיפור המלא.
[auth]
auth_provider_command = "/usr/local/bin/my-auth-provider"
auth_provider_label = "Acme Corp"
auth_token_ttl = 3600
[grok_com_config.oidc]
issuer = "https://acme.okta.com"
client_id = "0oa1b2c3d4e5f6g7h8i9"
# scopes = ["openid", "profile", "email", "offline_access", "api:access"]
# audience = "https://api.acme.com"#מודלים מותאמים
הוסיפו נקודות קצה של מודלים מותאמים כדי להשתמש בספקים חלופיים או במודלים שמאוחסנים אצלכם.
[model.my-model]
model = "model-id" # model identifier sent to API
base_url = "https://api.example.com/v1" # OpenAI-compatible endpoint
name = "Display Name" # shown in model picker
description = "Model description" # optional
api_key = "sk-..." # API key for this provider
env_key = "XAI_API_KEY" # env var(s) holding the API key; string or array (first set, non-empty wins)
temperature = 0.7 # sampling temperature (0.0-2.0)
top_p = 0.95 # nucleus sampling parameter
max_completion_tokens = 8192 # max tokens per response
context_window = 128000 # context window size (for auto-compact)
query_params = { api-version = "2026-07-22" } # query params appended to every request URL
env_http_headers = { "X-Tenant" = "TENANT_TOKEN" } # request headers from env vars, resolved at client buildהכרעת אישורים: api_key > env_key > אסימון הסשן המחובר > XAI_API_KEY. ראו Custom Models עבור query_params ו-env_http_headers, ו-Sandbox Mode עבור [shell_environment_policy], שמגביל את משתני הסביבה שתהליכי משנה של כלים יורשים.
כדי לדרוס מודל מובנה, השתמשו במזהה שלו כמפתח הסעיף והגדירו רק את השדות שאתם צריכים. צטטו מזהה שמכיל נקודה: TOML קורא את [model.grok-4.6] כטבלה 6 בתוך מודל עם המזהה grok-4, ולכן השדות שלו לעולם לא מגיעים ל-grok-4.6 (ראו TOML keys).
[model."grok-4.6"]
api_key = "my-api-key"#שרתי MCP
הגדירו שילובי כלים חיצוניים מעל Model Context Protocol.
[mcp_servers.github]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = { GITHUB_PERSONAL_ACCESS_TOKEN = "ghp_xxx" }
enabled = true # enable/disable (default: true)
startup_timeout_sec = 30 # init timeout in seconds (default: 30)
tool_timeout_sec = 6000 # tool call timeout in seconds (default: 6000)
tool_timeouts = { create_issue = 120 } # per-tool timeout overrides
[mcp_servers.postgres]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:pass@localhost/db"]
[mcp_servers.my-streamable-server]
url = "https://mcp.example.com/api/mcp" # HTTP/SSE transport
headers = { "x-mcp-session-id" = "{{session_id}}" }שרתים מרוחקים (HTTP/SSE) מקבלים כברירת מחדל כותרת User-Agent: grok-cli/<version>. רשומת User-Agent תקינה ב-headers דורסת אותה (שרתי Figma מקבלים grok-cli בלבד). ראו MCP servers לפרטים.
אפשר להגדיר שרתי MCP גם לכל פרויקט ב-.grok/config.toml. תצורה בהיקף פרויקט תורמת את [mcp_servers], את [plugins] וכללי [permission]. כל סעיף אחר נטען רק מ-~/.grok/config.toml.
קדימות עבור [mcp_servers] ו-[plugins]: .grok/config.toml (הספרייה הנוכחית) > <repo-root>/.grok/config.toml > ~/.grok/config.toml, למעט ששרת MCP שהתחבורה שלו או enabled = false מגיעים מ-requirements.toml / MDM שומר על הגדרת הארגון. כללי [permission] לא נדרסים לפי קדימות. הם מתמזגים מכל הקבצים עם deny > ask > allow (ראו 22-permissions-and-safety.md).
#זיכרון
שמרו ידע בין סשנים. הפעילו עם [memory] enabled = true, עם [memory_v2] enabled = true, או עם GROK_MEMORY=1. false מפורש ב-TOML מכבה אותו גם כשהגדרה מרוחקת מנוהלת מפעילה אותו. הערות במיקום הישן ~/.grok/memory/ מיובאות פעם אחת ואז נשארות ללא שימוש. ראו 13-memory.md.
[memory]
enabled = true#תת-סוכנים
[subagents]
enabled = true
sampling_limit = 12 # concurrent in-flight subagent sampling calls per process; defaults to max_concurrent (32) when unset (GROK_SUBAGENT_SAMPLING_LIMIT)
[subagents.toggle]
explore = true # enable/disable specific types
plan = false
[subagents.models]
explore = "grok-4.6" # route to different modelsכדי לקבע את המודל שתת-סוכן משתמש בו, הגדירו את הרשומה שלו תחת [subagents.models].
#מצב יעד ותהליכי עבודה ברקע
ל-/goal יש שני מניעים, שנבחרים לפי הגדרת תהליכי העבודה ברקע. כשתהליכי עבודה מופעלים, מנוע תהליכי העבודה שבבעלות המארח מעריך סבבים ומניע אימות השלמה. כשהם כבויים, /goal חוזר לכלי update_goal הישן שפונה למודל. האם /goal זמין בכלל הוא מתג נפרד (הגדרת תכונת היעד).
תהליכי עבודה ברקע, כלי workflow של המודל במסלול המעטפת, כלי Execute שלו במסלול ה-daemon, סקריפטים בשם .grok/workflows/*.rhai במסלול המעטפת, מודולי JavaScript ב-.grok/workflows/*.js במסלול ה-daemon (ראו Workflows on the daemon route), הפעלות /deep-research והפעלות /workflow, פועלים כברירת מחדל. מבטלים עם תצורה, env או הגדרות מרוחקות.
[workflows]
enabled = false # disable background workflows (or GROK_WORKFLOWS=0)תהליכי עבודה של פרויקט מתגלים מ-<repo-root>/.grok/workflows/. תהליכי עבודה של משתמש מ-~/.grok/workflows/. גילוי והפעלה מבוססים על meta.name של הסקריפט במסלול המעטפת ועל name ב-front matter במסלול ה-daemon, לכן שמרו על יישור שם הקובץ עם השם הזה. מובנים מנצחים שמות של פרויקט, ושמות של פרויקט מנצחים שמות של משתמש, לכן שמרו על שמות ייחודיים בין היקפים.
במסלול המעטפת, כל הפעלה מקבלת ידית תצוגה ייחודית לסשן, כגון deep-research-2. הידית הזו היא מה שרואים בלוח /workflow runs ומעבירים ל-/workflow pause, ל-resume או ל-stop. מזהי הריצה הפנימיים אף פעם לא מופיעים בפקודות. ידית ממוספרת אינה שם הגדרה לשימוש חוזר, ולכן הלוח מבטל את save עד שבוחרים meta.name ייחודי חדש ושומרים את הסקריפט הערוך בעצמכם. ראו Slash Commands לדוגמאות.
#מיומנויות
[skills]
paths = ["~/my-team-skills"] # additional directories to scan
ignore = ["~/my-team-skills/wip"] # paths to exclude
disabled = ["wip-skill"] # skill names to keep listed but inactive#תאימות רתמה
שולטים בתאימות ספקים עבור Cursor, Claude ו-Codex. כל תא ברירת המחדל שלו היא true. תאי סשן נשארים מוכנים ולא פעילים עד שסורק סשנים זרים צורך אותם, וכל כלי צריך גם את תא sessions שלו וגם את המיומנות התואמת resume-claude, resume-codex או resume-cursor. מיומנות חסרה פירושה אפס קלט ופלט של מערכת קבצים לסשן זר.
[compat.cursor]
skills = true # scan ~/.cursor/skills/ and <cwd>/.cursor/skills/
rules = true # scan ~/.cursor/rules/ and <dir>/.cursor/rules/
agents = true # scan ~/.cursor/ for named instruction files
mcps = true # scan ~/.cursor/mcp.json and <cwd>/.cursor/mcp.json
hooks = true # scan ~/.cursor/hooks.json and <cwd>/.cursor/hooks.json
sessions = true # staged; no scanner consumer yet
[compat.claude]
skills = true # scan ~/.claude/skills/ and <cwd>/.claude/skills/
rules = true # scan ~/.claude/rules/ and <dir>/.claude/rules/
agents = true # scan ~/.claude/ and <dir>/.claude/CLAUDE*.md
mcps = true # scan ~/.claude.json for MCP servers
hooks = true # scan ~/.claude/settings.json for hooks
sessions = true # staged; no scanner consumer yet
[compat.codex]
sessions = true # staged; no scanner consumer yetהתאים skills, rules, agents, mcps ו-hooks של Codex שמורים וכרגע אינם פעילים. הם לא מפעילים גילוי של .codex.
עבור Claude ו-Cursor, rules ו-agents עצמאיים: כיבוי קבצי הוראות בשם לא מבטל את ספריית הכללים בבית או בפרויקט, וכיבוי כללים לא מבטל קבצים בשם. תא agents של Claude שולט בקבצים בשם ברמת הבית ~/.claude/ ובפרויקט <dir>/.claude/CLAUDE*.md. Claude.md, CLAUDE.md ו-CLAUDE.local.md כלליים ברמה העליונה נשארים מזוהים. נתיבי כללי פרויקט נסרקים בכל ספרייה משורש המאגר ועד הנוכחית.
אפשר להגדיר כל תא דרך משתנה סביבה או config.toml. שורות compat במדריך התצורה מפרטות את השמות. סדר הכרעה: משתנה סביבה > config.toml > ברירת מחדל (פועל).
grok inspect מדווח על תאים שעדיין צריכים הכרעה בתחילת סשן כ-? עד שערך זמין. תאים עם ערך env או TOML מפורש משתמשים בערך הזה. רשומות גילוי מושפעות מדווחות compatibilityStatus: "unresolved" ב-JSON ו-[compat unresolved] בפלט אנושי.
#תוספים
[plugins]
paths = ["~/my-plugins/custom-tools"]
disabled = ["user/a1b2c3d4/noisy-plugin"]#רמזים
[hints] מחזיק העדפות ממשק קטנות שנשמרות: תשובות שנזכרו ופריסת מודאל. Grok כותב אותן עבורכם בזמן השימוש ב-TUI, אבל אפשר לערוך או למחוק אותן ידנית. הסרת מפתח מחזירה את ברירת המחדל.
[hints] נקרא מ-מיזוג התצורה האפקטיבי, עם הקדימות הרגילה: system managed, ואז managed_config.toml של המשתמש, ואז config.toml של המשתמש, ואז requirements.toml של המשתמש, ואז requirements.toml של המערכת, כשהשכבות הגבוהות יותר מנצחות. ה-TUI כותב אותן רק ל-~/.grok/config.toml של המשתמש.
[hints]
memory_modal_fullscreen = false # remember the memory modal fullscreen state
new_session_worktree_mode = "never" # /new worktree prompt: "ask" | "always" | "never"
fork_worktree_mode = "ask" # /fork worktree prompt: "ask" | "always" | "never"| מפתח | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
memory_modal_fullscreen | bool | false | זוכר אם מודאל הזיכרון נפתח לאחרונה במסך מלא. |
new_session_worktree_mode | string | "never" | הנחיית worktree עבור /new: ask מציג את החלון, always יוצר worktree, never מדלג. |
fork_worktree_mode | string | "ask" | הנחיית worktree עבור /fork: ask, always או never. |
#התראות
שולחים התראות בטרמינל כשהסוכן מסיים תור או צריך אישור. הן משתמשות בפרוטוקולים מובנים של הטרמינל (OSC 9, OSC 99, OSC 777, או BEL), ומוגבלות לפי מיקוד כברירת מחדל, כך שהן נשלחות רק כשלא מסתכלים על הטרמינל.
[ui.notifications]
method = "auto" # auto|osc9|osc99|osc777|bel|none
condition = "unfocused" # unfocused|always|never
idle_threshold_secs = 3 # seconds unfocused before a notification fires
events = ["turn_complete", "approval_required"]
sleep_prevention = true # prevent display sleep during agent turns
progress_bar = true # show tab progress bar (OSC 9;4)
program_status = "auto" # report agent state to the terminal (OSC 7501): auto|on|off
[ui.notifications.title]
enabled = true
items = ["action-required", "spinner", "activity", "session-name", "grok"]| אפשרות | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
method | string | "auto" | פרוטוקול ההתראה. auto בוחר את המתאים ביותר לטרמינל שלך. |
condition | string | "unfocused" | מתי להודיע: unfocused (רק כשהטרמינל איבד מיקוד), always, או never. |
idle_threshold_secs | integer | 3 | מינימום שניות בלי מיקוד לפני שהתראה נשלחת. |
events | array | ["turn_complete", "approval_required"] | אירועים שמפעילים התראות. אפשרויות: turn_complete, approval_required, session_ready, task_complete, agent_error. |
sleep_prevention | bool | true | שומר על התצוגה ערה בזמן שהסוכן עובד (macOS/Linux). |
progress_bar | bool | true | מציג מחוון התקדמות בלשונית הטרמינל (OSC 9;4). |
program_status | string או table | "auto" | מדווח על מצב הסוכן עם OSC 7501: auto (כשהטרמינל תומך בזה), on (כל טרמינל), או off. טבלה גם מגדירה את query ואת children. ראה למטה. |
title.enabled | bool | true | מגדיר את כותרת הטרמינל כך שתשקף את מצב הסוכן. |
title.items | array | (ראה למעלה) | פריטים שמוצגים בשורת הכותרת. אפשרויות: action-required, spinner, activity, session-name, cwd, model, turn-timer, grok. |
#מצב תוכנית (OSC 7501)
בטרמינלים שתומכים בפרוטוקול מצב התוכנית, כמו Rex, גרוק מדווח אם הוא עובד, ממתין לך (אישור, שאלה, או כניסה), סיים, או נכשל, ומסיר את הדיווח כשהוא יוצא. הדיווחים שלו קוראים לתוכנית grok.
תור שממתין לפקודת רקע או לסוכן משנה, או לשינה, עדיין מדווח שהוא עובד, עם מה שהוא ממתין לו. אחרי שתור מסתיים, גרוק ממשיך לדווח שהוא עובד כל עוד סוכני משנה, תהליכי עבודה, או פקודות שהוא מצפה שיסתיימו עדיין רצים: פקודה שחרגה מההמתנה שלה, או פקודה שהעברת לרקע. פקודה שמסתיימת ומעירה את הסוכן מורידה את הספירה מיד, אבל הדיווח אומר "Working", או מציין את העבודה האחרת שעדיין רצה, עד שהתור שמטפל בזה מתחיל. גם התור הזה מדווח שהוא עובד. תור שנכשל מדווח על השגיאה שלו מיד, והיא נשארת עד שראית אותה. כשנשארת רק עבודה שעשויה לרוץ לצמיתות (פקודה שהסוכן התחיל ברקע, מוניטור, לולאה מתוזמנת), גרוק מדווח idle אחרי שראית את תוצאת התור. בכל מקרה הדיווח סופר את מה שעדיין רץ בניסוח של שורת "still running" של גרוק עצמו, למשל "2 commands · 1 subagent still running".
עם auto, גרוק מדווח כשהטרמינל עונה לשאילתת התמיכה של הפרוטוקול בהפעלה. גרוק שולח את השאילתה רק במקום שבו הוא כבר שואל את הטרמינל לגרסה שלו (טרמינלים לא מזוהים וכמה ידועים, לא בתוך tmux). במקום שבו השאילתה לא יכולה לרוץ, גרוק נשען במקום זאת על המשתנים REX_SESSION ו-REX_BLOCK של Rex, או על HC_TERMINAL_ID של Herdr 2 בחלונית Herdr 2. טרמינל שהופעל מתוך מעטפת של Rex או Herdr 2 יורש את המשתנים האלה ומקבל גם את הדיווחים. הוא מתעלם מהם. אם אין מענה לשאילתה, auto נשאר כבוי. הגדר program_status = "on" כדי לדווח בכל זאת, למשל דרך SSH אל tmux מרוחק. בתוך tmux הדיווח דורש tmux 3.3 או חדש יותר ו-set -g allow-passthrough on (all מכסה גם חלונות ברקע). tmux מגדיר TERM_PROGRAM משלו, כך שבתוך tmux בחלונית Herdr 2 גרוק כבר לא רואה את החלונית ו-auto נשאר כבוי. הגדר שם program_status = "on". המשתנים של Rex מגיעים ל-tmux, כך ש-tmux בחלונית Rex עדיין מדווח תחת auto. כל חלוניות גרוק בתוך לקוח tmux אחד חולקות רשומת Rex אחת, כך שהחלונית האחרונה שמדווחת גוברת והראשונה שיוצאת מנקה אותה.
program_status מקבל מחרוזת מצב, כמו program_status = "auto", או טבלה שבה כל מפתח אופציונלי:
[ui.notifications.program_status]
mode = "auto" # auto|on|off
query = true # send the support query at startup; with false, auto relies on the Rex and Herdr 2 variables
children = true # child records for sessions and subagents (see below)השרתים של גרוק יכולים להגדיר את אותם מפתחות, אבל רק כדי לכבות דברים. ה-mode שלהם חל רק כ-off, ורק כשלא הגדרת mode. הם לא יכולים להפעיל דיווח. query ו-children דלוקים אלא אם התצורה שלך או השרתים של גרוק מגדירים אותם ל-false, כך שהשרתים של גרוק יכולים לכבות כל אחד מהם אבל לא יכולים להדליק מה שכיבית. ערך שגרוק לא יכול לקרוא מדולג, עם אזהרה ביומן, ושאר [ui.notifications] עדיין חל. בצורת הטבלה רק המפתח הפגום מדולג. בין קבצי תצורה, מחרוזת מחליפה טבלה, לכן השתמש בצורת הטבלה בכל קובץ כדי להגדיר מפתחות בנפרד.
לצד הדיווח הראשי הזה, גרוק מדווח רשומות ילד קטנות יותר שהטרמינל יכול להציג בנפרד:
- סשנים. עם שני סשנים פתוחים או יותר (למשל מלוח הבקרה), כל סשן מקבל רשומה שכותרתה השם שלו (או ההנחיה הראשונה שלו): אם הסשן עובד, ממתין לך, סיים, או נכשל. עם סשן אחד, הדיווח הראשי מכסה אותו.
- סוכני משנה. כל סוכן משנה שרץ מקבל רשומה תחת הסשן שלו, שכותרתה המשימה של סוכן המשנה: עובד, או ממתין לאישור או לשאלה שהוא שאל (גם כשאישורים אחרים לפניו). כשהוא מסיים במהלך תור, הרשומה אומרת done (או failed, עם הסיבה) עד שהתור מסתיים. אם הסשן היה idle כשסוכן המשנה סיים, הרשומה נשארת עד שאתה חוזר לסשן הזה או עד שתור הנחיה אחר רץ שם (שלך, או הנחיה בתור או מתוזמנת). תור שמתעורר מעצמו, כמו תור שמטפל בתוצאה או ממשיך מטרה, לא מנקה אותה. סוכן משנה שאתה עוצר מוסר מיד. סוכן משנה שמת (למשל בקריסה) מדווח failed. סוכני משנה מלפני שחידשת סשן לא מדווחים, אלא אם מתברר שהם עדיין רצים.
- טרמינלים חייבים לשמור לפחות 64 רשומות, כך שגרוק מדווח לכל היותר 63 רשומות ילד. כשיש יותר, הוא שומר את אלה שממתינות לך, אחר כך כשלים, עבודה שרצה, עבודה שסיימה, וסשנים idle, הפעילים לאחרונה קודם, ועוצר בראשונה שלא נכנסת. עם שני סשנים או יותר, רשומה של סוכן משנה נשמרת רק יחד עם רשומת הסשן שלה.
- בתוך tmux, screen, zellij או herdr (המרבב שקדם ל-Herdr 2), גרוק מדווח רק את הרשומה הראשית: כל חלוניות גרוק בלקוח אחד חולקות קבוצת רשומות אחת, כך שרשומות הילד שלהן היו מתנגשות. תחת
auto, screen ו-zellij לא מדווחים כלום. הגדרprogram_status = "on"כדי לקבל שם את הרשומה הראשית. - Herdr 2 הוא טרמינל בפני עצמו: הוא עונה לשאילתת התמיכה ושומר את הרשומות של כל חלונית בנפרד, כך שגרוק מדווח שם גם רשומות ילד.
עם children = false בטבלת program_status, גרוק מדווח רק את הרשומה הראשית ומסיר את רשומות הילד שדיווח. השרתים של גרוק יכולים להגדיר גם children = false. גרוק קורא את ההגדרות שלהם בהפעלה, כך שהשינוי שלהם חל מההפעלה הבאה.
#מטריצת תמיכת טרמינלים
| טרמינל | פרוטוקול אוטומטי | מעקב מיקוד | סרגל התקדמות |
|---|---|---|---|
| iTerm2 | OSC 9 | כן | כן |
| Kitty | OSC 99 | כן | לא |
| Ghostty | OSC 777 | כן | כן |
| WezTerm | OSC 9 | כן | כן |
| Warp | OSC 9 | כן | לא |
| Alacritty | BEL | כן | לא |
| VS Code | BEL | כן | לא |
| Apple Terminal | BEL | לא | לא |
| VTE (GNOME Terminal) | OSC 777 | כן | לא |
| Rex | OSC 777 | כן | לא |
| Herdr 2 | אין (הוא מציג מצב תוכנית OSC 7501) | כן | לא |
| Grok Desktop | אין (מקומי) | לא רלוונטי | לא רלוונטי |
| Unknown | BEL | לא | לא |
עם method = "auto", גרוק מזהה את מותג הטרמינל ובוחר את הפרוטוקול הטוב ביותר. הגדר את method במפורש כדי לעקוף את זה.
#הוקי התראות
הרץ פקודות משלך כשאירועים מתרחשים. הוקים מקבלים את $GROK_EVENT, $GROK_MESSAGE, ו-$GROK_SESSION_ID בסביבה. לכל הוק יש מסנני events ו-only_unfocused משלו. ה-condition וה-events שלמעלה לא חלים על הוקים. הוקים נקראים רק מ-config.toml שלך, אף פעם לא מתצורה מנוהלת, משכבות על, או מ-.grok של פרויקט, והם לא רצים תחת allow_managed_hooks_only.
# macOS native notification
[[ui.notifications.hooks]]
command = 'terminal-notifier -title Grok -message "$GROK_MESSAGE"'
events = ["turn_complete", "approval_required"]
only_unfocused = true
timeout_secs = 10
# Push to ntfy server
[[ui.notifications.hooks]]
command = 'curl -s -d "$GROK_MESSAGE" ntfy.sh/my-grok-alerts'
events = ["turn_complete"]
only_unfocused = true
timeout_secs = 10
# Play a sound
[[ui.notifications.hooks]]
command = "afplay /System/Library/Sounds/Glass.aiff"
events = ["turn_complete"]
only_unfocused = true
timeout_secs = 5| אפשרות הוק | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
command | string | (חובה) | פקודת מעטפת להרצה. |
events | array | [] | אירועים שמפעילים את ההוק הזה (ריק = כל האירועים). |
only_unfocused | bool | true | נשלח רק כשהטרמינל איבד מיקוד (בלי המתנה של idle_threshold_secs). |
timeout_secs | integer | 10 | הורג את תהליך ההוק אחרי מספר השניות הזה. |
#פתרון בעיות
הרץ /doctor בסשן המושפע. הוא מציג את בעיות ההתראה והמיקוד שזוהו, את קובץ התצורה הרלוונטי, ואת הצעדים לפתרון. method = "bel" מפורש נחשב מכוון. method = "none" מכבה ממצאי התראה ומיקוד.
מניעת שינה לא נכנסת לתוקף: ב-macOS, מניעת שינה משתמשת ב-IOPMAssertionCreateWithName דרך CoreFoundation. ב-Linux, systemd-inhibit (שחייב להיות ב-$PATH). ודא שהכלי הרלוונטי זמין. המניעה פעילה רק במהלך תורי סוכן, ומשתחררת אוטומטית כשהתור מסתיים.
#שורת מצב
שורה אופציונלית בתחתית ה-pager במסך מלא, כבויה כברירת מחדל. מפעילים אותה עם [ui.status_line]:
[ui.status_line]
type = "builtin" # builtin | command | disabled
items = ["cwd", "model", "context"]המפתחות האחרים הם items (אילו מקטעים מובנים להציג, לפי הסדר), command, padding, ו-refresh_interval (בשניות. מריץ מחדש שורת command בטיימר, כך שדף אירוע או סטטוס CI מגיע לסשן idle). מדריך שורת המצב מתעד את כולם, יחד עם חוזה ה-JSON שסקריפט command קורא ב-stdin וסקריפט לדוגמה.
למצב מינימלי אין שורת status-line. הוא משתמש בכותרת לשונית הטרמינל במקום (ראה התראות title.items).
#קיצורי מקלדת
קיצורי מקלדת לא ניתנים להגדרה. כל השיוכים מובנים. ראה קיצורי מקלדת למדריך המלא.
#טלמטריה
אלה מתגים עצמאיים (ראה מעקב שימוש):
[features] telemetry/GROK_TELEMETRY_ENABLED: מתג האב של אנליטיקת המוצר./privacyלא משנה אותו.- חלק מהבניות שולחות גם מדדי שימוש בלי תוכן (ספירות ותזמונים של סשן, תור, טוקן, וקריאות כלים). הם דלוקים כברירת מחדל.
DISABLE_TELEMETRY=1מכבה אותם, וכך גם כיבוי טלמטריה:falseבקובץ תצורה אוGROK_TELEMETRY_ENABLED, נעילה ב-requirements.toml/ MDM, אוDISABLE_TELEMETRYבהגדרות מנוהלות.requirements.toml,managed-settings.json, או קובץ תצורה שגרוק לא יכול לקרוא גם משאירים אותם כבויים. גרוק קורא את המתגים האלה כשהוא מתחיל, כך ששינוי חל בפעם הבאה שאתה מפעיל את גרוק. - בניות ששולחות מדדי שימוש שולחות גם דוחות קריסה כברירת מחדל. דוח יוצא רק כשהגדרת הפרטיות של החשבון שלך מתירה נתוני אבחון, וגרוק מסיר ממנו סודות ונתיבים אישיים קודם.
[diagnostics] error_reporting = falseאוDISABLE_ERROR_REPORTING=1מכבים אותם, וכך גם כל דבר למעלה שמכבה את מדדי השימוש.[diagnostics] error_reporting = trueאוGROK_ERROR_REPORTING=1מדליקים אותם בחזרה אחרי שכיבית טלמטריה בעצמך, אבל לא נגד נעילת טלמטריה של מנהל. - כל ערך לא ריק של
DISABLE_TELEMETRYאוDISABLE_ERROR_REPORTINGעובד כמו1, כולל0ו-false.
- חלק מהבניות שולחות גם מדדי שימוש בלי תוכן (ספירות ותזמונים של סשן, תור, טוקן, וקריאות כלים). הם דלוקים כברירת מחדל.
- נתוני קידוד, שמירה, ואימון: שורת ההגדרות ש-
/privacyפותח. שיתוף נתוני קידוד, נפרד מטלמטריה. [telemetry] trace_upload/GROK_TELEMETRY_TRACE_UPLOAD: עקבות סשן. עוקב אחרי טלמטריה כשלא מוגדר.[telemetry] otel_*/GROK_EXTERNAL_OTEL: OTEL חיצוני לאספן שלך (למטה).
כשטלמטריה דלוקה, ארגונים שמריצים אספן משלהם יכולים להפנות אותה או לכבות חלקים תחת [telemetry]:
[telemetry]
events_url = "https://telemetry.your-company.com/events" # send events to your own collector
events_api_key = "your-collector-token" # auth for your collector, if required
mixpanel_enabled = false # disable Mixpanel product analytics
trace_upload = false # disable session/trace uploads (inherits the telemetry toggle when unset)הגדר את אלה רק כדי לכוון טלמטריה לתשתית שלך או כדי לכבות חלקים. נקודת הקצה והאישורים המובנים מנוהלים על ידי גרוק. השאר אותם לא מוגדרים כדי להשתמש בברירות המחדל.
אותה טבלת [telemetry] גם מגדירה את זרם OpenTelemetry החיצוני, הצטרפות עצמאית (היא לא דורשת את מתג הטלמטריה למעלה) ששולחת סכמת שימוש נבחרת ובלי תוכן לאספן OTLP שלך. אימות האספן מגיע מ-OTEL_EXPORTER_OTLP_HEADERS ולעולם לא נשמר בדיסק. ראה מעקב ושימוש לסכמה המלאה, למשתני הסביבה, ולמודל הפרטיות.
[telemetry]
otel_enabled = true # external OTEL master switch (= GROK_EXTERNAL_OTEL)
otel_metrics_exporter = "otlp" # otlp | console | none
otel_logs_exporter = "otlp" # otlp | console | none
otel_endpoint = "https://collector.corp.example:4318" # OTLP base endpoint
otel_protocol = "http/protobuf" # http/protobuf | grpc
otel_certificate = "/etc/ssl/corp-ca.pem" # optional: trust private CA (path only)
otel_client_certificate = "/etc/ssl/client.crt" # optional: mTLS client cert (path only)
otel_client_key = "/etc/ssl/client.key" # optional: mTLS client key (path only)
otel_log_user_prompts = false # content gate (admins pin via requirements)
otel_log_assistant_responses = false # unset follows prompts; pin false for prompts-only
otel_log_tool_details = true # metadata/preview; enterprise default on for SIEM join
otel_log_tool_content = false # full-body gate; independent of details , does not imply names/pathsמפתחות [telemetry] otel_* שרשומים ב-requirements.toml חתום נועלים מעל משתני תהליך (נעילת יעד). managed_config.toml לא. אין מפתח headers. אסימוני האספן נשארים ב-OTEL_EXPORTER_OTLP_HEADERS. ראה מעקב ושימוש.
#נעיצת גרסאות
שולטים לאילו גרסאות ה-CLI רשאי להתעדכן אוטומטית, ואילו גרסאות רשאיות לרוץ. מגדירים את אלה ב-[cli], או בשכבה מנוהלת למדיניות לכל הצי. לכל אחד יש עקיפת סביבה שיכולה רק להדק את הגבול, ל-CI ולבדיקות.
השתנה:
minimum_versionכבר לא חוסם הפעלה. הוא עכשיו רצפה רכה נגד שנמוך עבור המעדכן. לרצפה קשיחה שמונעת מגרסאות ישנות להתחיל, השתמש ב-required_minimum_version.
[cli]
minimum_version = "0.2.109" # updater won't downgrade below this
maximum_version = "0.2.180" # updater won't install above this
required_minimum_version = "0.2.100" # refuse to start below this
required_maximum_version = "0.2.200" # refuse to start above thisminimum_version(GROK_MINIMUM_VERSION) היא רצפה רכה נגד שנמוך. המעדכן מדלג על יעד מתחתיה ושומר את הגרסה הנוכחית, ומעבר ערוץ אף פעם לא נוחת מתחתיה. היא אף פעם לא חוסמת הפעלה.maximum_version(GROK_MAXIMUM_VERSION) היא תקרה רכה. המעדכן מגביל את היעד שלו אליה ולעולם לא מתקין מעליה, ומעבר ערוץ לבנייה מעליה מדולג, כך שהמכונה נשארת על הבנייה הנוכחית שלה.required_minimum_version(GROK_REQUIRED_MINIMUM_VERSION) ו-required_maximum_version(GROK_REQUIRED_MAXIMUM_VERSION) הם גבולות קשיחים. אם הגרסה הרצה מחוץ לטווח, ה-CLI יוצא בהפעלה ומורה למשתמש להתקין גרסה מאושרת.grok updateו-grok --versionממשיכים לעבוד, כדי שהתקנה מחוץ לטווח תוכל להתאושש.- הגבולות נפתרים בין שכבות תצורה רק בהידוק: רצפה לוקחת את הערך הגבוה ביותר ותקרה את הנמוך ביותר, כך שגבול מנוהל לא יכול להתרופף, וגבול של משתמש או של סביבה לא יכול לבטל גבול קשיח מנוהל. ערך לא תקין מדולג, כדי שמדיניות פגומה לא תוכל לחסום הפעלה.
grok inspectמציג את התקרה והרצפה שנפתרו, ואיפה כל אחת מוגדרת. grok update --version Xמפורש מותר מעל התקרה, כדי להתאושש מהתקנה חדשה מדי, ונדחה מתחת לרצפה הקשיחה.
#פריסה ארגונית
הגדרה מלאה לשימוש ארגוני:
[cli]
auto_update = false
[auth]
auth_provider_command = "/usr/local/bin/my-company-auth-provider"
auth_provider_label = "Acme Corp"
auth_token_ttl = 3600
[models]
default = "company-grok"
[model.company-grok]
model = "grok-4.6"
base_url = "https://grok-proxy.acme.com/"
name = "Grok 4.6 (Proxy)"
context_window = 128000
[features]
telemetry = false#pager.toml (הגדרת מראה)
מיקום: ~/.grok/pager.toml. זה שולט במראה ובתחושה של ה-TUI. השינויים חלים בהפעלה מחדש.
#מסוף
[terminal]
alt_screen = "auto" # fullscreen mode: "auto", "always", "never"auto(ברירת מחדל): להשתמש במסך החלופי כשהמסוף תומך בו.always: תמיד להשתמש במסך החלופי.never: לרוץ בתוך מאגר הגלילה הראשי של המסוף.
#אנימציה
[animation]
fps = 30 # animation frame rate (ticks per second)
wave_rows = 32 # rows per wave cycle for accent animation#הנחיה
[prompt]
collapse_unfocused = true # collapse prompt when scrollback is focused
mouse_hover = true # show hover highlight on the prompt widget
show_prefix = true # show the prompt prefix characterמצב קומפקטי לא נשמר כאן. שולטים בו בזמן ריצה עם [ui] compact_mode או עם הפקודה /compact-mode.
#גלילה לאחור
[scrollback.layout]
outer_vpad = 1 # vertical padding
outer_hpad_left = 2 # left horizontal padding
outer_hpad_right = 2 # right horizontal padding
block_pad_left = 2 # padding inside block, left of content
block_pad_right = 2 # padding inside block, right of content
[scrollback.scrollbar]
enabled = true # show scrollbar
gap_left = 0 # gap between content and scrollbar
gap_right = 0 # gap between scrollbar and screen edge
[scrollback.scroll]
margin = 0 # minimum context lines above/below selection
min_page_fraction = 0 # minimum scroll as % of viewport (0-100)
follow_indicator = "center" # ▼/▲ scroll indicators: "center" or "none"
follow_auto_select = true # auto-select latest entry in follow mode
follow_by_overscroll = true # scrolling past bottom engages follow mode
anchor_on_fold = true # keep block position when folding
respect_manual_folds = true # opt-in (default: false): keep manually folded blocks as-is during streaming/finish; expanding while following stops auto-scroll
[scrollback.display]
sticky_headers = true # pin user prompts as sticky headers
tab_width = 4 # spaces per tab character
expandable_indicator = true # show expand indicator on foldable entries
expandable_indicator_running = true # show indicator on running entries
expandable_indicator_char = "›" # character for the expand indicator (default: "›", ">" on the legacy Windows console)
selection_buttons = false # show copy/view buttons on selection
line_under_last_entry = false # horizontal line below last entry
group_selection_split = true # split selection box for expanded blocks
highlight_overlays_border = false # highlight extends over selection box border
dim_accent = 0.5 # dimming factor for collapsed accents (0.0-1.0)respect_manual_folds כבוי כברירת מחדל. הפעילו אותו, ובלוק שאתם מקפלים ידנית ננעץ: עדכוני הזרמה ואירועי סיום (למשל סיום של בלוק חשיבה) משאירים את מצב הקיפול שלו כמו שהוא, והרחבת בלוק בזמן שמצב המעקב עוקב אחרי תוכן חדש עוצרת את הגלילה האוטומטית, כך שהתצוגה נשארת במקום. המעקב מתחדש באמצעות Shift+G, j ברשומה האחרונה, גלילה מעבר לתחתית, או שליחת הנחיה חדשה. Shift+E מנקה את כל הנעיצות. Ctrl+E מנקה נעיצות על בלוקי חשיבה.
#הגדרת בלוקים
[scrollback.blocks.edit]
indent = true # indent diff content
vpad = false # vertical padding
dual_line_numbers = false # two-column line numbers (old + new)
hunk_separator = "…" # separator between diff hunks (default: "…")
[scrollback.blocks.prompt]
vpad = true # vertical padding
show_prefix = true # show prompt prefix character
min_lines = 2 # minimum content lines in sticky mode
[scrollback.blocks.thinking]
animate = true # animated accent while thinking
truncated_lines = 3 # lines in truncated mode#תוספים
disable_plugins = false # hide hooks/plugins UI entirely#משתני סביבה
העיקריים. לרשימה המלאה ראו את ה-README.
#אימות
| משתנה | תיאור |
|---|---|
XAI_API_KEY | מפתח API מ-console.x.ai |
GROK_AUTH_PROVIDER_COMMAND | נתיב לקובץ הבינארי של ספק האימות החיצוני |
GROK_AUTH_PROVIDER_LABEL | שם תצוגה במסך ההתחברות של ה-TUI |
GROK_AUTH_TOKEN_TTL | משך חיי האסימון בשניות |
GROK_AUTH_EARLY_INVALIDATION_SECS | שניות לפני התפוגה לרענון (ברירת מחדל: 300) |
GROK_OIDC_ISSUER | כתובת URL של מנפיק OIDC |
GROK_OIDC_CLIENT_ID | מזהה לקוח OIDC |
#נקודות קצה
| משתנה | תיאור |
|---|---|
GROK_CLI_CHAT_PROXY_BASE_URL | דריסת כתובת הבסיס של פרוקסי ה-API |
#תכונות
| משתנה | תיאור |
|---|---|
GROK_MEMORY | הפעלה (1) או כיבוי (0) של זיכרון בין הפעלות |
GROK_SUBAGENTS | הפעלה (1) או כיבוי (0) של תת-סוכנים |
GROK_GOAL | הפעלה (1) או כיבוי (0) של /goal (מופעל כברירת מחדל) |
GROK_WORKFLOWS | הפעלה (1) או כיבוי (0) של תהליכי עבודה ברקע, ובחירת מנהל ההתקן של /goal (ברירת מחדל מופעל: מנהל התקן תהליכי עבודה בבעלות המארח. כבוי: update_goal מדור קודם) |
GROK_WEB_FETCH | הפעלה (1) או כיבוי (0) של הכלי web_fetch |
GROK_WEB_FETCH_ALLOW_LOCAL | לאפשר ל-web_fetch רק מארחי loopback מפורשים (localhost / 127.0.0.0/8 / ::1). זהה ל-[toolset.web_fetch] allow_local. כבוי כברירת מחדל. כתובות פרטיות ומטא-דאטה נשארות חסומות. |
GROK_WORKSPACE_DASHBOARD | הפעלה (1) או כיבוי (0) של לוח העבודה v2. זהה ל-[features] workspace_dashboard. נקרא בהשקה |
GROK_AGENT | הגדרת סוכן מותאמת, כנתיב מוחלט לקובץ שלה או כשם סוכן פשוט בלי / או \ |
GROK_SANDBOX | פרופיל ארגז חול (off, workspace, devbox, read-only, strict, או שם פרופיל מותאם) |
GROK_EXIT_TIMEOUT_SECS | שניות אחרי שבקשת יציאה התבקשה, לפני שהתהליך יוצא בכוח אם הפירוק נתקע. ברירת המחדל היא 20, ו-0 מבטל זאת. יציאה קשיחה מגיעה 5 שניות אחר כך. במסלול ה-daemon, הטיימר גם ממתין ל-hooks של SessionEnd של ה-daemon, עד 60 שניות נוספות. |
#עדכונים
| משתנה | תיאור | נדרש |
|---|---|---|
GROK_DISABLE_EXPERIMENTS | מכבה כל רשומת [[experiments]] כשהוא מוגדר לכל ערך מלבד 0, false, no או off. כל רשומה היא disabled (env_opt_out) ב-grok inspect ולא מחילה דבר, כך שניסוי לא יכול לשנות את הערוץ או את ההגדרות שלכם. ניסויים שעזבתם נשארים עזובים, וכשמבטלים את המשתנה, הרשומות חלות שוב. מקבילה בהגדרה: [experiments] enabled = false בכל קובץ הגדרה (config.toml, כל managed_config.toml, קובץ דרישות או מטען MDM). כל enabled = false מכבה ניסויים, ו-enabled = true לא דורס זאת. | 1.0.70 ואילך |
GROK_UPDATE_CHANNEL | נועל את ערוץ העדכון: stable, alpha, enterprise, או ערוץ מותאם שההגדרה שלכם מגדירה תחת [cli.channels.<name>]. כל עדכון עוקב אחרי הנעילה מעל [cli] channel בקבצי ההגדרה, כולל כל זרוע [[experiments]] שמגדירה אותו, אלא אם requirements.toml מגדיר [cli] channel ישירות. בזמן שהוא מוגדר, grok update --stable, --alpha, --enterprise ו---channel מסרבים לעבור לערוץ אחר. אם תגדירו כל ערך אחר, Grok מתעלם ממנו ו-grok inspect מציג אזהרה. הגדירו אותו בפרופיל המעטפת כדי שכל תהליך Grok, כולל המעדכן ברקע, יראה את אותה נעילה. | 1.0.70 ואילך |
#רישום לוגים
| משתנה | תיאור |
|---|---|
GROK_LOG_FILE | כתיבת לוגים לנתיב הקובץ הזה (בשימוש כלשונו כנתיב) |
RUST_LOG | מסנן רמת לוג (למשל debug). שולט בלוג של GROK_LOG_FILE ובפלט stderr של headless |
#נתיבים
| משתנה | תיאור |
|---|---|
GROK_HOME | דריסת ספריית ההגדרות (ברירת מחדל: ~/.grok) |
GROK_RESPECT_GITIGNORE | כפיית סינון gitignore מופעל (1) או כבוי (0). דורס את [tools] respect_gitignore |
#טלמטריה
| משתנה | תיאור |
|---|---|
GROK_TELEMETRY_ENABLED | הפעלה או כיבוי של טלמטריה |
DISABLE_TELEMETRY | כל ערך לא ריק מכבה טלמטריה, כולל 0 ו-false |
DISABLE_ERROR_REPORTING | כל ערך לא ריק מכבה דיווחי קריסה, כולל 0 ו-false |
GROK_TELEMETRY_TRACE_UPLOAD | הפעלה או כיבוי של העלאת עקבות הפעלה |
GROK_TELEMETRY_MIXPANEL_ENABLED | הפעלה או כיבוי של Mixpanel באופן ספציפי |
GROK_EXTERNAL_OTEL | OTEL חיצוני לאספן שלכם (ראו 24-monitoring-usage.md) |
GROK_FEEDBACK_ENABLED | הפעלה או כיבוי של מערכת המשוב |
GROK_DEPLOYMENT_KEY | מפתח API לניהול לארגון |
#מיקומי קבצים
| נתיב | תיאור |
|---|---|
~/.grok/config.toml | קובץ ההגדרות הראשי |
~/.grok/pager.toml | הגדרת מראה ה-TUI |
~/.grok/auth.json | אישורי אימות (מנוהלים אוטומטית) |
~/.grok/sessions/ | הפעלות שמורות (מאורגנות לפי ספריית עבודה) |
~/.grok/memory-v2/ | זיכרון בין הפעלות (נושאים גלובליים ולפי סביבת עבודה, תצפיות, ואינדקס) |
~/.grok/skills/ | הגדרות מיומנויות בהיקף משתמש |
~/.grok/plugins/ | תוספים בהיקף משתמש |
~/.grok/agents/ | הגדרות סוכנים בהיקף משתמש |
~/.grok/lsp.json | הגדרת שרת LSP (היקף משתמש) |
~/.grok/logs/ | קבצי לוג פנימיים (למשל unified.jsonl, לוגי שרת MCP) |
.grok/config.toml | שרתי MCP, תוספים וכללי הרשאות בהיקף פרויקט |
.grok/skills/ | הגדרות מיומנויות בהיקף פרויקט |
.grok/plugins/ | תוספים בהיקף פרויקט |
.grok/agents/ | הגדרות סוכנים בהיקף פרויקט |
.grok/hooks/ | hooks בהיקף פרויקט |
.grok/lsp.json | הגדרת שרת LSP |
#איך Grok שומר את config.toml
כתיבות אל ~/.grok/config.toml (/settings, /vim-mode, ושמירות אחרות של הגדרות משתמש) עוקבות אחרי symlink עלה. שינוי השם האטומי כותב את היעד (קובץ במאגר ה-dotfiles שלכם). הקישור נשאר קישור. אם הקישור תלוי, הכתיבה יוצרת את היעד כקובץ רגיל.
כתיבות אל .grok/config.toml של פרויקט (עריכות MCP / תוסף / הרשאות) מחליפות symlink עלה בקובץ רגיל. זה מונע משמירה מאוחרת יותר לעקוב אחרי הקישור אל מחוץ למאגר.
config.toml של משתמש שאי אפשר לנתח לא נדרס. תקנו את התחביר (או שחזרו גיבוי) ושמרו שוב.
#הגדרה בהיקף פרויקט
אפשר להגדיר חלק מההגדרות לכל פרויקט על ידי הצבת קבצים ב-.grok/ בתוך המאגר:
| קובץ | מה הוא מגדיר |
|---|---|
.grok/config.toml | שרתי MCP, תוספים, כללי הרשאות, ותקרת תוצאת הכלי [mcp] max_output_bytes (שאר הסעיפים נטענים רק מ-~/.grok/config.toml) |
.grok/skills/ | מיומנויות ספציפיות לפרויקט |
.grok/hooks/ | hooks של מחזור חיים ספציפיים לפרויקט |
.grok/agents/ | הגדרות סוכנים ספציפיות לפרויקט |
.grok/lsp.json | הגדרת שרת LSP |
.grok/sandbox.toml | פרופילי ארגז חול מותאמים |
AGENTS.md | הוראות פרויקט (הנחיית מערכת) |
שרתי MCP בהיקף פרויקט דורסים שרתים גלובליים עם אותו שם (החלפה מלאה, בלי מיזוג), אלא אם requirements.toml / MDM מגדירים את התעבורה של השרת הזה או enabled = false.
#שרתי LSP
שרתי שפה מפעילים אבחונים פסיביים ואת הכלי האופציונלי lsp (ראו את דגל התכונה lsp_tools). ההגדרות מגיעות משלושה מקורות ומתמזגות לפי שם שרת:
| מקור | מיקום | היקף |
|---|---|---|
| משתמש | ~/.grok/lsp.json | כל הפרויקטים |
| פרויקט | .grok/lsp.json | המאגר הנוכחי |
| תוסף | קובץ .lsp.json של תוסף מהימן, או בלוק lspServers מוטמע ב-plugin.json שלו | בכל מקום שהתוסף מופעל |
כשאותו שם שרת מגיע מיותר ממקור אחד, הפתרון הוא לפי העדיפות הגבוהה ביותר תחילה:
- פרויקט:
.grok/lsp.json - משתמש:
~/.grok/lsp.json - תוספים:
.lsp.jsonמבוסס קובץ, ואזlspServersמוטמע, לפי סדר טעינת התוספים
רשומות פרויקט ומשתמש מחליפות רשומות בעדיפות נמוכה יותר עם אותו שם. רשומות תוסף רק מוסיפות שרתים ששמותיהם לא הוגדרו כבר בקובץ מקומי, כך ש-lsp.json מקומי תמיד גובר על תוסף. שרתי LSP של תוסף נטענים רק אחרי שהתוסף מהימן (ראו תוספים).