jackwener/OpenCLI · error · CommandExecutionError

NotebookLM home-link probe returned malformed Browser Bridge

Error message

NotebookLM home-link probe returned malformed Browser Bridge data

What it means

The home-link probe asks Browser Bridge for the list of notebook links on the NotebookLM home page. The result must be an array; anything else (null, object, string) means the injected script did not produce the expected rows payload, so the CLI throws this CommandExecutionError rather than iterating over bad data.

Source

Thrown at clis/notebooklm/utils.js:794

        subtitleTitleNode?.getAttribute?.('title') ||
        subtitleTextNode?.textContent ||
        ''
      ).trim();

      rows.push({
        id,
        title,
        url: href,
        source: 'home-links',
        is_owner: true,
        created_at: createdAtHint || null,
      });
    }

    return rows;
  })()`, 'home-link probe');
    if (!Array.isArray(raw))
        throw new CommandExecutionError('NotebookLM home-link probe returned malformed Browser Bridge data');
    return raw.map((row) => {
        if (!isPlainObject(row) || typeof row.id !== 'string' || typeof row.title !== 'string' || typeof row.url !== 'string' || (row.created_at !== null && row.created_at !== undefined && typeof row.created_at !== 'string') || (row.is_owner !== undefined && typeof row.is_owner !== 'boolean')) {
            throw new CommandExecutionError('NotebookLM home-link probe returned a malformed row');
        }
        const url = normalizeNotebooklmNotebookUrl(row.url, row.id);
        if (!url) {
            throw new CommandExecutionError('NotebookLM home-link probe returned an untrusted or mismatched notebook URL');
        }
        return {
        id: row.id,
        title: normalizeNotebooklmTitle(row.title, 'Untitled Notebook'),
        url,
        source: 'home-links',
        is_owner: row.is_owner === false ? false : true,
        created_at: normalizeNotebooklmCreatedAt(row.created_at),
        };
    });
}

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Open the NotebookLM home page (https://notebooklm.google.com/) in the active Chrome tab and retry.
  2. Reload the page so the notebook list has rendered before probing.
  3. Check the Browser Bridge extension is installed, enabled, and connected.
  4. Update the CLI if NotebookLM recently changed its home-page markup.

Example fix

// before: assuming an array
const rows = await probeHomeLinks();
rows.forEach(render);

// after: guard
let rows = [];
try {
  rows = await probeHomeLinks();
} catch (e) {
  if (!String(e.message).includes('malformed Browser Bridge data')) throw e;
  console.error('Navigate to the NotebookLM home page and retry.');
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!currentTabUrl || !currentTabUrl.startsWith('https://notebooklm.google.com/')) {
  throw new Error('Open the NotebookLM home page before listing notebooks.');
}

Type guard

const isRowArray = (v) => Array.isArray(v);

Try / catch

let notebooks = [];
try {
  notebooks = await probeHomeLinks();
} catch (e) {
  if (String(e.message).includes('malformed Browser Bridge data')) {
    console.error('Open https://notebooklm.google.com/ in Chrome and retry.');
  } else { throw e; }
}

Prevention

When it happens

Trigger: The evaluated home-link script returns a non-array — typically because the page is not the NotebookLM home page, the link-collection query matched nothing and the wrapper returned a non-array value, or the bridge evaluation failed and returned an error object.

Common situations: Running the list command while the browser shows a notebook detail page instead of home, a NotebookLM redesign changing the home link markup, or the bridge returning undefined when no tabs match.

Understand the failure class

Related errors


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