A durable web-research agent built with Parallel, LiteLLM, and Render Workflows.
Submit a question and the agent will split it into independent threads, research them in parallel with Search and Extract, and combine the findings into one cited report. LiteLLM supports Anthropic, OpenAI, Bedrock, and many other model providers.
POST /research
│
▼
FastAPI gateway ── dispatches research_agent
│
▼
plan_research ── creates 3–5 independent sub-questions
│
├── investigate(sub-question 1) ── Search + Extract
├── investigate(sub-question 2) ── Search + Extract
└── investigate(sub-question 3) ── Search + Extract
│
▼
synthesize ── reconciles findings and writes a cited report
Each investigate branch is a separate Workflow run with its own instance and retry budget. A rate limit or timeout retries only that branch. If a branch still fails, the agent synthesizes the successful results and reports the gap in branches_failed.
Before starting, create:
- a Parallel API key
- a model-provider API key, such as Anthropic or OpenAI
- a Render API key
The Blueprint creates two services from this repository:
parallel-research-gateway, a FastAPI web service that accepts requests and dispatches runsparallel-research-workflow, a Workflow service that runs the planning, research, and synthesis tasks
Enter your Render API key for the gateway, and your Parallel and Anthropic keys for the Workflow. The Blueprint sets the gateway's RENDER_WORKFLOW_SLUG from the Workflow service, so the two are connected when the deploy finishes.
The default models use Anthropic. For another provider, replace ANTHROPIC_API_KEY in render.yaml with that provider's key and set LLM_MODEL and PLANNER_MODEL to LiteLLM model strings.
To customize the deployment, fork this repository and replace the repo parameter in the button URL with your fork.
Preview environments don't replicate Workflow services yet, so previews of this Blueprint include only the gateway.
The Blueprint generates API_SECRET for the gateway. Copy it from the gateway's Environment page and send it as a bearer token:
export GATEWAY_URL=https://your-gateway.onrender.com
export API_SECRET=your-generated-secret
curl -X POST "$GATEWAY_URL/research" \
-H "Authorization: Bearer $API_SECRET" \
-H "Content-Type: application/json" \
-d '{"query": "What are the leading open-source alternatives to Elasticsearch in 2026?"}'
# Use the returned run_id
curl "$GATEWAY_URL/research/RUN_ID_HERE"The home page includes a demo form for local development, where API_SECRET can be left blank.
parallel-research-agent/
├── render.yaml # Blueprint: gateway + Workflow
├── gateway/
│ ├── main.py # HTTP API
│ └── templates/index.html # Demo UI
├── workflow/
│ ├── main.py # Workflow runner
│ └── tasks.py # Planning, research, and synthesis tasks
└── shared/
└── formatters.py # Parallel response formatters
Start with workflow/tasks.py: investigate contains the LLM tool loop, while research_agent fans that loop out with asyncio.gather. gateway/main.py dispatches runs and serves their status and results.
Parallel's Search MCP server is the simplest way to add web research to a chat app. This project calls Search and Extract directly because the Workflow needs to:
- see API failures and retry only the affected branch
- record each search and extraction in its run metrics
- control tool descriptions and the surrounding LLM loop
Use MCP for a drop-in integration; use the APIs directly when you need control over retries and execution. See Parallel's programmatic MCP guide.
Set models with LiteLLM model strings and provide the matching credentials:
LLM_MODEL=anthropic/claude-sonnet-5
PLANNER_MODEL=anthropic/claude-haiku-4-5-20251001Other controls live in workflow/tasks.py:
PARALLEL_SEARCH_MODEselectsturbo,fast(default), oradvanced.MAX_SUB_QUESTIONScontrols breadth;MAX_AGENT_TURNScontrols depth.PLANNER_PROMPTandRESEARCH_SYSTEM_PROMPTdefine the research specialty. Update both when retargeting the agent.TOOLSand_execute_toolare the extension points for adding more Parallel APIs.
git clone https://github.com/render-examples/parallel-research-agent.git
cd parallel-research-agent
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Add your API keys to .env; leave API_SECRET blank.
# Terminal 1 (Render CLI 2.11.0+)
render workflows dev -- .venv/bin/python -m workflow.main
# Terminal 2
set -a && source .env && set +a
RENDER_API_URL=http://localhost:8120 RENDER_WORKFLOW_SLUG=local \
.venv/bin/uvicorn gateway.main:app --reload --port 8000A four-branch run with the default Anthropic models costs about $0.33, mostly in LLM tokens. Actual cost depends on the provider, model, branch count, and turn count; the main levers are LLM_MODEL, MAX_SUB_QUESTIONS, and MAX_AGENT_TURNS.
MIT