Grok Build OSS 1.0.4 — hooks and config overlays expand, selection/copy and follow-up behavior improve, and a large set of session, subagent, and composer fixes land.
Changelog
[new]StopCancelled hook event fires when a turn ends without completing (interrupt, permission reject, max turns, and similar paths).
[new]PreToolUse hooks can rewrite a tool’s input before it runs, not only allow or deny the call.
[new]Follow-up behavior setting lets queued messages send immediately as interjections instead of waiting for the turn to finish.
[new]Web search can be limited to allowed or excluded domains via [toolset.web_search] in config.toml.
[new]Session search index can be turned off with GROK_SESSION_SEARCH or [features] session_search for hosts that share $GROK_HOME.
[new] Tool commands and MCP servers receive GROK_SESSION_ID matching the current session.
[new]GROK_CONFIG / GROK_CONFIG_PATH config overlays inject a deep-merged settings layer (JSON inline or JSON/TOML file) above config.toml / managed config and below requirements.toml / MDM, with a fail-closed allowlist.
[new] Drag-to-select and copy on the /session-info tab; c and y shortcuts also work.
[new] Double-click selects a word by default; triple-click selects the whole paragraph.
[new] Recurring /loop tasks print a one-line expiry notice in the transcript when they auto-expire after 7 days.
[new] Relative markdown links can open existing files in the current working directory when no matching generated media is found.
[new] Optional app-side RTL/BiDi reordering for scrollback and related views via [scrollback.display] rtl_bidi in pager config (off by default).
[new] External OTLP telemetry supports private-CA trust and mTLS client identity (path-only cert/key via env or [telemetry]).
[fix] Queued messages no longer auto-submit while you are still editing them in the composer.
[fix] Sessions poisoned by rejected images are healed permanently so later turns succeed without retrying the bad image.
[fix] Auto permission mode honors explicit “always allow” grants and narrow allow rules from settings.
[fix] Subagent lifecycle events stay intact when delivered out of order, so all subagents show correctly in the UI.
[fix] Keystrokes typed while Grok is starting are kept in the composer instead of being dropped.
[fix] Background tasks killed from the UI wake the model when needed instead of staying parked after a single-task stop.
[fix][stop] / Ctrl+C in a fullscreen subagent overlay cancels the visible child session; in a subagent drill-in it stops the focused subagent, not the root.
[fix] Hook failures show the first line of stderr, not only the exit code.
[fix] Pasting text or dragging images while scrollback is focused focuses the composer and pastes there.
[fix] Dashboard shortcut works with Ctrl+4 on terminals without the Kitty keyboard protocol.
[fix] Image-only screenshot pastes (e.g. Flameshot) work on Linux without a clipboard error.
[fix] Editing a queued prompt into a slash command (e.g. /btw) runs the command instead of sending the text to the model.
[fix] Text typed while a plan is generating is preserved when the approval screen appears.
[fix]grok du and worktree commands work on Windows when only USERPROFILE is set.
[fix] Permission-mode changes on the welcome screen apply to the newly created session.
[changed] Finished subagent transcripts are evicted from memory and rebuilt from disk when reopened (lower RAM use).
[changed] Cross-session memory is enabled via GROK_MEMORY=1, [memory] enabled = true, or managed remote settings; CLI --experimental-memory / --no-memory are no longer documented entry points.
[changed] Memory search/injection/dream/flush defaults are tighter (higher score floors, slower dream cadence, idle flush, MMR on by default; embedding model unset means FTS-only).
[removed][todo] badge_format theming/config surface is dropped from the user guide.
Agent & tools
PreToolUse hooks: allow input rewrite before execution.
Web search toolset: domain allow/exclude lists in config.
MCP servers and tool commands: GROK_SESSION_ID in the environment.
StopCancelled hook for incomplete turns.
/loop auto-expiry notice after 7 days.
/memory, /flush, and related memory tools: require memory enabled through env/TOML/managed settings (no --experimental-memory flag in docs).
Follow-up / queued-message interjection behavior is configurable.
Docs
Configuration guide: full precedence stack including requirements.toml / MDM, GROK_CONFIG / GROK_CONFIG_PATH overlays, managed config, and allowlisted overlay keys.
Memory guide and shell README: enable/disable paths, priority order, and default tables updated; experimental CLI flags removed from the happy path.
Headless mode: process-level memory off via GROK_MEMORY=0.
Terminal support: Arabic/Persian RTL scrollback guidance and rtl_bidi setting.
Monitoring/usage: OTLP mTLS and certificate path options; per-signal protocol notes.
Plugins: clearer MCP server allowlist wildcard matching rules.
Telemetry tests cover external OTLP mTLS over gRPC and HTTP.
Cargo package set bumps internal crates to 1.0.4 and refreshes several transitive deps (axum-server, image resize, bidi crates, and others).
Upgrade notes
Prefer GROK_MEMORY=1 / [memory] enabled = true (or managed remote settings) to turn memory on; use GROK_MEMORY=0 to force it off for the process. Drop reliance on --experimental-memory and --no-memory in scripts and docs.
Review [memory.*] if you depended on older defaults (min_score, dream intervals, embedding model, idle flush, MMR).
Harness/ACP launchers can inject soft settings with GROK_CONFIG or GROK_CONFIG_PATH instead of rewriting config.toml; overlays cannot bypass requirements.toml / MDM or security gates.
Optional: set [scrollback.display] rtl_bidi = true only if your terminal does not already reorder RTL text correctly.
Optional: configure OTLP CA/client cert paths for private collectors; do not put PEM material in TOML.
Remove any [todo] badge_format settings; they are no longer documented.