Research Agents: Multi-Source Investigation and Synthesis
Research agents earn their keep when a single search box is not enough.
Search across all documentation pages
Research agents earn their keep when a single search box is not enough.
They expand questions, fan out across sources, read selectively, and synthesize a cited report under a budget.
Use this cheatsheet to design or review that pipeline without rebuilding coding-agent habits by mistake.
| Stage | Agent job | Typical tools | Exit signal |
|---|---|---|---|
| Frame | Restate question, audience, time window, exclusions | None or clarify-with-user | Gradable goal + stop budget |
| Expand | Produce diverse queries and entity lists | LLM only (cheap tier OK) | 3-8 queries, not 1 |
| Retrieve | Search indexes and catalogs | Web/enterprise search, catalog APIs | Candidate hit list with scores |
| Read | Fetch and extract from top hits | Fetch, PDF/HTML extract, browser if needed | Evidence records, not raw HTML dumps |
| Filter | Drop duplicates, spam, off-scope, stale | Ranker, dedupe, date filters | Ranked shortlist |
| Synthesize | Build claims + narrative | Stronger model, structured output | Schema-valid brief |
| Verify | Spot-check claims vs evidence | Faithfulness checks, human, optional second pass | Pass/fail on sample claims |
| Deliver | Package for audience | Docs/wiki/email draft (usually no auto-send) | Review packet ready |
Skip stages only when the corpus is tiny and fixed (then you may be in RAG Q&A, not open research).
| Decision | Prefer | Avoid |
|---|---|---|
| Query strategy | Multiple angles (official, news, critic, data) | One paraphrased query on loop |
| Context packing | Snippets + ids first; full text only for top N | Dumping every page into the window |
| Citations | Claim → source_id with URL/doc pointer | Footnotes invented after the fact |
| Conflicts | Explicit "A says X, B says Y" | Averaged fake consensus |
| Freshness | Require dates; prefer primary when recent | Undated secondary blogs for numbers |
| Autonomy | Auto research + human publish | Auto email/post to customers |
| Stop rules | Max turns, max sources, max $ , coverage checklist | "Until it feels done" |
| Model routing | Cheap expand/filter; strong synthesize | Frontier model on every micro-step |
| Trace | Store queries, hits, chosen sources, stop reason | Final memo only |
| Failure | Partial brief + open questions | Hallucinated completeness |
| Shape | Example ask | Special requirement |
|---|---|---|
| Landscape | "Who competes in X and how?" | Entity coverage checklist |
| Deep dive | "Explain vendor Y's pricing change" | Primary sources first |
| Compare | "A vs B vs C on features" | Shared criteria matrix |
| Monitor | "What changed this week?" | Diff vs last run state |
| Due diligence | "Risks before partnership" | Explicit risk register + unknowns |
| Literature-style | "What do papers say about Z?" | Citation style + contradicting findings |
Match architecture weight to shape: monitors need schedules and state; landscapes need breadth; deep dives need long-read extraction.
| Tool | Purpose | Notes |
|---|---|---|
search | Discovery | Return title, url, date, snippet, score |
fetch | Full text | Truncate; strip chrome; record content hash |
extract_structured | Tables, prices, dates | Prefer schema-constrained extract |
rag_query | Internal corpus | Separate from open web when trust differs |
save_brief | Persist draft | Write to draft store, not production wiki by default |
notify_reviewer | Human queue | Prefer over auto-publish |
Add browser or code tools only when HTML/PDF extraction or light calculation is required - and sandbox them.
Use a fixed skeleton so evals and humans share a format:
If a section is empty, say so. Silence that pretends to be completeness is a defect.
No. A single loop can own all stages. Split agents when roles, models, or permissions differ enough to justify handoff cost.
Research agents enforce budgets, structured evidence, citation schemas, and delivery packets. Browsing chat optimizes for conversational convenience.
Use a plan when the brief has multiple required sections or entities. Replan if early retrieval proves the plan wrong.
Search widely, read deeply only on the top shortlist. Full-text every hit blows cost and context without raising accuracy much.
Report the conflict with dates and source classes. Do not silently pick the friendliest number.
You can hide them in the UI, but keep them in the trace. Drafts become decks; traces are how you recover.
Score must-include facts, citation validity, forbidden fabrications, and section completeness on a fixed question set each release.
Useful for monitors and recurring landscapes. Store structured state (entities, last prices) rather than raw memo prose only.
coverage_met, max_turns, max_cost, no_new_sources, user_cancel, policy_block - mutually exclusive when possible.
When the answer must come only from approved internal policy corpora, or when legal forbids external processing of the query content.
Not necessarily. Structured output plus post-validation ("every source_id exists") catches most citation theater.
Confident prose over thin evidence, stale secondary sources, and missing stop budgets that burn money on low-value pages.
Stack versions: Pins from the category manifest (verify at build): OpenRouter (~315+ models, July 2026 pricing/fees); LangGraph 1.0+; CrewAI 1.14+; Microsoft Agent Framework 1.0; Vercel AI SDK 6; Pydantic AI (latest); LlamaIndex (latest); OpenAI Agents SDK (latest + MCP); MCP (Linux Foundation governance); A2A (HTTP+SSE+JSON-RPC 2.0); Solana
@solana/web3.js+@solana/spl-token.
Reviewed by Chris St. John·Last updated Jul 16, 2026