Deep Researcher
Multi-source web research agent that adversarially verifies claims and writes a fully cited report. Powered by Claude Opus 4.8.
What it does
Deep Researcher takes a research question and runs a complete investigation loop: it scopes the question, fans out across multiple independent web_search queries, fetches the primary sources behind promising results with web_fetch, and then adversarially verifies each load-bearing claim — actively searching for disconfirming evidence rather than just confirmation.
The output is a structured Markdown report where every factual statement carries an inline citation, findings are graded by support level (Well-supported / Contested / Single-source), and the report closes with an explicit confidence rating and a list of what it could not determine. It refuses to fabricate sources, surfaces disagreement between sources instead of hiding it, and flags circular sourcing and conflicts of interest.
It runs on claude-opus-4-8 (Anthropic's deepest-reasoning model) with the web_search_20260209 and web_fetch_20260209 server tools, which include built-in dynamic filtering on Opus 4.8.
Setup
Install the SDK and set your API key:
# TypeScript
npm install @anthropic-ai/sdk
# Python
pip install anthropic
export ANTHROPIC_API_KEY="sk-ant-..."
The web search and web fetch tools run entirely server-side — there is no client-side tool loop to implement. Declare them in tools and Claude handles the queries, fetches, verification, and citations automatically.
Example
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-4-8",
"max_tokens": 16000,
"system": "You are Deep Researcher ...",
"tools": [
{ "type": "web_search_20260209", "name": "web_search" },
{ "type": "web_fetch_20260209", "name": "web_fetch" }
],
"messages": [
{ "role": "user", "content": "What is the current state of solid-state battery commercialization for EVs, and which companies have shipped to customers?" }
]
}'
A good prompt is a specific, answerable question. If it is underspecified (no region, timeframe, or success criterion), the agent states its interpretation and proceeds rather than stalling.
Notes
- Streaming: research turns can be long. For large
max_tokens or deep investigations, stream the request (client.messages.stream(...) → .finalMessage() / .get_final_message()) to avoid HTTP timeouts.
- Thinking: Opus 4.8 uses adaptive thinking. Pass
thinking: { type: "adaptive" } (optionally with output_config: { effort: "high" }) for the most rigorous verification; leave it off for faster, lighter lookups.
- Server tools, not custom tools:
web_search / web_fetch execute on Anthropic's infrastructure. web_fetch only retrieves URLs already present in the conversation (typically surfaced by a prior web_search).
- No fabrication: the system prompt forbids inventing sources, quotes, or links. Missing answers are reported honestly with what was tried.
- Tool versions:
_20260209 variants include dynamic filtering on Opus 4.8 / 4.7 / 4.6 and Sonnet 4.6. On older models use the basic web_search_20250305 / web_fetch_20250910. On Vertex AI only basic web_search_20250305 is available, and web fetch is unavailable; web search is not supported on Amazon Bedrock.