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
- Run grok resume with no argument to list available sessions and copy the exact title or id
- Check you are authenticated to the same remote account/workspace that holds the session
- Quote the full title exactly (titles with spaces/special chars need exact matching)
- 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
- List sessions and copy ids/titles exactly rather than typing from memory
- Prefer UUIDs over titles when scripting resume
- Keep remote auth/session sync working so titles exist on the resuming machine
- Quote titles containing spaces or special characters
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
- No session found for current directory. Use 'grok' to start
- {} (session id: {session_id})
- Failed to load config: {}
- session folder is unavailable
- session '{session_name}' is already running on port {} (use
AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31).
Data as JSON: /api/errors/34ec6ad447bbfd67.
Report an issue: GitHub.