jackwener/OpenCLI · error · EmptyResultError

No sidebar conversation matched "${raw}". Try the exact id f

Error message

No sidebar conversation matched "${raw}". Try the exact id from `opencli gemini history` instead.

What it means

After skipping direct id-shaped handling, resolveTargetUrl looks up the sidebar conversation list and matches by title (contains mode). If no matching conversation with a Url is found, it throws EmptyResultError with a message suggesting the exact id from `opencli gemini history`. The library throws this rather than navigating to a guessed URL, so a wrong title fails fast with an actionable hint.

Source

Thrown at clis/gemini/detail.js:43

    }

    // Unambiguously id-shaped inputs (URL, /app/<id> path, or 16-hex bare id)
    // skip the sidebar lookup. Generic alphanumeric strings always go through
    // title-matching first so a chat called "Empire study" doesn't get treated
    // as the literal conversation id "Empire study".
    const directId = extractGeminiId(raw);
    const looksLikeId =
        raw.startsWith('http') ||
        raw.startsWith('/app/') ||
        /^[a-f0-9]{16,}$/i.test(raw);
    if (directId && looksLikeId) {
        return `${GEMINI_APP_URL}/${directId}`;
    }

    const conversations = await getGeminiConversationList(page);
    const match = resolveGeminiConversationForQuery(conversations, raw, 'contains');
    if (!match || !match.Url) {
        throw new EmptyResultError(
            'gemini detail',
            `No sidebar conversation matched "${raw}". Try the exact id from \`opencli gemini history\` instead.`,
        );
    }
    return match.Url;
}

export const detailCommand = cli({
    site: 'gemini',
    name: 'detail',
    access: 'read',
    description: 'Open a Gemini web conversation by id, URL, or sidebar title and read its turns',
    domain: GEMINI_DOMAIN,
    strategy: Strategy.COOKIE,
    browser: true,
    siteSession: 'persistent',
    navigateBefore: false,
    args: [

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Run `opencli gemini history` and use the exact Id or Url of the target conversation as --id
  2. Verify the title spelling or use a shorter distinctive substring of the title
  3. Confirm you are signed into the same Google account that owns the conversation
  4. If the chat is old, open Gemini in the browser to confirm it still exists before retrying

Example fix

// before
opencli gemini detail --id "Empire studie"
// after
opencli gemini history            # find exact Id/Url
opencli gemini detail --id abc123def4567890
Defensive patterns

Strategy: fallback

Validate before calling

const hist = await run(['gemini','history','--limit','200']);
const found = hist.find(c => c.Title.includes(titleFragment));
if (!found) throw new Error(`No conversation matching "${titleFragment}" in history`);

Type guard

function isConversationMatch(m){ return Boolean(m && typeof m.Url === 'string' && m.Url.length > 0); }

Try / catch

try {
  return await run(['gemini','detail','--id', title]);
} catch (e) {
  if (String(e.message).includes('No sidebar conversation matched')) {
    const hist = await run(['gemini','history']);
    const exact = hist.find(c => c.Id === title || c.Url === title);
    if (exact) return await run(['gemini','detail','--id', exact.Url]);
  }
  throw e;
}

Prevention

When it happens

Trigger: Calling `opencli gemini detail` with --id set to a sidebar title that does not exist (typo, deleted/renamed chat, or chat not visible in Recents); passing a non-16-hex generic string that matches no conversation; the Gemini account/sidebar has no conversation with that substring.

Common situations: The conversation was renamed or deleted since the title was captured; querying on a different Google account than where the chat lives; the chat is old and outside the visible Recents list; partial-title typos.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/556cc2e7cc55de03. Report an issue: GitHub.