mcpField
G
gemini-deep-research

gemini-deep-research

github.com/terrylicaProductivity175 installsUpdated today
Repository

About gemini-deep-research

A skill for running long-form research with Google Gemini Deep Research through Playwright CDP browser automation. It suits users who need cited Markdown reports and includes preflight checks plus scripts for monitoring and inspecting the Gemini interface.

Key features

  1. 01Gemini Deep Research browser automation
  2. 02Preflight checks for Chrome and login
  3. 03CLI and TypeScript client
  4. 04Research completion monitoring
  5. 05DOM and selector probe scripts

Use cases

  1. 01Generate long-form research reports with citations
  2. 02Check browser and Gemini readiness before a run
  3. 03Investigate selectors after Gemini UI changes

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/terrylica/cc-skills --skill gemini-deep-research

After installing, type/gemini-deep-researchin Claude Code to confirm it loaded.

Details

From the project README

Gemini Deep Research

Run long-form research queries through Google's Gemini Deep Research via browser automation (Playwright CDP). Produces 40k+ char markdown reports with source citations.

Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

Prerequisites

  1. Chrome with debug port: Must be running with --remote-debugging-port=9222
  2. Gemini Advanced subscription: Logged into gemini.google.com in the debug Chrome
  3. playwright-core: bun add -g playwright-core (or project-local)
  4. Runtime: Use npx tsx (not bun run) — Bun's CDP connectOverCDP times out; Node.js connects in <1s
Launch Chrome (if not running)

Use the shared port script from the chrome-profiles plugin (the SSoT for browser routes). It pins a separate profile, which Chrome 136+ requires for a debug port, and down closes exactly that port:

CHROME_DEBUG_PROFILE="$HOME/.local/share/gemini-research-profile" \
  bash "$(cc-plugin-root chrome-profiles)/scripts/chrome-debug-port-control.sh" up

Then open https://gemini.google.com/app in that window and log in once with a Gemini Advanced account; the profile keeps the login across reboots. Run … down when finished.

Usage

CLI (direct)
# Health check — verify Chrome CDP + Gemini login
npx tsx {{skill_dir}}/scripts/research.ts --health

# Basic research (runs preflight automatically)
npx tsx {{skill_dir}}/scripts/research.ts "your research query"

# Save to specific file
npx tsx {{skill_dir}}/scripts/research.ts \
  --output /tmp/report.md \
  --timeout 45 \
  "comprehensive analysis of quantum computing error correction 2025-2026"

# Auto-save to directory (creates {date}-{slug}.md)
npx tsx {{skill_dir}}/scripts/research.ts \
  --output-dir ~/.claude/automation/gemini-deep-research/output \
  "your query"

# Without auto-confirming plan (lets you review first)
npx tsx {{skill_dir}}/scripts/research.ts --no-confirm "query"
Programmatic (import)
import { GeminiDeepResearchClient } from "{{skill_dir}}/scripts/client.js";

const client = new GeminiDeepResearchClient({
  cdpUrl: "http://127.0.0.1:9222",
  maxResearchTimeMs: 30 * 60 * 1000,
  autoConfirm: true,
  onProgress: (msg) => console.log(msg),
});

await client.init();
const result = await client.research("your query");
// result.report — full markdown report (40k+ chars)
// result.plan — research plan text
// result.completed — boolean
// result.durationMs — execution time
// result.shareLink — Gemini share URL (if Firecrawl enabled)
await client.close();

Preflight

Every research run starts with an automatic preflight health check that verifies:

  1. Chrome CDP reachable on configured port
  2. Browser connection via WebSocket succeeds
  3. Gemini page open at gemini.google.com
  4. Login state OK (not showing sign-in wall)

If any check fails, research aborts with a clear error message. Use --no-preflight to skip.

Automation Flow

Preflight (CDP + login check) → abort if unhealthy
    ↓
Chrome CDP:9222 → Navigate gemini.google.com/app
    ↓
Tools button → Deep Research drawer item → Active chip verification
    ↓
Type query (30ms/char) → Send button (or Enter fallback)
    ↓
Wait for research plan (~18-120s) → Extract plan text
    ↓
Auto-confirm "Start research" (or manual)
    ↓
Poll completion: mic button + text stability (5s intervals, 30min max)
    ↓
Extract report (longest .markdown element) → Optional share link + Firecrawl

Debug Probes

When selectors break (Google updates Gemini UI), use the probe scripts:

# Check Chrome connectivity
bun run {{skill_dir}}/scripts/probes/dom-inspector.ts status

# Test all selectors against live DOM
bun run {{skill_dir}}/scripts/probes/dom-inspector.ts selectors

# Full DOM inspection
bun run {{skill_dir}}/scripts/probes/dom-inspector.ts probe

# Monitor active research execution
bun run {{skill_dir}}/scripts/probes/research-monitor.ts confirm-and-monitor

# Check research completion + extract share link
bun run {{skill_dir}}/scripts/probes/share-link.ts status
bun run {{skill_dir}}/scripts/probes/share-link.ts extract

Selector Registry

All CSS selectors live in scripts/selectors.ts. When Google updates the Gemini UI:

  1. Run dom-inspector.ts selectors to identify broken selectors
  2. Run dom-inspector.ts probe to inspect current DOM
  3. Update selectors.ts with new selectors
  4. Re-test with dom-inspector.ts selectors

Selectors last verified: 2026-03-13 (Tools button: now button.toolbox-drawer-button, aria-label removed)

Key Files

FilePurpose
scripts/research.tsUnified CLI entrypoint
scripts/client.tsGeminiDeepResearchClient class
scripts/selectors.tsCSS selector registry (13 groups with fallbacks)
scripts/probes/dom-inspector.tsDOM probing (5 commands)
scripts/probes/research-monitor.tsResearch execution monitor
scripts/probes/share-link.tsShare link extraction

Options Reference

OptionDefaultDescription
cdpUrlhttp://127.0.0.1:9222Chrome CDP endpoint
maxResearchTimeMs1800000 (30 min)Max wait for research completion
pollIntervalMs5000 (5s)How often to check for completion
autoConfirmtrueAuto-click "Start research" on plan
enableFirecrawlfalseExtract share link + scrape via Firecrawl
firecrawlUrlhttps://api.firecrawl.devPublic Firecrawl API base (no key needed)
--no-preflight(preflight runs)Skip automatic health check before research

Completion Detection

Research completion is detected via three signals:

  1. Mic button visible — button[data-node-type="speech_dictation_mic_button"] reappears
  2. Report text > 500 chars — longest .markdown.markdown-main-panel element
  3. Text stability — 3 consecutive identical text lengths (15s total)

The spinner may remain visible as a stale artifact after completion — the mic button is the primary signal.

Post-Execution Reflection

After this skill completes, check before closing:

  1. Did the command succeed? — If not, fix the instruction or error table that caused the failure.
  2. Did parameters or output change? — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
  3. Was a workaround needed? — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.

Only update if the issue is real and reproducible — not speculative.

Comments

Markdown supported