Skip to content

web-research

Systematic multi-source web research with verification, citation, and contradiction detection. Use when gathering facts from the web, verifying claims across sources, or building research briefs.

ModelSource
sonnetpack: recon
Full Reference
┏━ 🔍 web-research ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Systematic multi-source research with ┃
┃ verification, citation, contradiction detection ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Multi-source research pipeline — decompose queries, search, fetch, cross-validate, flag confidence, and deliver a citable brief. No claim ships without at least 3 sources. No statistic ships without 5.

ItemValue
Phases5 (Decompose → Search → Fetch → Verify → Output)
Min sources per claim3
Min sources per statistic5
Confidence levelshigh / medium / speculative
OutputRESEARCH_BRIEF.md with inline citations
Contradiction behaviorSurface all, don’t resolve silently
I want to…File
Decompose queries, use date-aware patterns, filter by domainreference/search-strategies.md
Score source credibility, cross-validate, detect contradictionsreference/source-verification.md
Coordinate WebFetch + WebSearch, extract structured datareference/extraction-patterns.md
Format RESEARCH_BRIEF.md, citations, confidence tagsreference/output-format.md
TriggerExample
Fact-finding request”What are the current Stripe fee tiers?”
Claim verification”Is it true that X framework is deprecated?”
Multi-source research”Research competitor pricing for SaaS email tools”
Statistics gathering”What’s the average checkout abandonment rate?”
Background research”Get context on this company before the call”

Do NOT activate for: single-file reads, code questions with no web dependency, or tasks where all needed data is already in context.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Break the research goal into atomic questions before searching.

Research goal: "What is the current market share of Tailwind CSS vs Bootstrap?"
Atomic questions:
1. What is Tailwind CSS current adoption/usage percentage?
2. What is Bootstrap current adoption/usage percentage?
3. What surveys or studies cover CSS framework market share?
4. What is the most recent data (year) available?
5. Are there contradictions between survey sources?

Rules:

  • Never search the raw goal — always decompose first
  • Each atomic question maps to one or more search queries
  • Flag which questions require statistics (min 5 sources each)
  • Flag which questions are time-sensitive (add date filter)

See reference/search-strategies.md for query construction patterns.

Run WebSearch for each atomic question using decomposed queries.

Query pattern: "<topic> <qualifier> <year>"
Example: "Tailwind CSS adoption rate survey 2026"

Rules:

  • Minimum 2 query variants per atomic question
  • Use date-aware queries for anything time-sensitive
  • Filter by domain type when authority matters (.gov, .edu, primary sources)
  • Log every search query and its result count
  • Stop at 15 searches total — if still unsatisfied, escalate to user

See reference/search-strategies.md → Iterative Deepening.

Use WebFetch to extract detail from top-ranked results. When WebFetch fails, fall back to firecrawl.

Rules:

  • Fetch only the top 3 URLs per atomic question
  • Extract key facts, quotes, dates, and data points
  • Note publication date and author/publisher for every source
  • Skip paywalled, login-required, or dead URLs — log as ✗ inaccessible
  • Never summarize without reading — always fetch before citing

When WebFetch fails (paywall, auth wall, timeout, 403, 429), try firecrawl before marking a source as inaccessible:

WebFetch ResultAction
200 OKUse WebFetch content — no fallback needed
403 / paywall / authTry firecrawl scrape on the URL
429 rate limitedBack off 4s, retry WebFetch once, then firecrawl
Timeout (>30s)Try firecrawl scrape on the URL
404 / goneSkip — no fallback

Firecrawl budget: max 5 firecrawl pages per research session (in addition to the 15-fetch WebFetch budget).

See reference/extraction-patterns.md for WebFetch + firecrawl coordination.

Cross-validate every claim before including it in the brief.

Claim typeMin sourcesConfidence threshold
Factual statement32/3 agree → high
Statistic / number53/5 agree within 10% → high
Opinion / trend2Cite all, label speculative
Breaking news3Check publication date lag

Contradiction protocol:

  1. Surface the contradiction explicitly — never pick a winner silently
  2. Note which sources disagree and why (methodology, date, scope)
  3. Label the claim [CONTRADICTED] in the brief
  4. Recommend the most authoritative source, but show all

Credibility scoring and source-type rankings are in reference/source-verification.md.

Produce RESEARCH_BRIEF.md following the standard template.

Every fact gets:

  • Inline citation: [1]
  • Confidence tag: [HIGH] / [MEDIUM] / [SPECULATIVE]
  • Source entry in bibliography with URL + date accessed

Template, citation format, and confidence tagging rules are in reference/output-format.md.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

LevelMeaningRequirement
[HIGH]Verified across multiple credible sources3+ independent sources agree, no contradictions
[MEDIUM]Supported but not fully corroborated2 sources agree, or 1 authoritative primary source
[SPECULATIVE]Single source, unclear methodology, or unverifiableCite source, flag explicitly

Always show confidence inline. Never omit it.

MistakeCorrect approach
Citing a search result without fetching the pageAlways WebFetch before citing
Averaging contradictory statisticsSurface the contradiction, cite all values
Treating .com blog posts as primary sourcesScore credibility first — see source-verification.md
Using data older than 2 years without flaggingMark as [OUTDATED — YYYY] in the brief
Stopping at 1 source and calling it doneMin 3 per claim — no exceptions
Resolving contradictions silentlyAlways surface, always label [CONTRADICTED]
Including unsearchable claims as speculative without noteFlag [UNVERIFIABLE] and state why
WebSearch → URL discovery, result scanning, quick fact checks
WebFetch → Deep extraction from specific pages, quote pulling

Never use WebFetch cold on a URL you haven’t discovered via WebSearch first, unless the user provides the URL directly. Never rely on WebSearch snippets alone — always fetch for facts you’ll cite.