xai-org/grok-build · error

{e:#}; {title_miss_hint}

Error message

{e:#}; {title_miss_hint}

What it means

When a session id/argument is not a plain UUID, the resolver first attempts remote restore; if the caller's argument could also be a title, a remote miss is retried through title resolution. On failure, the original error chain ({e:#}) is re-wrapped with title_miss_hint(session_id) to suggest that the argument may not match any session title.

Source

Thrown at crates/codegen/xai-grok-pager/src/app/session_startup.rs:1031

            anyhow::bail!("{REMOTE_RESTORE_NEEDS_WORKTREE}")
        }
        RemoteMissPlan::NotFound { title_miss_hint } => {
            if title_miss_hint {
                anyhow::bail!(
                    "Session does not exist: {}",
                    super::session_title_resolve::title_miss_hint(session_id)
                );
            }
            anyhow::bail!("Session does not exist")
        }
        RemoteMissPlan::RestoreConversation => {
            let restored =
                restore_session_from_remote(session_id, cwd, ctx.restore_progress_on_stdout).await;
            if arg_is_uuid {
                return restored;
            }
            restored.map_err(|e| {
                anyhow::anyhow!(
                    "{e:#}; {}",
                    super::session_title_resolve::title_miss_hint(session_id)
                )
            })
        }
    }
}
/// Policy after local id/title resolution misses.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum RemoteMissPlan {
    DeferToWorktree {
        deferred_local_miss: bool,
    },
    RejectInPlaceCodeRestore {
        title_miss_hint: bool,
    },
    /// Pre-TUI restore of session state and memory only (never codebase).
    RestoreConversation,

View on GitHub (pinned to bc7f02eddd)

Solutions

  1. Run grok resume with no argument to list available sessions and copy the exact title or id
  2. Check you are authenticated to the same remote account/workspace that holds the session
  3. Quote the full title exactly (titles with spaces/special chars need exact matching)
  4. If you have the UUID, pass the UUID directly so the title-miss hint path is skipped

Example fix

// before: guessed title
$ grok resume "fix login bug"
// after: exact title from session list
$ grok resume
$ grok resume "Fix login bug in auth flow"
Defensive patterns

Strategy: try-catch

Validate before calling

// confirm the argument matches a known session before resuming
let summaries = xai_grok_shell::session::persistence::list_summaries(Some(cwd)).await?;
let known = summaries.iter().any(|s|
    s.info.id.to_string() == arg ||
    s.display_title_opt().as_deref() == Some(arg.as_str()));
if !known { eprintln!("unknown session id/title: {arg}"); }

Try / catch

match resume(arg).await {
    Err(e) if e.to_string().contains("may not be a valid session title") ||
              title_miss_hint_applies(&e) => {
        eprintln!("'{arg}' matched no session; run the list command to pick one");
    }
    other => other.map(|_| ()),
}

Prevention

When it happens

Trigger: Passing a non-UUID argument (assumed to be a session title) to resume where restore_session_from_remote fails — the id does not exist remotely AND no session title matches the argument, so the hint is appended.

Common situations: Typing a partial or stale session title after sessions were renamed/deleted on the remote; resuming from a different machine/account without the remote session; ambiguity between a UUID-looking string and a title.

Related errors


AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31). Data as JSON: /api/errors/34ec6ad447bbfd67. Report an issue: GitHub.