xai-org/grok-build · error
{err}
Error message
{err} What it means
During startup the CLI validates chat-mode flag combinations via `session_startup::chat_mode_flag_conflict(args.chat(), args.fork_session, args.restore_code)`; when `--chat` is combined with `--fork-session` or `--restore-code` (which operate on non-chat sessions), the returned Some(reason) is surfaced with `anyhow::bail!("{err}")`.
Source
Thrown at crates/codegen/xai-grok-pager/src/app/mod.rs:709
}
if session_startup::chat_mode_conflicts_with_leader(args.chat(), use_leader) {
anyhow::bail!("{}", session_startup::CHAT_MODE_LEADER_CONFLICT);
}
if args.trust {
match std::env::current_dir() {
Ok(cwd) => xai_grok_workspace::folder_trust::grant_folder_trust(&cwd),
Err(e) => {
tracing::warn!(error = %e, "--trust: failed to resolve cwd; folder not trusted")
}
}
}
if let Some(reason) = policy_disable_reason {
tokio::spawn(xai_grok_shell::leader::kill_stale_reachable_leaders(reason));
}
if let Some(err) =
session_startup::chat_mode_flag_conflict(args.chat(), args.fork_session, args.restore_code)
{
anyhow::bail!("{err}");
}
#[cfg(feature = "local-workspace")]
{
let lw = session_startup::resolve_local_workspace_config(
args.chat(),
args.local_workspace(),
args.local_workspace_attach(),
args.local_workspace_cwd(),
)?;
if let Some(ref cfg) = lw {
session_startup::emit_local_workspace_startup_ux(cfg)?;
}
session_startup::set_active_local_workspace(lw)?;
}
let intent = args
.session_startup_intent()
.map_err(|e| anyhow::anyhow!("{e}"))?;
let mut materialize_ctx = session_startup::MaterializeCtx::from_pager_args(&args);View on GitHub (pinned to bc7f02eddd)
Solutions
- Drop `--fork-session`/`--restore-code` when using `--chat`
- Run fork/restore without the chat flag
- Audit generated command lines in scripts to keep chat flags separate from session-management flags
Example fix
// before grok-pager --chat --fork-session // after grok-pager --fork-session # or: grok-pager --chat
Defensive patterns
Strategy: validation
Validate before calling
fn ensure_chat_flags_valid(chat: bool, fork: bool, restore: Option<String>) -> Result<(), String> {
if chat && (fork || restore.is_some()) {
Err("--fork-session/--restore-code cannot be used with --chat".into())
} else { Ok(()) }
} Type guard
fn chat_without_session_flags(chat: bool, fork: bool, restore: bool) -> bool {
chat && !fork && !restore
} Try / catch
if let Err(e) = run_pager(args) {
let msg = e.to_string();
if msg.contains("fork") || msg.contains("restore") { eprintln!("conflicting session flags with --chat: {msg}"); }
else { eprintln!("startup failed: {msg}"); }
} Prevention
- Never template --chat together with --fork-session/--restore-code
- Validate CLI flag combinations in wrapper scripts before exec
- Document chat mode as incompatible with session fork/restore
When it happens
Trigger: Invoking the binary with `--chat` plus `--fork-session`, or `--chat` plus `--restore-code`; any script passing all three flags together.
Common situations: Reusing a fork/restore command line and adding `--chat`; CI scripts templating flags where chat was toggled on without removing session-restore flags.
Related errors
AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31).
Data as JSON: /api/errors/4765dd3e8a42c1b7.
Report an issue: GitHub.