9 min read

I don’t trust one AI’s research, so I run three

For questions that matter, my agent fans the work out to three independent research tracks and referees the answers into one report. The interesting part is what happens when a track dies.

TL;DR — When a question actually matters, one model’s answer is a single point of failure. My research setup fans the question out to three independent tracks (my agent’s own researcher subagents, Gemini Deep Research, and Claude), runs them in parallel, and merges the results into a single report with confidence levels. The launch, the waiting, the extraction, and the refereeing are all automated. So is the failure handling, which is where the system earns its keep: a track that dies mid-run gets replaced by a skeptic whose only job is to attack what the surviving tracks found.

The previous post about my YouTube pipeline left a one-sentence teaser in its advanced section: when a topic earns it, the pipeline escalates to deep research. This post is that sentence, unpacked.

Not every question deserves an army

The research setup is a router with three tiers, and most questions never leave the first one.

Tier 1 is my agent doing its own work: web search, reading sources in depth, and for broader topics a few researcher subagents attacking different angles in parallel. It takes minutes, cites at least three independent sources, and assigns a confidence level to each finding. The default, and usually the end of the story.

Tier 2 hands the question to a second model with a very large context window, via a CLI. In practice it’s the narrowest tier: the free quota is about five requests a day, which makes it a scalpel, not a rescue plan. When a tier-1 run comes back with low confidence, the fix is more tier-1 agents, not a tier that can run out by lunchtime.

Tier 3 is the war room, and it never fires on its own. It runs only when I explicitly ask, for two reasons: a full run takes half an hour or more, and most questions simply don’t deserve three AIs. The router can suggest escalation when confidence comes back low. It is not allowed to escalate by itself. Expensive tools should sit behind a human sentence like “go deep on this.”

The war room

tier 3explicit request only~35 min ceiling

Track C — my own researcher agents

the primary: several subagents, one sub-question each

idle

Track A — Gemini Deep Research

a script drives the web app end to end

idle

Track B — Claude, in a real browser

independent second opinion, extended thinking

idle

One question that actually matters. Press run.

The run choreography, animated. The mid-run death is not a bug in the demo; it’s the part the design is built around. Press run.

A tier-3 run launches three tracks against the same prompt, in parallel, with no shared drafts. Two of them are external services; the third is my own harness, which goes by Track C and is listed first because the synthesis stands on it.

Track C — my own agents. The same researcher subagents as tier 1, several of them, each owning a sub-question. This track is the primary: the most reliable of the three, because it runs entirely inside my own harness. The other two exist to disagree with it.

Track A — Gemini Deep Research. A Python script drives the product’s web app end to end: opens the site with a persistent logged-in browser profile, switches on Deep Research, submits the prompt, approves the research plan the product proposes, then polls every 30 seconds for up to 35 minutes and extracts the finished report, around 60,000 characters, to disk. No clicking, no babysitting. When it fails, it fails loudly: a non-zero exit code and a screenshot of whatever the page looked like at the moment of death.

Track B — Claude, in a real browser. A browser extension drives an actual Chrome window, because this particular site’s bot protection can tell the difference between a real browser and an automated one no matter how the automation dresses up. The chat runs with extended thinking on and the site’s research mode deliberately off: enabling it pops a connector dialog that never renders under automation, and the conversation hangs forever. A degraded track that answers is worth more than a fancy track that deadlocks.

Before any of this spends a token, there’s a preflight, and the preflight must be falsifiable. The Gemini script has a check command that proves the login actually works and exits non-zero when it doesn’t. The Claude check counts editor elements in the live page; if there’s nothing to type into, there’s no track. “It didn’t crash” is not evidence; the run that taught me that is two sections down.

When the tracks come home, the agent referees. Claims that independent tracks agree on get promoted to high confidence. Contradictions get flagged for me, not averaged into mush. Everything lands in one folder: the raw report from each track, plus a synthesis that opens with a per-track status table saying what actually ran. That table is the whole trust model. A three-track report that quietly ran on one track is worse than a one-track report that says so.

Three agreeing agents are not a cross-check

The obvious failure mode of “run more AIs” is that you get the same answer three times and feel three times as confident. All three tracks read my prompt, with my framing, and tend to surface the same popular sources. Agreement is cheap.

So the system has a standing rule: when a track dies, its replacement is an adversary. Not another researcher with the same brief — a subagent whose explicit job is to refute what the other tracks are finding. Hunt for the negative studies, the conflicts of interest, the contrary guidelines, the reasons the consensus is wrong. Three agreeing agents are not a cross-check. One attacking agent is.

This rule started as a patch for failures and turned out to be the most valuable part of the design: in the most recent run I planned an attacker in from the start, no deaths required. The best thing an extra AI can contribute to your research is usually not a fourth confirmation.

The run that degraded silently

