Research agent
📖 3 min readUpdated 2026-04-19
A research agent takes a question, searches sources (web, internal, databases), reads what it finds, cross-references, and synthesizes a structured answer with citations. It's one of the most valuable agent patterns because it automates work that's high-value and time-consuming for humans: competitive intelligence, market research, due diligence, investment memos. The craft is in making the agent rigorous, not just fast.
The loop
Core tools
web_search(query) - public web with recency filter.
read_url(url) - fetch + parse a page's main content.
search_internal(query) - internal KB or document store.
search_academic(query) - for research-heavy domains.
summarize(text, focus) - distill a long doc to the relevant claims.
note_claim(text, source_url) - scratch pad with source attribution.
Design choices
A worked example: "Who are the top 3 competitors for product X?"
- Decompose: "Who sells similar products?" + "Who shows up in competitive comparison articles?" + "What does product X say about competitors?"
- Parallel search on all three.
- Read the top 5 results per query, extract named competitors.
- Score by frequency + source diversity. A competitor mentioned in 4 independent sources ranks higher than one mentioned once.
- Deep-read on the top 3: their product page, pricing, recent news.
- Synthesize: 3-competitor brief with URLs for every claim.
Took 12 tool calls, 4 LLM turns, ~60 seconds, ~$0.25. A human doing the same is 1-2 hours.
Citation discipline
Citations are the difference between a research agent and a plausible-sounding bullshit generator. Hard rules:
- Every factual claim in the final answer links to the specific source that supports it.
- Claims without a supporting source get hedged ("reportedly," "we couldn't verify") or dropped.
- When sources disagree, say so. Don't paper over conflict.
- Track which source a claim came from at extraction time, not at synthesis time. Retroactive citation-matching is where hallucinations sneak in.
Failure modes
- Never stops searching. Agent keeps finding "one more thing to check" until budget hits. Fix: set an explicit exit criterion in the prompt ("stop when you can answer with 3+ cited sources").
- Single-source summary. Relies on one blog post. Fix: require cross-source corroboration.
- Hallucinated citations. Agent cites source, but the source doesn't actually contain the claim. Fix: verify citations at synthesis, either programmatically or with a reflection pass.
- One-sided research. Searches only for confirming evidence. Fix: include a "search for counter-arguments" step in the plan.
- Lost in the weeds. Over-reads long documents and loses the question. Fix: use
summarize(text, focus: question) rather than dumping full articles into context.
Parallel is a massive win here
Research is the canonical parallel case. You're searching multiple queries; they're independent. Batch them. A 5-query research task that takes 10 seconds sequential takes 2 seconds parallel, with no quality loss.
Production systems + frameworks
- Built on: LangGraph, Claude Agent SDK, OpenAI Assistants.
- Commercial: Perplexity, Consensus, Elicit, Exa, You.com.
- Open-source: GPT-Researcher, STORM (Stanford), various LangChain templates.
What to do with this
- Pick one concrete research task you do by hand regularly. Build an agent for it with 5 tools and a tight prompt.
- Read planning loops for the plan-then-execute pattern most research agents use.
- Read parallel tool calls for the latency win.