DEV Community

Pranav Lakhwara
Pranav Lakhwara

Posted on

Making Claude, ChatGPT, and Gemini argue until they agree — and now, research together

I pay for Claude, ChatGPT, and Gemini. The best answers I get come from making them check each other — and the worst workflow I had was copy-pasting between three tabs to do it.

auto-browser is my fix: an MCP server that attaches to a Chrome session I'm already logged into (over the DevTools Protocol — no API keys) and drives all three chat UIs in parallel. Claude Desktop orchestrates it through MCP tools.

Consensus with actual structure

Same prompt to all three; then cross-pollination rounds — each model sees the others' answers and revises. Rounds end with a line-anchored VERDICT: AGREE | DISAGREE vote. Consensus requires at least two unhedged AGREEs and zero DISAGREEs among models that succeeded. The edge cases got the real engineering: dissent stays sticky if the dissenter times out the next round, peer verdict lines are stripped before embedding (so a model quoting another can't cast its vote), and a timeout is never shown to the other models as if it were an answer.

To be precise about what this measures: convergence, not correctness. Three models agreeing can still be wrong — but where they disagree is reliably where I should be paying attention.

The new part: multi-provider deep research

v3.2.0 adds a research pipeline: hand it a batch of research prompts, and it routes each across providers, runs the providers' own deep-research modes, waits out the long runs, harvests the reports, and synthesizes a final per-task report from all of them.

Three provider quirks made harvesting genuinely fun to build:

  1. ChatGPT renders deep-research reports inside a sandboxed cross-origin iframe. The main DOM shows zero assistant messages while a finished report sits right there on screen — naive scraping concludes the run failed. The fix is frame-aware extraction.
  2. Claude puts the full report behind an expandable Document artifact; the message DOM only carries a preview. Harvest opens the artifact and takes the full text.
  3. Gemini wants its research plan confirmed before it starts; the runner clears that gate automatically.

Deep research costs real money and real quota, so spend-safety is a design invariant, not a feature: a task that sent is never re-sent, chat URLs are preserved so a completed report can always be re-harvested for free, and a persisted quota ledger (e.g. Gemini's daily cap) plus cooldown detection means the queue waits instead of burning.

Model selection, because defaults are expensive

Every send resolves an explicit model — per-call → per-task → configured default — and never silently inherits whatever the tab last used. I learned that one the expensive way. Tests pin each provider's cheapest model by design.

Honest status

MIT. macOS is live-proven end to end; Windows/Linux Chrome paths exist but are untested. A 22-file Chrome-free unit suite runs in CI (Node 20/22); the live e2e gates need your own logged-in Chrome and never run in CI. And plainly: this automates provider web UIs, which may be restricted by their terms of service — it's built for your own personal, paid accounts, at your own risk. UI automation breaks when UIs change; there's a selector-registry override file for exactly that day.

Repo: https://github.com/mythicalhacker/auto-browser

Release notes: https://github.com/mythicalhacker/auto-browser/releases/tag/v3.2.0

Top comments (0)