In mid-July the browser layer failed on both sites in the same run, and the way it failed is the reason half of this post exists.

The playbook at the time said: use the general-purpose browser tool for both sites. That tool is excellent at ordinary web pages and structurally incapable of these two. On Google’s side, it imports cookies from a desktop browser, but the one cookie that matters for login is HttpOnly, invisible to the import, so every session opened to a polite “Sign in” wall. On the Claude side, the same tool got a flat 403 from the bot protection. Two tracks, two different walls, one shared outcome: the run silently fell back to my own agents while the output still carried the confidence of a three-track report. Nothing lied, exactly. Nothing checked, either.

The fix wasn’t a better browser tool. It was admitting there is no such thing: the mechanism is now chosen per site, not per skill, from a small matrix of which automation survives which wall. Together with the mandatory preflight above, a track that can’t run is now declared dead before the run starts, out loud, in the report.

The embarrassing footnote: the pattern that fixed the Gemini track, a Playwright script with a persistent logged-in profile, had been sitting in my own repository for two months. A different skill had been using it on the very same site the whole time, generating food photography for my recipe app. The research pipeline was repaired by reading my own codebase. I’d love to claim that was the plan.

A real run: can my agents produce a YouTube video?

Two days ago I pointed the war room at a question I actually cared about: could my agents produce a fully AI-generated YouTube video, and with what stack? Here’s the track status table from that run’s synthesis, translated from the original (my research reports speak Czech; the pipeline doesn’t mind):

TrackStatusWhat it delivered
C — four researcher subagents✅ ran in fullall the fresh facts: pipelines, model pricing, an adversarial reality-check, practitioner reports
A — Gemini Deep Research❌ died, three attemptsits slot went to a fourth, unplanned researcher subagent
B — Claude in the browser⚠️ degradedcame up without web search, declined to fabricate facts, and delivered an architecture review instead, labeled as exactly that

Note what Track B did there. Cut off from search, the model refused to invent current facts and reviewed the proposed system design instead, on reasoning alone. The synthesis kept it, clearly labeled, as a design cross-check rather than a source of claims. A degraded track that knows it’s degraded is still useful; it just has to say so.

The verdict converged across all five voices (four subagents plus Claude’s architecture review): build on programmatic video composition (React code rendering to MP4) plus synthesized narration at roughly a dollar per ten minutes, for a marginal cost of $2–7 per video. Fully generative video would have been $60–240 per ten minutes, 98% of the budget, for footage a video about terminal-dwelling agents doesn’t need.

And the adversarial subagent, which was planned from the start rather than drafted in as a replacement, did what adversaries are for: it attacked the question. “Fully AI-generated” is the wrong goal, it argued; the sustainable version is AI-produced, human-authored — agents do the production, a human stays accountable for every claim. I asked whether my agents could make a video, and the skeptic’s answer was to change the question. That reframe was worth more than the stack recommendation.

From a two-tap save to a war room

This is also where the YouTube pipeline ends up. The bouncer lane filters what’s worth watching; the analyst lane digs into videos that might change how I work: an evaluator scores the transcript, a vetting agent reads the linked repos and sorts every proposed action into “recommend” or “hypothesis.” Most videos stop there.

But sometimes the vetting leaves a genuinely open question standing, and the task that lands in my todo app says so. Then all I contribute is the sentence “go deep on this,” and the war room takes it from there, overnight if need be. A video I saved from my phone with two taps can end, a night or two later, as a three-track research report with confidence levels and its own skeptic. The escalation exists precisely so that the expensive judgment is mine and everything around it is not.

No handoff file this time

What does it cost? At the margin, nothing: the two external tracks run through consumer subscriptions I already pay for, driven through their web interfaces. Which is also why this post, unlike the first one, ships no file you can hand to your own agent. Automating consumer web apps is fragile by design and gray territory by terms of service; the mechanics rot whenever a site moves a wall. Copy the pattern, not the scripts:

  1. Tier your research. Most questions deserve minutes, not an army. The expensive tier fires on an explicit human sentence, never on its own.
  2. Independence is the point. Same question, separate tracks, no shared drafts. Ensemble-of-one is just one opinion in three fonts.
  3. Preflight must be falsifiable. A check that can’t fail isn’t a check. “It didn’t crash” is how you get a three-track report built on one track.
  4. Replace dead tracks with adversaries. The marginal value of another agreeing agent is near zero. The marginal value of one attacking agent is the whole cross-check.
  5. Make the synthesis confess. A per-track status table, in the report, every time. The rows that say “died” are the reason to believe the rest.

Every one of those works just as well over APIs, with none of the fragility. The browser part is my workaround; the referee is the idea.

The war room writes its reports while I do something else entirely. My contribution is one question and, once per run, the humility to read the row of the table where a track died.